2011-10-23 9 views
7

Czy istnieje sposób na obliczenie n-tego pierwiastka podwójnego w celu-c?Oblicz n-ty root?

Nie mogłem znaleźć odpowiedniej funkcji.

Odpowiedz

15

Trzeba korzystać z funkcji Pow:

pow(d, 1.0/n) 

enter image description here

+3

To może być mądry, aby korzystać z wyraźną pływak tutaj 'Pow (d, 1,0/n)', ponieważ w przeciwnym razie nie będzie działać z n jako liczby całkowitej. – joerick

+1

dobra obserwacja – fceruti

+0

Nie będzie działać dla nieparzystych (np. Sześciennych) pierwiastków i wartości ujemnych - zobacz moją odpowiedź poniżej. –

3

Matematycznie n-ty pierwiastek z x jest x do potęgi 1/n.

Nie mam pojęcia, jaka byłaby składnia celu-c, ale w zasadzie po prostu chcesz użyć funkcji zasilania z 1/n jako wykładnikiem.

1

dla nieparzystych korzeni (np sześcienny) i liczby ujemne, wynik korzenia jest dobrze zdefiniowana i negatywne, ale tylko przy użyciu pow(value, 1.0/n) nie będzie działać (wrócisz "NaN" - nie numer).

Więc, użyj zamiast tego:

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