Python 值中的这些尾部数字来自哪里?



在数学中,1/3 的值是 0.333(3 到无穷大(。

但是,Python在尾部打印出错误的数字。

print(f"{1/3:.100f}".rstrip("0"));
print(f"{1/3:.100f}");

结果:

0.3333333333333333314829616256247390992939472198486328125

结果(无 rstrip(:

0.333333333333333333148296162562473909929394721984863281250000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000那些尾部数字(不是 3(来自哪里?

来自文档

浮点数在计算机硬件中表示为基数 2(二进制(分数

对于不能表示为二进制分数的小数(例如重复小数(,它们由二进制分数近似,直至精度限制:

停在任何有限位数的位处,你就会得到一个近似值。在今天的大多数机器上,浮点数是使用二进制分数近似的,分子使用前 53 位 [...]

因此,1/3.不是存储为0.333....(重复(,而是存储为近似值(表面上是 53 位二进制分数(。

当你添加更精确的值时,python 会计算一个更接近实际值的数字。这样想一想,用1/3:

0.3

0.33

0.333

"无论你愿意写下多少位数,结果永远不会是1/3,而是越来越接近1/3。

最新更新