Next: , Previous: , Up: Integer Functions   [Index]


5.4 変換関数

この節ではGMPの多倍長整数をC標準のデータ型に変換する関数について解説します。GMPの多倍長整数変換する関数についてはAssigning IntegersI/O of Integersで解説しています。

Function: unsigned long int mpz_get_ui (const mpz_t op)

opの値をunsigned long型にして返します。

opの値がunsigned long型に収まり切れない場合は,収まる程度の小さい方の有効ビットだけを返すことになります。opの符号は無視されますので,必ず絶対値になります。

Function: signed long int mpz_get_si (const mpz_t op)

opsigned long int型に収まる場合はopの値がそのまま返ってきます。収まり切れない時には,opと同じ符号の,小さい方の有効桁数部分が返ってきます。

opsigned long int型としては大きすぎる場合はあまり役に立つ結果にはなりませんが,収まる値になっているかどうかはmpz_fits_slong_p関数を使うことで判明します。

Function: double mpz_get_d (const mpz_t op)

opの値をdouble型に切り捨てモード(rounding towards zero)で丸めて変換します。

変換の際に指数部が大きすぎる場合,返り値は実行環境によって変化します。無限大が使えるようなら無限大となります。ハードウェアによるオーバーフロー停止が起きるかどうかも環境次第です。

Function: double mpz_get_d_2exp (signed long int *exp, const mpz_t op)

opの値をdouble型に切り捨てモード(rounding towards zero)で丸めて変換し,その指数部も切り離して返します。

返り値は必ず0.5<=abs(d)<1の範囲に収まる値(仮数部)になり,指数部の値は*expに格納されます。opがゼロであれば0.0が返り値となり,*expには0が格納されます。

この関数は標準Cのfrexp関数と同じ機能を有しています(see Normalization Functions in The GNU C Library Reference Manual)。

Function: char * mpz_get_str (char *str, int base, const mpz_t op)

opの値を基数baseとする整数文字列に変換します。基数として使えるのは2から62,もしくは-2から-36までの値です。

基数baseが2から36までの場合は,数字と小文字を一桁分として使用し,-2から-36までの場合は数字と大文字が使用されます。基数が37から62の範囲では,数が大きい順に子文字→大文字→数字で一桁が表現されていきます(例えばbase=62の時は, 61 = z, ..., 36 = a, 35 = Z, ..., 10 = A, 9, 8, ..., 1, 0となる)。

strNULLポインタであれば,返り値となる文字列は現時点におけるメモリ割り当て関数(see Custom Allocation)を使って確保されたstrlen(str)+1バイト分の領域に格納され,NULL終端子付きの文字列として表現されます。

strNULLポインタでなく,mpz_sizeinbase (op, base) + 2分のスペースがあれば,そこに返り値として格納されます。2バイトの冗長分はマイナス符号とNULL終端子用です。

返り値の文字列へのポインタは,割り当てられた領域か,strへのポインタとなります。