BohYoh.comトップページへ
C & C++ FAQ
目次

C C++ 整数値の平均を実数で求めようとしてもうまくいかないのはどうしてですか。

int     x, y;
double  ave;

…
ave = (x + y) / 2;
 右のプログラムを見てください。int型の整数であるxとyの平均を、double型である浮動小数点型の変数aveに代入しています。
 ここでxの値が3でyの値が4のとき、aveの値は3.5ではなく3.0となります。
 その理由を考えましょう。代入の左辺がdouble型であるとはいえ、右辺の演算は(整数 + 整数) / 整数です。これは、整数 / 整数であり、その演算結果としては、剰余が切り捨てられた商の整数部のみが得られます。その演算結果が代入されますから、aveの値は3.0となるのです。
 平均値を実数値として得たいのであれば、/による除算自体をdouble型の結果が得られるものとしなければなりません。以下に、いくつかの解決例を示します。

実現例(1) 実現例(2) 実現例(3) 実現例(4)
ave = (double)(x + y) / 2; ave = (x + y) / 2.0; ave = ((double)x + y) / 2; ave = double(x + y) / 2;

 (3)は、少々わざとらしいですね。
 (4)を使えるのはC++のみで、C言語ではエラーとなります。


■ 根拠 ■
標準C §6.3.5 Multiplicative operators
標準C99 §6.5.5 Multiplicative operators
標準C++ §5.6 Multiplicative operators

戻る

BohYoh.comロゴ