【问题标题】:Last decimals are random counting float [duplicate]最后小数是随机计数浮点数[重复]
【发布时间】:2014-07-06 19:33:17
【问题描述】:

我开始学习 Python。我目前有以下一小段代码:

a = float(input())
b = float(3)
while a < b:
    print(a + 0.0001)
    a+=0.0001

这很重要,但浮点数末尾会出现小数。他们为什么来那里,他们是什么?

输出:

【问题讨论】:

标签: python python-3.x floating-point


【解决方案1】:

这是因为问题中的数字不是用二进制浮点数精确表示的。从0.0001 开始。 closest double precision value 其实是:

0.00010000000000000000479217360238592959831294137984514236450195312 5

所以当你写0.0001 时,你实际得到的是上面的数字。然后将其添加到您输入的任何值中,然后结果是最接近该值的可表示值。

如果这让您感到震惊,那么我建议您阅读 David Goldberg 的永恒文章What Every Computer Scientist Should Know About Floating-Point Arithmetic

【讨论】:

  • 0.0001 的值可以多留几个小数位吗? (我得到0.000100000000000000004792173602385929598312941379845142364501953125。)
  • @mark 你是对的。我从 rob 的页面中复制了错误的值
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2010-12-14
  • 2016-01-30
  • 1970-01-01
  • 2020-04-09
  • 1970-01-01
  • 1970-01-01
  • 2013-07-17
相关资源
最近更新 更多