#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?