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