2012-03-24 3 views
3

計算機(カシオポケットなど)が '500/12'などの方程式を管理し、結果として '125/3'を返す方法を説明できる人がいますか?ポケット電卓は分数をどのように単純化し、分数として不正確な数を維持しますか?

不正確な数字は、固定小数点数で表現できない数字を意味します(たとえば、0.333の繰り返しなど)。

Windowsの電卓はこれを実証することができます。「1/3」を実行すると回答に「0.3333333333333333」が表示されますが、3を乗算すると「1」に戻ります。

+3

1つだけではなく、不正確な数値を端数として保持しないでください。 corsiKa

+0

Windowsの電卓は何の工夫もしていません。結果が1に十分に近く、IEEE浮動小数点数で1に丸められるだけの場合です。 –

答えて

1

私のHPの分数表示みましょうあなたは分数表示のためのいくつかのモードを設定します。

  • 最大分母を設定します。表示された端数は、内部浮動小数点値に最も近いn/dであり、dが最大値を超えていません。たとえば、最大値が10に設定されている場合、の円番号の浮動小数点数は、小数点以下の桁数である22/7に最も近い値になります。ただし、最大値が1000の場合、最も近い割合は355/113です。

  • 正確な分母を設定し、結果を減らしてください。表示される端数は、内部浮動小数点値に最も近いn/dであり、dが正確な分母に等しい。 nを計算した後、その分数は最大公約数分だけ減少します。たとえば、分母が32に固定されている場合、浮動小数点数0.51は16/32に最も近く、1/2に縮小されます。同様に、浮動小数点数0.516は17/32に最も近く、既約ではありません。

  • 正確な分母を設定し、結果を減らさないでください。例えば、0.51は、未還元画分である16/32として示されています。

最大分母アプローチのアルゴリズムは、continued fractionsを使用します。 Pythonの簡単な例は、http://hg.python.org/cpython/file/2.7/Lib/fractions.py#l206のlimit_denominatorメソッドにあります。

正確な分母の方法の方が簡単です。分母dと浮動小数点数xが与えられると、分子はちょうどd * xが最も近い整数に丸められます。 greatest common divisor.

オプションで、元の浮動小数点数を表示分数で置き換えることができます。これはグリッドにスナップとして知られています。このようにして、0.333を入力して、という部分を正確にとし、1/3に等しくすることができます。これにより、四捨五入なしに正確な分数計算を行うことができます。

この回答があなたのためにすべてをクリアしてくれることを願っています:-)どんな部分も精緻化や詳細な説明が必要な場合は教えてください。

1

GMPライブラリのrational number functionsを見ることをお勧めします。オペレーションの順序が特に単純な場合を除いて、ある時点では、計算に有限の精度を受け入れる必要があります。不合理なもの(超越関数/定数)は、例えば連続する分数としてしか近似することができない。

関連する問題