c nan infinity

¿Cómo generar NaN,-Infinity y+Infinity en ANSI C?



(3)

Yo uso ANSI C89 (no C ++), y quiero generar NaN, -Infinity y + Infinity.

¿Hay alguna forma estándar (por ejemplo, macro estándar)? ¿O hay alguna forma independiente de compilador y plataforma para generar estos números?

float f = 0.0 / 0.0; // Is f ALWAYS in any platform is NaN?


Hay en C99, pero no en estándares anteriores AFAIK.

En C99, tendrás macros NAN e INFINITY .

De la sección "Matemáticas <math.h> " (§7.12)

La macro INFINITY se expande a una expresión constante de tipo float que representa una inminencia positiva o sin signo, si está disponible; ...

Si estás atascado con ANSI C89, estás fuera de suerte. Ver C-FAQ 14.9 .


No sé si esto es estándar o portátil, pero aquí hay un comienzo:

jcomeau@intrepid:/tmp$ cat test.c; make test; ./test #include <stdio.h> int main() { printf("%f/n", 1.0 / 0); printf("%f/n", -1.0 / 0); printf("%f/n", 0.0 / 0); return 0; } cc test.c -o test test.c: In function ‘main’: test.c:3: warning: division by zero test.c:4: warning: division by zero test.c:5: warning: division by zero inf -inf -nan

Por extraño que parezca, no puedo obtener NaN positivo utilizando este enfoque ingenuo.

También vea esto: http://www.gnu.org/s/hello/manual/libc/Infinity-and-NaN.html

Si usa un compilador antiguo donde no existe INFINITY , también puede usar la macro HUGE_VAL , también definida en la biblioteca <math.h> .

HUGE_VAL debe estar disponible en la norma C89 / C90 (ISO / IEC 9899: 1990).

Referencias: http://en.cppreference.com/w/c/numeric/math/HUGE_VAL