C++-用C++编写一个计算无穷级数的程序,本来应该是收敛的,但是为什么会产生突变?

发布于 2016-10-30 02:24:58 字数 574 浏览 1176 评论 1

#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 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

灵芸 2017-03-14 21:28:01

这主要是浮点数的精度问题,用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。

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文