next up previous
: この文書について...

MPFR

mpfrを利用した数値計算例

\begin{displaymath}
\sum_{k=1}^{n}\frac{1}{k(k+1)}= \frac{n}{n+1}
\end{displaymath}

を数値計算し、計算精度を確認する。

プログラム sum.cxx

ここでは、記述の容易さを考慮して、C++言語でプログラムを作成した。

計算精度として、10進数50桁程度を要求すると、

\begin{displaymath}
50\log_{2}10 = 166.096\cdots
\end{displaymath}

であるから、166ビットの多倍長数値計算を行う。

$n=1000$までの総和

\begin{displaymath}
\sum_{k=1}^{1000}\frac{1}{k(k+1)}
\end{displaymath}

$\displaystyle \left.\frac{n}{n+1}\right\vert _{n=1000}$を直接計算した値を 比較すると、実行結果から誤差は

\begin{displaymath}
{\tt error}= 0.16\cdots 10^{-49}
\end{displaymath}

であった。

計算順序を入れ換えるなどの工夫をしなくても、簡単に高精度の計算結果を 得ることができる。 また、丸めの方法を変えることで精度保証計算を容易に行うことができる。


GMP:   GNU multiple-precision floating-point computations with exact rounding
MPFR:   multiple-precision floating-roint



平成16年12月30日