C# の 10 進数型には次の問題があります。
Console.WriteLine( 1m/3 + 1m/3 == 2m/3 );
False
2 または 5 で除算する場合にのみ数値を正確に表すことができます。
前にスタック オーバーフローで述べたように ( C# 有理演算)、分子と分母の 2 つの小数を格納し、乗算と除算を正確に実行するものを実装することはかなり可能です。Euclid のアルゴリズムを使用して、必要に応じて分数を単純化できます。double または decimal への明示的な変換も実装する必要があります。
こことここに示されている有理商の実装がいくつかあります。Microsoft Solver Foundation構造のRationalもあります。
C# ではどのようdecimal
に実装されていますか? この実装をコピーして、繰り返し decimal
s を処理するように変更することは可能ですか?