kilin> Software > LB

精度拡張クラス

FUKUDA Hiroshi

C++言語で任意桁数(多倍長)の変数を提供するクラスlbです。 gcc, VC++での動作を確認済み。 必要なファイルは2つ、 ヘッダファイルlb.hと 本体lb.cppです。 これらをまとめた自己解凍配布ファイルは lb100.exe です。 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)に掲載した 本ライブラリの開発報告です。