Python中的浮点表示错误

时间:2011-10-05 19:07:11

标签: python floating-point

  

可能重复:
  How is floating point stored? When does it matter?
  Python rounding error with float numbers

我试图理解为什么我们在python中得到浮点表示错误。我知道这不是新问题,但说实话,我很难理解它。我将在页面底部的部分表示错误部分浏览python http://docs.python.org/tutorial/floatingpoint.html的官方文档。

但是我无法得到这个表达式J / 2 ** N如何进入画面以及为什么在我的翻译中我得到了这个值。 0.1 ---> 0.10000000000000001 我发现的最接近的问题是floating point issueHow are floating point numbers are stored in memory?,但无法理解。

任何人都可以详细而简单的语言吗?感谢任何帮助。 谢谢, 苏尼

1 个答案:

答案 0 :(得分:1)

你可以认为0.1是计算机的有理数 - 一个有理数,其十进制扩展不是有限的。

以1/3为例。对我们人类来说,我们知道它意味着“三分之一”(不多也不少)。但是如果我们把它写下来没有分数,我们将不得不写0.3333 ......等等。事实上,我们无法用十进制表示法恰好代表三分之一。所以我们可以使用十进制表示法编写数字,而不能使用数字。对于后者,我们必须使用分数 - 我们可以这样做,因为我们在学校教过数学。

另一方面,计算机使用位(只有2位数:1和0),并且只能使用二进制表示法 - 没有分数。由于基数不同(2而不是10),有限有理数的概念有所偏移:我们可以用十进制表示法精确表示的数字可能无法用二进制表示法精确表示,反之亦然。看起来对我们来说简单的情况(1/10 =十分之一= 0.1,确切地说)对于CPU来说不一定是一个简单的例子。