0

编辑(已解决):错误在阶乘中,这是正确的解决方案:

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; 
} 

结果完全错误,应该是 6.028024141598018316924203992363e+38(21 次迭代)结果如下

4

0 回答 0