c语言中有没有表示浮点数NaN的宏

lkrich7 2005-04-26 03:10:44
我记得在《编码的奥秘》上看到IEEE对符点数的标准化中有一个规定:指数为255,底数不为0时(具体是否是这样既不太清了)是Nan(Not a Number)表示不是一个浮点值,请问C语言里是否有这个值的宏定义?在哪个头文件里?
...全文
1474 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
whyglinux 2005-04-28
  • 打赏
  • 举报
回复
其实判断一个数是否是NaN的方法很简单:与它自身进行比较。所以上面的函数也可简单写成下列形式:

int IsNaN(float x)
{
return !(x==x);
}
zhang_jiang 2005-04-28
  • 打赏
  • 举报
回复
float x; // 这里只考虑32位, 64位类似
struct IEEE32
{
int fraction:23;
int exponent:8;
int sign:1;
};
IsNaN(float x)
{
struct IEEE32 *ieee32=(struct IEEE32 *)&x;
if(ieee32->exponent==0xff && !ieee32->fraction)
return 1;
return 0;
}
lkrich7 2005-04-28
  • 打赏
  • 举报
回复
zhang_jiang(Solar)能写一下你的宏判断吗?
whyglinux 2005-04-26
  • 打赏
  • 举报
回复
对于NaN的实现有两种方式:signaling NaN 和 quiet NaN。signaling NaN就是抛出异常的方式,因此它不需要定义NaN宏。quiet NaN就是即使在计算出现异常的情况下也不抛出异常从而中断程序的执行、而是将结果表示为一个特殊的值,因此只有在这种情况下NaN宏才被定义。

可见NaN定义与否是就看你使用的系统采取的是哪种处理方式。如果定义的话,应该出现在<math.h>中。
zhang_jiang 2005-04-26
  • 打赏
  • 举报
回复
这个在数值计算里面用处很大.

这个宏不好定义,
NaN: biased exponent = FF 而且 fraction != 0

到是可以定义一个宏判断一个数是否为NaN, 判断依据如上
llmsn 2005-04-26
  • 打赏
  • 举报
回复
是啊,这个有什么用啊,用const代替就行了.
uoyevoli 2005-04-26
  • 打赏
  • 举报
回复
没有。不过这个有什么用啊?

70,014

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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