2011-10-23 16 views
7

¿Hay alguna manera de calcular la enésima raíz de un doble en objetivo-c?Calcular nth root?

Parece que no encuentro una función adecuada.

Respuesta

15

usted tiene que utilizar la función pow:

pow(d, 1.0/n) 

enter image description here

+3

Podría ser conveniente utilizar un flotador explícita aquí 'pow (d, 1,0/n)', ya que de lo contrario no funcionará con n como un entero. – joerick

+1

buena observación – fceruti

+0

Esto no funcionará para las raíces impares (por ejemplo, cúbicas) y los valores negativos. Consulte mi respuesta a continuación. –

3

Matemáticamente, la raíz n-ésima de x es x a la potencia de 1/n.

No tengo idea de cuál sería la sintaxis de objetivo-c, pero básicamente solo quieres usar la función de potencia con 1/n como exponente.

1

Para raíces impares (por ejemplo cúbico) y los números negativos, el resultado de la raíz está bien definido y negativa, pero sólo usando pow(value, 1.0/n) no funcionará (devuelve 'NaN' - no es un número).

lo tanto, utilizar esto en su lugar:

int f = (value < 0 && (n % 2 == 1)) ? -1 : 1; 
root = pow(value * f, 1.0/n) * f