可能性の重複:
Why is floating point arithmetic in C# imprecise?の保存は非直感的な結果
もし私の数多くのランダムダブルスをループし、2つの端数桁の場所にそれらを「ラウンド」、各個々のラウンドが正しいように見えます(0.02,0.01、0.00など)。
しかし、ラウンドに沿って保持される非常に小さな部分があるように見えます。
double total = 0;
for (int i = 0; i < 10000; i++)
{
total += Math.Round(random.NextDouble() * 0.02, 2);
}
Console.WriteLine(total);
サンプル出力:
100.600000000006
99.7400000000059
誰でもこの問題が発生した理由を説明する気にはより直感的な方法は何ですか?
ダブルスは*極めて正確な数字で、*正確な数字を格納します。その数値は、基数2に格納されるため、数値を基数10に格納すると予想される場合にのみエラーになります。 –
@EricLippertは同意しました。私はこれを急いで書いたので、もっと明確に説明してください。 –
それに応じて編集してください。より正確な答えです。 –