首页 > 解决方案 > 在C中计算sinx的泰勒级数

问题描述

我必须将 sinx 的泰勒级数计算到小数点后 4 位。到目前为止,我的代码如下所示:

#include<stdio.h>
#include<math.h>

float pwr(int n, float x){ //power of x to the n
    int i;
    float p=x;

    for(i=1; i<=n; i++){
        p=p*x;
    }
    return p;
}

int fac(int n){ //n factorial
    int i;
    int f=1;
    for(i=1; i<=n; i++){
        f=f*i;
    }
    return f;
}

int main(){
    int i, k;
    int sign;
    float rad, num, den, deg;
    float sum=0.f;
    
    printf("How many iterations of the series should I add? ");
    scanf("%d", &k);
    while(k<1){
        printf("I can't add negative or 0 iterations. Please enter valid input: ");
        scanf("%d", &k);
    }
    
    printf("Enter angle in degrees: ");
    scanf("%f", &deg);
    rad=deg*M_PI/180; //convert to radians
    
    for(i=1; i<=k; i++){ //taylor series of sinx: [(-1)^n]*[{x^(2n+1)}/(2n+1)!]
        sign=pwr(i, -1); //finds (-1)^n
        
        //finds x^(2n+1) by expanding it as [(x^n)^2]*x
        num=pwr(i, rad); //x^n
        num=num*num; //(x^n)^2
        num=num*rad; //[(x^n)^2]*x
        
        //finds (2n+1)!
        den=fac(2i+1);
        
        //sum
        sum=sum+sign*(num/den);
    }
    
    printf("The sum is %.4f", sum);
    return 0;
}

我试图在每个循环结束时将总和分解为不同的部分。由于某种原因,它不会返回任何值。例如,如果我尝试通过重复循环 100 次并进入 156 度来运行程序,则程序返回 -1.#INF 并在下面说进程以返回值 18 退出。我做错了什么?

标签: c

解决方案


推荐阅读