Next: , Previous: , Up: Internals   [Index]


16.2 有理数型の内部構造

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変数を直接処理することを推奨しています。