このモジュールはオプションです。モジュールを含むように設定して Python を 構築した際にのみ利用可能であり、GNU MP ソフトウェアがインストールされて いることが必要です。
このモジュールは GNU MP ライブラリの一部の機能へのインタフェースを 実装しています。GNU MP ライブラリは多倍精度の整数および有理数 に対する算術演算ルーチンを定義しています。整数だけの インタフェース (mpz_*()) が提供されています。 特に注釈のない限り、GNU MP ドキュメントに記述されている内容が 適用されます。
有理数のサポート は Python で実装されて います。例えば、Python ソースコード配布中の Demos/classes/Rat.py で提供されている Rat モジュール を参照してください。
一般的に、mpz 型の数値は他の標準の Python 数値と同様に使う
ことができます。例えば、+
、*
、などといった組み込み演算子
や、abs(), int() ..., divmod(),
pow() といった、標準の組み込み関数を使うことができます。
注意してください: ライブラリには mpz_xor() が
なく、私にとっても必要ないので、ビット単位のxor
演算は and、invert、or を組み合わせて実装
されています。
mpz 型の数値は mpz() を呼び出して生成します (厳密な解説に
ついては下を参照してください)。mpz 型の数値は以下のように印字されます:
mpz(value)
value) |
個のモジュールでは多くの 外部 関数が定義されています。 mpz 型でない引数はまず mpz 型の値に変換され、関数は mpz 型の数値 を返します。
base, exponent, modulus) |
pow(base, exponent) % modulus
を返します。
exponent == 0
の場合、mpz(1)
を返します。
C ライブラリ関数とは対照的に、この関数は負の指数を扱うことが
できます。
op1, op2) |
a, b) |
a*s + b*t == g == gcd(a, b)
であるようなタプル (g, s, t)
を返します。
op) |
op) |
root*root + remainder == op
となるようなタプル (root, remainder)
を返します。
numerator, denominator, modulus) |
q * denominator % modulus == numerator
となる値 q を返します。この関数は gcdext() を使って
Python で実装することもできます。
mpz 数値型は一つのメソッドを持ちます:
) |
mpz 型の数値はゼロまたはそれ以上の値をもたなければなりません。 そうでない場合 ValueError が送出されます。
参考資料: