Python 距离公式中的数学域错误
在我的代码中:
class Vector(object):
@staticmethod
def distance(vector1, vector2):
return math.sqrt((vector2[0]-vector1[0])^2+(vector2[1]-vector1[1])^2)
有时候,似乎是随机的,我在调用这个方法时会遇到一个错误,叫做ValueError: math domain error。这是什么问题呢?谢谢。
2 个回答
2
我觉得你的问题是用了异或运算符 ^,而不是幂运算符 pow **... 试着把那一行改成:
return math.sqrt((vector2[0]-vector1[0])**2+(vector2[1]-vector1[1])**2)
15
在Python和许多其他基于C的编程语言中,**
用来表示“幂运算”,也就是把一个数提升到另一个数的次方。
return math.sqrt((vector2[0]-vector1[0])**2+(vector2[1]-vector1[1])**2)
而^
这个符号在这些语言中代表的是“按位异或”运算,它可能会产生负数,这就会导致所谓的“数学域错误”。
顺便提一下,整个运算也可以通过使用math.hypot
函数来计算。
return math.hypot(vector2[0]-vector1[0], vector2[1]-vector1[1])