java - 查找没有 sqrt() 的平方根到 0.000001 精度
问题描述
我正在研究一种方法,该方法将在不使用Math.sqrt()
. 我相信除了满足 while 循环的条件外,一切正常。
截至目前,完美的正方形将起作用,但非完美的正方形似乎无限循环。我不知道如何让它满足循环的条件以打破并找到不完美平方的平方根,精度为.000001
.
public static double findSquareRoot(int value)
{
value = Math.abs(value);
double mid = value / 2.0, answer = 0;
// loop until sqrt is found
while (answer * answer != value)
{
// if middle value is sqrt
if (mid * mid == value)
{
return mid;
}
// if middle value is too big to be sqrt
else if (mid * mid > value)
{
mid = mid / 2.0;
answer = mid;
}
// if middle value is too small to be sqrt
else
{
mid = (mid + value) / 2.0;
answer = mid;
}
}
return answer;
}
解决方案
您需要以给定的精度进行检查:
public static double findSquareRoot(int value)
{
private static final double PRECISION = 0.000001;
value = Math.abs(value);
double mid = value / 2.0, answer = 0;
// loop until sqrt is found
while (Math.abs(answer * answer - value) < PRECISION)
{
// if middle value is sqrt
if (Math.abs(mid * mid - value) < PRECISION)
{
return mid;
}
// if middle value is too big to be sqrt
else if (mid * mid > value)
{
mid = mid / 2.0;
answer = mid;
}
// if middle value is too small to be sqrt
else
{
mid = (mid + value) / 2.0;
answer = mid;
}
}
return answer;
}