1.问题
利用二分法求一个数的平方根,精度要求 e < 10^-6;
2.思路
1.要求x(x>0)的完全平方根,则二分法范围为[low,up] 其中 low = 0, up = x
2.令mid = (up+low)/2
3.以fabs(mid * mid - x) >=1e-6为循环条件
3.1若满足条件,令mid = (up+low)/2,判断mid*mid与x的关系
3.1.1若mid * mid > x 则 up = mid 继续循环
3.1.2若mid * mid < x 则 low = mid 继续循环
3.2若不满足条件,mid即为完全平方根
3.代码
c++
//二分法求平方根
double kaiFang(double low, double up)
{
double x = up;
double mid = low + (up - low)/ 2;
while (fabs(mid * mid - x) >=1e-6)
{
mid = low + (up - low) / 2;
if (mid * mid > x) up = mid;
else if (mid * mid < x) low = mid;
}
return mid;
}
go
func sqrt(num float64) (ret float64, err string) {
if num < 0 {
err = "num should >= 0"
return
}
lo, hi := 0.0, num
mid := lo + (hi-lo)/2
for (num-mid*mid) > 10e-6 {
mid = lo + (hi-lo)/2
if mid*mid > num {
hi = mid
} else if mid*mid < num {
lo = mid
}
}
return mid, ""
}