In
informatica
,
NaN
e un simbolo di avvertimento indicante che il risultato di un'operazione (numerica) e stata ottenuta eseguendola su operandi non validi (specialmente in calcoli in
virgola mobile
). Il suo nome e l'acronimo di
Not a Number
(trad. "non e un numero"). Esempi sono la divisione per zero o la radice quadrata di un numero negativo, a cui le
FPU
assegnano come risultato "NaN".
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 e un esempio (in real*4):
x11111111axxxxxxxxxxxxxxxxxxxxxx
Per il primo bit (che rappresenta il segno) non e previsto il valore. Se a=1 il numero e 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 e considerato diverso da qualunque numero, compreso se stesso: questo permette di verificare se il contenuto di una
variabile
e un NaN confrontandola con se stessa (x ≠ x implica che x e un NaN).
Nello
standard corrente
, ogni operazione eseguita su un NaN da 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 piu grande e piu piccolo tra due operandi) danno preferenza ai numeri sugli NaN (cio risulta utile nel caso di calcoli statistici su dati sparsi).
- ^
AIX XL FORTRAN Compiler/6000 User's Guide
.