Java中的第n个快速根

时间:2017-03-08 14:35:19

标签: java math numerical-methods

在我的Java程序中,我必须经常计算 a ^ b ,其中a≥00≤b<1。 1 。我对Math.pow(a, b)的速度不满意。是否有任何算法可能比Math.pow更快(以某种精确度为代价)?

2 个答案:

答案 0 :(得分:4)

您需要精确的结果,还是只需要近似值?

如果有一个确切的结果:这很难。

如果您只想要近似值:尝试使用第N个根算法进行修正点迭代as described on wikipedia

然后,您可以 waste 使用尽可能多的时钟周期进行您的nth-root近似,如您认为适合您的应用程序。

但我想Math.pow已经为你做了。如果你想更快地完成它,你必须投入一些繁重的工作。即使在C语言中(我知道比Java更好)我认为编写真正非常快速的变种修复点迭代并不是最简单的任务(如果我一直在进行第n次根计算,他们是绝对的瓶颈,我会求助于多线程,如果可能的话,使用SIMD / AVX指令做很多工作 - 甚至是OpenCL / CUDA。

答案 1 :(得分:1)

我认为很难找到比Java中的标准数学库更好的数学优化库。

也许您应该查看可以在算法中执行的其他优化,例如缓存频繁值,以便可以重复使用它们而不是再次计算,从而减少计算次数。

如果它的任务非常重要,那么你应该考虑另一种可能比Java执行时间更快或可以更有效地执行电源操作的语言。

即使进行的实验是在Df <- dbGetQuery(con, "SELECT * FROM EMP WHERE ename like '%raju%'") 完成的,这也许会很有趣 What is more efficient? Using pow to square or just multiply it with itself?

相关问题