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