我有一种情况,我需要计算 x^ya 很多次,其中 y 是一个常数,并且 x 保证是一个有效数字。
如何比 Pow(double x, double y) 更有效地执行各种检查和评估?
我希望预先计算 y 变换。
编辑
两者都是实数。x = 0 ... 4,000,000,000。
我有一种情况,我需要计算 x^ya 很多次,其中 y 是一个常数,并且 x 保证是一个有效数字。
如何比 Pow(double x, double y) 更有效地执行各种检查和评估?
我希望预先计算 y 变换。
编辑
两者都是实数。x = 0 ... 4,000,000,000。
记住这个等式:
x^y = exp(y * ln(x))
所以你可以跳过Pow
并使用exp
and ln
。
你不能。虽然 y 是一个常数,但 x 是一个变量,所以你无能为力。不过我不会担心的。pow() 方法得到了很好的优化。
您唯一能做的就是预先计算许多不同 x 的值,并将它们保存在字典中,除非它们变得非常大。
java中没有更快的方法,因为它不支持向量操作,或者至少很难优化代码以使用它们,因为没有好的并行注释。
您可能应该尝试使用本机库并使用 JNI 调用它。
如果您知道y
,也许您可以将其分解为较小数字的乘法,并计算幂的幂。例如,如果y = 6
你能做到
y = 2 * 3
power = pow( pow(x, 3), 2)
不过不知道会不会更快。