二分浮点数里面的while(r-1>=0.001)是什么鬼?
然后是程序里的if(res1==0)也不合理。可以考虑#define eps 1e-4(eps是epsilon,高数里经常用它表示一个很小的数字)然后用fabs(f(x)) < eps(需要用头文件cmath,fabs是取绝对值的意思)去判定是不是解。
by kagome @ 2024-02-18 23:52:44
```cpp
#include <bits/stdc++.h>
#define endl '\n'
using namespace std;
double a,b,c,d;
//函数表达式
double fun(double x){
return a*x*x*x + b*x*x + c*x + d;
}
int main() {
ios::sync_with_stdio(false);
cin.tie(0);
cin >> a >> b >> c >> d;
double left,right;
int nums=0;//记录个数
for (int i = -100; i < 100; ++i) {
left=i;
right=i+1;
double x1= fun(left);
double x2= fun(right);
if (x1==0){//检查左端点是否为0
cout << fixed << setprecision(2)<<left<<" ";
nums++;
}
if (x1*x2<0){
while (right-left>=0.001){
double mid=(left+right)/2;
if (fun(mid)* x2<=0){
left=mid;
}else{
right=mid;
}
}
cout << fixed << setprecision(2)<<right<<" ";
nums++;
}
if (nums==3){
break;
}
}
return 0;
}
```
by ldywayne @ 2024-03-15 22:12:44