根据麦克劳林公式计算 coshx 的值。
输入格式
x ε
注:x 为指数,ε 为计算精度。
输出格式
y
注:y 为 coshx 的值。用 %f 格式限定符输出 6 位小数。
要求:所计算的最后一项的绝对值小于 ε。
输入样例
0.5 0.0000001
输出样例
1.127626
代码长度限制
16 KB
时间限制
400 ms
内存限制
64 MB
思路
输入指数 x 和给定的精度 e。变量 sum 初始化为 0,可以认为它是部分和。i 初始化为 0,表示迭代次数。
然后,在 while 循环中,不断计算新一项并累加到部分和 sum 中。每一次循环都会计算出一个项 temp,代表当前迭代的一项。这个项的系数由 x^(2i) 和 2i! 共同组成,因此我们自定义了一个求阶乘的函数 Factorial 来帮助计算。在计算 temp 后,我们需要判断其大小是否小于精度要求 e,如果满足条件,则跳出循环,否则就将该项累加到部分和当中,并继续下一次迭代。
最后,我们输出获取到的部分和 sum 作为最终结果即可。
需要注意的是,在进行浮点数之间的比较时,应该使用 fabs 函数来避免出现精度误差而导致的错误。
代码:
#include <stdio.h>
#include <math.h>
// 定义函数Factorial求解给定的n阶乘
double Factorial(int n) {
double sum = 1;
for (int i = 2; i <= n; ++i) {
sum *= i;
}
return sum;
}
int main() {
double x, e, sum = 0,i=0.0;// i用来表示当前计算的项数,初始值为0
scanf("%lf %lf", &x, &e);
while (1) {
// 计算出x^(2i) / (2i)!,使用自定义的Factorial函数求解分母的阶乘
double temp = pow(x, 2 * i) / Factorial(2 * i);
// 判断当前计算的项是否小于给定的精度要求e,如果小于则停止计算
if (fabs(temp) < e) {
sum += temp; // 将结果累加到部分和sum中
break;
}
sum += temp; // 否则将计算结果累加到部分和sum中
i++; // 更新项数i,进行下一次的计算
}
printf("%.6lf", sum); // 输出最终的部分和作为结果
return 0;
}