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.