Алгоритм решения десятичных показателей без дробей - PullRequest
0 голосов
/ 26 марта 2012

Может ли кто-нибудь объяснить шаги, связанные с решением чего-то вроде 2 ^ 2.2, если дроби не могут быть использованы, например, при вычислении с бесконечной точностью?

Ответы [ 2 ]

2 голосов
/ 26 марта 2012

В общем случае a^b, где ^ - возведение в степень (не XOR), а a и b - действительные числа:

pow(a,b) = exp( b * log(a) ) 
exp(x)   = sum[n = 0->inf]  x^n / n!
ln(x)    = sum[n = 1->inf]  (x-1)^n / n
x^n      = n == 0  ? 1   // unless x == 0
          (n%2==0) ? x^(n/2) * x^(n/2) 
          othewrwise x*x^(n-1)  
          // faster than loop for large n, 

Это требует двух серий, которые необходимо завершить при определенномточность, но возведение в степень только с натуральными числами.

Вам также приходится иметь дело со знаками a и b (a^-b = 1/(a^b)), нулевыми значениями и т. Д.

0 голосов
/ 26 марта 2012

Типичная реализация pow(x,y) (т.е. x^y) включает в себя вычисления exp(y*log(x)). Фракции не включены.

...