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).
| value) |
In questo modulo vengono definite svariate funzioni extra. Argomenti non mpz vengono prima convertiti in valori mpz, quindi le funzioni restituiscono numeri mpz.
| base, exponent, modulus) |
pow(base, exponent) % modulus.
Se exponent == 0, restituisce mpz(1). A
differenza della funzione della libreria C, questa versione può
gestire esponenti negativi.
| op1, op2) |
| a, b) |
(g, s, t) tale che
a*s + b*t == g == gcd(a,
b).
| op) |
| op) |
(root, remainder), tale che
root*root + remainder == op.
| numerator, denominator, modulus) |
q * denominator % modulus == numerator.
È possibile implementare questa funzione in Python usando
gcdext().
Un numero mpz possiede un solo metodo:
| ) |
Il numero mpz deve avere un valore maggiore o uguale a zero, altrimenti verrà sollevata un'eccezione ValueError.
Vedete anche: