que numero infinito existe entre dividido demuestre cuanto cero c++ gcc floating-point sigfpe

c++ - infinito - cero entre un numero



La divisiĆ³n por cero no arroja SIGFPE. (3)

Tengo un pequeño programa que realiza una división de punto flotante por cero, por lo que espero SIGFPE.

#include <sys/types.h> #include <signal.h> #include <stdio.h> #include <stdlib.h> #include <iostream> void signal_handler (int signo) { if(signo == SIGFPE) { std::cout << "Caught FPE/n"; } } int main (void) { signal(SIGFPE,(*signal_handler)); double b = 1.0; double c = 0.0; double d = b/c; std::cout << "d = "<< d << std::endl; return 0; }

En realidad, tengo la siguiente salida:

d = inf

gcc versión 4.5.2 (Ubuntu / Linaro 4.5.2-8ubuntu4)

¿Qué debo hacer para lanzar SIGFPE en este caso? ¿De qué factores depende el comportamiento de la operación de FP (indicadores del compilador / tipo de CPU, etc.)?

Gracias


No recibe una señal porque el comportamiento predeterminado en la mayoría de las máquinas es contaminar sus datos con NaN (no un número) e infinitos. Debe habilitar las excepciones de punto flotante, y la forma en que lo haga es específica de la máquina. Mira el encabezado del sistema fenv.h , si tienes uno. La función fesettrapenable permite capturar excepciones de punto flotante en muchas máquinas.

Desafortunadamente, no hay una función estándar para activar el manejo de excepciones de punto flotante.


Para los números de punto flotante, puede cambiar este comportamiento configurando la palabra de control FPU. Mira here


Solo obtienes una señal si realizas una división entera por cero. Para los números de punto flotante la división por cero está bien definida.

Esto se explica bastante bien en el artículo de Wikipedia .