二分法求方程的根

//法一:while
/*版权声明:本文为CSDN博主「Micheal超」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/qq_42887760/article/details/84067150*/*/
*#include<stdio.h>
#include<math.h>

double f(double x);
const double eps = 1e-6; //定义我们计算的精度

int main()
{
    double x0,x1=0,x2=0,fx0;//[x1,x2]为寻找区间,x0为中点,浮点型数据
    scanf("%lf %lf",&x1, &x2);

    if(f(x1)*f(x2)<0)
    {
        while(fabs(x2-x1)>eps)
        {
          x0=(x1+x2)/2.0;//取x1,x2的中点
          fx0=f(x0);
          if(fabs(fx0)<eps)//满足精确度
               break;
          else if(f(x0)*f(x1)<0)
          {
              x2=x0; //修正区间,将[x1,x2]换成[x1,x0],这里的x0是中点
          }
          else if(f(x0)*f(x2)<0)
          {
              x1=x0;//修正区间,将[x1,x2]换成[x0,x2],这里的x0是中点
          }
        }
    }
    else{
        //可以放入其他求方程的根的方法
    }
    x0=(x1+x2)/2;
    printf("%lf\n",x0);

    return 0;
}
double f(double x) //定义函数(方程)
{
    return 2*x*x*x-4*x*x+3*x-6;
}
*/
/*————————————————
版权声明:本文为CSDN博主「Micheal超」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/qq_42887760/article/details/84067150*/
//法二:(原创)
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
double f(double x);
int main ()
{ double a,b,c;
   double f1,f2,f0;
   scanf("%lf %lf",&a,&b);
    for(;;)
    {   c=(a+b)/2;
        f1=f(a);f2=f(b);f0=f(c);
        if(fabs(f0)<1e-6) break;
        else if(f0*f1<0) b=c;
        else if(f0*f2<0) a=c;
    }
    printf("%.6lf\n",c);
}
double f(double x)
{
  return 2*x*x*x-4*x*x+3*x-6;
}

//感谢CSDN博主「Micheal超」对这一编程问题的解答。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值