Python 距离公式中的数学域错误

0 投票
2 回答
3025 浏览
提问于 2025-04-16 16:15

在我的代码中:

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])

撰写回答