【发布时间】:2012-04-19 16:41:34
【问题描述】:
我正在尝试查看计算出的两点之间的距离是否小于给定半径,如下所示:
if distance(lat1, long1, lat2, long2) < radius:
print "Distance: %s Radius: %s" % (distance(lat1, long1, lat2, long2), radius)
这里distance 将有效地返回float 而radius 是int。
我知道我不应该直接比较浮点数,而应该与阈值比较。鉴于此,是否有更好的方法来检查浮点数是否小于 int(或另一个浮点数)。
更新 从所有回复来看,这种比较似乎都还可以。但我确实观察到了这一点:
>>> 1.2000000000000001 > 1.2
True
>>> 1.20000000000000001 > 1.2
False
这不是问题吗?我在 Mac 上使用 Python 2.6.7
【问题讨论】:
-
一般来说,你不应该不小心比较浮点数的 equality,但是比较浮点数的相对性(> 或
-
您的更新是由于precision errors - 它们是计算的事实,在 99.9% 的情况下对您来说并不重要,因为它们的差异太小而无法关心。如果有,请查看decimal module。
-
@Lattyware - 它们在比较中很重要。请参阅下面我的答案中的链接。花车很棘手。认为它们很容易被比较是错误的。 cygnus-software.com/papers/comparingfloats/comparingfloats.htm
-
你对物质的定义是什么?在大多数情况下,由于
0.0000000001导致的错误答案真的无关紧要。有一些情况(例如:while not x == 0.9:、x += 0.3),但这些可以通过更合理的检查来处理(在这种情况下为<)。在任何其他情况下,它将在下一个循环中被捕获,否则错误不会成为问题,因为它太小了。
标签: python