私の HP の分数表示では、分数表示のいくつかのモードを設定できます。
最大分母を設定します。表示される分数は、 dが最大値を超えn/d
ずに内部浮動小数点値に最も近くなります。たとえば、最大値が 10 に設定されている場合、piの浮動小数点数は fraction に最も近い値になります。ただし、最大値が 1000 の場合、最も近い分数はです。22/7
355/113
正確な分母を設定し、結果を減らします。表示される分数は、dが正確な分母に等しいn/d
内部浮動小数点値に最も近い値です。nを計算すると、分数は最大公約数で減らされます。たとえば、分母が 32 に固定されている場合、浮動小数点数 0.51 が最も近く、に縮小されます。同様に、浮動小数点数 0.516は既約に最も近い値です。16/32
1/2
17/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
。これにより、丸めなしで正確な小数演算を行うことができます。
この回答ですべてが解決することを願っています:-) 詳しい説明や詳細な説明が必要な部分があればお知らせください。