C++题目 用泰勒级数求e的近似值 使e有小数点后1000位有效数字
#include<iostream>#include<cmath>#include<iomanip>usingnamespacestd;intmain(void){lon...
#include<iostream>
#include<cmath>
#include<iomanip>
using namespace std;
int main(void)
{
long double e=1,s=1;
int n=1;
do
{
s*=n;
e+=1/s;
n+=1;
}
while(fabs(1/s)>1e-1000);
cout<<"e的近似值为:"<<setprecision(1001)<<e<<endl;
return 0;
} 展开
#include<cmath>
#include<iomanip>
using namespace std;
int main(void)
{
long double e=1,s=1;
int n=1;
do
{
s*=n;
e+=1/s;
n+=1;
}
while(fabs(1/s)>1e-1000);
cout<<"e的近似值为:"<<setprecision(1001)<<e<<endl;
return 0;
} 展开
3个回答
展开全部
这道题很难,你需要编大数运算程序,一般大数运算也就搞到100位,你需要考虑运算中累积误差(泰勒级数每项都引进误差), 最终还要 满足有效数字精度1001位.
上面你写的程序精度 double 最多只有15位有效数字,库函数fabs 精度 double 也只有15位有效数字,你需要自己写fabs函数,不能用数学库的。
程序不太好写。是否题目搞错了。
上面你写的程序精度 double 最多只有15位有效数字,库函数fabs 精度 double 也只有15位有效数字,你需要自己写fabs函数,不能用数学库的。
程序不太好写。是否题目搞错了。
追问
谢谢 题目没有错的 是我们的提高题之类的
追答
整型大数四则运算程序网上可以找到。一般程序开头有位数定义,例如:
#define MAX_DIGITS 100
你先把它变成 1001 试试,看能否算得结果,再考虑误差累积,增加位数计算。
级数分子分母分开计算,可以用整型大数乘法,调函数:
void mulBigInteger(char*mulor,char*mulant,char*result);
mulor -- 被乘数, mulant -- 乘数,result -- 结果。
大数除法:
void divide( char *numa, char *numb,char *result,char *remainder);
被除数,除数,商,余数
浮点数小数运算,可以考虑把分子扩大10的1000次方倍,或更多倍后用整型大数四则运算实现。
(你可以提高试试,我没试过,我不是研究数学的,不想在这方面耗费时间。)
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询