应用分而治之时输出不正确

Incorrect Output when applying Divide & Conquer

我必须使用 Divide & Couquer 求解区间内的单根方程。这是我的代码:

#include<bits/stdc++.h>

double coef[4];
int d=3;

double f(double x){
    int i;
    double res;
    for(i=0;i<=d;i++) res+=coef[i]*pow(x,i);
    return res;
}

double solve(double left,double right){
    double mid=(left+right)/2;

    if(abs(f(mid))<=1e-8) return mid;
    if(right-left<=1e-4) return mid;

    printf("%.4f %.4f %.4f\n",left,mid,right);

    if(f(mid)*f(left)>=0) return solve(mid,right); 
    if(f(mid)*f(right)>=0) return solve(left,mid);
}

int main(){

    coef[0]=-10;
    coef[1]=0;
    coef[2]=0;
    coef[3]=1.5;

    printf("%lf\n",solve(-10,10));
}

然后我用它来解决1.5x^3-10=0有两个绑定-1010,但在我看来if(f(mid)*f(right)>=0) return solve(left,mid);根本不起作用。

-10.0000 0.0000 10.0000
0.0000 5.0000 10.0000
5.0000 7.5000 10.0000
7.5000 8.7500 10.0000
8.7500 9.3750 10.0000
9.3750 9.6875 10.0000
9.6875 9.8438 10.0000
9.8438 9.9219 10.0000
9.9219 9.9609 10.0000
9.9609 9.9805 10.0000
...

我知道方程的根是1.8821所以输出不正确。

[-20, 20]也是如此。

如果我用 [-1.000.000, 1.000.000] 进行测试,输出会给出根 500000.0000,这显然是不正确的。

那么我的函数有什么问题 solve()

非常感谢任何帮助!

在您的代码中,res 未在 f 中初始化,应该初始化为零。

此外,如果您不输入 using namespace std;abs 应替换为 std::fabsstd::abs

修正这两点,就可以正常工作了。

DEMO is here.

res 应该在函数 f(double x) 中初始化

使用命名空间标准;
应该用于为您的变量提供作用域