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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 29.01.2013, 01:29   #1
Novikov_Dmitriy
Новичок
Джуниор
 
Регистрация: 29.01.2013
Сообщений: 2
Вопрос Ошибка деления на 0 (delphi)

Всем доброго вечера!
Никак не могу разобраться почему вылетает ошибка.
Программа следующая:Вычисление функции разложением в ряд тейлора
Для cos(x) написал алгоритм
Код:
Stepen:=x*x; 
  factor:=2;
  a:=1;
  k:=2;
  drob:=-1;
  repeat
  begin
    a1:=a; 
    a:=a+drob* (Stepen/ factor); 
    k:=k+2; 
    Stepen:=Stepen*x*x;
    factor:=factor*((k)-1)*k; 
    drob:=drob*(-1);
   end;
   until (Abs(a-a1))<e; 
  ERFun.Text:=FloatToStr(a);   
ESFun.Text:=FloatToStr(Cos(x));
все работает, но только если x<4, при x=4 выдает ошибку деления на 0.
Деление в алгоритме только одно, в знаменателе переменная factor, которая изначальна равна 2, а дальше по циклу только увеличивается, однако на 34 итерации, она становится равна 0.
Если у кого-нибудь есть мысли на этот счет буду очень благодарен.
Novikov_Dmitriy вне форума Ответить с цитированием
Старый 29.01.2013, 06:48   #2
phomm
personality
Старожил
 
Аватар для phomm
 
Регистрация: 28.04.2009
Сообщений: 2,876
По умолчанию

А Вы выводите значение factor куда-нибудь и увидите. Я предполагаю, что factor:=factor*((k)-1)*k; быстро растёт и уходит за пределы того типа, что Вы используете, наверное , в какой-то момент это значение используемого типа переменной трактуется как 0.
Я бы посоветовал пересмотреть алгоритм и вообще предоставить условия задачи, дабы оценить алгоритм со стороны.
В общем же случае, можно просто вставить проверку на 0 и пропускать часть операций при 0.
phomm вне форума Ответить с цитированием
Старый 30.01.2013, 19:24   #3
Novikov_Dmitriy
Новичок
Джуниор
 
Регистрация: 29.01.2013
Сообщений: 2
По умолчанию

Да, ошибка была в типе переменной. Сам это понял почитав форум
Novikov_Dmitriy вне форума Ответить с цитированием
Ответ


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

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Ошибка в методе половинного деления naty7773 Помощь студентам 1 03.12.2012 21:38
Ошибка деления на ноль Сметуська Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM 2 14.03.2011 18:13
Ошибка деления на ноль El_Blasto Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM 4 16.12.2010 10:09
Delphi, ошибка деления на ноль, хотя знаменатель не ноль Эренка Помощь студентам 7 22.04.2010 15:56
Ошибка деления на ноль nolz Помощь студентам 3 07.03.2010 13:14