#include "stdio.h"
void main()
{
float e=1.0,t=1.0;
int n=1;
while(1/t>(1e-6)) //我没想明白是t>(1e-6),不是说直到最后一项小于1e-6吗,为什么是大于号
{
t=t*n; //得到 n!
e=e+1/t; //累加(1/n!),即计算此行前 e = 1+(1/1!)+(1/2!)+....+(1/(n-1)!)再加上(1/n!)
n++; //n : 2 3 4 ...
}
printf("e=%8.6f\n",e);
}
我想我连泰勒级数是什么都没搞清楚还有就是while里边为什么是1/t<(1e-6)
泰勒级数说白了就是一个函数使用函数上某个点的导数来表示,当连加项趋于无穷大时,就无限接近这个函数。泰勒级数在近似计算中的用处很大,在计算方法里也有很大的使用价值。
你的代码里1/t代表无穷小的意思,一是浮点数不准确,二是只要1/t小于1ppm即可满足要求,这在计算机效率上是最高的
请采纳!
最后一项就是1/t,只要1/t>(1e-6)就继续计算,直到最后一项小于1e-6 (应该是1/t>=(1e-6))
#include
#include
int main()
{
int fac(int n);
int x,i=1,sgn=1,count=0;
double sin=0;
scanf("%d",&x);
while(pow(x,i)/fac(i)>=1e-5)
{
sin+=pow(x,i)/fac(i)*sgn;
i+=2;
sgn*=-1;
count++;
}
printf("%.3lf\n%d\n",sin,count);
return 0;
}
int fac(int n)
{
int f;
if(n==0||n==1) f=1;
if(n>1) f=fac(n-1)*n;
return f;
}
提问者问的很对,确实题目的表达是不准确的。直到最后一项小于1e-6为止,按照正常中文的理解,是含这个最小值的。但计算的本义是只计算到最逼近这个1e-6的值,而不包括越过这个进度标志的值。所以,题目本意的表达应该是到1e-6就停止迭代。或者直接说 最后一项到1e-6为止。
另外,中文代码中有很多类似的歧义表达。老做题目的人就能知道出题者究竟想干嘛,但新手按照常理就无法理解题目究竟要干嘛。