我无法理解浮点输出

时间:2017-07-22 10:32:05

标签: python

这是我的代码,

 s = 0
 for i in range(10):
   s += 0.1
 print (s)

输出为0.9999999999999999,为什么不输出0.9?

2 个答案:

答案 0 :(得分:2)

考虑这一部分。

1/2

它的输出是什么? 0.5简单的权利。

现在1/3输出是什么?

0.3似乎没问题,因为

3 x 0.3 = 0.9

更准确地说,

3 x 0.33 = 0.99

甚至更多

3 x 0.333 = 0.999

如果你做了相同的话,你仍然会得到10个小数点,

3 x 0.33333333333 = 0.99999999999

如您所见,我们越来越接近价值1,但从未如此 我们完全相同。这意味着我们在如此高精度的情况下越来越准确。

然而您通常不需要为您的简单程序提供此类精确度。看看Python docs对它的评价,

  

0.999999999,这比大多数人认为有用的数字更多,因此Python通过显示舍入值来保持可管理的位数

<强>但是

  

重要的是要意识到,从实际意义上说,这是一种错觉:机器中的价值并不完全是1/10,你只是将真实机器价值的显示四舍五入。一旦您尝试使用这些值进行算术

,这一事实就会变得明显

这意味着什么只是因为你看到了

>>>0.1
0.1 
解释器中的

并不意味着只是 0.1机器中的真实值会是这样的,

0.1000000000000000055511151231257827021181583404541015625

在口译员中尝试这个,

>>> 0.1
0.1
>>> 0.2
0.2
>>> 0.1+0.2
0.30000000000000004
>>> 

所以这就是所有0.1+0.2+0.3...最终得到你的

所发生的事情

0.999999999

有关详情,请参阅this YouTube视频。

答案 1 :(得分:1)

您的代码从0迭代到9,总共10次迭代。

这会给10 • 0.1 = 1,但由于python浮点精度,将0.1添加十次会产生0.99999