什么是尾数,尾数的概念及处理方法

  什么是尾数,尾数的概念及处理方法

  类似的情况也会发生在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()函数来辅助

什么是尾数,尾数的概念及处理方法