2013-09-06 11 views
7

Używam poniższej metody do obliczenia Nth Root o podwójnej wartości, ale obliczenie 240. root zajmuje dużo czasu. Dowiedziałem się o metodzie Newtona, ale nie byłem w stanie wdrożyć jej w metodę z moimi ograniczonymi umiejętnościami programowania, doceniłbym każdą pomoc.C# find Nth Root

static double NthRoot(double A, int N) 
      { 
       double epsilon = 0.00001d;// 
       double n = N; 
       double x = A/n; 
       while (Math.Abs(A-Power(x,N)) > epsilon) 
       { 
        x = (1.0d/n) * ((n-1)*x + (A/(Power(x, N-1)))); 
       } 
       return x; 

      } 
+0

nie masz na to okiem? http://en.wikipedia.org/wiki/Newton%27s_method#Pseudocode nie powinno być zbyt trudne do przetłumaczenia na prawdziwy kod – DrCopyPaste

+1

Co tak naprawdę jest tutaj? Czy chcesz, żeby było szybciej? Czy wyraźnie chcesz zobaczyć, jak wyglądałaby metoda Newtona w prawdziwym kodzie? – DrCopyPaste

+0

Natknąłem się na POW, ale z jakiegoś powodu myślę, że to tak samo, jak w przypadku metody, którą napisałem powyżej. Nie jestem programistą i nie wysłałbym tutaj pytania, chyba że sam nie byłbym w stanie tego rozgryźć. Dziękujemy – illusion

Odpowiedz

27
static double NthRoot(double A, int N) 
{ 
    return Math.Pow(A, 1.0/N); 
} 

Od Wikipedia:

W rachunku, korzenie są traktowane jako szczególnych przypadkach potęgowania, gdzie wykładnik jest ułamkiem:

\sqrt[n]{x} \,=\, x^{1/n} 
+0

Ale chcę 3. root, który używa 1.0/3 == 0.333333333! = 1/3. – lindexi

+4

Arytmetyka komputerowa jest zawsze związana dokładnością podstawowego typu danych, z dokładnością do cyfr równą. –