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

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

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 29.04.2013, 01:31   #1
AnnNoob
Пользователь
 
Регистрация: 23.04.2013
Сообщений: 11
По умолчанию Ошибка в Delphi (деление на ноль)

Помогите, пожалуйста, разобраться!
Вылазит вот такая ошибка в выделеной строчке.
При том, что нуля в знаменателе просто быть не может.

Код:
function TForm2.igams(a: real;x: integer): extended;
var g,sum: real;
    i: integer;
    f: array [0..4095] of integer;
const e:real=2.72;
begin
  f[0]:=1;
  for i:=1 to x-1 do
  f[i]:=f[i-1]*i;
  sum:=0;
  for i:=0 to x-1 do
  sum:=sum+exp(i*ln(a))/f[i];
  g:=1 - exp(-a*ln(e))*sum;
  igams:=1-g;
end;
AnnNoob вне форума Ответить с цитированием
Старый 29.04.2013, 07:52   #2
s-andriano
Старожил
 
Аватар для s-andriano
 
Регистрация: 08.04.2012
Сообщений: 3,229
По умолчанию

А чего непонятного то?
В выделенной строчке единственная операция деления, значит, именно f[i] и равен нулю.
И вместо того, чтобы утверждать "не может" - взять, да и посмотреть.
Со своей стороны могу сказать, что чего там не может быть, так это того, что Вы предполагаете там иметь:
1. Нигде не проверяется, что x меньше 4095, следовательно, возможен выход за пределы массива, порча памяти и совершенно непредсказуемое поведение.
2. Факториал от 4096 - слишком много, чтобы получить это число хотя бы в каком-то из стандартных типов.

Так что Ваша программа, несомненно, содержит логические ошибки. А какие именно - сказать невозможно, не зная условия задачи.
s-andriano вне форума Ответить с цитированием
Старый 29.04.2013, 09:04   #3
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 18,922
По умолчанию

Для Integer 18! уже слишком много и где-то для 34! в массиве f ноль будет после всех переполнений
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
Аватар вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Деление на ноль LLIALLIJIbIK Общие вопросы Delphi 19 14.04.2013 20:33
Деление на ноль LLIALLIJIbIK Общие вопросы Delphi 1 14.04.2013 17:15
Delphi, ошибка деления на ноль, хотя знаменатель не ноль Эренка Помощь студентам 7 22.04.2010 15:56
Деление на ноль! Hacker19_90 Паскаль, Turbo Pascal, PascalABC.NET 7 01.10.2008 22:59