它仅供我使用log(base“e”),sin,tan和sqrt(只有平方根)函数和基本算术运算符(+ - * / mod)。我也有“e”常数。
我正在试验Deluge(zoho.com)的这些限制的几个问题。我必须实现理性(分数)基数和指数的取幂。
答案 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]
可以是0
或1
,pow(2, y)
是2的整数幂(即1
,2
,{ {1}},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)))
只能使用乘法和平方根运算来计算
答案 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。