問題のプログラム
どうも! みなため(@MinatameT)です。
この記事は、私の失敗体験を参考にして作成したものです。ぜひ、反面教師にしてください。
それでは、次のソースコードをご覧ください。
#include<stdio.h>
int main(void)
{
double x;
x = 1 + (1/2);
printf("x = %f\n",x);
return(0);
}
double型(小数点以下の値も扱える)の変数xに、1 + (1/2) の値を代入し、その結果を表示するものです。
このプログラムの実行結果はどうなると思いますか?
ここで、「1 + (1/2) = 1 + 0.5 = 1.5」と考えた方は危険です。算数的な計算自体はそれで合っているのですが……。
実は、実行結果は次のとおりになります。
x = 1.000000
そう、1/2(0.5)が加算されていませんね。なぜだと思いますか?
この原因は「型キャスト」をしていないからです。型キャストとは、int型をfloat型にしたり、double型をint型にしたりすることです。変数の型の変換ですね。
上記のプログラムでは、1/2を型キャストしていなかったので、(この場合は)0.5の小数点以下の部分が無視され、0になってしまっていたのです。
この問題を解決するために、上記のプログラムを修正してみます。
問題のプログラムの修正
さて、問題のプログラムを修正してみました。
#include<stdio.h>
int main(void)
{
double x;
x = 1 + ((double)1/2);
printf("x = %f\n",x);
return(0);
}
(1/2) を ((double)1/2) とすることで、小数点以下を残してくれるようになります! これが型キャストです。
すると、実行結果は次のようになります。
x = 1.500000
見事に、正しい計算ができました!
このように、型キャストの有無によって実行結果が大幅に変わってしまうことがよくあります。
皆さんも、型キャストを忘れないようにしましょう。