如何在c中创建正弦函数

Kum*_*mar 2 c math

我知道里面有一个sin函数,math.h但我想自己制作这个函数,只是为了好玩。我已经sin基于正弦函数的 Macluarin 展开创建了函数。 在此处输入图片说明

我写了一个幂函数和一个阶乘函数,它们从 正常工作main,但它们在sin函数中不起作用?

这是我的代码:

int main()
{
    int i;
    double y;
    printf("\n\nPlease enter a value to find corresponding sin value\n");
    scanf("%d",&i);
    y=sin(i);
    printf("\nYour value is\n %f",y);
    return 0;
}
    
double sin(int z)
{
    int i=1;
    double value,val2,val3,sum=0;
    for(i=1;i<33;i+=2)
    {
        val2=power(z,i);
        val3=factorial(i);
        value=val2/val3;
        if(((i-1)/2)%2!=0){
            sum=sum-value;    //((power(x,i))/factorial(i));
        }else
        {
            sum=sum+value;
        }
    }
    printf("\n%f\n",sum);
    return sum;
}

int factorial(int x)
{
    int i,sum=1;
    for(i=1;i<=x;i++)
    {
        sum = sum*i;
    }
    return sum;
}

int power(int x,int y)
{
    unsigned long long int i,sum=1;
    for(i=1;i<=y;i++)
    {
        sum=sum*x;
    }
    return sum;
}
Run Code Online (Sandbox Code Playgroud)

Sam*_*nen 6

该公式期望以弧度为单位的值,但您使用的是整数,所以我假设您给它度数。这将使公式给出错误的值。

您还使用ints 作为来自factorial()and 的返回值,power()这将导致溢出。如果你有 32 位机器,即使给你的公式 2 也会溢出,因为int只能上升到 2^31-1 并且你试图获得 2^33。

此外,如果您的编译器没有抱怨您正在unsigned long long int从具有int返回类型的函数中返回 ,请提高警告级别。


use*_*697 5

int factorial()溢出很快。13!不适合 32 位整数。21!不适合 64 位整数。

int power()似乎完全关闭。为什么你期望一个论点xint?顺便说一句,它也很快溢出。

计算 McLauren 级数的(几乎)正确方法是从前一项中表达下一项:

    term = (-1) * term * (x*x) / ((n+1)*(n+2));
    sum += term;
    n += 2;
Run Code Online (Sandbox Code Playgroud)

它应该可以工作,但可能会导致大x. 一个霍纳时间表是一个最终的答案。