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
codice:
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;
codice:
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?