Next: Float Internals, Previous: Integer Internals, Up: Internals [Index]
mpq_t
型は,mpz_t
型の整数を分子と分母に持つ有理数を表現するためのものです(see Integer Internals)。
標準形としては,分母が正かつ非ゼロの整数の既約分数となります。ゼロは0/1という形で表現します。
計算過程の各ステージごとに公約数を除する方法が,一般的には最良であるとされています。GCD(最大公約数)の計算はO(N^2)の演算が必要になるため,小さい公約数から削っていき,大きい公約数は後から除する方法を取っています。分母と分子に公約数がないということが分かれば,例えばmpq_mul
関数においては,4組ではなく,2組のGCDだけ分かればよいことになります。
このような公約数の扱い方をすると,単純な因数分解においては必ずしも最適なものではなく,約せるかどうかの見通しも立ちづらいことになりますが,GMPはそれ以外の手段が取れません。Efficiencyでも述べましたが,この点はアプリケーションソフトの方でうまく対処して下さい。mpq_t
演算のフレームワークは,mpq_numref
関数とmpq_denref
関数を使って直接分子と分母にアクセスするか,mpz_t
変数を直接処理することを推奨しています。