实现sqrt()开方运算

来源:互联网 发布:基础货币 知乎 编辑:程序博客网 时间:2024/05/22 00:15

我们其实在初中的数学中已经用过了一种方法:二边逼近

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

设大约出了一个结果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;}


0 0
原创粉丝点击