8

我的程序用来Math.pow()计算一个相对较大的双数的 2 次方。稍后我需要找到一个非常大的双数的平方根。问题是,我必须这样做超过 100,000 次,而且需要很长时间。有没有其他方法可以加快这个过程?谢谢

编辑:我的意思是在 1000 到 10000 之间(所以在计算方面可能没有那么大)。而就耗时而言,完成500次功能大约需要30秒

4

5 回答 5

9

您不太可能找到比 Java Math 更好(更快)的实现。尝试改变算法中的计算方式可能会更幸运。例如,有什么方法可以避免找到一个大数的平方根?

如果这不起作用,您可以尝试用一种更合适的语言来实现它,这种语言用于快速数学计算(比如 Matlab)。

否则,您可以尝试在其他方面进行优化。如果以后有用,也许您可​​以尝试缓存过去的结果。

于 2013-02-27T00:17:55.127 回答
9

“2 的幂”是平方。你最好通过将数字乘以自身来做到这一点。

的库版本sqrt可能比您在其他地方挖掘的任何东西都快。如果你调用一个 C 例程,你只会增加跨语言调用的开销。但是您是否需要精确的平方根,或者近似值的表格查找需要吗?这些值是否重复很多,即您是否经常需要计算相同数字的根?如果是这样,在 a 中缓存平方根HashMap可能比计算它们更快。

于 2013-02-27T00:19:20.193 回答
1

那么你的2的幂的问题可以简单地通过将数字乘以自身来完成。例如,假设变量 a 是您想要提高到 2 的数字。它与以下内容相同: int a=5; int b=a*a;

于 2013-02-27T00:23:04.283 回答
1

我唯一能想到的就是存储结果以提高速度,平方根不会改变,而且大约 9000 个存储的数字并不多。您可能会很好地构建您的数据,这样您就可以确保您可以最佳地搜索适当的结果。

于 2013-02-27T00:39:49.780 回答
0

您可以使用 x*x 代替 pow(x, 2)。

对于平方根,你应该先看看 sqrt 的实现(近似方法)。

也许您可以找到更好的方法,例如牛顿法(在方程 sqrt(N)-x=0 上)。

它还取决于所需的准确性,您可以交易准确性与时间。

您还可以存储结果以避免对同一条目进行多次计算。

于 2013-02-27T00:27:28.890 回答