2011-01-19 7 views
4

sqrtの機能をPythonで使用すると、 "distance ValueError: math domain error"の問題に直面しています。ここでsqrt:ValueError:数学的なドメインのエラー

は私のコードです:Pythonで

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 
+4

は? 'return sqrt((x2 - x1)** 2 +(y2 - y1)** 2)' - より少ない変数を使用するため、コードがより明確になります。 – eumiro

答えて

6

パワー機能は(ビット毎の排他的論理和である)**、ない^です。だから、x3**2など

11

を使用するあなたの問題は、ドメイン・エラーが発生する負の値であるように、最終的な原因となる(^はビット単位のXORである)Pythonで累乗がa ** bないa^bを使用して行われるということです。

あなたの固定コード:以下の1行を使用して、コードの最後の7行の交換についてどのように

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

OPのコードを改善しようとしているのであれば、あまりにも恐ろしいことではないように書き直すかもしれません。 eumiroのコメントを参照してください。 – SilentGhost

+0

完了。 _14 char_ – orlp