-+  Associazione
-+  Documenti
 |-  Modern Perl
 |-  Bibliografia
 |-  Articoli
 |-  Talk
 |-  Perlfunc
 |-  F.A.Q.
 |-  F.A.Q. iclp
-+  Eventi
-+  Community
-+  Blog
-+  Link
Corso di Perl



 


indietro

[4] Perl ha una funzione round()? E ceil() e floor()? E le funzioni trigonometriche?

Ricordate che int() si limita a troncare verso lo 0. Per arrotondare a un qualche numero di decimali, la via più facile è di solito sprintf() o printf().

     printf("%.3f", 3.1415926535);	# stampa 3.142

Il modulo POSIX (parte della distribuzione standard di Perl) implementa ceil(), floor() e un certo numero di altre funzioni matematiche e trigonometriche.

     use POSIX;
     $ceil   = ceil(3.5);			# 4
     $floor  = floor(3.5);			# 3

Nelle versioni dalla 5.000 alla 5.003 di Perl, la trigonometria veniva fatta dal modulo Math::Complex. Con la versione 5.004, il modulo Math::Trig (parte della distribuzione standard) implementa le funzioni trigonometriche. Usa internamente il modulo Math::Complex e alcune funzioni potrebbero sfuggire dall'asse dei reali verso il piano dei complessi, ad esempio il seno inverso di 2.

L'arrotondamento può avere serie implicazioni nelle applicazioni finanziarie, e il metodo di arrotondamento usato dovrebbe essere specificato con cura. In questi casi, probabilmente è una buona idea non fidarsi del sistema usato da Perl, qualunque esso sia, ma implementare la funzione di arrotondamento per conto vostro.

Per vederne il motivo, notate come, anche con printf, resti un problema di incertezza sui valori intermedi:

     for ($i = 0; $i < 1.01; $i += 0.05) { printf "%.1f ",$i}
     0.0 0.1 0.1 0.2 0.2 0.2 0.3 0.3 0.4 0.4 0.5 0.5 0.6 0.7 0.7
     0.8 0.8 0.9 0.9 1.0 1.0

Non prendetevela con Perl. In C è lo stesso. La IEEE dice che va fatto così. In Perl, i numeri i cui valori assoluti sono interi inferiori a 2**31 (sulle macchine a 32 bit) lavorano abbastanza similmente agli interi in matematica. Per gli altri tipi di numeri non c'è garanzia.

vedi in inglese

AUTORE E COPYRIGHT

Copyright (c) 1997, 1998, 1999, 2000, 2001 Tom Christiansen e Nathan Torkington. Tutti i diritti riservati.

Questa documentazione è libera; puoi ridistribuirla e/o modificarla secondo gli stessi termini applicati al Perl.

Indipendentemente dalle modalitè di distribuzione, tutti gli esempi di codice in questo file sono rilasciati al pubblico dominio. Potete, e siete incoraggiati a farlo, utilizzare il presente codice o qualunque forma derivata da esso nei vostri programmi per divertimento o per profitto. Un semplice commento nel codice che dia riconoscimento alle FAQ sarebbe cortese ma non è obbligatorio.

D:
Progetti e documenti in rilievo
Corso di Perl Progetto pod2it
D:
La ML di Perl.it
mongers@perl.it è la lista ufficiale di Perl Mongers Italia per porre quesiti di tipo tecnico, per rimanere aggiornato su meeting, incontri, manifestazioni e novità su Perl.it.
Iscriviti!
D:
Annunci Google