mpfrを利用した数値計算例
プログラム sum.cxx
indentation
1
#include 2
#include 3
4
#define LAST 1000
5
#define PREC 166
6
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; k 15
a = 1;
16
a /= k 17
s += a;
18
}
19
a = LAST;
20
a /= (LAST+1);
21
cout 22
cout 23
cout 24
}
g++ -o sum sum.cxx -lgmp -lmpfr
>
./sum
exact: 0.999000999000999000999000999000999000999000999000998e0
sum: 0.999000999000999000999000999000999000999000999000982e0
error: 0.160365882605531738768432188029088912728911812806303e-49
までの総和
計算順序を入れ換えるなどの工夫をしなくても、簡単に高精度の計算結果を
得ることができる。
また、丸めの方法を変えることで制度保証計算を容易に行うことができる。