PDA

Visualizza la versione completa : [C++] funzione sin() torna un risultato>1


MegaAlchimista
12-07-2012, 21:00
Salve a tutti ho trovato un problema che mi sta mandando in pappa, sto cercando errori simili da una buona oretta su internet ma a quanto pare nessuno ne ha scritto.
Sto scrivendo una classe che gestisca i numeri complessi e per l'esponenziale ho bisogno delle funzioni seno e coseno: questo il codice di quel metodo


Complex Complex::exponentiation(const int &exponent) const
{
//c^n = norm^n *(cos(n*fi)+ i sin(n*fi) ) <- questa la formula

//this->norm() torna la norma del numero complesso
//ovvero sqrt(reale^2 + img^2)
double normTo_n = pow(this->norm(),exponent);
double newReal = cos(exponent*this->angleRadians())*normTo_n;
//double newImg = sin(exponent*this->angleRadians())*normTo_n; //<-diventava 1.22

double a = this->angleRadians();
double fi = exponent*a;
double seno = sin(fi);
double newImg = seno*normTo_n;
double pi = (2.0*asin(1.0));
double senoDipi = sin(pi);
//<- qui ho messo lo step del debug
return Complex(newReal, newImg);
}

//newReal e newImg sono i nuovi valori da assegnare alle componenti reale ed immaginaria di Complex

So che non ho bisogno di tutte queste variabili, le ho inserite solo perch elevando (0+i) al quadrato la funzione non tornava -1+0i ma un risultato sbagliato, cos ho distinto tutte le operazioni possibili ed ho eseguito il debug, ebbenne ho scoperto che il seno di pigreco torna 1.2!!
A parte il fatto che dovrebbe tornare 0, il risultato maggiore di 1, quindi doppiamente sbagliato!
Questi sono i risultati del debug facendo entrare:
Complex c= 0+i1;
exponent = 2;


Name | Value | Type
a 1.570 double
exponent 2 int
fi 3.141 double
newImg 1.224 double
newReal -1 double
normTo_n 1 double
pi 3.141 double
seno 1.2246 double
senoDipi 1.2246 double

Non so che fare.. io non penso di aver fatto errori di sintassi, i valori calcolati sono tutti esatti [il complesso 0+i infatti ha un angolo di 90, che moltiplicato per l'esponente (2) fa 180 che in radianti piGreco (3.14)]
proprio che il sin(piGreco) torna 1.22eccetera.
Vi mai capitato?
Mi tocca riscrivere la funzione seno?
Consigli?
Magari qualcuno se lo pu incollare sul proprio compilatore e dirmi se da lo stesso risultato?

oregon
12-07-2012, 21:11
Non so come tu abbia visualizzato i valori ma il risultato corretto del seno

1.22465e-016

che molto vicino a zero, come dovrebbe essere ...

MegaAlchimista
12-07-2012, 21:17
scusate -.-' mi sono accorto solo ora che era *10^-16 chiudete pure grazie
Era impossibile che una funzione standard contenesse un errore simile :-)

Loading