Python max()未返回正确的最大值
我使用以下代码来找出这两个数字中哪一个具有最大值:Python max()未返回正确的最大值,python,floating-point,Python,Floating Point,我使用以下代码来找出这两个数字中哪一个具有最大值: maximum = max(2.3,2.300000000001) print maximum 但是我得到的输出是2.3,而不是2.3000000000001。有人能解释为什么会发生这种情况吗?通过与以下Python代码等效的代码实现“绝对或相对差异”检查:() def近似相等(x,y,ε): “”“如果y在x的相对或绝对‘ε’范围内,则返回True。”。 默认情况下,“ε”为1e-6。 """ #检查绝对精度。 如果-epsilon不用担
maximum = max(2.3,2.300000000001)
print maximum
但是我得到的输出是2.3
,而不是2.3000000000001
。有人能解释为什么会发生这种情况吗?通过与以下Python代码等效的代码实现“绝对或相对差异”检查:()
def近似相等(x,y,ε):
“”“如果y在x的相对或绝对‘ε’范围内,则返回True。”。
默认情况下,“ε”为1e-6。
"""
#检查绝对精度。
如果-epsilon不用担心-max
没有被破坏,并且max
确实保持2.3000000000001
<代码>打印
,但打印时会将其四舍五入。你可以用来证明:
>>> maximum = max(2.3,2.300000000001)
>>> print maximum
2.3
>>> print repr(maximum)
2.300000000001
发件人:
14。浮点运算:问题和限制
很容易忘记,存储的值是
原始小数,因为浮点数是
在解释器提示下显示。Python只打印一个小数
二进制近似值的真十进制值的近似值
由机器存储。如果Python要打印真正的十进制值
对于存储为0.1的二进制近似值,它必须显示
>0.1
0.10000000000000055115123125782702118158340451015625
这比大多数人认为有用的数字还要多,因此Python保留了
通过显示舍入值来管理的位数
>0.1
0.1
回答:您得到的结果很好,但是print
rounds
您可以通过以下方式检查实际值:
Python print命令自动截断数字。上面的评论中有一些解释。如果您希望它打印完整值,请尝试使用
打印“%13f”%maximum
来显示完整值在您的情况下,正如mureinik所说,只有打印是问题的原因。更直接的例子是:
>>> a = 2.300000000001
>>> a
2.300000000001
>>> print(a)
2.3
但请注意,Python使用其平台的底层浮点,并且它的精度不是有限的。根据经验,只有16位十进制数字是准确的:
>>> b = 2.300000000000000001
>>> b
2.3
>>> c = 2.3
>>> b == c
True
您得到的输出是2.3000000000001
print
为您提供了详细说明。这里可能重复了关于print函数截断浮点值的原因的详细说明。请使用repr()作为python中的内置函数
>>> a = 2.300000000001
>>> a
2.300000000001
>>> print(a)
2.3
>>> b = 2.300000000000000001
>>> b
2.3
>>> c = 2.3
>>> b == c
True