15.4 mpz -- GNU 多倍長整数

リリース 2.2 以降で撤廃された仕様です。 この節の末尾にある参考文献を読んで下さい。同様の機能を提供するパッケージについての情報があります。このモジュールは Python 2.3 で除去されます。

このモジュールはオプションです。モジュールを含むように設定して 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 演算は andinvertor を組み合わせて実装 されています。

mpz 型の数値は mpz() を呼び出して生成します (厳密な解説に ついては下を参照してください)。mpz 型の数値は以下のように印字されます: mpz(value)

mpz( value)
新しい mpz 型数値を生成します。value は通常の整数、長整数、 その他の mpz 型数値、そして文字列にすることもできます。文字列の 場合、引数は 256 進数の桁からなるアレイとして解釈され、最下桁 が前で、値は正の数になります。下で記述されている binary() を参照してください。

MPZType
mpz() およびこのモジュール中の他のほとんどの関数が返す オブジェクトの型です。

個のモジュールでは多くの 外部 関数が定義されています。 mpz 型でない引数はまず mpz 型の値に変換され、関数は mpz 型の数値 を返します。

powm( base, exponent, modulus)
pow(base, exponent) % modulus を返します。 exponent == 0 の場合、mpz(1) を返します。 C ライブラリ関数とは対照的に、この関数は負の指数を扱うことが できます。

gcd( op1, op2)
op1 および op2 の最大公約数を返します。

gcdext( a, b)
a*s + b*t == g == gcd(a, b) であるようなタプル (g, s, t) を返します。

sqrt( op)
op の平方根を返します。結果はゼロの向きに丸められます。

sqrtrem( op)
root*root + remainder == op となるようなタプル (root, remainder) を返します。

divm( numerator, denominator, modulus)
q * denominator % modulus == numerator となる値 q を返します。この関数は gcdext() を使って Python で実装することもできます。

mpz 数値型は一つのメソッドを持ちます:

binary( )
mpz 型の数値をバイナリ文字列に変換します。数値は 256 進数の桁からなる アレイに記憶されます。最小の桁が先頭になります。

mpz 型の数値はゼロまたはそれ以上の値をもたなければなりません。 そうでない場合 ValueError が送出されます。

参考資料:

General Multiprecision Python
このプロジェクトでは多倍精度の算術演算を Python で行えるようにする 新たな数値型を構築中です。彼らの最初の試みも GNU MP ライブラリに 基づいています。

mxNumber -- Extended Numeric Types for Python
もう一つの GNU MP ライブラリに対するラッパです。Windows に移植された GNU MP ライブラリを含みます。
ご意見やご指摘をお寄せになりたい方は、 このドキュメントについて... をご覧ください。