2016-11-25 10 views
0

Pythonで浮動小数点の正確な除算を行う方法はありますか?Python 3で正確な浮動小数点除算を行う

私は次の数学的操作をしようとしています。

  1. 0.6/0.32.0が正しく返されます。クール、それは数学が働いているように見えます!
  2. 0.6/0.2 が正しい結果になると2.9999999999999996が返されます。
  3. 0.6/0.1は、6.0が正しい結果になると5.999999999999999を返します。

私は完全に欠けているこの問題の簡単な解決策があるのでしょうか?

注:私はIs floating point math broken?の回答を見てきましたが、答えの多くは浮動小数点演算を説明する優れた仕事をしていますが、どの応答も浮動小数点で正確に分割する方法Pythonのポイント値

+1

これは役に立ちますか? http://stackoverflow.com/questions/588004/is-floating-point-math-broken – Whud

+0

'round((0.6/0.3)、4)'を使用すると、4桁の精度で除算が行われます。 – Ja8zyjits

+0

私はこれを複製としてクローズすることに投票しています。実際に任意の精度が必要な場合は、モジュール 'decimal'を使用することができます。無料のランチはありません。あなたがそのルートに行くと、計算が遅くなります。 –

答えて

2

Pythonのdecimalライブラリは、浮動小数点除算の精度が低い場合に、より正確な結果を計算する機能を提供します。

ここでは、decimalライブラリが正しい結果をいくつかの浮動小数点値を分割して返す例を示します。正しい

from decimal import Decimal 
  1. Decimal('0.6')/Decimal('0.3')戻るDecimal('2')
  2. Decimal('0.6')/Decimal('0.2')は、正しいDecimal('3')を返します。
  3. Decimal('0.6')/Decimal('0.1')は、Decimal('6')が正しく返されます。

@ JohnColemanは次のように述べています。これらの計算に小数点モジュールを使用すると、より正確な結果が得られますが、教示が実行される速度は犠牲になります。

関連する問題