0

重複の可能性:
C++ の除算が期待どおりに機能しない

私のプログラムが間違った結果を返すことが判明したので、コードを細かく分割することにしました。ブレークポイントを設定した後、それが判明しました...

double test3 = ((2 - 1) / 2);

...C++ コンパイラによると 0 に等しい。理由がわかりません。誰かが私にそれを説明できますか?

MS Visual Studio Premium 2012 を使用しています

4

4 に答える 4

5

整数除算を行っているためです。1/20に変換されdouble、 が生成され0.ます。浮動小数点除算が必要な場合は、除算の引数の 1 つを浮動小数点数にしてみてください。

double test3 = (2.0-1)/2;
于 2012-11-11T15:07:03.850 に答える
1

右辺で使用した数値はすべて整数であるため (つまり、全体が整数であるため、式は次のように(2-1)/2評価され0ます。(int)1/(int)20

次のように変更します。

double test3 = ((2 - 1) / 2.0);

そして、式は(int)1/(double)2であり、これは double に評価されるため、0.5

于 2012-11-11T15:07:09.040 に答える
1

式に整数のみが含まれている場合、整数演算のみが得られます。浮動小数点演算が必要な場合は、ある時点で浮動小数点式を含める必要があります。

double test3 = ((2 - 1) / 2.0);
于 2012-11-11T15:07:19.350 に答える
0

数値を 2 倍にしてみてください (2.-1.)/2.;

于 2012-11-11T15:09:35.077 に答える