В общем случае 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)
), нулевыми значениями и т. Д.