精度拡張クラス

FUKUDA Hiroshi

C++言語で任意桁数(多倍長)の変数を提供するクラスlbです。 gcc, VC++での動作を確認済み。 必要なファイルは2つ、 ヘッダファイルlb.hと 本体lb.cppです。 これらをまとめた配布ファイルはlb100zip (download from researchmap) です。 lbクラスでは、四則演算、比較、キャスト、数学関数が提供されます。 詳しい使い方はヘッダファイルに書いてあります。 以下は、lbクラスを使ってマチンの公式でπを1000桁求めるプログラム例です (πを1000桁求めるだけなら 4*atan((lb)1); でも済みますが)。

#include "lb.h"


lb T(int x, int n)

{

int i = 3, f = 1, e;

double xl = log(1.0/x);

lb xx = (lb) 1/x, y, t, q;

y = xx;

xx = xx * xx;

t = y;

while (1) {

f = -f; t = t * xx; q = t / i;

y = y + f * q;

frexp(q, &e);

if (fabs(e * 0.301) + xl > n)

break;

i += 2;

}

return y;

}


main()

{

lb_digits(1000);

lb p = 16 * T(5, 60) - 4 * T(239, 60);

printf("pi = %s\n", p.e());

return 0;

}

なお、このライブラリはC言語でも使えます。 gcc,VC++ではlb.cppの拡張子を.cに変えれば、 自動的にクラスの提供をせず、演算関数をのみを提供するようになります。 また、C言語特有のビット操作を使わないコードも内蔵してますので FORTRAN等への移植も可能です。

PDFファイル静岡県立大学経営情報学部紀要(VOL10 No.2, 1998)は、 静岡県立大学経営情報学部紀要(VOL10 No.2, 1998)に掲載した 本ライブラリの開発報告です。