Excepción del punto flotante C ++ por qué y qué es?

Excepción del punto flotante C ++ por qué y qué es?
Excepción de punto flotante ocurre cuando un software intenta realizar una operación inadecuada en un número numérico. Este tipo de excepción ocurre cuando un usuario intenta ejecutar operaciones no válidas, como la división por cero, división de un número negativo por un número uniforme, tomando la raíz cuadrada de un número negativo o desbordamiento de un cálculo que excede el límite del Tipo de datos doble.

En c ++, el "Sigfpe" el controlador de señales maneja el Excepciones de punto flotante (FPE). Cuando un usuario intenta llevar a cabo las tareas mencionadas, se llama a este controlador de señal. Una vez que el controlador de señal ha intervenido, imprime un mensaje de error en la salida estándar y detiene el programa.

¿Por qué se producen excepciones de punto flotante??

Excepciones de punto flotante puede ocurrir debido a errores de programación o cuando un programa intenta procesar un valor que está fuera de la especificación. Por ejemplo, si un programa intenta dividir un entero por cero, o si un programa intenta tomar la raíz cuadrada de un número negativo, un Excepción del punto flotante ocurrira. Además, algunos excepciones de punto flotante puede ocurrir debido a las escalofríos del procesador.

Muchos factores, como la operación inapropiada, el subflujo, el desbordamiento, la división por cero y la precisión, podrían dar lugar a un Excepción de punto flotante. Cubriremos estos argumentos uno por uno en esta sección.

1: Operación ilegal

Cuando un usuario olvida expresar una operación o la operación no tiene valor matemático, el programa no se ejecuta debido a una operación no válida. Esto incluye cálculos como la raíz cuadrada y el logaritmo de los números negativos, por ejemplo. Aunque es posible tomar la raíz cuadrada de un número negativo cuando se trata de números complejos, no existe un mecanismo basado en computadora para expresar esto.

Además, se dará como resultado una operación incorrecta si un software ejecuta un punto flotante operación en una ubicación entera solo. Esto se debe a un desajuste entre la operación que está intentando llevar a cabo los datos (operación de punto flotante) y los datos almacenados (entero).

2: división cero

A Excepción de punto flotante se arroja si intentas dividir un entero por cero. Lo mismo ocurre cuando intentas dividir por Nan o Infinity. Aquí hay algunos ejemplos: 1/0, registro (0).

3: desbordamiento

Cuando una operación devuelve un valor que está fuera de su rango esperado, ocurre una excepción de desbordamiento. El valor es más o más bajo que el valor representable más pequeño, de acuerdo con esta declaración.

4: Subflojo

Subflow ocurre cuando un cálculo produce un resultado que es menor de lo que puede contener un tipo de datos.

5: inexacto

Cuando el resultado de una operación difiere de lo que se anticipó, esto se conoce como una excepción inexacta. Cuando la operación se realiza con precisión no unida y un rango de exponentes, esto ocurre.

En algunos casos, tales situaciones se pueden manejar con gracia. Por ejemplo, cuando un programa intenta dividir un número por cero, generalmente es preferible devolver un mensaje de error y terminar con gracia el programa en lugar de permitir que el programa se bloquee.

#incluir
#incluir
usando el espacio de nombres STD;
flotante div (numflat num, float den)

if (den == 0)
lanzar runtime_error ("Error matemático: intentó dividir por 0 \ n");

return (num / den);

int main ()

Float num, denom, resultado;
num = 10;
denom = 0;
intentar
resultado = div (num, denom);
cout << "The quotient is " << result << endl;

Catch (Runtime_error & e)
cout << "Exception occurred" << endl << e.what();

En este código, el Div la función es llamada por el bloque de try dentro de principal. Si el denomar no es igual a cero, el Div la función devuelve el cociente; Si es así, un Excepción de error de tiempo de ejecución es aventado. Antes de llamar a qué función con el objeto de error de tiempo de ejecución E, el bloque de captura intercepta esta excepción e imprime el texto "Se produjo un error". Se usa para identificar la excepción. La excepción estándar de clase, que se describe en el stDexcept Archivo de encabezado, tiene una función virtual llamada qué(). El mensaje "Error matemático: intentó dividir por 0" se imprime como resultado.

Producción

Para prevenir Excepciones de punto flotante En C ++, es esencial verificar todos los parámetros pasados ​​a las funciones, usar formatos apropiados y probar explícitamente divisores para obtener valores cero. Además, al usar tipos de datos dobles, es importante ampliar el rango del tipo de datos si el programa requiere resultados aritméticos más grandes.

Conclusión

Excepciones de punto flotante en C ++ son causadas por operaciones no válidas en valores numéricos y pueden afectar la capacidad del programa para ejecutarse correctamente. Para evitar tales errores, es importante verificar todos los parámetros pasados ​​a las funciones y usar los tipos de datos apropiados. Además, es beneficioso para atrapar Excepciones de punto flotante.