2012-02-26 13 views
0

私はPythonで線分の長さを計算していますが、なぜ1つのコードでゼロが与えられ、もう1つが正しい答えを与えるのか理解できません。Pythonバグの距離式

コードのこの作品は私にゼロを与える:

def distance(a, b): 
    y = b[1]-a[1] 
    x = b[0]-a[0] 
    ans=y^2+x^2 
    return ans^(1/2) 

この1つは私に正しい答えを与える:

import math as math 

def distance(a, b): 
    y = b[1]-a[1] 
    x = b[0]-a[0] 
    ans=y*y+x*x 
    return math.sqrt(ans) 

ありがとうございました。

+0

なぜ '^ '演算子を使用していますか?あなたはそのオペレータが何をしていると思いますか? –

答えて

8

あなたの最初のスニペットでは、あなたがこの書かれています:Pythonで

ans^(1/2) 

をパワーオペレータが^ではない、それはXOR演算子はです。 PythonのPower演算子は**です。その上、Python 2.xでは、デフォルトで2つの整数の除算結果が整数なので、1/20と評価されます。正しい方法は、このようになります:

ans ** 0.5 

そして別の事、あなたはここで実装している機能はmath.hypotで非常に簡単に行うことができます。

import math 

def distance(a, b): 
    return math.hypot(b[0] - a[0], b[1] - a[1]) 
0

がXORであるx**2むしろ(x^2よりもやってみ)

または

math.pow機能を使用して、1/2は0ではなく0.5