Pero esta función de potencia no puede hacer potencias de número negativo.
Yo una vez hice este ejemplo, un poco sucio, pero que te lo comparto para ver si te sirve:
double potencia (double base, int exp)
{
double dResult;
if ((base != 0) && (exp == 0))
dResult = 1;
else if ((base == 0) && (exp > 0))
dResult = 0;
else if ((exp < 0) && (base != 0))
dResult = 1 / potencia (base, -exp);
/* else if ((exp == 0) && (base == 0)) {
double num = numeric_limits<double>::quiet_NaN();
}*/
else {
for (dResult = 1; exp > 0; exp--)
{
dResult *= base;
}
}
return dResult;
}
En principio debería permitirte hacer potencias de base positiva y negativa, y de exponente positivo y negativo.
No sé si sirve con exponentes en fracciones.
EN el caso de la potencia indeterminada 0
0 (cero elevado a cero) aún no lo había resuelto, pero se puede utilizar una plantilla numeric_limits para invocar la función miembro estática, 'quiet_NaN()', o hacer un return 0.0 / 0.0.