Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Паскаль, Turbo Pascal, PascalABC.NET
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 10.01.2012, 00:40   #1
AntiDriver
Пользователь
 
Регистрация: 05.06.2010
Сообщений: 12
По умолчанию Вычисление суммы ряда в Free Pascal x64

Доброе время суток.
Возникли некоторые проблемы с вычислением суммы ряда в вышеуказанной версии pascal.

К примеру, надо посчитать экспоненту. .
Иду сначала таким способом: вычисляю отдельно каждое слагаемое, а потом суммирую.
Код:
for i:=0 to n do begin
                         SUM:=SUM+exp(i*ln(x))/factorial(i);
                      end;
Функцию, вычисляющую факториал взял тут (пример 2).
Как ни странно, но при n~50 появляются отрицательные значения слагаемых. Почему это происходит, разбираться не стал, т.к. метод сам по себе не оптимальный с точки зрения точности вычисления.

Решил вычислить иначе, не считать значение факториала и делить на него, а в цикле делить на каждый множитель факториала, т.е. x/(3!) считаю так ((x/2)/3).
Весь код программы тут
Веселье начинается после того, как заменил вычисление степени циклом, а не формулой с экспонентой и логарифмом (x=3, n=1000). Тестировал только вычисление степени, оба варианта давали один и тот же результат даже при значениях 50^1600. Когда же запускаю всю программу с вычислением степени через экспоненту вывод даёт такой результат
Код:
646)  2.0085536923187668E+0001  x= 1.6608505280233425E+0308
Runtime error 205 at $00000000004001FD
  $00000000004001FD
  $00000000004002AF
  $0000000000400180
т.е. при вычислении e^3 на 647 интерации возникает ошибка времени выполнения.
Меняю вычисление степени на цикл, результат уже такой
Код:
25)  1.0236194300675559E+0273  x= 1.3452889276989074E+0310
Runtime error 205 at $00000000004001FD
  $00000000004001FD
  $00000000004002E7
  $0000000000400180
Тут уже ошибку выдаёт на 25ой интерации. Почему, я так и не разобрался. И откуда там берётся 273 порядок значения функции тоже непонятно.
AntiDriver вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
VB Вычисление суммы ряда LenZab Помощь студентам 0 20.05.2011 23:18
Вычисление суммы ряда в С++ Tador Помощь студентам 21 10.12.2010 00:49
Вычисление суммы ряда. Си kira_truelove Помощь студентам 4 10.10.2010 21:36
Вычисление суммы ряда 666Rayne666 Помощь студентам 3 25.12.2009 22:39
Задача на вычисление суммы ряда, Pascal die_hard Помощь студентам 9 07.12.2008 19:05