mpfrを利用した数値計算例
プログラム sum.cxx
1
#includestdio.h
![]()
2
#includempfrxx.h
![]()
3
4
#define LAST 10005
#define PREC 1666
7
int main(void) {8
mpfr_set_default_rounding_mode(GMP_RNDN);9
mpfr_set_default_prec(PREC);10
int k;11
mpfr_class s;12
mpfr_class a;13
s = 0;14
for(k=1; kLAST; k++) {
15
a = 1;16
a /= k(k+1);
17
s += a;18
}19
a = LAST;20
a /= (LAST+1);21
cout"exact:
t"
a
endl;
22
cout"sum:
t"
s
endl;
23
cout"error:
t"
a-s
endl;
24
}
ここでは、記述の容易さを考慮して、C++言語でプログラムを作成した。
g++ -o sum sum.cxx -lgmp -lmpfr
exact: 0.999000999000999000999000999000999000999000999000998e0
sum: 0.999000999000999000999000999000999000999000999000982e0
error: 0.160365882605531738768432188029088912728911812806303e-49
までの総和
計算順序を入れ換えるなどの工夫をしなくても、簡単に高精度の計算結果を
得ることができる。
また、丸めの方法を変えることで精度保証計算を容易に行うことができる。