Next: , Previous: , Up: Floating-point Functions   [Index]


7.4 変換関数

Function: double mpf_get_d (const mpf_t op)

opdouble型に変換します。必要があれば切り捨て(即ち,ゼロ方向への丸め)ます。

opの指数部がdouble型に対して大きすぎたり小さすぎたりする場合は,システムごとに結果が異なってきます。無限大が使えるときには,指数部溢れで無限大が返ってきますし,小さすぎるときには0.0が返されます。ハードウェアのオーバーフロー,アンダーフロー,非正規化エラーは設定次第で発生したりしなかったりします。

Function: double mpf_get_d_2exp (signed long int *exp, const mpf_t op)

opdouble型に変換し,必要があれば切り捨て処理を行います(つまり,ゼロへの丸め)。指数部は別の場所に返されます。

返り値は0.5<=abs(d)<1の範囲になります。指数部は *expに格納されます。d * 2^expは切り捨てられたopの値です。opがゼロであれば,返り値は 0.0となり,*expにはゼロが格納されます。

この関数は標準Cのfrexp関数と同じような機能を持ちます(see Normalization Functions in The GNU C Library Reference Manual)。

Function: long mpf_get_si (const mpf_t op)
Function: unsigned long mpf_get_ui (const mpf_t op)

oplongunsigned long型に変換し,小数部は切り捨てます。opが変換型としては大きすぎる場合の結果は定義されていません。

mpf_fits_slong_pmpf_fits_ulong_p(see Miscellaneous Float Functions)も参照して下さい。

Function: char * mpf_get_str (char *str, mp_exp_t *expptr, int base, size_t n_digits, const mpf_t op)

opを基数baseの文字列に変換します。基数は2以上36以下,もしくは-36以上-2以下に設定できます。表現できるのはn_digits桁までで,以降のゼロは無視されます。opを正確に表現できる桁数までしか表示されません。n_digitsがゼロの時は,最大桁数まで表示されます。

baseが2以上36以下の時は,数字と小文字で表現されます。-36以上-2以下の時は,数字と大文字が使用されます。37以上62以下の時は数字,大文字,小文字が順に使用されます。

strNULLであれば,現在のメモリ割り当て関数(see Custom Allocation)を使って必要な文字列分,即ち,NULL終端子を含むstrlen(str)+1バイト分が確保されます,

strNULLでなければ, n_digits + 2バイト分の領域があればそこに格納されます。これは仮数部,マイナス符号,NULL終端子を含む領域です。n_digitsがゼロの時は,有効桁全て表示されますが,アプリケーションがどのぐらいの桁数になるかを事前に知ることができませんので,この場合はstrNULLにしておくべきでしょう。

生成された文字列は小数で,小数点は先頭の桁の左にあるものと考えます。指数部はexpptrポインタのところに書きこまれます。例えば,3.1416は "31416"という文字列(小数部)と,指数部1になって返されます。

opがゼロの時は,空文字列と指数部ゼロが返ってきます。

返り値は文字列へのポインタで,新規に確保された領域か,あらかじめ与えられたstrとなります。