Pet*_*sen 2 java biginteger square-root
因此,我需要在Java 9之前的版本中使用BigInteger,我发现下面的函数可以做到这一点。我确实了解该代码,但是我真的不明白为什么要在那里。因此,我想我并没有真正了解其背后的数学原理。就像为什么要使用(n / 32 + 8)。为什么要计算中间值。等等
BigInteger a = BigInteger.ONE;
BigInteger b = n.shiftRight(5).add(BigInteger.valueOf(8));
while (b.compareTo(a) >= 0) {
BigInteger mid = a.add(b).shiftRight(1);
if (mid.multiply(mid).compareTo(n) > 0) {
b = mid.subtract(BigInteger.ONE);
} else {
a = mid.add(BigInteger.ONE);
}
}
return a.subtract(BigInteger.ONE);
}
Run Code Online (Sandbox Code Playgroud)
编辑: 詹姆斯恢复莫妮卡波尔克是正确的,这不是巴比伦方法,而是对分方法。在回答之前,我没有足够仔细地查看代码。请查看他的答案,因为它比我的答案更准确。
这似乎是近似平方根的巴比伦方法。(n / 32 + 8)只是用作“种子”,因为提供合理的起始值可以在更少的迭代中提供更好的近似,而不仅仅是选择任何数字。
| 归档时间: |
|
| 查看次数: |
58 次 |
| 最近记录: |