Вычисление экспоненты через ряд Тейлора - 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)
выполняет цикл до тех пор, пока счетчик не превысит значениеN
sum += factorial
добавляет факториал к сумме рядаfactorial *= number/counter
обновляет факториал, умножая его на число e в степени, деленное на текущее значение счетчикаcounter++
увеличивает значение счетчика на 1
- Выводятся результаты вычислений:
printf(
The result is %lf, exp(%lf) = %lf\n, sum, number, exp(number))
выводит сумму ряда, число e в степени и результат вычисления функцииexp()
- Завершается выполнение программы:
return 0
завершает выполнение программы
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д