它仅适用于我的log(基本“ e”),sin,tan和sqrt(仅平方根)函数和基本算术运算符(+ - * / mod)。我也有“ E”常数。

我正在尝试使用洪水(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 或者 1pow(2, y) 是两个的整数力量(即 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) 可以仅使用乘法和平方根操作来计算

其他提示

如果您的功能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,您就会制作另一个循环,该循环本身会乘以M次获得A^M,然后将A本身乘以A n次获得A^n,然后将A^m/a^n分开以获取A^ (m/n),是a^b。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top