C программа для расчета синуса дает неточные результаты - PullRequest
0 голосов
/ 22 марта 2019

Я должен написать эту программу только с #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 голосов
/ 22 марта 2019

@ Мэт прав, используйте 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;
}
0 голосов
/ 22 марта 2019

Я думаю, что одной из причин является то, что вы приближаете число пи на 3,14. Может быть, ваш калькулятор учитывает больше цифр числа пи. Попробуйте использовать больше цифр для приблизительного числа пи.

...