Проблемы при вычислении значения синуса с рядом Тейлора

Я пытаюсь посчитать

грех х

Используя следующий код.

#define PI 3.14
double ans;
double input1;

void toRad() {
input1 = input1 * PI / 180.0;
}

void sine(void) {
toRad();
ans = input1;
int i = 1;
for (; i < 15; i++) {
if (i % 2 == 0)
ans = ans + (ans * input1 * input1) / 2 * i * (2 * i + 1);
else
ans = ans - (ans * input1 * input1) / 2 * i * (2 * i + 1);
}
printf("%lf", ans);
}

Я использовал итерационные операции вместо pow и факторные функции, чтобы получить более точные значения и больше итераций.

Но по какой-то причине я получил разные результаты, такие как -4000000E, В чем может быть проблема этого кода?

1

Решение

Вы допустили небольшую ошибку при написании логики. Проверяйте себя, пока я не = 4.

     if (i % 2 == 0)
ans = ans + (ans * input1 * input1) / 2 * i * (2 * i + 1);
else
ans = ans - (ans * input1 * input1) / 2 * i * (2 * i + 1);

вместо этого вы должны создать функцию факториала, чтобы ее можно было заменить на

    if (i % 2 == 0)
ans = ans + (ans * input1 * input1) / factorial(2 * i + 1);
else
ans = ans - (ans * input1 * input1) / factorial(2 * i + 1);
3

Другие решения


По вопросам рекламы [email protected]