1.double型数值范围 2.3e-308-1.7e308,但在输出的时候默认精确到小数点后六位
2.printf("%0.4lf\n",x);跟printf("%.4lf\n",x);一样
3.double fabs(double x)对x求绝对值
4.以f(mid),y很接近为结束结束条件。原因很简单以为x取到4位时,有可能这个y还很不精确。
5.代码:
#include<cstdio>
#include<cmath>
using namespace std;
double f(double x)
{
return 8*x*x*x*x+7*x*x*x+2*x*x+3*x+6;
}
double bi_search(double y)
{
double low=0,mid,high=100;
double temp;
while(fabs(f(mid)-y)>=1e-5)
{
mid=(low+high)/2;
temp=f(mid);
if(temp==y)
return mid;
else if(temp<y)
low=mid;
else
high=mid;
}
return mid;
}
int main()
{
int t;
double y,x;
scanf("%d",&t);
while(t--)
{
scanf("%lf",&y);
if(f(0)>y||f(100)<y)
{
printf("No solution!\n");
continue;
}
x=bi_search(y);
printf("%0.4lf\n",x);
}
return 0;
}