Cの整数の除算演算の精度の損失に対するガード++

私は簡単な言葉で、精度の損失の問題に出くわしました:

が式:値が非常に簡単である場合、{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〜


おすすめ

転載: blog.csdn.net/wu694128/article/details/89402946