Successivo: , Precedente: , Su: Calcolo con precisione arbitraria   [Contenuti][Indice]


16.7 Confronto tra standard e uso corrente

Per diverso tempo, awk ha convertito le stringhe dall’aspetto non numerico nel valore numerico zero, quando richiesto. Per di più, la definizione originaria del linguaggio e lo standard POSIX originale prevedevano che awk riconoscesse solo i numeri decimali (base 10), e non i numeri ottali (base 8) o esadecimali (base 16).

Le modifiche nel linguaggio degli standard POSIX 2001 e 2004 possono essere interpretate nel senso che awk debba fornire delle funzionalità aggiuntive. Queste sono:

Il primo problema è che entrambe le modifiche sono deviazioni evidenti dalla prassi consolidata:

Il secondo problema è che il manutentore di gawk crede che questa interpretazione dello standard, che richiede una certa dimestichezza col linguaggio giuridico per essere compresa, non sempre è stata colta dai normali sviluppatori. In altre parole, “Sappiamo come siete arrivati sin qui, ma non pensiamo che questo sia il posto dove volete essere.”

Recependo queste argomentazioni, e cercando nel contempo di assicurare la compatibilità con le versioni precedenti dello standard, lo standard POSIX 2008 ha aggiunto delle formulazioni esplicite per consentire l’uso da parte di awk, solo a richiesta, dei valori in virgola mobile esadecimali e dei valori speciali “not a number” e infinito.

Sebbene il manutentore di gawk continui a credere che introdurre queste funzionalità sia sconsigliabile, ciò nonostante, sui sistemi che supportano i valori in virgola mobile IEEE, sembra giusto fornire qualche possibilità di usare i valori NaN e infinito. La soluzione implementata in gawk è questa:

Oltre a gestire l’input, gawk deve anche stampare valori “corretti” in output, quando un valore sia NaN o infinito. A partire dalla versione 4.2.2, per tali valori gawk stampa una delle quattro stringhe sopra descritte: ‘+inf’, ‘-inf’, ‘+nan’, or ‘-nan’. Analogamente,se usato in modalità POSIX, gawk stampa il risultato della funzione C di sistema printf() usando la stringa di formato %g per il valore, quale che esso sia.


Note a piè di pagina

(107)

L’avete voluto, tenetevelo.


Successivo: , Precedente: , Su: Calcolo con precisione arbitraria   [Contenuti][Indice]