基本的な定義

最終更新日:2003.11.29


目次


桁の定義

digit_t

前述のとおり、多倍長整数の絶対値を、適当なrによるr進数表記を用いて表現する。r進数表記の各桁を格納するための符号なし整数型としてdigit_tを定義する。multiprec.hでは次のように定義した。

typedef unsigned digit_t;

そして、digit_tに格納できる限りの値を格納して最大限に効率を上げるために、基数rとしてUINT_MAX+1を採用する。

なお、UINT_MAXとは標準ヘッダーファイル<limits.h>で定義されるunsigned型の最大値である。

double_digit_t

加減乗除などの演算の途中で、一時的にdigit_tの2倍のビット長を格納できる整数型が必要となる。ここでは、gccの拡張機能を用いて次のように定義した。

typedef unsigned long long double_digit_t;

Visual C++などではunsigned long longの代わりに__uint64を用いればよい。

unsignedの倍長の整数型を持たない処理系では、逆にdigit_tを小さく取ってtypedef unsigned short digit_t;とし、typedef unsigned double_digit_tとすればよい。

DIGIT_MAX

途中、幾度かにわたってdigit_tに格納できる最大の値についての情報が必要となる。ここではdigit_tの定義に合わせて次のように定義した。

#define DIGIT_MAX UINT_MAX
DIGIT_BIT

同じく、digit_t型のビット長の情報を次のように定義した。

#define DIGIT_BIT sizeof(digit_t)*CHAR_BIT

なお、CHAR_BITは<limits.h>で定義されるマクロで、1byteあたりのbit数を表す。最近の環境では大抵8であり、勿論パソコンの類では8である。ふるい環境ではCHAR_BITが9のものもあったという。

DIGIT_HIGHEST_BIT

digit_tの最上位bitのみが1で、それ以下の全てのbitが0であるような値である。次のように定義されている。

#define DIGIT_HIGHEST_BIT ((digit_t)(1<<(DIGIT_BIT-1)))
HIGH_DIGIT, LOW_DIGIT

double_digit_tdigit_tを2つ並べたものと見ることもできる。double_digit_tを上位桁・下位桁の2つのdigit_tと見て、HIGH_DIGITは上位桁を、LOW_DIGITは下位桁を取り出す。

enum mp_sign_t

多倍長整数の符号を表す列挙型である。

一番上に戻る


© 2003 ゆうき