C++-用C++编写一个计算无穷级数的程序,本来应该是收敛的,但是为什么会产生突变?
#include<iostream>
#include<iomanip>
#include<cmath>
using namespace std;
int main()
{
while(1){
double sum=1.0,item;
int n,x;
cout<<"Please put in a number:";
cin>>x;
item=x;
sum+=item;
for(n=2;abs(item)>1e-9;n++){
item*=(-1.0)*x/n;
sum+=item;
}
cout<<"The result is:"<<setiosflags(ios::fixed)<<setprecision(9)<<sum<<endl;
}
}
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
这主要是浮点数的精度问题,用GMP的高精度浮点数:
#include<iostream>
#include<iomanip>
#include<cmath>
#include<gmpxx.h>
using namespace std;
int main()
{
mpf_set_default_prec(1024);
while(1){
mpf_class sum=1.0,item;
mpf_class n,x;
cout<<"Please put in a number:";
cin>>x;
item=x;
sum+=item;
for(n=2;abs(item)>1e-9;n++){
item*=(-1.0)*x/n;
sum+=item;
}
cout<<"The result is:"<<setiosflags(ios::fixed)<<setprecision(9)<<sum<<endl;
}
}
只改了变量的类型(mpf_class),精度设成1024位,x到700都可以收敛到2。