Chiedo consiglio a chi è certamente più esperto di me per migliorare il codice di questa a funzione rendendola il più possibile effeciente in quanto mi ritrovo a doverla richiamare milioni di volte (quindi volendo se ci sono suggerimenti per migliorare anche sotto questo aspetto sono ben accetti). La funzione è la seguente:
codice:
#define PI 3.1415926535898
#define PI_2 1.5707963267949
void distance( complex <double> &Z, double &Z_dist, const complex <double> &D )
{
double theta = 0;
if( !Z.real() )
{
if( Z.imag() > 0 )
theta += PI_2;
else
theta -= PI_2;
}
else if( Z.real() < 0 )
theta += atan( Z.imag() / Z.real() ) + PI;
else
theta += atan( Z.imag() / Z.real() ) + 2*PI;
double temp = pow(Z_dist, exponent);
Z = complex <double> ( temp * cos(theta*exponent) + D.real(),
temp * sin(theta*exponent) + D.imag() );
Z_dist = sqrt( Z.real()*Z.real() + Z.imag()*Z.imag() );
}
Sostituire gli oggetti complex con delle apposite strutture può essere un'idea, ma quanto effettivamente renderebbe più efficiente la funzione? E a discapito di cosa?
Grazie.