【问题标题】:sqrt: ValueError: math domain errorsqrt:ValueError:数学域错误
【发布时间】:2011-06-11 17:59:53
【问题描述】:

在 python 中使用sqrt 函数时,我遇到了“distance ValueError: math domain error”的问题。

这是我的代码:

from math import sqrt

def distance(x1,y1,x2,y2):
    x3 = x2-x1
    xFinal = x3^2
    y3 = y2-y1
    yFinal = y3^2
    final = xFinal + yFinal
    d = sqrt(final)
    return d

【问题讨论】:

  • 如何将代码的最后七行替换为以下一行? return sqrt((x2 - x1) ** 2 + (y2 - y1) ** 2) - 你的代码会更清晰,因为你会使用更少的变量。

标签: python math


【解决方案1】:

Python 中的幂函数是**,而不是^(按位异或)。所以使用x3**2等。

【讨论】:

    【解决方案2】:

    您的问题是 Python 中的求幂是使用 a ** b 而不是 a ^ b^ 是按位异或)完成的,这会导致 final 为负值,从而导致域错误。

    你的固定密码:

    def distance(x1, y1, x2, y2):
         return ((x2 - x1) ** 2 + (y2 - y1) ** 2) ** .5 # to the .5th power equals sqrt
    

    【讨论】:

    • 如果您正在尝试改进 OP 的代码,您不妨重新编写它以使其不完全可怕。请参阅 eumiro 的评论。
    猜你喜欢
    • 1970-01-01
    • 2015-06-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-01-04
    • 2021-08-04
    相关资源
    最近更新 更多