D 2.0
About Japanese Translation

Last update Thu Feb 17 14:20:04 2011

std.bigint

任意精度整数 ('bignum')

10進で1000桁以下の数値に対して最もパフォーマンスが最適化されています。 X86では、高度に最適化されたアセンブリルーチンが使用されます。

現在実装されているアルゴリズムは以下の通りです:

非常に大きな数値については、GMP ライブラリ の使用を考慮して下さい。

Source:
std/bigint.d

License:
Boost License 1.0.

Authors:
Don Clugston

struct BigInt;
任意精度整数を表す構造体

符号無し右シフト (>>>) 以外のすべての算術演算がサポートされています。 論理演算は現在は非対応です。

BigInt はcopy-on-writeによる値セマンティクスを実装しています。 つまり、単なる代入は軽い操作ですが、x++ のような演算ではヒープ割り当てが発生し得ます。 (ただし、ほとんどのbigint演算では、ヒープ割り当てのコストは無視できるものです。 )

Example:
        BigInt a = "9588669891916142";
        BigInt b = "7452469135154800";
        auto c = a * b;
        assert(c == "71459266416693160362545788781600");
        auto d = b * a;
        assert(d == "71459266416693160362545788781600");
        assert(d == c);
        d = c * "794628672112";
        assert(d == "56783581982794522489042432639320434378739200");
        auto e = c + d;
        assert(e == "56783581982865981755459125799682980167520800");
        auto f = d + c;
        assert(f == e);
        auto g = f - c;
        assert(g == d);
        g = f - d;
        assert(g == c);
        e = 12345678;
        g = c + e;
        auto h = g / b;
        auto i = g % b;
        assert(h == a);
        assert(i == e);
        BigInt j = "-0x9A56_57f4_7B83_AB78";
        j ^^= 11;

this(T s);
10進または16進の文字列表現から BigInt を構築します。 書式は、D言語の10進/16進リテラルと同じです。 先頭に + か - の符号を付けることができます。16進リテラルとするには "0x" をつけます。 アンダースコアを途中に挟むことができます。

BUG:
不正な文字があった場合 IllegalArgumentException/ConvError

this(T x);

void opAssign(T : long)(T x);

void opAssign(T : BigInt)(T x);

bool opEquals(Tdummy = void)(ref const BigInt y);

bool opEquals(T : int)(T y);

int opCmp(T : long)(T y);

int opCmp(T : BigInt)(T y);

const pure long toLong();
BigInt を long 値として返します。long に入りきらない値であれば、 +- long.max を返します。

const pure long toInt();
BigInt を int 値として返します。int に入りきらない値であれば、 +- int.max を返します。

const pure size_t uintLength();
現在の値を格納するのに必要なuintの個数を返します。 この BigInt の絶対値は常に 2^^(32*uintLength) 未満となります。

const pure size_t ulongLength();
現在の値を格納するのに必要なulongの個数を返します。 この BigInt の絶対値は常に 2^^(64*ulongLength) 未満となります。

const void toString(void delegate(const(char)[]) sink, string formatString);
BigInt を文字列に変換し、'sink' へと渡します。

出力書式は formatString で制御します:
"d" 10進
"x" 16進、小文字
"X" 16進、大文字
"s" デフォルト ("d" と同じ)
null デフォルト ("d" と同じ)