【noiOJ】p6253

t6253:用二分法求方程的根

总时间限制: 
1000ms
 
内存限制: 
65536kB
描述

用二分法求下面方程在(-10, 10)之间的一个根。 
2x3- 4x2+ 3x- 6 = 0

输入
一个小于1的非负实数e,它的值表示所能允许的误差
输出
一个实数,其值为求得的一个根,要求精确到小数点后8位。
若该区间上没有根,则输出“No Solution”
样例输入
0
样例输出
2.00000000
提示
对于一个连续函数f(x),若f(a)*f(b) <= 0,则f(x)在区间[a, b]内至少有一个根。
特别的,对于一个单调的连续函数,上述定理得逆定理也成立
若[a, b]上有根,则可进一步考察根是否在 [a, (a+b)/2]内,或者在[(a+b)/2, b]内。

若b-a <= e 则可终止迭代,并认为(a+b)/2是一个近似解,将它输出

请使用double类型!
 1 #include <iostream>
 2 #include <cstdio>
 3 using namespace std;
 4 double x;
 5 double judge(double xx)
 6 {
 7     return (2*xx*xx*xx-4*xx*xx+3*xx-6);
 8 }
 9 int main()
10 {
11     double left,right,mid,n,sum1,sum2,sum3;
12     scanf("%lf",&x);
13     left=-10; right=10;
14     while (right>left)
15     {
16         mid=(left+right)/2;
17         sum1=judge(left);
18         sum2=judge(right);
19         sum3=judge(mid);
20         if (sum3==0 || right-left<=x)
21         {
22             printf("%.8lf",mid);
23             return 0;
24         }
25         else
26             if (sum1*sum3<0)
27                 right=mid;
28             else
29                 if (sum2*sum3<0)
30                     left=mid;
31     }
32     printf("No Solotion");
33     return 0;
34 }

 

posted @ 2015-11-29 16:11  DMoon  阅读(257)  评论(0编辑  收藏  举报