Python中的浮点数表示错误
可能重复的问题:
浮点数是如何存储的?什么时候会有影响?
Python中浮点数的四舍五入错误
我想弄明白为什么在Python中会出现浮点数表示错误。我知道这个问题并不新鲜,但老实说,我很难理解。我正在查看Python的官方文档,特别是页面底部关于表示错误的部分http://docs.python.org/tutorial/floatingpoint.html。
但是我还是不明白这个表达式 J/2**N 是怎么来的,以及为什么在我的解释器中会得到这个值。 0.1--->0.10000000000000001 我找到的最接近的问题是浮点数问题和浮点数是如何在内存中存储的?,但我还是无法理解。
有没有人可以用简单易懂的语言详细解释一下?非常感谢任何帮助。 谢谢, Sunil
1 个回答
1
你可以把0.1想象成计算机里的一个有理数——也就是一个小数,但它的小数部分是无限的。
比如说1/3。对我们人类来说,它的意思就是“三分之一”(就是这个意思,没有多也没有少)。但是如果我们不使用分数来表示,就得写成0.3333……这样,后面的小数点后面会一直有3。实际上,我们无法用小数准确地表示三分之一。所以有些数字我们可以用小数表示,有些则不行。对于后者,我们就得用分数来表示——这也是因为我们在学校学过数学。
另一方面,计算机是用比特来工作的(只有两个数字:1和0),它只能使用二进制表示法——不能用分数。由于基础不同(计算机用的是2进制,而我们通常用的是10进制),有理数的概念就有点不同了:那些我们可以用小数准确表示的数字,在二进制中可能就无法准确表示,反之亦然。对我们来说,看起来简单的情况(1/10=十分之一=0.1,完全准确)对计算机来说却不一定简单。