如何在ANSI C中生成NaN,-Infinity和+ Infinity?

我使用ANSI C89(不是C ++),我想生成NaN,-Infinity和+ Infinity。

有没有标准的方法(如标准macros)? 还是有任何平台和编译器独立的方式来产生这些数字?

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

有在C99,但在以前的标准AFAIK。

在C99中,您将拥有NANINFINITYmacros。

“math<math.h> (§7.12)部分

如果可用,macrosINFINITY扩展为浮点types的常量expression式,表示正数或无符号数; …

如果你坚持使用ANSI C89,那么你倒霉了。 参见C-FAQ 14.9 。

我不知道这是标准的还是便携式的,但这是一个开始:

 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 

奇怪的是,我不能使用这种天真的方法获得积极的NaN。


另见: http : //www.gnu.org/s/hello/manual/libc/Infinity-and-NaN.html