Next: Integer Arithmetic, Previous: Simultaneous Integer Init & Assign, Up: Integer Functions [Index]
この節ではGMPの多倍長整数をC標準のデータ型に変換する関数について解説します。GMPの多倍長整数に変換する関数についてはAssigning IntegersとI/O of Integersで解説しています。
opの値をunsigned long
型にして返します。
opの値がunsigned long
型に収まり切れない場合は,収まる程度の小さい方の有効ビットだけを返すことになります。opの符号は無視されますので,必ず絶対値になります。
opがsigned long int
型に収まる場合はopの値がそのまま返ってきます。収まり切れない時には,opと同じ符号の,小さい方の有効桁数部分が返ってきます。
opが signed long int
型としては大きすぎる場合はあまり役に立つ結果にはなりませんが,収まる値になっているかどうかはmpz_fits_slong_p
関数を使うことで判明します。
opの値をdouble
型に切り捨てモード(rounding towards zero)で丸めて変換します。
変換の際に指数部が大きすぎる場合,返り値は実行環境によって変化します。無限大が使えるようなら無限大となります。ハードウェアによるオーバーフロー停止が起きるかどうかも環境次第です。
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)。
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となる)。
strがNULL
ポインタであれば,返り値となる文字列は現時点におけるメモリ割り当て関数(see Custom Allocation)を使って確保されたstrlen(str)+1
バイト分の領域に格納され,NULL終端子付きの文字列として表現されます。
strがNULL
ポインタでなく,mpz_sizeinbase (op, base) + 2
分のスペースがあれば,そこに返り値として格納されます。2バイトの冗長分はマイナス符号とNULL終端子用です。
返り値の文字列へのポインタは,割り当てられた領域か,strへのポインタとなります。