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