84 求级数的和
作者: Turbo时间限制: 1S章节: 循环
问题描述 :
计算以下级数的和:
直到最后一项的绝对值小于10-6(该项不包括在结果中)。
输入说明 :
输入一个实数,代表x。
输出说明 :
输出结果,保留六位小数。整个输出无多余空格。
输入范例 :
2.5
输出范例 :
1.917914
笔记
若要使若干数相乘的结果为实属,且保证精度尽可能不错,应将所有参与的乘数变量定义为实属。
代码
#include<stdio.h>
#include<math.h>
const double eps = 1e-8;
#define MoreEqu(a,b) ((a)-(b)>(-eps))
double fac[101];
void init_fac(){
fac[0] = 0;
fac[1] = 1;
int i;
for(i=2;i<101;i++)
fac[i] = fac[i-1] * i;
}
int main(){
double x;
scanf("%lf",&x);
init_fac();
int n = 1;
double sig = 1;
double sum = 1;
double xx = x;
while(MoreEqu(xx/fac[n],1e-6)){
sum += sig * xx/ fac[n];
xx *= x;
n++;
sig *= -1;
}
printf("%f\n",sum);
return 0;
}