Vai al contenuto

NaN

Da Wikipedia, l'enciclopedia libera.

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).

  1. ^ AIX XL FORTRAN Compiler/6000 User's Guide.

Voci correlate

[modifica | modifica wikitesto]

Collegamenti esterni

[modifica | modifica wikitesto]
  Portale Informatica: accedi alle voci di Wikipedia che trattano di informatica