1040: 方程求零点
时间限制: 1 Sec 内存限制: 128 MB提交: 219 解决: 88
[ 提交][ 状态][ 讨论版]
题目描述
设函数f(x)是在区间[a,b]内的连续函数,且f(a)f(b)<0, 根据Role定理,f(x)在区间内必存在零点。已知f(x)=x3-x-1, 输入区间端点的值,令精确度为eps=10-5, 判断是否存在零点,如果存在,输出该零点的近似值,否则输出No zero point.
输入
输入包括若干行,表示该区间端点
输出
每行对应每个区间的计算结果,如果根存在,保留5位小数。对于有根区间,如果|f(x
*)|<=eps,则x
*为零点的近似值。
样例输入
-1 00 11 1.5
样例输出
No zero point in area(-1.00000,0.00000)
No zero point in area(0.00000,1.00000)
The Zero Point is 1.32472 in area(1.00000,1.50000)
#include<iostream>
#include<iomanip> //包含改变数字精确的位数的函数
using namespace std;
double fx(double a)
{
if((a*a*a-a-1)>0)
return 1;
return -1;
}
int main()
{
double m,n;
while(cin>>m>>n)
{
cout<<fixed; //修改精确位数
if(fx(m)*fx(n)>0)
cout<<"No zero point in area("<<setprecision(6)<<m<<","<<n<<")"<<endl;
else
{
double m1=m,n1=n;
int count(1);
double l;
while((n1-m1)>0.00001) //精确度即为区间的差值
{
l=(m1+n1)/2;
if(fx(m1)*fx(l)<0)
n1=l;
else
m1=l;
count++;
}
cout<<"The Zero Point is "<<setprecision(5)<<(n1+m1)/2;
cout<<" in area("<<setprecision(6)<<m<<","<<n<<")"<<endl;
}
}
return 0;
}