NaN
In informatica, NaN è un simbolo di avvertimento indicante che il risultato di un'operazione (numerica) è stata ottenuta eseguendola su operandi non validi (specialmente in calcoli in virgola mobile). Il suo nome è l'acronimo di Not a Number (trad. "non è un numero"). Esempi sono la divisione per zero o la radice quadrata di un numero negativo, a cui le FPU assegnano come risultato "NaN".
NaN e virgola mobile
[modifica | modifica wikitesto]Nel calcolo in virgola mobile "NaN" e "infinito" non sono la stessa cosa, anche se in questo contesto vengono gestiti entrambi come casi particolari nella rappresentazione dei numeri reali e nelle operazioni. Un'operazione non valida si differenzia inoltre sia dall'overflow che dall'underflow aritmetico (i quali danno come risultato rispettivamente un infinito e un numero denormalizzato o uno zero).
Nello standard per il calcolo in virgola mobile IEEE 754 i NaN sono rappresentati con il campo dell'esponente riempito di "1" e un numero diverso da zero nel campo della mantissa (il campo zero corrisponde ad infinito). Questo è un esempio (in real*4):
x11111111axxxxxxxxxxxxxxxxxxxxxx
Per il primo bit (che rappresenta il segno) non è previsto il valore. Se a=1 il numero è un quiet NaN ("NaN silenzioso"), mentre se a=0 si ha un signalling NaN ("NaN segnalatore"). I primi possono essere il risultato di operazioni aritmetiche, i secondi no e devono essere generati assegnando la rappresentazione interna[1].
Nei test ogni NaN è considerato diverso da qualunque numero, compreso se stesso: questo permette di verificare se il contenuto di una variabile è un NaN confrontandola con se stessa (x ≠ x implica che x è un NaN).
Nello standard corrente, ogni operazione eseguita su un NaN dà come risultato un altro NaN, inficiando tutta una serie di calcoli in caso di un errore a monte che dia questo risultato. Nella revisione (attualmente proposta) IEEE 754r, ci sono due eccezioni: le funzioni maxnum e minimum (che restituiscono il numero rispettivamente più grande e più piccolo tra due operandi) danno preferenza ai numeri sugli NaN (ciò risulta utile nel caso di calcoli statistici su dati sparsi).
Note
[modifica | modifica wikitesto]- ^ AIX XL FORTRAN Compiler/6000 User's Guide.
Voci correlate
[modifica | modifica wikitesto]Collegamenti esterni
[modifica | modifica wikitesto]- (EN) Eric W. Weisstein, NaN, su MathWorld, Wolfram Research.
- (EN) Denis Howe, Not-a-Number, in Free On-line Dictionary of Computing. Disponibile con licenza GFDL
- (EN) Infinity and NaN dal manuale della GNU C Library
- (EN) Not-a-Number dal manuale di MATLAB