Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/webpack/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python中的浮点表示错误_Python_Floating Point - Fatal编程技术网

Python中的浮点表示错误

Python中的浮点表示错误,python,floating-point,Python,Floating Point,可能重复: 我试图理解为什么python中会出现浮点表示错误。我知道这不是一个新问题,但老实说,我很难理解它。我正在阅读python关于页面底部部分表示错误的官方文档 但我无法理解这个表达式J/2**N是如何出现在图片中的,以及为什么在我的解释器中我会得到这个值。 0.1--->0.10000000000000001 我发现的最接近的问题是和,但无法理解 有人能用简单的语言详细描述一下吗?谢谢你的帮助。 谢谢 Sunil你可以认为0.1是计算机的一个有理数——一个十进制扩展不是有限的有理数

可能重复:

我试图理解为什么python中会出现浮点表示错误。我知道这不是一个新问题,但老实说,我很难理解它。我正在阅读python关于页面底部部分表示错误的官方文档

但我无法理解这个表达式J/2**N是如何出现在图片中的,以及为什么在我的解释器中我会得到这个值。 0.1--->0.10000000000000001 我发现的最接近的问题是和,但无法理解

有人能用简单的语言详细描述一下吗?谢谢你的帮助。 谢谢
Sunil

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

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


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

请看,特定的公式与计算机上存储浮点数的特定方式有关。如果你不明白的话,我会忽略它——重要的一点是,
0.1
没有精确的二进制表示,因此它会被四舍五入到更接近
0.100000000000001
的值,而不是
0.1
0.4在基数3中
在基数3中没有4。是0.1--1/3<基数12中的代码>1/3是。。。0.1,准确地说--不,
0.1
在基数12中是1/12,而不是1/3。@agf:你说的基数3是对的。另一个是错误的,因为我说的是“三分之一(以10为基数)”。这实际上是写在基数12的“零点一”。无论如何,我删除这个星号是因为它太让人困惑了。“三分之一(以10为基数)”在以12为基数时没有写为“零点一”。写的是零点四。有关包含示例的图表,请参见。@agf:argh,你又对了。抱歉,谢谢你的链接。