前章までは、整数なら整数同士、実数は実数同士で計算を行ってきました。
整数と実数とで混合計算を行ったことはありませんでした。
整数と実数との混合計算とは、たとえば、1.03×9 のような計算のことです。
この計算では、実数×整数の計算が行われています。
この様な場合、その答えはどのようになるのでしょうか。
結論から言ってしまうと、この場合、結果は実数になります。
C言語では、
整数と実数で計算した場合の結果は実数に変換されます。
これは、結果を整数にしてしまうと、実数部分がなくなってしまうためです。
次のプログラムは、実際に 1.03×9 を計算してみる例です。
#include <stdio.h>
int main(void)
{
printf("%f\n", 1.03 * 9);
return 0;
}
このプログラムの実行結果は、次の通りになります。
確かに、答えは実数に変換されていることがわかると思います。
また、試しに%d指定子で整数として表示させてみた所、次のようになりました。
明らかに、おかしな値になっていることがわかります。
なお、こちらの表示はパソコン環境によって変わるので、必ずしも同じ表示にはなりません。
整数と実数の計算では、答えは実数になることがわかりました。
しかし、場合によっては、整数の答えの方が都合が良い場合も考えられます。
たとえば、消費税の計算は、金額×1.05 (2004/09/14現在)という数式ですが、
この計算を普通に行うと、答えは実数になってしまいます。
金額に小数が含まれるのは不自然です。
もし、実数を、整数に変換する方法があれば、この問題は解決します。
C言語には、型を強制的に変換する機能として、
キャスト変換があります。
キャスト変換の使い方は、次の通りになります。
たとえば、実数値である 1.05 を整数に変換したい場合 (int)1.05 とすることで、
1.05 が整数に変換され、1 として扱われます。
この方法を使用すれば、消費税の計算も可能になります。
次のプログラムは、360円の商品の消費税を求める例です。
#include <stdio.h>
int main(void)
{
printf("%d\n", (int)(1.05 * 360));
return 0;
}
このプログラムの実行結果は、次の通りになります。
このプログラムで、1.05×360 に () をつけて計算しているのは、
かっこをつけないと、1.05 が先に変換され 1 になってしまうためです。
この例に限らず、コンピュータ特有の計算誤差を減らすためには、計算の順番は重要です。
なお、実数の計算結果やそれを整数に変換した値は、コンパイラやコンピュータの種類により、
多少違ってくることがあるので、ピッタリ378にはならないこともあります。
キャスト変換は、当然、変数に使用することも可能ですし、使い方も同じです。