我想在我的应用程序中计算一个大小数的平方根。请不要建议一些第三方实用程序,因为我不能进入许可循环。 我一直在使用Newton-Raphson方法,但因为它使用了pow并且大量分配操作。我可以看到它减慢了我在profiler中的应用程序。你们能为我建议一些好的实现吗? 可能存在一些不同于Newton-Raphson的算法,或者如果没有,则使用按位运算可以更快地实现它。
答案 0 :(得分:0)
您可以使用二进制搜索来查找平方根。 这样的事情:
BigDecimal sqrt(BigDecimal a){
BigDecimal left = BigDecimal.ZERO;
BigDecimal right = a;
for (int i = 0; i < BINARY_SEARCH_ITER_COUNT; ++i) {
BigDecimal middle = left.add(right).divide(BigDecimal.valueOf(2));
if (middle.multiply(middle).compareTo(a) < 0) {
left = middle;
} else {
right = middle;
}
}
return left.add(right).divide(BigDecimal.valueOf(2));
}
您可以调整迭代次数以匹配您的精确度和执行时间要求。但与Newton-Raphson相比,我不知道这是如何运作的。