有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

函数Java比数学更快。pow()和数学。sqrt()

我的程序使用Math.pow()来计算一个相当大的2次方数字。稍后我需要找到一个非常大的双倍数的平方根。问题是,我必须做10万多次,这需要很长时间。有没有其他办法可以加快这一进程?谢谢

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


共 (5) 个答案

  1. # 1 楼答案

    “2的力量”是平方的。你最好把这个数字乘以它本身

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

  2. # 2 楼答案

    你可以用x*x代替pow(x,2)

    对于平方根,您应该首先了解sqrt实现(近似方法)

    也许你可以找到一个更好的,例如Newton's method(在等式sqrt(N)-x=0上)

    这还取决于所需的准确度,你可以用准确度和时间来交换

    还可以存储结果,以避免对同一条目的多次计算

  3. # 3 楼答案

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

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

    否则,您可以尝试在其他领域对此进行优化。如果以前的结果以后有用,也许可以尝试缓存它们

  4. # 4 楼答案

    我能想到的唯一一件事是存储结果以提高速度,平方根不会改变,而且~9000个存储的数字并没有那么多。你可能会很好地构建你的数据,这样你就可以确保你能以最佳方式搜索到合适的结果

  5. # 5 楼答案

    你对2的幂的问题可以简单地通过乘以这个数来解决。 例如,假设变量a是您想要增加到2的数字。这和: int a=5; int b=a*a;