Next: , Previous: , Up: Rational Number Functions   [Index]


6.2 変換関数

Function: double mpq_get_d (const mpq_t op)

opdouble型に変換し,必要があれば打ち切ります(つまり,ゼロへの丸めを実行する)。

指数部が double型の範囲を超えたものになるときの挙動はシステムによります。無限大がサポートされていれば,大きすぎる場合には無限大が返ってきますし,小さすぎるときには0.0に変換されます。ハードウェアのオーバーフロー,アンダーフロー,非正規化エラーは設定次第で発生したりしなかったりします。

Function: void mpq_set_d (mpq_t rop, double op)
Function: void mpq_set_f (mpq_t rop, const mpf_t op)

opの値をropに代入します。正確に変換できる場合は丸めは発生しません。

Function: char * mpq_get_str (char *str, int base, const mpq_t op)

opを,基数baseの文字列に変換します。基数は2以上36以下で設定できます。文字列は‘num/den’という形式になりますが,分母が1の時は‘num’と表現されます。

strNULLの時は,変換結果を格納するメモリ領域を現在のメモリ割り当て関数を使って確保して格納されます(see Custom Allocation)。領域はstrlen(str)+1バイト確保され,ここに文字列とNULL終端子が入ります。

strNULLでなければ,結果を格納するのに十分なメモリブロックが確保されていなければなりません。つまり

mpz_sizeinbase (mpq_numref(op), base)
+ mpz_sizeinbase (mpq_denref(op), base) + 3

だけ必要になります。

余分に3バイト必要になるのは,マイナス符号,スラッシュ,NULL終端子を格納するためです。

返り値は変換結果を格納する文字列へのポインタで,新たに確保された所か,既に確保されているstrになります。