2015-08-01 26 views
5

wiem jak impelment pow (double x, int y)jak zaimplementować pow (podwójne x, podwójne y)?

public class Solution { 
    public double myPow(double x, int n) { 
     if (n == 0) 
      return 1; 

     if (n % 2 == 0) { 
      return myPow(x * x, n/2); 
     } else { 
      if (n > 0) 
       return x * myPow(x, n - 1); 
      else 
       return 1/x * myPow(x, n + 1); 
     } 
    } 
} 

Ale jak go obsłużyć podwójne Y?

+0

ah, przepraszam, skopiowałem zły kawałek kodu. Poprawione teraz. – BufBills

+0

Kiedyś miałem całą bibliotekę, która wykonywałaby takie obliczenia w oparciu o rozbudowę seryjną, muszę sprawdzić, czy nadal ją mam. – redxef

+8

To naprawdę nie jest problem programowania. To (twardy) problem matematyczny. Możesz go uprościć, jeśli wiesz, że (dla x, y> 0), x^y jest równe exp (y log x), ale to naprawdę nie rozwiązuje problemu, ponieważ musisz wiedzieć jak zaprogramować exp i log. –

Odpowiedz

-2

Jeśli dobrze pamiętam, musisz napisać rozszerzenie serii dla log (logarytm naturalny) i exp (wykładnik).
Od
log (x^y) = y * log (x) i
exp (log (x)) = x
możesz ocenić wynik. Myślę, że użyłem do tego serii Taylora.
wikipedia

+0

to nie działa dla ujemnego x. potrzebowałby biblioteki złożonych liczb, aby poradzić sobie z gałęziami ln dla negatywnych wejść –

+0

Załaduję mój projekt do [Github] (github.com) to również obsługuje (mniej więcej) liczby zespolone. – redxef