很靠前的一道题,到今天才做,主要是突然发现他是一道很纯的数学题,,,拿到题后看了下,并没有怎么弄第三个式子,没管,自己化。要想减少循环的次数,必须把每次计算的级数提高,y(x) – y(1) 这个是重点,推式子就是从这里开始的,推到后来就自然地要用到第三个式子了,那些符号不知道怎么打,不过发现在网上有人已经写了,就是这样的方法,摘录如下:
假设n是要达到精度要求的要计算到的数:
到这里就差不多了,e*中我觉得只要考虑后面部分就可以了,在大于n时是小于1/(3*n^3)的,在n达到4次方的数量级时,误差就小于10^-12了,所以计算的次数就在10000以内了,开始的时候为了保险,开了100000,6秒多过了,后来一步步往下降,到8000也可以,0.5秒多,5000就不行,中间就没试了,没意思的,反正是达不到一大片人的0.00s,0.01s了,郁闷~~~~~
code:
#include "stdio.h"
int main()
{
double sum,x,k;
int i;
x=0.000;
for (i=0;i<=2000;i++)
{
sum=0.0;
for (k=1;k<8000;k++)
sum+=1/(k*(k+1)*(k+2)*(k+x));
sum=((2-x)*sum+0.25)*(1-x)+1;
printf("%5.3f %16.12fn",x,sum);
x+=0.001;
}
return 0;
}