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: