我使用ANSI C89(不是C++),我想生成NaN,-Infinity和+ Infinity。如何在ANSI C中生成NaN,-Infinity和+ Infinity?
是否有任何标准的方式(如标准宏)? 或者是否有任何平台和编译器独立的方式来生成这些数字?
float f = 0.0/0.0; // Is f ALWAYS in any platform is NaN?
我使用ANSI C89(不是C++),我想生成NaN,-Infinity和+ Infinity。如何在ANSI C中生成NaN,-Infinity和+ Infinity?
是否有任何标准的方式(如标准宏)? 或者是否有任何平台和编译器独立的方式来生成这些数字?
float f = 0.0/0.0; // Is f ALWAYS in any platform is NaN?
有在C99,但不是在以前的标准AFAIK。
在C99中,您将拥有NAN
和INFINITY
宏。
从“数学<math.h>
”(§7.12)部分
宏INFINITY扩展到浮点型表示的常量表达式的正或无符号的在无穷大,如果有的话; ...
如果你坚持使用ANSI C89,那么你的运气不好。请参阅C-FAQ 14.9。
谢谢,但我必须使用ANSI C. – 2011-06-04 09:28:55
你应该说“ANSI C89”。目前的“ANSI C”是C99。 – 2011-06-04 12:24:23
我不知道这是标准的或便携式的,但这里是一个开始:
[email protected]:/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。
有趣,这会产生带有铛的'inf -inf nan'(不是'-nan')。真的不知道“-nan”应该是什么意思,实际上:-) – Mat 2011-06-04 09:23:06
VS2010的结果: 1.#INF00 -1。#INF00 -1。#IND00 – 2011-06-04 09:37:18
微软的C库非常不合格。 – 2011-06-04 12:24:03
该标准甚至不需要任何平台来支持NaN和无穷大。尽管如此,我认为需要符合IEEE 754标准来支持通过部门来获得它们。 – 2011-06-04 12:23:31