二分法求根

Rookiekk 2017-03-21 11:39:01
#include<stdio.h>
#define f(x) (x*x*x-2*x*x+3*x-4)
void main()
{ float a=-10,b=10,c,eps=1e-5;
while ((b-a)>eps)
{ c=(a+b)/2;
if(f(c)==0) break;
else if(f(a)*f(c)<0) b=c;
else a=c;
}
printf("root=%f\n",c); //printf("root=%f\n",(a+b)/2);
}


二分法求根的时候在符合精度区间之后,直接用符合精度的根还是在符合精度的情况下再进行一次球中值呢,如程序中注释处,求大神指点
...全文
378 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
Fu- 2017-03-21
  • 打赏
  • 举报
回复
我觉得使用符合精度的根就可以了 1 如果求出的根不是准确值,即是因为精度到了while退出的,那么这个根已经符合精度,严格说,只要符合精度的这个区间的所有值都能作为函数的最后的解,不必纠结于在这个区间的左边还是右边还是中间 2 如果求出的根是确定值,即你已经求出了准确的值,输出就好了,如果再求中值,输出的结果必然是错误的,而且是不符合精度的值。
worldy 2017-03-21
  • 打赏
  • 举报
回复
printf("root=%f\n",(a+b)/2)的值会更精确些,但你这个似乎函数应该有点问题
自信男孩 2017-03-21
  • 打赏
  • 举报
回复
#include <stdio.h>
#include <math.h>

#define MIN_DIFF    (1e-5)
#define FZERO       (1e-6)

int main(void)
{
    float a, prev, cur;
    int i;

    printf("Please input a number: ");
    scanf("%f", &a);

    if (fabsf(a) <= FZERO) {
        printf("%f sqrt is %.5f\n", a, 0.0);
        return 0;
    }
    prev = 1.0;
    cur = (prev + a / prev) / 2;
    for (i = 0; fabsf(cur - prev) >= MIN_DIFF; i++) {
        prev = cur;
        cur = (prev + a / prev) / 2;
    }

    printf("%.2f sqrt is %.5f\n", a, cur);
    return 0;
}
迭代法求平方根

69,369

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧