当前位置: 首页 > 知识库问答 >
问题:

(int)Math.sqrt(n)比(int)Math.flow(Math.sqrt(n))慢得多

呼延震博
2023-03-14

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

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

坐在后面,洋洋得意地看着代码运行,执行了大约10%!比它以前的版本更糟。这让我大吃一惊。有什么想法吗?

flow Javadocs:“返回最大(最接近正无穷大)的双倍值,该值小于或等于参数,并且等于数学整数。”

编辑在我的情况下n是一个长。cast-flood-sqrt是否会产生与cast-sqrt不同的int?我个人不明白为什么会...所有涉及的数字都是正的。

共有1个答案

隆芷阳
2023-03-14

math.flow方法只是将调用委托给strictMath.flow方法(参见此处)。此方法是本机方法。在此方法之后,强制转换不必执行任何操作,因为它已经是一个等于整数的数字(因此没有小数位数)。

也许flow的本机实现比将double值转换为int值更快。

 类似资料:
  • 此方法返回数字的平方根。 如果数字的值为负,则sqrt返回NaN。 语法 (Syntax) Math.sqrt ( x ); 参数 (Parameter) x - 代表一个数字 返回值 (Return Value) 返回数字的平方根。 例子 (Example) console.log("---Math.sqrt()---") console.log("Math.sqrt(16) : "+M

  • 描述 (Description) 当且仅当设置了指定位时, java.math.BigInteger.testBit(int n)返回true。 它计算(这&(1“”n))!= 0)。 声明 (Declaration) 以下是java.math.BigInteger.testBit()方法的声明。 public boolean testBit(int n) 参数 (Parameters) n -

  • 描述 (Description) java.math.BigInteger.shiftRight(int n)返回一个BigInteger,其值为(this“”n)。 执行签名扩展。 移位距离n可以是负的,在这种情况下,该方法执行左移。 它计算楼层(这/ 2 n )。 声明 (Declaration) 以下是java.math.BigInteger.shiftRight()方法的声明。 publi

  • 描述 (Description) java.math.BigInteger.shiftLeft(int n)返回一个BigInteger,其值为(this“”n)。 移位距离n可以是负的,在这种情况下,该方法执行右移。 它计算楼层(这个* 2 n )。 声明 (Declaration) 以下是java.math.BigInteger.shiftLeft()方法的声明。 public BigInte

  • 描述 (Description) java.math.BigInteger.setBit(int n)返回一个BigInteger,其值等于此BigInteger并设置了指定的位。 它计算(这|(1“”n))。 声明 (Declaration) 以下是java.math.BigInteger.setBit()方法的声明。 public BigInteger setBit(int n) 参数 (P

  • 描述 (Description) java.math.BigInteger.flipBit(int n)返回一个BigInteger,其值等于此BigInteger,并且指定的位被翻转。 它计算(这^(1“”n))。 声明 (Declaration) 以下是java.math.BigInteger.flipBit()方法的声明。 public BigInteger flipBit(int n)