1
我一直在研究一個問題,我需要BigInteger的平方根以便複製其他人的方法,因爲Java沒有內置方法(不是我所知道的)並且工作正常。這個平方根法for循環的作用是什麼?
這裏是方法:
public static BigInteger bigIntSqRootFloor(BigInteger x)
throws IllegalArgumentException {
if (x.compareTo(BigInteger.ZERO) < 0) {
throw new IllegalArgumentException("Negative argument.");
}
if (x .equals(BigInteger.ZERO) || x.equals(BigInteger.ONE)) {
return x;
}
BigInteger two = BigInteger.valueOf(2L);
BigInteger y;
for(y = x.divide(two); y.compareTo(x.divide(y)) > 0; y = ((x.divide(y)).add(y)).divide(two));
return y;
}
不過,我認爲for循環是方法的最進口一部分,但我從來沒有見過一個與半結束冒號,我不知道它是如何工作的。有人能向我解釋它在這種方法中的作用是什麼?
這意味着所有的代碼是在冷杉說法並沒有什麼在循環做。 JIT沒有將x .divide(y)作爲常量優化,所以它的問題應該寫成更傳統的循環。 –
如果您想知道循環實際做了什麼,它會使用[巴比倫方法](https://en.wikipedia.org/wiki/Methods_of_computing_square_roots)通過重複逼近計算平方根。 – dasblinkenlight