前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >0.1+0.2-0.3 等于0? 可以先用PLC试试

0.1+0.2-0.3 等于0? 可以先用PLC试试

作者头像
科控物联
发布2022-03-29 18:16:02
4890
发布2022-03-29 18:16:02
举报
文章被收录于专栏:科控自动化

好好想想,你们在工作中,做过浮点数或者实数 是否 相等的判断?

先计算一下,测试结果如下:

奇不奇怪?

感觉奇怪就是把计算机原理课程还给老师了.

把它转成二进制来看看:

十进制0.1

二进制0.00011001100110011.(循环0011)

尾数为1.1001100010011001100..1100(共52位,除了小数京左边的1),指数为4(进制移码为0000000符号位为0

计算机存储为:0000000000 masuit. tklldgk tk

因为尾数最多52位,以实际存储的值为

0.0001001100110011001100110011001100110011001100110011001

看看十进制0.2

二进制0.001100110010011.(0环0011)

尾数为1.10011010010010010052位除了小数点方边的1)リ,指数为3(一进制移码为0000符号位为0

存储为:00000000110011001100110011.11001

尾数最多52位,所以实示行情的值000100000000000000

十进制0.3

按照上面相同的套路,得出来:

0.00110010011001100110011001100100110011001100110011,

结尾0011循环.

那么两者相加,得:

0.00011001100110011001100110011001100110011001100110011001+0.00110011001100110011001100110011001100110011001100

110011=0.01001100110011001100110011001100110011001100110011001100

也就是说只要0.3在最低位加的话就和0.2+0.1-样了,而尾数的最低位是第52位,再乘上-2的阶码,就是2的负54次方,这个数刚好就是:5,551115123125783e1

所以如果要判等0.1+0.2-0.3和0,不能直接用“==”,必须相减取绝对值!

补充知识:

在计算机中,小数有两种表示方式:定点数和浮点数。小数点隐含在某一个固定位置上的数据,就称为定点数。为了能正确的表示定点数,我们必需规定数据的位数和小数点的位置,以8位的数据为例,规定低3位是小数位,则一个定点数。定点表示法较为简单,但它表示的数据非常有限,无法表示数值很大的数据和数值很小的数据。为了表示更大范围的数据,数学上通常采用科学计数法,把数据表示成一个小数乘以一个以10为底的指数,像这样,把一个数的有效数字和指数部分在计算机中分别予以表示,就是浮点表示法。这种表示法,相当于数的小数点位置随比例因子的不同而在一定范围内自由浮动,改变指数部分的数值相当于改变小数点的位置。

在设计算法的时候,必需在精度和速度做好一定的权衡,可以采用32位的浮点数,具有更快的速度、更少的内存,也可能采用64位的双精度,具有更高的精度,但是需要更多的内存,速度也会有所降低。在涉及浮点数的算法中,尽量遵循下面几个原则,尽可能的减少由于浮点数造成的错误,或者减少误差:

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2021-12-04,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 科控物联 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档