Вычисление экспоненты через ряд Тейлора - C (СИ)
Формулировка задачи:
Сама формула имеет вид :
Сколько я ее не правлю,она все равно не работает. Точнее, она работала,но при маленьких N и с очень большой погрешностью. После того как переменные из long long перевел в double, каждый раз в ответ выдает "-nan(ind)". До этого ругалась,что делю на ноль. На что она только не ругалась. Поясните,пожалуйста, что в коде не так?
#include <stdio.h>
int main(void)
{
const int N=20;
long long int counter=2;
double sum = 1.0, factorial,number;
printf("Input the power of number ""e"": ");
scanf_s("%d", &number);
factorial = number;
while (counter<=N)
{
sum+= factorial;
factorial*=number/counter;
counter++;
}
printf("The result is %f\n",sum);
return 0;
}Решение задачи: «Вычисление экспоненты через ряд Тейлора»
textual
Листинг программы
#include <stdio.h>
#include <math.h>
int main(void)
{
const int N=100;
int counter=2;
double sum, factorial,number;
printf("Input the power of number ""e"": ");
scanf("%lf", &number);
factorial = number;
sum = 1.0
while (counter<=N) {
sum+= factorial;
factorial*=number/counter;
counter++;
}
printf("The result is %lf, exp(%lf) = %lf\n", sum, number, exp(number));
return 0;
}
Объяснение кода листинга программы
В этом коде вычисляется экспонента числа e в степени, используя ряд Тейлора. Вот список действий, которые происходят в коде:
- Включаются необходимые заголовочные файлы:
stdio.hдля работы с вводом и выводом данныхmath.hдля использования функцииexp(), которая вычисляет экспоненту
- Задаются начальные значения переменных:
const int N=100задает общее количество разрядов, которые будут учитываться при вычислении ряда Тейлораint counter=2инициализирует счетчик, который будет использоваться для вычисления суммы рядаdouble sumиdouble factorialинициализируются нулевыми значениями для хранения суммы ряда и факториала соответственноdouble numberинициализируется значением, введенным пользователем, для хранения числа e в степени
- Выводится запрос на ввод числа e в степени:
printf(Input the power of number `e`:)выводит запрос на вводscanf(%lf, &number)считывает введенное значение и сохраняет его в переменнойnumber
- Вычисляется факториал числа e в степени:
factorial = numberинициализирует факториал введенным значением
- Выполняется цикл для вычисления суммы ряда Тейлора:
while (counter<=N)выполняет цикл до тех пор, пока счетчик не превысит значениеNsum += factorialдобавляет факториал к сумме рядаfactorial *= number/counterобновляет факториал, умножая его на число e в степени, деленное на текущее значение счетчикаcounter++увеличивает значение счетчика на 1
- Выводятся результаты вычислений:
printf(The result is %lf, exp(%lf) = %lf\n, sum, number, exp(number))выводит сумму ряда, число e в степени и результат вычисления функцииexp()
- Завершается выполнение программы:
return 0завершает выполнение программы