我的程序用来Math.pow()
计算一个相对较大的双数的 2 次方。稍后我需要找到一个非常大的双数的平方根。问题是,我必须这样做超过 100,000 次,而且需要很长时间。有没有其他方法可以加快这个过程?谢谢
编辑:我的意思是在 1000 到 10000 之间(所以在计算方面可能没有那么大)。而就耗时而言,完成500次功能大约需要30秒
我的程序用来Math.pow()
计算一个相对较大的双数的 2 次方。稍后我需要找到一个非常大的双数的平方根。问题是,我必须这样做超过 100,000 次,而且需要很长时间。有没有其他方法可以加快这个过程?谢谢
编辑:我的意思是在 1000 到 10000 之间(所以在计算方面可能没有那么大)。而就耗时而言,完成500次功能大约需要30秒
您不太可能找到比 Java Math 更好(更快)的实现。尝试改变算法中的计算方式可能会更幸运。例如,有什么方法可以避免找到一个大数的平方根?
如果这不起作用,您可以尝试用一种更合适的语言来实现它,这种语言用于快速数学计算(比如 Matlab)。
否则,您可以尝试在其他方面进行优化。如果以后有用,也许您可以尝试缓存过去的结果。
“2 的幂”是平方。你最好通过将数字乘以自身来做到这一点。
的库版本sqrt
可能比您在其他地方挖掘的任何东西都快。如果你调用一个 C 例程,你只会增加跨语言调用的开销。但是您是否需要精确的平方根,或者近似值的表格查找需要吗?这些值是否重复很多,即您是否经常需要计算相同数字的根?如果是这样,在 a 中缓存平方根HashMap
可能比计算它们更快。
那么你的2的幂的问题可以简单地通过将数字乘以自身来完成。例如,假设变量 a 是您想要提高到 2 的数字。它与以下内容相同:
int a=5;
int b=a*a;
我唯一能想到的就是存储结果以提高速度,平方根不会改变,而且大约 9000 个存储的数字并不多。您可能会很好地构建您的数据,这样您就可以确保您可以最佳地搜索适当的结果。
您可以使用 x*x 代替 pow(x, 2)。
对于平方根,你应该先看看 sqrt 的实现(近似方法)。
也许您可以找到更好的方法,例如牛顿法(在方程 sqrt(N)-x=0 上)。
它还取决于所需的准确性,您可以交易准确性与时间。
您还可以存储结果以避免对同一条目进行多次计算。