index | project | pods | responsabili |
NOMEperlnumber - semantiche dei numeri ed operazioni numeriche in Perl
SINOSSI$n = 1234; # intero decimale $n = 0b1110011; # intero binario $n = 01234; # intero ottale $n = 0x1234; # intero esadecimale $n = 12.34e-56; # notazione esponenziale $n = "-12.34e56"; # numero specificato come stringa $n = "1234"; # numero specificato come stringa $n = v49.50.51.52; # numero specificato come stringa, che a sua # volta E<egrave> specifica in termini numerici [NdT]
DESCRIZIONEQuesto documento descrive come il Perl gestisce i valori numerici internamente. In questa sede l'infrastruttura atta all'overloading degli operatori viene completamente ignorata. L'overloading degli operatori consente di creare comportamenti definiti dall'utente per i numeri, come operazioni su interi arbitrariamente larghi e su numeri in virgola mobile con precisione arbitraria, operazioni su numeri ``esotici'' come aritmetica modulare, aritmetica p-adica, e via dicendo. Per maggiori dettagli consultate overload.
Memorizzare i numeriPerl può rappresentare internamenti i numeri in 3 modi diversi: come
interi nativi, come numeri in virgola mobile nativi, e come stringhe
decimali. Le stringhe decimali possono avere una parte in notazione
esponenziale, come in Il termine ``nativo'' non significa molto quando si parla di interi nativi, mentre lo è quando sono convolti i numeri in virgola mobile nativi. La sola implicazione del termine ``nativo'' sugli interi è che i limiti per i veri valori interi massimi e minimi supportati, sono vicini alle potenze di 2. Invece, i numeri in virgola mobile ``nativi'' hanno una fondamentale restrizione: possono rappresentare solo quei numeri che, quando vengono convertiti in una frazione binaria, hanno una rappresentazione relativamente ``corta''. Per esempio, 0.9 non può essere rappresentato con un numero in virgola mobile nativo, poiché la frazione binaria per 0.9 è infinita: binary0.1110011001100... con la sequenza Allo stesso modo, le stringhe decimali possono rappresentare solo numeri con un'espansione decimale finita. Siccome si tratta di stringhe, e dunque di lunghezza arbitraria, non c'è praticamente un limite per l'esponente o per il numero di cifre decimali per questi numeri. (Ma tenete conto che ciò che stiamo discutendo sono le regole per la sola memorizzazione di questi numeri. Il fatto che si possano memorizzare numeri così ``grossi'' non implica che le operazioni su questi numeri useranno tutte le loro cifre significative. Per i dettagli consultate Operatori numerici e conversioni numeriche). Difatti, i numeri memorizzati come interi nativi possono essere memorizzati sia nella forma nativa con segno, o nella forma nativa senza segno. Dunque, i limiti del Perl per i numeri memorizzati come interi nativi sono generalmente -2**31..2**32-1, con le opportune variazioni nel caso di interi a 64 bit. Ancora, questo non significa che Perl possa effettuare operazioni solo su interi compresi in questo intervallo: è possibile memorizzare molti più interi nel formato a virgola mobile. Riassumento, il valori numerici del Perl possono memorizzare solo i numeri che hanno un'espansione decimale finita, o un'espansione binaria ``corta''.
Operatori numerici e conversioni numericheCome accennato in precedenza, Perl può memorizzare un numero in uno qualasisi dei tre formati, ma la maggior parte degli operatori solitamente capiscono solo uno dei tre. Quando un valore numerico è passato come argomento a tali operatori, viene convertito nel formato che l'operatore capisce. Sono possibili sei conversioni: intero nativo --> virgola mobile nativo (*) intero nativo --> stringa decimale floating point nativo --> intero nativo (*) floating point nativo --> stringa decimale (*) stringa decimale --> intero nativo stringa decimale --> virgola mobile nativo (*) Queste conversioni sono disciplinate dalle seguenti regole generali:
RESTRIZIONE: Le conversioni sopra contrassegnate con
Varietà delle operazioni numeriche in PerlLe operazioni in Perl che prendono un argomento numerico trattano tale argomento in uno di quattro modi diversi: possono forzarli in uno dei formati interi/floating/di stringa, oppure possono comportarsi in maniera diversa a seconda del formato dell'operando. Forzare un valore numerico in un formato particolare non cambia il numero memorizzato nel valore. Tutti gli operatori che hanno bisogno di un argomento nel formato intero trattano l'argomento come
nell'aritmetica modulare, ad esempio
AUTOREIlya Zakharevich Modifiche editoriali di Gurusamy Sarathy <gsar@ActiveState.com> Aggiornamenti per la versione 5.8.0 di Nicholas Clark <nick@ccl4.org>
SI VEDA ANCHEoverload, perlop
TRADUZIONE
VersioneLa versione su cui si basa questa traduzione è ottenibile con: perl -MPOD2::IT -e print_pod perlnumber Per maggiori informazioni sul progetto di traduzione in italiano si veda http://pod2it.sourceforge.net/ .
TraduttoreTraduzione a cura di Michele Beltrame e dree.
RevisoreRevisione a cura di dree. Mon Jun 11 22:02:17 2012 |