用于正弦计算的C程序给出了不正确的结果

时间:2019-03-22 15:20:52

标签: c recursion sine

我只能用#include<stdio.h>编写此程序。

我必须从用户那里阅读系列'n'的最高能量。

x=45 and n=9时,程序会给我0.7068251967。但是当我将计算器用于同一个计算器时,我得到0.7068251828

我还必须使用递归。

#include<stdio.h>

float pow(float n, int p)
{
if(p == 0)
    return 1;
else
    return n * pow(n, p-1);
}

int fact(int n)
{
if(n == 0)
    return 1;
else
    return n * fact(n-1);
}

int main()
{
int n, x, i, sign = 1;
float sum, r;


printf("Enter the angle in degrees.\n");
scanf("%d", &x);

r = 3.14 * x / 180.0;

printf("Enter the odd number till which you want the series.\n");
scanf("%d", &n);

if(n % 2 == 0)
    printf("The number needs to be an odd number.\n");
else
{


for(i = 1, sum = 0; i <= n; i += 2, sign *= -1)
{
    sum += (sign * pow(r, i)) /  fact(i);
}

printf("The sum of the series is %.10f.\n", sum);
}


return 0;
}

2 个答案:

答案 0 :(得分:0)

我认为原因之一是您将pi近似为3.14。也许您的计算器 考虑到pi的更多位数。尝试为近似值pi使用更多数字。

答案 1 :(得分:0)

@Mat是正确的,请使用M_PI而不是您的“穷人” 3.14。此外,不要总是对x乘幂n或阶乘。请注意,总和的下一项:a_ {k + 2} =-a_ {k} x ^ 2 /(k(k-1)),(偶数项为零) 使用类似

double s=x,a=x,x2=-x*x;
int i;
for (i=3;i<=n;i+=2)
{
   a*=x2/i/(i-1);
   s+=a;
}