next up previous
Next: 2.3 計算機イプシロンを求める定跡手順をやってみると Up: 2 実験 Previous: 2.1 丸めモードを up にするとアンダーフローしない!

2.2 計算を繰り返すと丸め誤差が蓄積される

test-round1.c

/*
 * test-round1.c --- 繰り返し計算をすると丸め誤差がたまることの確認
 */

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

int main()
{
  int i, n;
  double s;
  n = 10000;

  printf("多分、小数点以下 11 桁目あたりで差が生じる\n");

  Down(); printf("Down\n");
  s = 0.0; for (i = 1; i <= n; i++) s += 1.0 / i;
  printf("s=%25.16f\n", s);
  Near(); printf("Near\n");
  s = 0.0; for (i = 1; i <= n; i++) s += 1.0 / i;
  printf("s=%25.16f\n", s);
  Up(); printf("Up\n");
  s = 0.0; for (i = 1; i <= n; i++) s += 1.0 / i;
  printf("s=%25.16f\n", s);

  return 0;
}

test-round1 の実行結果

多分、小数点以下 11 桁目あたりで差が生じる
Down
s=       9.7876060360364807
Near
s=       9.7876060360443482
Up
s=       9.7876060360527308

ちなみに Mathematica で計算すると、.....


next up previous
Next: 2.3 計算機イプシロンを求める定跡手順をやってみると Up: 2 実験 Previous: 2.1 丸めモードを up にするとアンダーフローしない!
Masashi Katsurada
平成14年11月11日