Comment générer NaN, -Infinity et + Infinity dans ANSI C?

J’utilise ANSI C89 (pas C ++) et je veux générer NaN, -Infinity et + Infinity.

Existe-t-il un moyen standard (par exemple, une macro standard)? Ou existe-t-il un moyen indépendant de générer des nombres pour la plate-forme et le compilateur?

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

Il y a en C99, mais pas dans les normes précédentes AFAIK.

En C99, vous aurez les macros NAN et INFINITY .

De la section “Mathématiques (§7.12)

La macro INFINITY se développe en une expression constante de type float représentant l’infini positif ou non signé, si disponible; …

Si vous êtes coincé avec ANSI C89, vous n’avez pas de chance. Voir C-FAQ 14.9 .

Je ne sais pas si c’est standard ou portable, mais voici un début:

 jcomeau@intrepid:/tmp$ cat test.c; make test; ./test #include  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 

Curieusement, je ne peux pas obtenir NaN positif en utilisant cette approche naïve.


Voir aussi ceci: http://www.gnu.org/s/hello/manual/libc/Infinity-and-NaN.html

Si vous utilisez un ancien compilateur où INFINITY n’existe pas, vous pouvez également utiliser la macro HUGE_VAL , également définie dans la bibliothèque .

HUGE_VAL devrait être disponible dans la norme C89 / C90 (ISO / IEC 9899: 1990).

Références: http://fr.cppreference.com/w/c/numeric/math/HUGE_VAL