如何在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中,您将拥有NAN
和INFINITY
macros。
从“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