它仅对我可用 log(base "e")、sin、tan 和 sqrt(仅平方根)函数和基本算术运算符 (+ - * / mod)。我也有“e”常数。
我正在尝试使用 Deluge (zoho.com) 解决这些限制的几个问题。我必须实现有理(分数)基数和指数的幂运算。
它仅对我可用 log(base "e")、sin、tan 和 sqrt(仅平方根)函数和基本算术运算符 (+ - * / mod)。我也有“e”常数。
我正在尝试使用 Deluge (zoho.com) 解决这些限制的几个问题。我必须实现有理(分数)基数和指数的幂运算。
说你要计算pow(A, B)
考虑以B
2 为底的表示:
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]
可以是0
或1
并且pow(2, y)
是 2 的整数幂(即 , 1
, 2
, 4
, 1/2
, 1/4
)1/8
。
然后,
pow(A, B) = pow(A, sum(b[i] * pow(2, i)) = mul(pow(A, b[i] * pow(2, i)))
因此pow(A, B)
可以仅使用乘法和平方根运算来计算
如果您有一个执行 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。