Newsgroup: it.comp.lang.c++
Titolo: isnan

Ciao.
Come da oggetto, come faccio a sapere se un valore e' NaN?
Uso la funzione C? (Non e' molto standard, credo).
Altro?
 bye & Thanks
	av.

 Altro?
Prova a confrontarlo con un NaN memorizzato in una variabile (creato
memorizzando 0.0/0.0 nella suddetta variabile).
Bye
Antonio

Antonio Martino wrote:

prova a guardare in:
std::numeric_limits<T> (definito in  <limits>)

 ha scritto nel messaggio
news:279Wa.31269$sj6.6...@tornado.fastwebnet.it...

mi sorge una domanda ... cosa e' un NaN ??? ... ora cerco pure con google
...
ciao

cosa e' un NaN ???
   Not a Number, e` il risultato di un operazione numerica non
definita, quale l'esempio fatto prima di 0.0/0.0
-- 
S.L.

 ha scritto nel messaggio
news:tq2jiv04d406agodf...@4ax.com...

si l'ho letto anche online ... ora pero' mi sorge ancora piu' un dubbio ...
come fai a sapere se una lettura con atoi o atof restituiscono un NaN ??? se
il valore che ritornano e' per forza un int o un double ?
cioe' io piu' o meno posso sapere se la lettura di quello che mi aspettavo
un numero se l'input richiede qualunque numero escluso lo 0, che e' il
valore che ritornano le 2 funzioni quando non sono riuscite nella
conversione ...
e quindi come viene visto questo NaN dal programma se cmq sta dentro un'area
dati da int o da double, come si differenzia da essi ???
ciao

 dati da int o da double, come si differenzia da essi ???
Sulle piattaforme che li supportano i NaN sono dei valori
float/double/long double convenzionali. Se
numeric_limits<FloatT>::has_quiet_NaN e/o
numeric_limits<FloatT>::has_signaling_NaN valgono true, puoi ottenere
il valore chiamando rispettivamente
numeric_limits<FloatT>::quiet_NaN() e/o
numeric_limits<FloatT>::signaling_NaN() .
Ciao,
Nicola

dati da int o da double, come si differenzia da essi ???
   Un NaN sta solo dentro un float, un double, ecc.
   In breve un float contenente un NaN, e` semplicemente un float con
una particolare disposizione di bit.
   Si comporta malamente pero`, da standard ogni operazione matematica
che coinvolga un NaN, deve restituire un NaN come risultato, e (x ==
x) restituisce falso, se x e` un NaN. C99 ha aggiunto un po' di macro
per la gestione di questi valori.
-- 
S.L.

 riguarda esclusivamente l'aritmetica floating point.
ok grazie per le spec ...
ma ora mi confermi che anche atoi ritorna un NaN ??? quindi la lettura la
devo fare prima su un float per testare la buona lettura e poi convertirlo
in int ???
ciao


Il fatto e' che "provando", vedo se va sulle due o tre combinazioni di
piattaforme/compilatori che ho, non ho garanzie che quanto scrivo sia
portabile.
 bye & Thanks
	av.

 numeric_limits<FloatT>::signaling_NaN() .
Gia'. Pero', se ho ben capito, numeric_limits<FloatT>::quiet_NaN() e'
utile solo per generare un NaN, non per sapere se  valore e' NaN.
Infatti a==numeric_limits<FloatT>::quiet_NaN() puo' restituire false
anche se a e' un NaN.
La spiegazione sarebbe che la rappresentazione di NaN non e' univoca,
ovvero alcuni bit sono impostati in un certo modo e gli altri sono
liberi, quindi esiste una intera classe di NaN.
 bye
	av.

 x) restituisce falso, se x e` un NaN.
Magari, la sapevo cosi' anch'io, ma x==x a volte non funziona.
Su VC++ 6.0/Windows 2000/Athlon non funziona :(
 bye
	av.