¿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