编辑(已解决):错误在阶乘中,这是正确的解决方案:
double factorial(double x) {
double fact = 1;
for (unsigned int i = 1; i <= x; i++) {
fact *= i;
}
return fact;
}
如果您想要更好的近似值,请更改迭代次数。但是为了这个练习,21 次迭代给出了一个很好的近似值,但是当结果不再改变时,可以更新它以结束循环。您可以将上一个结果存储在 old_result 中,并将下一个结果存储在 new_result 中;如果 old_result 等于 new_result,则循环结束。
我正在尝试近似双曲正弦。我需要在不使用 math.h 库函数的情况下做到这一点。
[不要给我完整的解决方案,只是一些提示,因为我需要自己弄清楚]
这就是我所做的:
给定双曲正弦泰勒级数,我需要计算 (2*n + 1) 的阶乘。为此,我只需要执行此步骤:
fact *= (2*i +1); // inside a for-loop.
我需要计算 x^(2*n +1) 的幂,我是这样做的:
double power(double x, unsigned int y) {
double result = 1;
for (unsigned int i = 0; i < y; i++) {
result *= x;
}
return result;
}
现在,我拥有了每一件,泰勒系列的实现如下:
#include <stdio.h>
double power(double x, unsigned int y) {
double result = 1;
for (unsigned int i = 0; i < y; i++) {
result *= x;
}
return result;
}
double hyp_sin(double x) {
double result = 0;
double fact = 1;
double pow = 0;
for (unsigned int i = 0; i != 21; i++) {
fact *= (2 * i + 1);
pow = power(x, 2 * i + 1);
result += ((1 / fact) * pow);
}
return result;
}
int main(void) {
double result = hyp_sin(89.9878);
printf("%lf", result);
return 0;
}