Successivo: Impostare modo di arrotondare, Precedente: Tentare di arrotondare, Su: Cautela col calcolo in VM [Contenuti][Indice]
gawk
usa una precisione di lavoro a livello globale; non tiene
traccia della precisione e accuratezza dei singoli numeri. Eseguendo
un’operazione aritmetica o chiamando una funzione predefinita, il risultato
viene arrotondato alla precisione di lavoro. La precisione di lavoro di default
è di 53 bit, modificabile usando la variabile predefinita PREC
. Si può
anche impostare il valore a una delle stringhe predefinite (non importa se
scritte in maiuscolo o minuscolo) elencate in
Tabella 16.4,
per emulare un formato binario che segue lo standard IEEE 754.
PREC | formato binario IEEE 754 |
---|---|
"half" | 16-bit mezza precisione |
"single" | 32-bit singole precisione di base |
"double" | 64-bit doppia precisione di base |
"quad" | 128-bit quadrupla precisione di base |
"oct" | 256-bit ottupla precisione |
Il seguente esempio illustra gli effetti del cambiamento di precisione sulle operazioni aritmetiche:
$ gawk -M -v PREC=100 'BEGIN { x = 1.0e-400; print x + 0 > PREC = "double"; print x + 0 }' -| 1e-400 -| 0
ATTENZIONE: Diffidare delle costanti in virgola mobile! Quando si legge una costante in virgola mobile dal codice sorgente di un programma,
gawk
usa la precisione di default (quella del formatodouble
di C), a meno che non venga richiesto, tramite la variabile specialePREC
fornita sulla riga di comando, di memorizzarla internamente come un numero MPFR. Cambiare la precisione tramitePREC
nel testo del programma non cambia la precisione di una costante.Se si deve rappresentare una costante in virgola mobile con una precisione maggiore di quella di default e non è possibile usare un assegnamento a
PREC
da riga di comando, si dovrebbe definire la costante o come stringa, o come numero razionale, ove possibile. L’esempio seguente illustra le differenze tra i diversi modi di stampare una costante in virgola mobile:$ gawk -M 'BEGIN { PREC = 113; printf("%0.25f\n", 0.1) }' -| 0.1000000000000000055511151 $ gawk -M -v PREC=113 'BEGIN { printf("%0.25f\n", 0.1) }' -| 0.1000000000000000000000000 $ gawk -M 'BEGIN { PREC = 113; printf("%0.25f\n", "0.1") }' -| 0.1000000000000000000000000 $ gawk -M 'BEGIN { PREC = 113; printf("%0.25f\n", 1/10) }' -| 0.1000000000000000000000000
Successivo: Impostare modo di arrotondare, Precedente: Tentare di arrotondare, Su: Cautela col calcolo in VM [Contenuti][Indice]