如何在linux c下判断nan?是不是要增加特别的编译选项?

tankejin 2009-07-24 10:34:23
我在linux下的C环境下有个double值算出来是nan, 需要用isnan判断一下是不是nan, 但是判断好像没用,是不是要用isnan的话要加什么特殊的编译选项?

linux 下的C 中isnan的用法是怎样的?和MSDN中一样吗?
...全文
628 8 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
十斗簸箕 2009-07-27
  • 打赏
  • 举报
回复
呵呵,学习了!
Great_Bug 2009-07-27
  • 打赏
  • 举报
回复
学习.....
mymtom 2009-07-26
  • 打赏
  • 举报
回复
如果说需要什么编译选项的话,一般也不需要,不过isnan宏是C99才有的在不支持C99的编译器上估计有问题。
如果是gcc,用-std=c99选项应该就可以了。
mymtom 2009-07-26
  • 打赏
  • 举报
回复
说错了,应该是:
-Ae -Aa是HP的cc才有的编译选项
mymtom 2009-07-26
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 tankejin 的回复:]
-Ae这个编译选项加上了编译不过,去掉则编译正常,不知为何

<command line>:6:2: missing '(' after predicate
make[1]: *** [/home/work/app/version/extdrv/API/download.o] Error 1

[/Quote]
编译当然会出错! -Ae -Aa是HPUX的才有的编译选项,gcc当然不认咯!
简单例子:

mymtom@freebsd:src/2009$ cat 040.c
#include <stdio.h>
#include <math.h>

int
main(int argc, char *argv[])
{
double d;

d = 1.0;
(void)printf("%lf\n", d);
(void)printf("%d\n", isnan(d));

d = acos(2.0);
(void)printf("%lf\n", d);
(void)printf("%d\n", isnan(d));

return 0;
}
mymtom@freebsd:src/2009$ cc -g 040.c -lm -o 040 && ./040
1.000000
0
nan
1
tankejin 2009-07-25
  • 打赏
  • 举报
回复
-Ae这个编译选项加上了编译不过,去掉则编译正常,不知为何

<command line>:6:2: missing '(' after predicate
make[1]: *** [/home/work/app/version/extdrv/API/download.o] Error 1
ShowMan 2009-07-24
  • 打赏
  • 举报
回复
man isnan 看看,要学会用man
Treazy 2009-07-24
  • 打赏
  • 举报
回复
[Quote=引用楼主 tankejin 的回复:]
我在linux下的C环境下有个double值算出来是nan, 需要用isnan判断一下是不是nan, 但是判断好像没用,是不是要用isnan的话要加什么特殊的编译选项?

linux 下的C 中isnan的用法是怎样的?和MSDN中一样吗?
[/Quote]

当然不一样!

用法
要使用isnan() 宏,请使用缺省的-Ae 选项,或者-Aa 和-D_HPUX_SOURCE 选项进行编译。并确保程序包含
<math.h> 。通过指定编译程序命令行或链接程序命令行上的-lm 选项,链接到数学库。
返回值
当且仅当其参数具有NaN 值时, isnan() 宏才返回非零值。此宏不引发任何浮点运算异常。

23,216

社区成员

发帖
与我相关
我的任务
社区描述
Linux/Unix社区 应用程序开发区
社区管理员
  • 应用程序开发区社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧