# 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 演算は and、invert、or を組み合わせて実装 されています。

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 ライブラリを含みます。