Math 如何实现没有n次根的有理数的幂运算?

Math 如何实现没有n次根的有理数的幂运算?,math,exponentiation,zoho,Math,Exponentiation,Zoho,它仅适用于log(以“e”为基数)、sin、tan和sqrt(仅平方根)函数以及基本算术运算符(+-*/mod)。我还有“e”常数 我正在用Florge(zoho.com)试验这些限制的几个问题。我必须实现有理(分数)基和指数的幂运算。如果你有一个函数F()做e^x,其中e是常数,x是任意数,那么你可以这样做:(a是基,b是指数,ln是log-e) a^b=F(b*ln(a)) 如果没有做e^x的F(),那么它会变得更复杂。如果你的指数(b)是有理的,那么你应该能够找到整数m和n,这样b=m/n

它仅适用于log(以“e”为基数)、sin、tan和sqrt(仅平方根)函数以及基本算术运算符(+-*/mod)。我还有“e”常数

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

如果你有一个函数F()做e^x,其中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。

假设你想计算
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
4
1/2
1/4
1/8

那么


因此,
pow(A,B)
只能用乘法和平方根运算来计算

你自己对另一个问题的回答是“e^(Log(number)/index)”。所以“e^(Log(number)*exponent)”有什么问题?prbolem的可能重复之处在于我发现我不能使用e^,因为洪水没有exp(e^)函数。所以,我不能执行这个算法。你可以用泰勒级数来计算e^x,尽管你的分数可能会爆炸。a^m/a^n=a^(m-n),而不是a^(m/n)。你是对的。不幸的是,我没有一个F()函数(比如exp())来为我完成这项艰巨的工作。如果是这样的话,我应该用n次方根公式来解决这个问题。你能给我举个例子说明解决这个问题的方法吗?如果我理解的话,我不是舒尔。supose5^(0,5):它的等价物5^(1/2)=>5/25=>0.2。但正确答案是2.2360。谢谢这假设B是一个二元有理数,或者它使用二元有理数的近似值足够精确。如果B被表示为一对有序整数(例如,(1,3)表示1/3),这可能不合适。@Josephine:IMO,在编程环境中,这是一个可以接受的假设,因为它是计算机内部表示数字的方式。如果OP想要支持其他类型的数字,他应该明确表示。
pow(A, B) = pow(A, sum(b[i] * pow(2, i)) = mul(pow(A, b[i] * pow(2, i)))