さて、クラシック1 * 1/3 * 3=0.9999999があります。なぜそうなるのか理解しています。
私のユースケースでは、整数にしようとしています。無限精度の数学で、最初に整数を生成する必要があると指示された場合を除いて、私は自分の価値の下限を喜んで受け入れます(上記のユースケースを参照)。
これを達成するために一般的に使用される方法はありますか?
例:
double myFloat = 1.0 / 2.0;
1 * myFloat * 2 = 2結果:2
myFloat = 1.0 / 2.0;
2.5 * myFloat * 2 = 2.5結果:2
myFloat = 1.0 / 3.0;
1 * myFloat * 3 = .9999結果:1
myFloat = 1.0 / 3.0;
.9 * myFloat * 3 = .9結果:0
私が考えた1つの方法は、結果をフローリングする前に、常に結果にデルタを適用することでした。しかし、私は自分の結果をクリーンで一般的に受け入れられている方法で達成したいと思っています。
編集:フィードバックに基づいて明確にするために変更されました。