博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
“精确”判断一个浮点数是否等于0
阅读量:7196 次
发布时间:2019-06-29

本文共 721 字,大约阅读时间需要 2 分钟。

    看到论坛上有人问“精确判断一个浮点数是否等于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,所以我们只能取近似值。 

本文转自Silent Void博客园博客,原文链接:http://www.cnblogs.com/happyhippy/archive/2006/11/18/601223.html,如需转载请自行联系原作者

你可能感兴趣的文章
JVM调优之:内存分配参数
查看>>
webpack CSS LESS
查看>>
设计模式——模板方法模式
查看>>
eqweqe23
查看>>
面向对象
查看>>
javascript 添加事件兼容性处理
查看>>
Linux 目录卡死
查看>>
微服务框架Spring Cloud之使用事件和消息队列实现分布式事务
查看>>
碉堡了Ubuntu Core Linux支持 TS-4900 物联网开发板
查看>>
如何在多Kubernetes集群和多租户环境中使用Prometheus监控
查看>>
Thymeleaf教程 (十) 属性的优先级列表
查看>>
linux中 vi / vim显示行号或取消行号命令
查看>>
Python学习笔记 - 02: 用Python Client连接ElasticSearch操作数据
查看>>
2018年前端开发回顾
查看>>
微信小程序访问webService(Java)
查看>>
QT从QObject实现多重继承
查看>>
Hystrix的配置属性优先级和详解
查看>>
PyCharm入门教程——用字符串文字拆分行
查看>>
量化交易系统平台开发:量化交易的门类区分
查看>>
高级开发不得不懂的Redis Cluster数据分片机制
查看>>