私は簡単な言葉で、精度の損失の問題に出くわしました:
が式:値が非常に簡単である場合、{I、J、K} = {50,85,27} Lを求めることは、直ちに計算機を使用して答えを計算することができ、L = I / 30 + J / 40 + K / 25、 4.8717に、しかし達成するために、次の手順を準備:
int型、I = 50、J = 85、K = 27。
ダブルL = I / 30 + J / 40 + K / 25。
実行後、結果は4.000000000を表示します!
なぜ?C ++での結果は、値が追加されていることを、結果は4.00000で得られるように、2つの整数の整数除算を四捨五入さに沿って得られるためです。おそらく、あなたは、私は小児科の問題をすることはありませんことを言うだろう、もちろん、状況はそれを見ることが容易であることなどが、また、避けることは比較的容易であるが、整数型の3人のメンバーI、J、Kは、時間のクラスであるとき、彼らは整数型であることを忘れて、上記の式を書くことが多い簡単。このため、プログラムを書くと、式のタイプは、として書かれた統一します:
int型、I = 50、J = 85、K = 27。
ダブルL = I / 30.0 + J / 40.0 + K / 25.0。
これは間違って行くことはありません。
今発見されるまで、ああ、これは、知られているはずの問題ではなく、遅すぎる、戦っ〜O(∩_∩)O〜