什么是尾数,尾数的概念及处理方法
类似的情况也会发生在python和很多编程语言中。
这里我以python为例。
0.1 0.2结果:
0.30000000000000000004这个看起来对常规计算影响不大,但是如果是深度学习算法这种庞大的数据计算,可能会产生蝴蝶效应,所以我们有必要知道背后的原因和解决方法。
具体原因:浮点数运算中存在不确定尾数(不是BUG)。
那么为什么会有不确定的尾数呢?
这个涉及编程语言对数字运算的内部实现原理:计算机中所有数据本质上都要用二进制来存储。
以python为例。对于浮点数,用53位二进制表示小数部分,大概是10-16。
B(0.1)约等于0.00011001100110011001100110011001100110011001110因为二进制和十进制没有严格的等价关系,所以用二进制表示时,0.1实际上是一个无限小的十进制数,python截取的53位无限接近0.1。
将二进制转换为十进制,0.1在python中表示为十进制
D(0.1)大约等于0.100000000000055115123125782702181583404541015625,所以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真圆函数分析
Round(x,d):四舍五入x,d为小数位数。结论:浮点数间运算或者比较时用round()函数来辅助
郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。