二分查找、牛顿法求开根号
#include<stdio.h>
float sqr(float n, float r)
{
float mid = n / 2;
float min, max;
min = 0;
max = n;
while ((mid*mid - n > r) ||(mid*mid - n < -r))
{
if (mid*mid<n)
min = mid;
else if (mid*mid>n)
max = mid;
else
return mid;
mid = (min + max)/2;
printf("%f", mid);
}
return mid;
}
int main()
{
float n = 81;
printf("%f", sqr(81, 0.001));
}
牛顿迭代:f(x) = x^2 - n,x2-x1 = (f(x) - 0)/ f'(x)。
double sqrt(int n){
if (n <= 0)
return -1;
double x1 = 1.0, x2 = 0, temp;
while((x1 - x2 > 0.00001) || (x2 -x1 > 0.00001))
{
x2 = (x1 + n/x1)/2;
temp = x2;
x2 = x1;
x1 = temp;
}
return x1;
}
double newton(double in)
{
double current;
double next;
current=1;
while(fabs(next*next-in)>0.0001)
{
next=(current+in/current)/2;
current=next;
}
return next;
}