4

次のコードの出力が0またはservenに等しいのはなぜですか?

cout << 7/9*9;   //output 0 (zero)   why?

float nine = 9;
float seven = 7;
float i = seven/nine*nine;
cout << i     //output 7   Why?

助けてくれてありがとう。

4

6 に答える 6

31

7/9 * 9はこれらの数値を整数として評価するため、7/9は0と評価され、0 * 9=0と評価されます。

それらをフロートにしたとき、あなたは意図した計算を実行していました。

7.0 / 9 * 9を試して7を取得すると、浮動小数点演算が実行されます。

于 2009-10-08T21:12:58.797 に答える
6

Cでは、整数を除算すると、余りは破棄されます。ここでは、7/9を実行し、その結果を取得して9を掛けています。段階的に、Cは次のように考えています。

7 / 9 = 0
0 * 9 = 0

フロートを使用すると、残りが破棄されなくなるため、正しく機能します。

于 2009-10-08T21:13:30.167 に答える
5

の:

cout << 7 / 9 * 9;

あなたは整数演算をしています。したがって、7/9は0で、0*9は0です。

浮動小数点演算(2番目の例で使用しているもの)を使用するには、次のようにします。

cout << 7.0 / 9 * 9;
于 2009-10-08T21:14:30.150 に答える
3

7/9*9に等しい(7 / 9) * 9が、7および9は整数であり、浮動小数点数ではないため、7 / 90(除算の商)に等しくなります。

于 2009-10-08T21:13:52.553 に答える
2

精度の問題だと思います。/演算子と*演算子は同じ優先順位であるため、7/9 * 9は左から右に(7/9)*9として評価されます。キャッチは、整数演算では(7/9)が0であるということです。それらをfloatとして明示的に格納する場合、その/操作は浮動小数点で実行されます。これにより、intよりも高い精度で7/9を格納できます。

精度の問題なしに1行で計算を実行する場合は、次を試してください。

cout << 7.0f / 9.0f * 9.0f;

于 2009-10-08T21:15:34.033 に答える
1

すでに多くの正解。追記: これを整数演算のままにし、浮動小数点を使用しない場合は、除算の前に乗算を行い、最も精度が高くなるように順序付けする必要があります (ただし、乗算中にオーバーフローが発生しない限り)。どちらがフロートに変換されるよりも(7.0/9)*9、行うことができます(9*7)/9

于 2009-10-09T07:23:17.753 に答える