コンピュータによる多倍長計算を手段とする実験数学を提唱して、最近気炎を上げている D. H. Bailey という米国人がおります。そのべ氏の製作による多倍長計算パッケージを MPFUN90 といいます。High-Precision Software Directory
このパッケージは、Fortran90 で書かれておりまして Fortran90 の演算子のオーバーロード機能等を使用して、かなり自然な形で多倍長計算プログラムが書けるようになっています。またパッケージ自体は FORTRAN77 時代から開発が続いていて、信頼度の高いものとなっております。
最近流行の PSLQ アルゴリズムも、べ氏自身によるこのパッケージの成果のひとつです。
*
ここでは、MPFUN90 を利用して Pi を千桁まで求めてみました。用いたアルゴリズムはガウスの算術幾何平均によるものです。12反復で値が収束しています。プログラム中 mppic というのは、パッケージにあらかじめ定義されている Pi の値です。
ソース
PROGRAM gauss_pi USE mpmodule IMPLICIT NONE INTEGER, PARAMETER :: n = 25 INTEGER :: i, k TYPE (mp_real) :: a(n), b(n), c(n), s, pi CALL mpinit(1000) k = 12 MPOUD = 1000 A(1) = '1.0' B(1) = 1 / SQRT( MPREAL('2.0 e0') ) C(1) = B(1) DO i = 2, k A(I) = 0.5d0 * ( A(i - 1) + B(i - 1) ) B(I) = SQRT( A(i - 1) * B(i - 1) ) C(I) = 0.5d0 * ( A(i - 1) - B(i - 1) ) END DO s = 0.0d0 DO i = 1, k s = s + 2**(i - 1) * C(i) * C(i) END DO pi = 2.0d0 * a(k) * a(k) / ( 1.0d0 - s ) PRINT *, 'Pi =' CALL mpwrite (6, pi) PRINT * CALL mpwrite (6, mppic) STOP END PROGRAM gauss_pi