Salve,
cosa succede esattamente quando viene passato pi/2 alla funzione tan()?
Salve,
cosa succede esattamente quando viene passato pi/2 alla funzione tan()?
Otterrai NaN, dato che tan(pi/2) è +infinito.
"Let him who has understanding reckon the number of the beast, for it is a human number.
Its number is rw-rw-rw-."
si lo pensavo anche io...ma ho appena scoperto che restituisce il massimo numero rappresentabile su quel computer.
Ed effettivamente è giusto, chissà quanti bug si creerebbero se ogni volta che ti avvicini a pi/2 ti desse un NaN!
Che valore hai usato per pi?
"Let him who has understanding reckon the number of the beast, for it is a human number.
Its number is rw-rw-rw-."
NaN e +Infinity nell'IEEE 754 sono due valori ben distinti. Comunque lo standard non dice nulla di preciso in proposito, dato che consente implementazioni differenti dell'aritmetica in floating point. Tuttavia, dato che di fatto nella stragrande maggioranza dei casi si usa l'IEEE 754 (che supporta +NaN, -Nan, +Infinity, -Inifinity e un mucchio di altri valori speciali), spesso per operazioni non valide si ottengono questo genere di valori. Nota comunque che con tan(pi/2) non otterrai mai +Inf perché non è possibile rappresentare esattamente pi/2, per cui non arrivi mai al caso in cui la tangente diverge.Originariamente inviato da Ippo343
Otterrai NaN, dato che tan(pi/2) è +infinito.
Esempio rapido:
Output:codice:#include <cmath> #include <iostream> using namespace std; int main() { cout<<tan(M_PI_2)<<endl<<tan(-M_PI_2)<<endl<<sqrt(-1)<<endl<<log(0)<<endl<<log(-1)<<endl; return 0; }
I primi due valori sono perché non è esattamente +/- pi/2 ma ci è molto vicino; la radice di -1 non è rappresentabile come numero reale, per cui ottengo un NaN (not a number), negativo suppongo perché ho chiesto la radice di un numero negativo. Il logaritmo di zero tende a -infinito, che in questo caso viene riportato correttamente dato che 0 è rappresentabile esattamente con un double. Infine, il dominio della funzione logaritmo (finché si rimane nei reali) è (0, +∞ ), per cui chiedendo il logaritmo di -1 si ottiene nan. In ogni caso, questi valori sono dettagli implementativi: nello standard C99 (§7.12.1) si spiega che i valori restituiti in casi del genere dipendono dalla particolare implementazione.codice:1.63312e+16 -1.63312e+16 -nan -inf nan
Amaro C++, il gusto pieno dell'undefined behavior.
Speravo che entrassi tu nella discussione
Grazie!
"Let him who has understanding reckon the number of the beast, for it is a human number.
Its number is rw-rw-rw-."
Non c'è di che; ciao!![]()
Amaro C++, il gusto pieno dell'undefined behavior.