15.4 mpz -- Interi GNU di dimensioni arbitrarie

Deprecato dalla versione 2.2 di Python. Vedere i riferimenti alla fine di questa sezione per informazioni sui package che forniscono funzionalità simili. Questo modulo verrà rimosso in Python 2.3.

Questo è un modulo opzionale. È disponibile solo quando Python è configurato per includerlo, il che richiede l'installazione del software GNU MP.

Questo modulo implementa l'interfaccia di una parte della libreria GNU MP, che definisce interi a precisione arbitraria e routine aritmetiche sui numeri razionali. Vengono fornite solo le interfacce per le routine integer (mpz_*()). Se non definito altrimenti, può essere applicata la descrizione della documentazione GNU MP.

In Python può essere implementato il supporto per i numeri razionali. Per un esempio vedere il modulo Rat, fornito come Demos/classes/Rat.py nella distribuzione dei sorgenti di Python.

In genere i numeri mpz possono essere usati come gli altri numeri standard di Python, ad esempio si possono usare gli operatori built-in come +, *, etc., tanto quanto le funzioni built-in standard come abs(), int(), ..., divmod(), pow(). Notare bene: l'operazione bit per bit xor è stata implementata come un gruppo di and, invert e or, poiché nella libreria manca una funzione mpz_xor(), che poi non serve.

Si crea un numero mpz chiamando la funzione mpz() (vedere più sotto per una descrizione precisa). Un numero mpz risulta stampato così: mpz(value).

mpz( value)
Crea un nuovo numero mpz. value può essere un intero, un long, un altro numero mpz, e perfino una stringa. Se è una stringa, viene interpretato come un array di cifre con radice 256, con prima la cifra meno significativa, dando come risultato un numero positivo. Vedere anche il metodo binary(), descritto sotto.

MPZType
Il tipo degli oggetti restituiti da mpz() e dalla maggior parte delle funzioni di questo modulo.

In questo modulo vengono definite svariate funzioni extra. Argomenti non mpz vengono prima convertiti in valori mpz, quindi le funzioni restituiscono numeri mpz.

powm( base, exponent, modulus)
Restituisce pow(base, exponent) % modulus. Se exponent == 0, restituisce mpz(1). A differenza della funzione della libreria C, questa versione può gestire esponenti negativi.

gcd( op1, op2)
Restituisce il massimo comun divisore tra op1 e op2.

gcdext( a, b)
Restituisce una tupla (g, s, t) tale che a*s + b*t == g == gcd(a, b).

sqrt( op)
Restituisce la radice quadrata di op. Il risultato viene arrotondato verso zero.

sqrtrem( op)
Restituisce una tupla (root, remainder), tale che root*root + remainder == op.

divm( numerator, denominator, modulus)
Restiuisce un numero q tale che q * denominator % modulus == numerator. È possibile implementare questa funzione in Python usando gcdext().

Un numero mpz possiede un solo metodo:

binary( )
Converte questo numero mpz in una stringa binaria, dove il numero viene conservato come un array di cifre con radice 256, con all'inizio la cifra meno significativa.

Il numero mpz deve avere un valore maggiore o uguale a zero, altrimenti verrà sollevata un'eccezione ValueError.

Vedete anche:

General Multiprecision Python
Questo progetto sta creando nuovi tipi numerici che supportino l'aritmetica a precisone arbitraria. I loro primi sforzi si basano anche sulla libreria GNU MP.

mxNumber -- Extended Numeric Types for Python
Un altro lavoro che ha a che fare con la libreria GNU MP, che comprende il porting di tale libreria su piattaforma Windows.
Vedete Circa questo documento... per informazioni su modifiche e suggerimenti.