Целью упражнения является оценка sin
с использованием формулы ряда Маклорена.Приближение синуса и остатка
#include <stdio.h>
#include <math.h>
double factorial(int n);
int main(void) {
double x, p, r;
int i, n;
printf("Enter a positive double number and a non - negative integer : \n");
scanf("%lf%d", &x, &n);
if (x <= 0) {
printf("Error: first argument must be a positive double.\n");
return -1;
}
if (n < 0) {
printf("Error: second argument must be a non - negative integer.\n");
return -1;
}
p = 0;
for (i = 0; i <= n; i++)
{
p += pow(-1, i)/factorial(2 * i + 1) * pow(x, 2 * i + 1);
}
r = fabs(sin(x) - p);
printf("The %d-th order Maclaurin polynomial function at x=%f is %f, with an error approximation of %f.\n", n, x, p, r);
getch();
return 0;
}
double factorial(int n)
{
int i;
long result = 1;
for (i = 1; i <= n; i++)
result *= i;
return result;
}
Я получаю странный результат для ввода «12 16». Зачем?
Вы должны сделать бит алгебры на серию, чтобы удалить переполнения. –
a) Что это за странный результат? б) Я еще не читал ни одного символа вашего кода, но прочитал http://docs.oracle.com/cd/E19957-01/806-3568/ncg_goldberg.html – deviantfan
Введите положительное двойное число и не- отрицательное целое число: 16-го порядка Маклорен полиномиальная функция при х = 12.000000 является -194882636741915 770000000000,000000, с приближением ошибки 194882636741915770000000000. 000000. – Elimination