2016-09-22 3 views
-1

私はPython 3で2つの浮動小数点値( "a"と "b")を持ち、各浮動小数点数は5から15小数点を持つことができます。問題は、私にとって2つの値が等しい場合、Pythonは私にFalseを返します。Pythonで2つの浮動小数点値を比較する最速の方法はどれですか?

Examples: 
a=12.091824733909107, b=12.091824733909117 
or also 
a=12.54678, b=12.546780000

上記の例では、「a」と「b」は同じです。 1つの解決策は、小数点を切り捨てるためにラウンド(a、5)とラウンド(b、5)を使用することですが、ラウンド(100万分の1時間)を使用して時間処理を増やします。 round()を使用する必要のない別のソリューションはありますか?

+0

これは2であります値は** NOT **です。 – Dawny33

+0

使用するとどうなりますか。 a-b = 0の場合:trueを返します。 elif a-b!= 0:falseを返します。 – Roy123

+0

@Roy_Dorsthorst a-bは問題を解決しません。たとえば、pythonが差異0.000000001から認識するためです。さらに私は、より速いと思う2つの値を比較し、結果を0 – lausent

答えて

0
彼らが考慮されて怒鳴るとBの差がある場合には

>>> def is_close(a, b, tol=1e-9): 
     return abs(a-b) <= tol 

>>> is_close(12.091824733909107, 12.091824733909117) 
True 
>>> is_close(12.54678, 12.5467800000123) 
True 
>>> 

またはPythonで等しくなるように、あなたが許容範囲を設定する必要が

、3.5+

>>> import math 
>>> math.isclose(12.091824733909107, 12.091824733909117) 
True 
>>> math.isclose(12.54678, 12.5467800000123) 
True 
>>> 
+0

私はPython 3.4と3.5でいくつかのテストを行い、 "%.xf"%aと "%.xf"%bが最も速い解決法(私の場合は7に等しい)であるようです。それはmath.isclose(数秒未満)よりも速いです。 – lausent

関連する問題