1. 程式人生 > >求平方根(根號n)的兩種演算法——二分法和牛頓迭代

求平方根(根號n)的兩種演算法——二分法和牛頓迭代

面試阿里口碑的時候遇到了這個問題,這裡做個筆記

1.二分法

#define eps 0.00001
float SqrtByDichotomy(float n)
{
	if (n < 0)
	{
		return -1.0;
	}
	else
	{
		float low, up, mid, last;
		low = 0, up = (n>=1?n:1);
		mid = (low + up) / 2;
		do {
			if (mid*mid>n)
				up = mid;
			else
				low = mid;
			mid = (up+low)/2;
		} while (fabsf(mid - last) > eps);
		return mid;
	
	}
}

2.牛頓迭代法

double Sqr(double a) {
	double x = a, y = 0.0;
	while (fabs(x - y) > 0.00001) {
		y = x;
		x = 0.5*(x + a / x);
	}
	return x;
}