首页 > 编程知识 正文

尾数判定如何判定,尾数判断法例题

时间:2023-05-04 02:19:32 阅读:260387 作者:4007

在python和很多编程语言中都会发生类似的状况
这里我以python为例

0.1+0.2

结果:

0.30000000000000004

这对于常规的计算似乎影响不是很大,但是如果是深度学习算法这样庞大的数据计算可能就会产生蝴蝶效应,所以我们有必要知道它背后的原因及其解决办法。

具体原因:浮点数间运算存在不确定尾数(不是BUG
那么为什么会出现不确定尾数呢?
这涉及到了编程语言对数字运算的内部实现原理
计算机中所有数据本质上都要用二进制来存储
以python语言为例,对于浮点数,采用53位二进制表示小数部分,约10^-16

b(0.1)约等于0.0001100110011001100110011001100110011001100110011010

又因为二进制和十进制之间不存在严格的对等关系,0.1在用二进制表示时实际上是个无限小数,python截取的53位来无限接近0.1

再将二进制转换为十进制,0.1在python内部以十进制表示为

d(0.1)约等于0.100000000000000055511151231257827021181583404541015625

所以0.1在python中并不是准确的0.1,实际上它是一个无限接近0.1的数

进一步的,0.1和0.2相加时,计算机内部计算过程:
分别二进制转换——二进制运算——反向转换为十进制——得到一个无限接近0.3的结果
这就是浮点数运算存在不确定尾数的原因。
当我们判断尝试判断0.1+0.2是否等于0.3是答案是否定的

0.1+0.2 == 0.3 False

那么这种问题我们该如何解决呢?

解决办法:round函数

round(0.1+0.2,1) == 0.3 True

round函数解析

round(x,d) :对x四舍五入,d是小数截取位数。 结论:浮点数间运算或者比较时用round()函数来辅助

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。