关于这个求三次方程的程序的问题?

#include <iostream>
#include <stdlib.h>
#include <stdio.h> 
using namespace std;
float a,b,c,d,ans[4];
int n;
float equ(float x)
{
    return ((a*x+b)*x+c)*x+d;   //求fx 
}
void solve(float l,float r)
{
    if(equ(l)*equ(r)>0&&(r-l<1||n>=2))
    return ;
    float mid=(l+r)/2;
    if(equ(mid)<=1e-4&&equ(mid)>=1e-4)    
    {
        ans[++n]=mid;
        return;
    }
    solve(l,mid),solve(mid,r);
        
    
}
int main()
{ 
     cin>>a>>b>>c>>d;
     solve(-100,100);
     cout<<ans[1];
     
        return 0;
}

输入案例 1 -5 -4 20 输出为3个解
这是算法书上抄来的学习案例
1 为什么我只要打印ans 1 它给我三个都打印了?
2 solve函数里第一个if为什么那么写?
3 为什么判断根的时候用1e-4? 因为足够精确吗?为什么不会出现某几个临近根的数都可以使函数值在1e-4以内从而使某一个根的几个临近值占据了ans?

阅读 1.7k
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题