const double eps = 1e-5; double func(double x) { return x*x; } double s_qrt(double low,double high,double obj) { double mid; while(high-low>eps) { mid=low+(high-low)/2; if(func(mid)>obj) { high=mid; } else { low=mid; } } return low; }
这是求根号下obj的值,单调区间,这里是单调递增区间,low和high需要包含所求值
求根号2的值,设其为x
即 x=根号2
x*x=2
x*x-2=0 方程构造出来了
到这儿就要用函数的思想了,方程的解即为函数的零点,利用二分法,不断缩小区间范围
当区间足够小的时候,处于误差范围内即可
比如求根号2
调用 cout<<s_qrt(0,10,2);
二分法实际上就是零点定理