您的位置:首页 > 其它

实现sqrt()开方运算

2015-03-08 20:21 281 查看
我们其实在初中的数学中已经用过了一种方法:二边逼近

在这里我们同样使用这种方法:二分法

设大约出了一个结果mid

那么num-p<mid*mid<num+p//这里我们取p是很小的值,因为它主要是用来控制精度的

1.若mid*mid>num+p那么就是mid大了,这时候我们取mid-=q;//

2.若mid*mid<num-p那么就是mid小了,取mid+=q;

上代码

#include<stdio.h>
#include<climits>
#include<algorithm>
#include<stack>
#include<iostream>
#include<cmath>
#include<set>
#include<vector>
#include<map>
#include<queue>
#include<string.h>
using namespace std;
double p=1.0e-7;//这个代表的是误差的范围
double q=1.0e-5;//这个是调节取值
double n;
double solve(double n)
{
double mid=n/2.0;//取中间值
while((mid*mid<n-p)||(mid*mid>n+p))//目标是n-p<mid*mid<n+p
{
if(mid*mid<n-p)//过小
{
mid+=q;
}
else mid-=q;
}
return mid;
}
int main(void)
{
while(cin>>n)
{
cout<<solve(n)<<endl;
}
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: