У меня есть задание, в котором мой профессор хочет, чтобы мы вычислили sin(x), используя ряд Тейлора. Он хочет, чтобы мы остановили итерации, когда разница между двумя последовательными дробями меньше 10^-6.
В итоге я подошел к проблеме, сказав, что, например, x ^ 5/5! совпадает с (x^3/3!) * (x^2/4*5) и что это верно для всех дробей. Поэтому я могу просто сохранить предыдущую рассчитанную долю и использовать ее на следующей итерации. Проблема в том, что число, которое я получаю, немного отличается от его фактического греха, и я не могу понять, почему. Заранее спасибо. Вот мой код:
#include <stdio.h>
#include <Math.h>
#define pi 3.14159265358979323846
int main(int argc, int **argv){
int sign = -1, pwr = 3;
double previous, current, rad,sum, degr;
printf("Calculating sin using Taylor Series\n\n");
printf("Give degrees: ");
scanf("%lf", °r);
// translate to rads
rad = degr*(pi/180);
sum = rad;
previous = rad;
do{
current = (previous * pow(rad, 2))/(pwr* pwr-1);
sum += sign*current;
pwr += 2;
sign *= -1;
}
while(abs(current - previous) > pow(10, -6));
printf("The sin of %lf degrees is ", degr);
printf("%.6f\n", sum);
printf("%.6f", sin(rad));
return 0;
}
(pwr* pwr-1)
не должно быть(pwr * (pwr-1))
? - person Steve Friedl   schedule 08.12.2020previous = current
где-то в цикле? Если перед циклом вы изменитеprevious = rad;
наcurrent = rad;
, это может быть первая инструкция в цикле. - person Weather Vane   schedule 08.12.2020