1

我有一种情况,我需要计算 x^ya 很多次,其中 y 是一个常数,并且 x 保证是一个有效数字。

如何比 Pow(double x, double y) 更有效地执行各种检查和评估?

我希望预先计算 y 变换。

编辑

两者都是实数。x = 0 ... 4,000,000,000。

4

4 回答 4

3

记住这个等式:

x^y = exp(y * ln(x))

所以你可以跳过Pow并使用expand ln

于 2012-10-23T21:12:44.443 回答
3

你不能。虽然 y 是一个常数,但 x 是一个变量,所以你无能为力。不过我不会担心的。pow() 方法得到了很好的优化。

您唯一能做的就是预先计算许多不同 x 的值,并将它们保存在字典中,除非它们变得非常大。

于 2012-10-23T21:12:58.697 回答
1

java中没有更快的方法,因为它不支持向量操作,或者至少很难优化代码以使用它们,因为没有好的并行注释。

您可能应该尝试使用本机库并使用 JNI 调用它。

于 2012-10-24T06:56:30.583 回答
0

如果您知道y,也许您可​​以将其分解为较小数字的乘法,并计算幂的幂。例如,如果y = 6你能做到

y = 2 * 3
power = pow( pow(x, 3), 2)

不过不知道会不会更快。

于 2012-10-23T21:17:37.630 回答