如何实现无n次方有理数的幂运算?
它对我来说只有 log(base "e")、sin、tan 和 sqrt(仅平方根)函数和基本算术运算符 (+ - * / mod)。我还有“e”常数。
我正在尝试使用 Deluge (zoho.com) 来解决这些限制的几个问题。我必须实现有理(分数)底数和指数的幂运算。
Its available for me only log(base "e"), sin, tan and sqrt (only square root) functions and the basic arithmetical operators (+ - * / mod). I have also the "e" constant.
I'm experimenting several problems with Deluge (zoho.com) for these restrictions. I must implement exponentiation of rational (fraction) bases and exponents.
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
假设您要计算
pow(A, B)
考虑以 2 为基数的
B
表示形式:其中
b[x]
可以是0
或1
且pow(2, y)
是 2 的整数幂(即1
,2
、4
、1/2
、1/4
、1/8
)。然后,
因此可以仅使用乘法和平方根运算来计算
pow(A, B)
Say you want to calculate
pow(A, B)
Consider the representation of
B
in base 2:where
b[x]
can be0
or1
andpow(2, y)
is an integer power of two (i.e.,1
,2
,4
,1/2
,1/4
,1/8
).Then,
And so
pow(A, B)
can be calculated using only multiplications and square root operations如果你有一个执行 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。
If you have a function F() that does e^x, where e is the constant, and x is any number, then you can do this: (a is base, b is exponent, ln is log-e)
a^b = F(b * ln(a))
If you don't have F() that does e^x, then it gets trickier. If your exponent (b) is rational, then you should be able to find integers m and n so that b = m/n, using a loop of some sort. Once you have m and n, you make another loop which multiples a by itself m times to get a^m, then multiples a by itself n times to get a^n, then divide a^m/a^n to get a^(m/n), which is a^b.