二分法求精度很简单,只要知道了就会用了,即设定一个误差精度eps,然后不断二分l和r直至满足即可。
首先二分精确除法精度:
#include <iostream>
#include <cmath>
using namespace std;
int main(){
double eps = 1e-6;
double l, r, mid, k, chushu;
cin >> k >> chushu;
l = 0, r = k;
while(fabs(l*chushu-k) > eps){
mid = (l+r)/2;
if(mid*chushu < k) l = mid;
else r = mid;
}
cout << l << endl;
return 0;
}
二分平方根精度:
#include <iostream>
#include <cmath>
using namespace std;
int main(){
double eps = 1e-6;
double l, r, k, mid;
cin >> k;
l = 0, r = k;
while(fabs(l*l-k) > eps){
mid = (l+r)/2;
if(mid*mid < k) l = mid;
else r = mid;
}
cout << l << endl;
return 0;
}
其实精度的求法一般都可以用二分法去求吧,像立方根等等,只需要改改两个比较即可。
当然遇到大精度还是要配合着Java BigDecimal使用更好。