next up previous
Next: 実習 2: 2次方程式の解 Up: 計算機言語 I 第 5 Previous: 目標

計算機イプシロン再び

2回目の講義で, 計算機イプシロンを求めました. 結果は $2^{-52} = 2.22\cdots
\times 10^{-16}$ でした. これは何を意味するかというと, 10進法で見て 17桁以上差のある数の和や差の計算が, 数学の計算とはずれるという事です. 実際, 次の例は $ (10^{17} + 1) - 10^{17} $ $(10^{17}-10^{17}) + 1$ の答が 異なる事を示しています. 最初の計算では, 計算機イプシロンの効果が 現れているのです.

プログラムでは, 変数の宣言と同時に変数の初期化(初期値の代入)を行って います. C 言語では, このような書き方ができる事にも注意して下さい.

/* File name 5-1.c */

#include <stdio.h>

main()
{
        double a=1.0e17;
        double b=1.0;
        double c=1.0e17;
        double ans1, ans2;

        ans1=(a+b)-c;
        ans2=(a-c)+b;

        printf("(a+b)-c =%.17f, (a-c)+b= %.17f\n", ans1, ans2);
}

今回は, この最初の計算のような事が起こらない工夫について 少し述べます.



Next: 実習 2: 2次方程式の解 Up: 計算機言語 I 第 5 Previous: 目標