Вычислить сумму ряда с точностью eps - C (СИ) (79229)
Формулировка задачи:
Помогите решить задачу: Вычислить сумму ряда (приближенное значение функции ln для |x|<1) с точностью eps. Значения x и eps вводятся с клавиатуры. Полученный результат и значение библиотечной функции ln вывести на экран.
Что-то написал, но похоже неправильно и не работает(( помогите.
если возможно, без pow
int main(int argc, char *argv[])
{
double eps,i,x,S,ln,a,X,q,w;
printf("vvedite tochnost'\n");
scanf("%lf",&eps);
printf("vvedite x\n");
scanf("%lf",&x);
S=0;
a=-1;
for(i=0;S>eps;i++){
q=pow(a,i);
w=pow(x,i+1);
X=q*w/(i+1);
S+=X;
}
ln=log(x+1);
printf("%.10lf\n",S);
printf("ln=%.10lf\n",ln);
return 0;
}Решение задачи: «Вычислить сумму ряда с точностью eps»
textual
Листинг программы
#include <stdio.h>
#include <math.h>
double myLn(double x, double eps);
int main()
{
double x;
double eps;
printf("Input x: ");
scanf("%lf", &x);
printf("Input eps: ");
scanf("%lf", &eps);
printf("myLn(%lf, %lf) = %lf\n", x, eps, myLn(x, eps));
printf("libLn(1 + %lf) = %lf", x, log(1.0 + x));
getch();
return 0;
}
double myLn(double x, double eps)
{
double sum;
double an;
int i;
sum = 0.0;
an = -1.0;
i = 0;
do
{
an *= -x / ++i;
sum += an;
}
while (fabs(an) > eps);
return sum;
}
Объяснение кода листинга программы
В этом коде:
- Сначала определяют функцию myLn(x, eps), которая вычисляет ряд для значения x с точностью eps.
- В функции main() считывают значения x и eps с помощью функции scanf().
- Вызывают функцию myLn(x, eps) и выводят результат на экран.
- Также в функции main() вычисляют приближенное значение функции ln(1+x) с помощью функции log() из библиотеки math.h и выводят его на экран.
- В функции myLn(x, eps) используется цикл do-while для вычисления ряда с точностью eps.
- Значение переменной an инициализируется как -1.0, а переменная i как 0.
- В цикле do-while значение an обновляется как произведение -x и i, а затем прибавляется к сумме sum.
- Цикл продолжается, пока абсолютное значение an не станет меньше eps.
- В конце функция возвращает сумму ряда.