C语言如何判断浮点数的有效性
来源:互联网 发布:视频直播间源码 编辑:程序博客网 时间:2024/06/03 18:27
inf :infinity (linux)
nan :not a number
注意:
1、inf一般是因为得到的数值,超出浮点数的表示范围(溢出,即阶码部分超过其能表示的最大值);而nan一般是因为对浮点数进行了未定义的操作,如对-1开方。
2、nan==nan 结果是0或false,即不能和nan进行比较,和nan进行比较得到的结果总是false或0。所以可以用函数:
3、1.0/0.0等于inf,-1.0/0.0等于-inf,0.0+inf=inf;
4、对负数开方sqrt(-1.0)、对负数求对数(log(-1.0))、0.0/0.0、0.0*inf、inf/inf、inf-inf这些操作都会得到nan。(0/0会产生操作异常;0.0/0.0不会产生操作异常,而是会得到nan)
5、得到inf时就查看是否有溢出或者除以0,得到nan时就查看是否有非法操作。
6、C语言的头文件<float.h>中,有定义的常量DBL_MAX,这个常量表示“能表示出来的最大的双精度浮点型数值”。<float.h>中还有常量DBL_MIN,DBL_MIN表示可以用规格化表示的最小的正浮点数,但DBL_MIN并不是最小的正浮点数,因为可以用可以用非规格化浮点数表示的更小。可以用函数:int isFiniteNumber(double d){return (d<=DBL_MAX&&d>=-DBL_MAX);}来判断d是否为一个finite数(既不是inf,又不是nan(加入d为nan,则d参加比较就会得到false(0)值))。
7、1.0/inf等于0.0。
8、inf是可以与其他浮点数进行比较的,即可以参与<=、>+、==、!=等运算。
下面这几个宏(用宏实现的,使用时跟函数的形式基本相同)是判断一个表达式的结果是否为inf、nan或其他:
具体用法:
1、int fpclassify(x)
2、int isfinite(x)
3、int isnormal(x)
4、int isnan(x)
5、int isinf(x)
- C语言如何判断浮点数的有效性
- 7_18|C语言|判断浮点数等于0|浮点数的保存形式
- 【C语言】整数,浮点数在内存中是如何存储的
- C语言 字符串的浮点数转换成浮点数
- C语言浮点数
- c语言浮点数
- C语言 浮点数
- C语言判断两个浮点数是否相等
- C语言中浮点数double/float相等判断
- C语言中浮点数的比较
- C语言浮点数的二进制表示
- c语言中浮点数的陷阱
- C语言中浮点数的运算
- 【C语言】得到浮点数的二进制
- C语言 有关浮点数的总结
- C语言:浮点数的存储
- C语言中的浮点数
- C语言浮点数解惑
- Version和Build区别
- 随笔记---css
- 博客心得
- FAQ15497]三方App状态栏显示白色,看不到状态栏图标
- php实现商城秒杀
- C语言如何判断浮点数的有效性
- 对拍程序
- UML学习笔记(二)——用例图
- mac jdk1.6
- 全志H3 linux系统recovery制作过程
- 高效网站开发缓存技术应用——网页输出缓存
- 程序性能分析profiling
- jquery操作select标签
- 委托--Func与Action