2015-08-01 27 views
5

Ben pow (double x, int y) impelment bilenpow nasıl uygulanır (double x, double 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); 
     } 
    } 
} 

Ama nasıl çift y işlemek yapılır? tamsayı olmayan değerlerle

+0

ah, üzgünüm, yanlış kod parçası kopyalanmış. Şimdi düzeltildi. – BufBills

+0

Bir zamanlar seri genişlemesine dayanan bu tür hesaplamaları yapacak bir kütüphane vardı, hala sahip olup olmadığımı görmem gerekiyor. – redxef

+8

Bu gerçekten bir programlama problemi değil. Bu (zor) bir matematik problemi. (X, y> 0 için), x^y'nin exp (y log x) 'a eşit olduğunu biliyorsanız, bunu basitleştirebilirsiniz, ancak bu problemi çözmemeniz gerekir. log. –

cevap

-2

Doğru hatırlıyorsam, günlük (doğal logaritma) ve exp (üs) için bir seri genişletme yazmanız gerekir.

günlüğünden (x^y) = y * log (x) ve
exp (log (x)) = x
sonucunu değerlendirebilirsiniz. Bunun için Taylor serisini kullandım galiba.

+0

bu, olumsuz x için çalışmıyor. negatif girdiler için ln şubeleri ile ilgilenmek için karmaşık bir sayı kütüphanesine ihtiyaç duyacaktı –

+0

projemi [Github] (github.com) Bu aynı zamanda (az ya da çok) karmaşık sayıları da desteklemektedir. – redxef

İlgili konular