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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 31.10.2010, 00:04   #1
Viconte
Пользователь
 
Регистрация: 31.08.2010
Сообщений: 40
Вопрос Операторы

Ломаю голову почему код не работает... выдает ошибку "деление на ноль" на строке t:= n mod (q*64*64);

Код:
var n,q : integer;
      t: real;
begin
 
n:=125;
q:=64;
t:= n mod (q*64*64);
end.
но если так
Код:
var n,q : integer;
      t: real;
begin
 
n:=125;
q:=64;
t:= n mod (64*64*64);
end.
то все работает..почему так ??
Viconte вне форума Ответить с цитированием
Старый 31.10.2010, 00:29   #2
eoln
Старожил
 
Аватар для eoln
 
Регистрация: 26.04.2008
Сообщений: 2,645
По умолчанию

Это связано с особенностью старых компиляторов. Для них это равносильно умножению 2-х байтового числа q на два однобайтовых числа 64 и 64 и помещение их в приёмник разрядности равной максимуму из разрядностей умножаемых чисел (то есть всё запишется в 2-хбайтовый тип, произойдёт переполнение и только потом передастся в тип real)
Выход: либо явно указываем подходящий тип, например, longint (для констант подбирается максимально большой исходя из их представления), либо разбиваем на действия. Новые компиляторы этот случай могут обрабатывать сами

Последний раз редактировалось eoln; 31.10.2010 в 00:32.
eoln вне форума Ответить с цитированием
Старый 31.10.2010, 11:17   #3
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

пробуй
Код:
 t: double;
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 01.11.2010, 15:43   #4
eoln
Старожил
 
Аватар для eoln
 
Регистрация: 26.04.2008
Сообщений: 2,645
По умолчанию

Stilet, скорее не t: double;, а q : longint;, ибо проблема только в правой части выражения t:= n mod (q*64*64);
P.S. ТС, переходи на delphi

Последний раз редактировалось eoln; 01.11.2010 в 15:45.
eoln вне форума Ответить с цитированием
Старый 01.11.2010, 16:31   #5
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
eoln
Да согласен...
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 01.11.2010, 16:34   #6
_-Re@l-_
C++, Java
Старожил
 
Аватар для _-Re@l-_
 
Регистрация: 10.04.2010
Сообщений: 2,665
По умолчанию

Лучше вообще юзать Extended и int64.
_-Re@l-_ вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Операторы цикла Asira Помощь студентам 0 21.12.2009 00:04
операторы цикла semennn Помощь студентам 5 19.05.2009 17:44
Операторы цикла. Paul Oakenfold Паскаль, Turbo Pascal, PascalABC.NET 4 14.04.2009 20:07
Операторы цикла Paul Oakenfold Помощь студентам 10 23.03.2009 16:08