-6

浮動小数点数と丸め誤差についてかなり読んだことがありますが、私の問題に固有のものは見つかりませんでした。

これが何が起こるかです

15.95 を足してから 15.95 を足すと、その数は 31.9 になります (最後にゼロはありません)。次に、19.95 を追加すると、51.849999999999994 になります。これが起こる原因は何ですか?実際のコードを提供する必要がある場合は、そうすることができます。ありがとう!

4

1 に答える 1

4

最終的に、これは、一部の 10 進数 (0.9 など) が有限桁数の 2 進数で表すことができないためです。ちょうど、分数 1/3 が有限桁数の 10 進数で表すことができないのと同じです (0.333 を取得します)。 ...)。

基数 2 に変換された 0.9 は 0.1110011001100... です。このバイナリ表現は、結果が0.9 (基数 10)に近い数値になるように切り捨てられますが、わずかに小さくなります。

float の係数は 9 で仮数は -1 であるため、数値 0.9 ではこの動作は見られないことに注意してください。しかし、係数が 3.19 (基数 2 =で、マーク間の繰り返しセクション) で仮数が +1 であるため、31.9 で表示されます。11.00>11000010100011110101<><

于 2013-09-11T17:47:31.557 に答える