浮点数在计算机中表达为二进制(binary)小数。例如:十进制小数: 0.125
是 1/10 + 2/100 + 5/1000 的值,同样二进制小数: 0.001
是 0/2 + 0/4 + 1/8。这两个数值相同。唯一的实质区别是第一个写为十进制小数记法,第二个是二进制。 遗憾的是,大多数十进制小数不能精确的表达二进制小数。 这个问题更早的时候首先在十进制中发现。考虑小数形式的 1/3 ,你可以来个十进制的近似值。 0.3
或者更进一步的, 0.33
或者更进一步的, 0.333
诸如此类。如果你写多少位,这个结果永远不是精确的 1/3 ,但是可以无限接近 1/3 。 同样,无论在二进制中写多少位,十进制数 0.1 都不能精确表达为二进制小数。二进制来表达 1/10 是一个无限循环小数: 0.0001100110011001100110011001100110011001100110011...
在任意无限位数值中中止,你可以得到一个近似值。 在一个典型的机器上运行 Python,一共有 53 位的精度来表示一个浮点数,所以当你输入十进制的 0.00011001100110011001100110011001100110011001100110011010
非常接近,但是不完全等于, 1/10. 这是很容易忘记,存储的值是一个近似的原小数,由于浮体的方式,显示在提示符的解释。 Python 中只打印一个小数近似的真实机器所存储的二进制近似的十进制值。如果 Python 要打印存储的二进制近似真实的十进制值0.1,那就要显示: >>> 0.1
0.1000000000000000055511151231257827021181583404541015625 |
Archiver|手机版|笨鸟自学网 ( 粤ICP备20019910号 )
GMT+8, 2025-1-22 13:34 , Processed in 0.032815 second(s), 18 queries .