eps二分
模板。
带eps的二分,常用于double类型查找,注意设置精度。
1 #include <iostream> 2 #include <cstdio> 3 #include <cmath> 4 5 using namespace std; 6 7 #define eps 0.000001 8 9 int t; 10 double y; 11 12 double f(double x){ 13 return 8.0*x*x*x*x+7.0*x*x*x+2.0*x*x+3.0*x+6.0; 14 } 15 16 //递归版eps二分 17 double b_srch(double begin, double end){ 18 double mid = (begin + end) / 2; 19 double ret; 20 double result = f(mid); 21 if(fabs(result - y) < eps){ 22 return mid; 23 } 24 else if(result > y){ 25 ret = b_srch(begin, mid); 26 } 27 else if(result < y){ 28 ret = b_srch(mid, end); 29 } 30 return ret; 31 } 32 33 //循环版eps二分 34 double b_srch2(double begin, double end){ 35 double mid = (begin + end) / 2; 36 while(fabs(f(mid) - y) > eps){ 37 if(f(mid) > y){ 38 end = mid; 39 } 40 else{ 41 begin = mid; 42 } 43 mid = (begin + end) / 2; 44 } 45 return mid; 46 } 47 48 int main() 49 { 50 scanf("%d", &t); 51 while(t--){ 52 scanf("%lf", &y); 53 if(y < 6 || y > 807020306){ 54 printf("No solution!\n"); 55 } 56 else{ 57 double result = b_srch(0, 100); 58 printf("%.4f\n", result); 59 } 60 } 61 return 0; 62 } 63 //HDU2199

浙公网安备 33010602011771号