
例1:
>>> 1.4 - 1.1
0.2999999999999998
为什么不是0.3?
例2:
4.0 + 1e+16 - 1e+16
>>> 4.0
没错。
5.0 + 1e+16 - 1e+16
>>> 4.0
为什么5变成了4?
4.0 + 1e+17 - 1e+17
>>> 0.0
为什么结果是0.0? 4去哪了?
相信大家都了解十进制的科学计数法,一个实数可以用以下形式来表示:
浮点数是用二进制的科学计数法来表示的,在计算机上是以二进制来进行存储的,单精度浮点数占用32位,双精度浮点数占用64位。以下都用64位双精度浮点数来解释。

最高位是符号位(sign),0表示正数,1表示负数。接下来的11位储存的是的指数(exponent),最后是52位储存的是小数(fraction)。浮点数的值可以用下面这个式子算出,类似于十进制的科学计数法。