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 で計算すると、.....