我正在查看我的代码,希望提高它的性能,然后我看到了这个:
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:“返回小于或等于参数且等于数学整数的最大(最接近正无穷大)双精度值。”
在我的情况下,编辑n很长。任何机会 cast-floor-sqrt 会产生与 cast-sqrt 不同的 int 吗?我个人看不出它为什么会……所有涉及的数字都是正数。