首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >二分法实现

二分法实现
EN

Code Review用户
提问于 2021-02-03 02:12:57
回答 1查看 39关注 0票数 2

我正在编写一个程序来编程二分法:https://www.calculushowto.com/bisection-method/

我知道有类似的问题,但我想看看我自己的工作。

代码语言:javascript
复制
double func(double x) {
    return x * x - 3 * x - 1;
}
    
double bisect(double (*f)(double), double a, double b, double e) {
    double mid = (a + b) / 2;
    while (abs(mid) > e) {
        if (f(mid) < 0) {
            mid = a;
        } else {
            mid = b;
        }
    }
      
    return mid;       
}

func()是我用来测试二分法的函数。在另一个函数中,a是左点,b是右点,e是错误界。

有什么我没发现的错误吗?

EN

回答 1

Code Review用户

发布于 2021-02-03 06:41:14

  • 您似乎认为ab之间有一个根。如果不是这样,bisect永远不会终止。假设f行为良好,谨慎的做法是在继续之前测试f(a)f(b)是否有不同的迹象。另外,考虑一下f(a) > 0 && f(b) < 0的情况
  • bisect找不到根的近似。它发现了一个f相当小的论点。它可能离根很远。谨慎的终止条件是b - a < e
  • a + b可能溢出,然后所有的赌注都关闭。考虑一下mid = a + (b - a)/2
票数 1
EN
页面原文内容由Code Review提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://codereview.stackexchange.com/questions/255532

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档