2

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

我正在尝试使用 Deluge (zoho.com) 解决这些限制的几个问题。我必须实现有理(分数)基数和指数的幂运算。

4

2 回答 2

3

说你要计算pow(A, B)

考虑以B2 为底的表示:

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]可以是01并且pow(2, y)是 2 的整数幂(即 , 1, 2, 4, 1/2, 1/41/8

然后,

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

因此pow(A, B)可以仅使用乘法和平方根运算来计算

于 2010-12-14T14:17:41.833 回答
1

如果您有一个执行 e^x 的函数 F(),其中 e 是常数,x 是任意数字,那么您可以这样做:(a 是底数,b 是指数,ln 是 log-e)

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

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

于 2010-12-14T14:07:16.327 回答