2017-11-09 10 views
1

私はプログラムの下に書きますが、私のプログラムは2つの数字が等しいかどうかをチェックすることはできません。 エラーはありません。 何か助けていただければ幸いです。2つのフロートが正確に等しいことを確認する方法はありますか?

import math 
def IsCollinding(ball1,ball2): 
    distance=math.sqrt((((ball2[0]-ball1[0])**2)+((ball2[1]-ball1[1])**2))) 
    print(type(distance)) 
    print(type(ball1[2]+ball2[2])) 
    if(distance==ball1[2]+ball2[2]): 
    print("Is Coliding") 
    else: 
    print("Not Coliding") 
    print(distance) 
    print(ball1[2]+ball2[2]) 
ball1=[2,2,3] 
ball2=[11,11,9.7279220614] 
IsCollinding(ball1,ball2) 

出力:

<type 'float'> 
<type 'float'> 
Not Coliding 
12.7279220614 
12.7279220614 
+0

何が起こっているのかを理解するのに役立つコメントを追加できますか? – VortexYT

答えて

5

あなたが本当にこれを行うことはできません。浮動小数点数は等しく表示されることがありますが、floating point precisionのため実際には異なります。しかし、あなたはカンニングすることができます。両者の差が非常に小さい場合、2つの数字を「等しい」と呼ぶことができます。 deltaが少数である

(x - y) < delta 

機能は、次のようになります。 Pythonで実装:

def almost_equal(x, y, delta=1e-10): 
    return abs(x - y) < delta 

私は差の絶対値を取得するには、ここabsを使用しています。このようにして、負の数とxyの順番を処理する必要はありません。

2つの浮動小数点数を比較すると、common gotchasのうちの1つであり、私たちの大部分が一点で実行されます。グーグル "comparing two floats python"は、このトピックについて豊富な有益な結果を返すはずでした。

関連する問題