3

電卓 (カシオのポケット電卓など) が「500/12」などの方程式をどのように管理し、結果として「125/3」を返すことができるかを誰かが説明できますか? あるいは、誰かがこれを行うアルゴリズムに名前を付けることができますか?

不正確な数値とは、0.333 recurring など、一定の小数点以下の桁数で表すことができない数値を意味します。

Windows 電卓はこれを実証できます。「1/3」を実行すると、答えとして「0.3333333333333333」が得られますが、これに 3 を掛けると「1」に戻ります。

4

2 に答える 2

1

私の HP の分数表示では、分数表示のいくつかのモードを設定できます。

  • 最大分母を設定します。表示される分数は、 dが最大値を超えn/dずに内部浮動小数点値に最も近くなります。たとえば、最大値が 10 に設定されている場合、piの浮動小数点数は fraction に最も近い値になります。ただし、最大値が 1000 の場合、最も近い分数はです。22/7355/113

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

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

最大分母アプローチのアルゴリズムでは、連分数が使用されます。Python でのわかりやすい例は、http://hg.python.org/cpython/file/2.7/Lib/fractions.py#l206 の limit_denominator メソッドにあります

正確な分母アプローチの方法はより簡単です。分母dと浮動小数点数xを指定すると、分子はd * x最も近い整数に丸められます。次に、最大公約数n/dを計算して分数を減らします。

オプションで、元の浮動小数点数を表示された分数に置き換えることができます。これは、グリッドへのスナップとして知られています。そうすれば、0.333 を入力して、 に正確に等しい分数を作成できます1/3。これにより、丸めなしで正確な小数演算を行うことができます。

この回答ですべてが解決することを願っています:-) 詳しい説明や詳細な説明が必要な部分があればお知らせください。

于 2012-03-24T22:01:40.803 に答える
1

GMP ライブラリの有理数関数を参照することをお勧めします。ある時点で、演算のシーケンスが特に単純でない限り、計算で有限精度を受け入れる必要があります。無理数 (超越関数/定数) は、たとえば連分数として近似することしかできません。

于 2012-03-24T23:39:09.580 に答える