如何在没有第n个根的情况下实现有理数的取幂?

时间:2010-12-14 13:46:43

标签: math exponentiation zoho

它仅供我使用log(base“e”),sin,tan和sqrt(只有平方根)函数和基本算术运算符(+ - * / mod)。我也有“e”常数。

我正在试验Deluge(zoho.com)的这些限制的几个问题。我必须实现理性(分数)基数和指数的取幂。

2 个答案:

答案 0 :(得分:3)

假设您要计算pow(A, B)

考虑基数2中B的表示:

B = b[n]   * pow(2, n    ) +
    b[n-1] * pow(2, n - 1) +
    ...
    b[2]   * pow(2, 2    ) +
    b[1]   * pow(2, 1    ) +
    b[0]   * pow(2, 0    ) +
    b[-1]  * pow(2, -1   ) +
    b[-2]  * pow(2, -2   ) +
    ...

 = sum(b[i] * pow(2, i))

其中b[x]可以是01pow(2, y)是2的整数幂(即12,{ {1}},41/21/4)。

然后,

1/8

所以pow(A, B) = pow(A, sum(b[i] * pow(2, i)) = mul(pow(A, b[i] * pow(2, i))) 只能使用乘法和平方根运算来计算

答案 1 :(得分:1)

如果你有一个函数F()做e ^ x,其中e是常量,x是任意数,那么你可以这样做:(a是base,b是指数,ln是log-e)

a ^ b = F(b * ln(a))

如果你没有F()做e ^ x,那么它会变得更加棘手。如果你的指数(b)是合理的,那么你应该能够找到整数m和n,使得b = m / n,使用某种循环。一旦你有m和n,你做另一个循环,它自己乘以m次得到一个^ m,然后将a乘以n次得到一个^ n,然后除以^ m / a ^ n得到一个^ (m / n),这是一个^ b。