#include #include #include //#define f(x) (x+sin(x)-1) //#define f(x) ((x)*(x)) #define f(x) ((x)*exp(x)*(x)*exp(x)) int main() { int count = 1000 , i=0; double precision = 1e-10 ; //num為選擇解哪個方程式 double mid , lower=-20 , upper=100, num=2; if(f(num)==(num+sin(num)-1)){ while (upper - lower > precision && i < count ) { mid = (lower + upper) / 2.0; printf("#%d\t[%.10f,%.10f]\t解=%.10f\n",i+1,lower,upper,mid); if (fabs(f(mid)) < precision) { break; } i++; if ( f(mid) * f(lower) < 0) { upper = mid; } else { lower = mid; } } } if(f(num)==(num*num)){ while (upper - lower > precision && i < count ) { mid = (lower + upper) / 2.0; printf("\n#%d\t[%.10f,%.10f]\t解=%.10f\n",i+1,lower,upper,mid); printf("\nf(mid)=%f, f(lower)=%f, f(upper)=%f\n",f(mid),f(lower),f(upper)); if (fabs(f(mid)) < precision) { break; } i++; if ( f(mid) > precision) { if(mid>0){ upper = mid; } else if(mid<0){ lower = mid; } } } } if(f(num)==((num)*exp(num)*(num)*exp(num))){ while (upper - lower > precision && i < count ) { mid = (lower + upper) / 2.0; printf("#%d\t[%.10f,%.10f]\t解=%.10f\n",i+1,lower,upper,mid); // printf("mid=%.10f,f(mid)=%.10f\n",mid,f(mid)); if (fabs(f(mid)) < precision) { break; } i++; if ( f(mid) > precision) { if(mid>0){ upper = mid; } else if(mid<0){ lower = mid; } } } } printf("\n答案為%f",mid); return 0; }