二分法比較簡單
#include<cstdio>
#include<iostream>
using namespace std;
float sqrt(float n)
{
float max,min,mid;
max=n;
min=0;
mid=(min+max)/2;
while(1)
{
if(n-mid<0.002&&mid-n<0.02) break;//設置精度
mid=(min+max)/2;
if(mid*mid>n)
{
max=mid;
}
else if(mid*mid<n)
{
min=mid;
}
else
{
return mid;
}
}
return mid;
}
int main()
{
float n=81;
cout<<sqrt(n);
return 0;
}
以下是牛頓法
科普:牛頓法
http://www.matongxue.com/madocs/205.html#/madoc
公式推導:
#include<cstdio>
#include<iostream>
using namespace std;
float sqrt(float n)
{
float k=n;
while(1)
{
if(k*k==n)
{
return k;
break;
}
else
{
if(k*k-n<0.00002&&n-k*k<0.00002)
{
return k;
break;
}
k=0.5*(k+n/k);
}
}
}
int main()
{
float n=9;
cout<<sqrt(n);
return 0;
}