我使用ANSI C89(不是C++),我想生成NaN,-Infinity和+ Infinity.
有没有标准方式(例如标准宏)?或者是否有任何平台和编译器独立的方式来生成这些数字?
float f = 0.0 / 0.0; // Is f ALWAYS in any platform is NaN?
Run Code Online (Sandbox Code Playgroud)
Mat*_*Mat 41
有C99,但以前的标准AFAIK没有.
在C99中,你将拥有NAN和INFINITY宏.
来自"数学<math.h>"(§7.12)部分
宏INFINITY扩展为float类型的常量表达式,表示正或无符号(如果可用); ...
如果你坚持使用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
Run Code Online (Sandbox Code Playgroud)
奇怪的是,我无法使用这种幼稚的方法获得正 NaN。