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 ...上への丸めでは計算機εは求まらない |