c - 使用泰勒级数求 C 中的 sin(x)

标签 c trigonometry taylor-series

我有一个作业,我的教授希望我们使用泰勒级数计算 sin(x)。他希望我们在两个连续分数之差小于 10^-6 时停止迭代。

我最终通过说 x^5/5 来解决这个问题!与 (x^3/3!) * (x^2/4*5) 相同,并且这对于所有分数都成立。所以我可以保留之前计算的分数并在下一次迭代中使用它。问题是我最终得到的数字与它的实际罪恶有点偏离,我不明白为什么。提前致谢。这是我的代码:

#include <stdio.h>
#include <Math.h>
#define pi 3.14159265358979323846

int main(int argc, int **argv){
    
    int sign = -1, pwr = 3;
    double previous, current, rad,sum, degr;
    printf("Calculating sin using Taylor Series\n\n");
    printf("Give degrees: ");
    scanf("%lf", &degr);
    
    // translate to rads
    rad = degr*(pi/180);
    
    sum = rad;
    previous = rad;
    do{
        current = (previous * pow(rad, 2))/(pwr* pwr-1);
        
        sum += sign*current;
        pwr += 2;
        sign *= -1;
    }
    while(abs(current - previous) > pow(10, -6));
    
    printf("The sin of %lf degrees is ", degr);
    printf("%.6f\n", sum);
    printf("%.6f", sin(rad));
    return 0;   
}

最佳答案

您正在使用 abs 函数,该函数需要一个 int 并返回一个 int。如果当前项与前一项之间的差值小于 1,则会导致循环存在,因为它将把 diff 设置为 0。

相反,您需要 fabs 期望并返回一个 double

关于c - 使用泰勒级数求 C 中的 sin(x),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65189227/

相关文章:

r - 在ggplot中,如何用一条线绘制一个圆/圆盘,该线根据给定的比例和内部的彩色点划分其面积?

c# - C# 中的 Math.Cos 和 Math.Sin

c - 泰勒级数函数 e^x

c++ - C 中的指针和枚举

c - 打印 C 中指针的值

c++ - header 中的枚举导致过度重新编译

java - 使用法拉利方法求四次方程的实根

c++ - Taylor McLaughlin 级数估计两点的距离

java - 通过泰勒展开的高斯累积密度函数

c - 在 CUDA 中使用设备 malloc() 获取段错误