Qualcuno dovrebbe conoscere il metodo per verificare se un doppio (o un intero) è infinito, ad esempio quando viene eseguita l'operazione 1/0?Controlla per inf - obiettivo c
isfinite (n) non sembra funzionare.
Qualcuno dovrebbe conoscere il metodo per verificare se un doppio (o un intero) è infinito, ad esempio quando viene eseguita l'operazione 1/0?Controlla per inf - obiettivo c
isfinite (n) non sembra funzionare.
Check
if(d == INFINITY) {}
o
if(d > DBL_MAX) {}
INFINITY
è un'espressione decimale costante definita math.h
rappresenta l'infinito positivo;
DBL_MAX
è una costante definita in float.h
che rappresenta il doppio più grande che può essere rappresentato.
Verifica anche here
<math.h> ha una macro, isinf
, definito per controllare la dimensione del suo argomento e quindi chiamare la funzione appropriata __isinf
al tipo:
#define isinf(x) \
( sizeof (x) == sizeof(float) ? __isinff((float)(x)) \
: sizeof (x) == sizeof(double) ? __isinfd((double)(x)) \
: __isinf ((long double)(x)))
La macro è lo stesso in architecture/i386/math.h e architecture/arm/math.h; le implementazioni delle funzioni stesse presumibilmente differiscono.
Ciò restituirà vero per infinito negativo così come positiva, se vi capita di incontrare una cosa del genere:
2011-10-26 18: 41: 53,424 ToInfinityEtc [30197: 903] Si Certamente!
2011-10-26 18: 41: 53.426 ToInfinityEtc [30197: 903] Scommetto!
ma isinf è solo per il compilatore GNU. non compatibile con llvm. xcode dice "uso dell'identificatore undeclerated isinf" anche se flag + click naviga in cmath. Ho importato math.h manualmente. ma continua a navigare in cmath e yes non può compilare a causa di questo errore "uso di identificatore non cifrato isinf". alla fine ho sostituito std :: isinf invece di isinf ora compilato. –
math.h e 'isinf()' [fanno entrambi parte dello standard POSIX] (http://pubs.opengroup.org/onlinepubs/9699919799/basedefs/math.h.html), @N.Ramos. Non hanno nulla a che fare con GCC. Hai un altro problema da qualche parte. –
Un numero intero non può essere infinito. –
Potresti testare 'x * 2 == x && x! = 0' o qualcosa del genere ... Per NaN puoi testare' x! = X'. –
Puoi chiarire cosa intendi con "' isfinite() 'non sembra funzionare."? –