next up previous
Next: 計算機内部での整数の表記 Up: 計算機言語 I 第 6 Previous: 目標

整数型の計算

今回は整数型計算での注意点です. まずは, 次のプログラムを 実行してみて下さい.
/* File name 6-1.c */
#include <stdio.h>

main()
{
        int a=65536;
        int b=2147483647;

        printf("%d %d\n", a*a, b+1);
}

上の計算は, 整数型の範囲を越える計算を行っています. 当然間違った結果が出力 されます. このように, 型の範囲を越える計算が起こる事を, オーバーフロー といいます. double 型でも最大の数 $2^{1024} = 1.7976931348623157\times 10^{308}$ より大きい値が 出る事をオーバーフローといいます.

これに対して, 前回やったような double 型の加法減法での切捨てや, 0 でない最小数 $ 2.2250738585072014\times 10^{-308} = 2 ^{-1074}$ より小さい値が計算で出てくる事を, アンダーフロー(underflow)といいます. 次の例で, double 型でアンダーフロー, オーバーフローを起すとどうなるかを 見て下さい.

/* File name 6-2.c */
#include <stdio.h>

main()
{
        double a=2.2250738585072014E-308;
        double b=1.7976931348623157E308;

        printf("%f\n", a*a);
        printf("%f\n", b*2);
}



Next: 計算機内部での整数の表記 Up: 計算機言語 I 第 6 Previous: 目標