我如何检查两个浮标完全相等?

时间:2017-11-09 19:47:03

标签: python

我写下面的程序,但我的程序无法检查两个数字是否相等。 没有错误, 我会感激任何帮助。

import math
def IsCollinding(ball1,ball2):
  distance=math.sqrt((((ball2[0]-ball1[0])**2)+((ball2[1]-ball1[1])**2)))
  print(type(distance))
  print(type(ball1[2]+ball2[2]))
  if(distance==ball1[2]+ball2[2]):
    print("Is Coliding")
  else:
    print("Not Coliding")
  print(distance)
  print(ball1[2]+ball2[2])
ball1=[2,2,3]
ball2=[11,11,9.7279220614]
IsCollinding(ball1,ball2)

输出:

<type 'float'>
<type 'float'>
Not Coliding
12.7279220614
12.7279220614

1 个答案:

答案 0 :(得分:5)

你真的不能这样做。浮点数可能看起来相等,但实际上由于floating point precision而不同。但是,你可以作弊。我们可以拨两个号码&#34;相等&#34;如果两者之间的差异非常小。

该功能如下所示:

(x - y) < delta

delta是一个小数字。用Python实现:

def almost_equal(x, y, delta=1e-10):
    return abs(x - y) < delta

我在这里使用abs来获得差异的绝对值。我们避免以这种方式处理负数和xy参数的顺序。

比较两个浮点数是最common gotchas之一,这是我们大多数人在某一时刻遇到的问题。谷歌搜索&#34; comparing two floats python&#34;应该已经返回了关于这个主题的大量信息性结果。