gpt4 book ai didi

java - (int) Math.sqrt(n) 比 (int) Math.floor(Math.sqrt(n)) 慢很多

转载 作者:搜寻专家 更新时间:2023-10-31 19:46:25 25 4
gpt4 key购买 nike

我正在查看我的代码,希望提高它的性能,然后我看到了这个:

int sqrt = (int) Math.floor(Math.sqrt(n));

哦,好的,我真的不需要调用 Math.floor,因为转换从 Math.sqrt(n) 返回的 double 值也将有效地对数字进行取整(因为 sqrt 永远不会返回负数)。所以我放弃了对 Math.floor 的调用:

int sqrt = (int) Math.sqrt(n)

坐下来,得意地看着代码运行并执行大约 10%!比以前的版本差。这让我感到震惊。有什么想法吗?

Math.floor javadocs:“返回小于或等于参数且等于数学整数的最大(最接近正无穷大) double 值。”

编辑在我的例子中,n 很长。 cast-floor-sqrt 是否有可能产生与 cast-sqrt 不同的 int?我个人不明白为什么会……所有涉及的数字都是正数。

最佳答案

Math.floor 方法只是将调用委托(delegate)给 StrictMath.floor 方法(如 java.lang.StrictMath's source code 中所示)。此方法是 native 方法。在这个方法之后, Actor 不需要做任何事情,因为它已经是一个等于整数的数字(所以没有小数位)。

也许 floor 的 native 实现比将 double 值转换为 int 值更快。

关于java - (int) Math.sqrt(n) 比 (int) Math.floor(Math.sqrt(n)) 慢很多,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20265468/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com