精确判断一个浮点数是否等于0
来源:互联网 发布:ajax json类型 编辑:程序博客网 时间:2024/05/01 03:43
看到论坛上有人问“精确判断一个浮点数是否等于0,不要用if(data<1e-10)类似的做法。”。其实我们了解下计算机中是怎样存储浮点数的,这个问题的答案就很明了了。
IEEE754标准中,单精度浮点数(4byte)表示法:1bit符号位(S),8bit指数位(E,用阶码表示),23bit小数部分(尾数M)。双精度浮点数(8byte)表示法:1bit符号位,11bit指数位(用阶码表示),52bit小数部分(尾数)。所以一个规格化的单精度浮点数x的真值为x=((-1)^S)*(1.M)*(2^(E-127));显然,x永远也不可能为绝对0。
针对上面的描述,当阶码E为全0且尾数M也全0时,可以认为表示的真值x为计算机中的绝对0值,再结合符号位S,有正0和负0之分;即32bit中除了最高1bit外,其余31bit全为0时,就是计算机中的绝对0值。
float f=pow((float)2,(float)-127);;
int *ptrToInt=(int*)(void*)&f;
if(!(*ptrToInt&(0x7fffffff)))
{
//计算机中的绝对0值
}
对于计算机中32bit表示的浮点数,表示的术的绝对值的范围约为(1e-38)~(1e+38),即2^(-127)~1.11111111B*(2^128),浮点数的绝对值再怎么小,也不可能小过2^(-127),浮点数中不存在绝对0,所以我们只能取近似值。
- 精确判断一个浮点数是否等于0
- 精确判断一个浮点数是否等于0
- “精确”判断一个浮点数是否等于0
- “精确”判断一个浮点数是否等于0
- 判断浮点数是否等于0
- 判断浮点数是否等于0
- 从如何判断浮点数是否等于0说起——浮点数的机器级表示
- 九度oj 题目1062:分段函数--浮点数判断是否等于0
- 编程题----怎么判断两个浮点数相加是否等于另一个浮点数?
- C#判断浮点数是否为0
- 7_18|C语言|判断浮点数等于0|浮点数的保存形式
- 判断是否为浮点数
- 判断浮点数是否相等
- 判断浮点数是否相等
- 判断浮点数是否相等
- 判断浮点数是否相等
- 判断一个有序数组中是否有两个数的和等于给定的数
- php的一个判断值是否等于0的陷阱
- JSP+AJAX的验证码
- 注销此blog
- 产生验证图片JAVA代码
- Google搜索指令大全(最新整理)
- 喉咙保养
- 精确判断一个浮点数是否等于0
- .Net Framework 3.0下的"Hello,World"
- 高级语言程序设计——图书管理系统的设计与实现
- C++ 的好书介绍(ZZ)
- VB6简单的记事本程序,高手见笑了!
- 生命是一种长期而持续的累积过程
- tATu 的 30 minutes
- 回顾2000年的文章说ERP咨询顾问的职责
- 朱清时校长谈中国科技大学如何建设一流大学