next up previous
Next: この文書について... Up: 2 実験 Previous: 2.2 計算を繰り返すと丸め誤差が蓄積される

2.3 計算機イプシロンを求める定跡手順をやってみると

test-round2.c

/*
 * test-round2.c --- 有名な計算機εを求めるコードを丸めモードを変えて実行
 */

#include "round.h"
#include <stdio.h>

void find_eps()
{
  int i;
  double eps;
  eps = 1.0;
  for (i = 1; i <= 10000; i++) {
     eps /= 2.0;
     /* ここで eps == 2^{-i} である (アンダーフローしない限り) */
     if (1.0 + eps == 1.0) {
       printf("eps=%g=2^{-%d}\n", eps, i);
       printf("eps_M=%g\n", 2*eps);
       return;
     }
  }
  printf("計算機εは求まりませんでした。eps=%g に対して 1+eps>1\n", eps);
}

int main()
{
  printf("有名な計算機εを求めるコードを三つの丸めモードで動かす\n");
  printf("\nrounding to the nearest even\n"); find_eps();
  printf("\nrounding toward the minus infinity\n"); Down(); find_eps();
  printf("\nrounding toward the plus infinity\n");   Up();   find_eps();

  printf("...上への丸めでは計算機εは求まらない\n");
  return 0;
}

test-round2 の実行結果

有名な計算機εを求めるコードを三つの丸めモードで動かす

rounding to the nearest even
eps=1.11022e-16=2^{-53}
eps_M=2.22045e-16

rounding toward the minus infinity
eps=1.11022e-16=2^{-53}
eps_M=2.22045e-16

rounding toward the plus infinity
計算機εは求まりませんでした。eps=4.94066e-324 に対して 1+eps>1
...上への丸めでは計算機εは求まらない


next up previous
Next: この文書について... Up: 2 実験 Previous: 2.2 計算を繰り返すと丸め誤差が蓄積される
Masashi Katsurada
平成14年11月11日