2016-05-21 16 views
1

LCM検索アルゴリズムを実装しようとしています。非常に多数の場合、LCMを見つける必要があります。Python計算エラー

LCMは、式を使用して発見され

、A及びBは、2つの入力がある

LCM(A, B) = (A * B)/GCD(A, B) 

入力:226553150 1023473145
ので、LCM = (226553150 * 1023473145)/5
それがあるべき、46374212988031350

しかし、Pythonでは46374212988031352となっていますが、これは明らかにエラーです。 この問題を解決するには? python screenshot

+1

浮動小数点数の計算は**正確ではありません**。 –

+0

浮動小数点の制限については、こちらをご覧ください:https://docs.python.org/2/tutorial/floatingpoint.html – Keiwan

+0

これはCourseraコースのように見えますが、私は同じ問題について[Cの質問があります](http://stackoverflow.com/questions/36540103/lowest-common-multiple-with-doubles-in-c)。 –

答えて

2

/真の除算演算子を使用したため、浮動小数点演算が使用されています。浮動小数点は大きな数値にしか近似できませんが、その差はその結果です。

利用代わり//床部門:整数の

>>> (226553150 * 1023473145) // 5 
46374212988031350 

フロア部門は精度の問題を避けて、floatに変換する必要はありません。

また、実数で、より高精度な数学のためのdecimal moduleを使用します。

>>> from decimal import Decimal 
>>> Decimal('226553150') * Decimal('1023473145')/Decimal('5') 
Decimal('46374212988031350') 

これはfloatを使用するよりも遅くなります。