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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 28.09.2012, 21:45   #1
Beywer
Новичок
Джуниор
 
Регистрация: 28.09.2012
Сообщений: 2
По умолчанию Арифмитическое переполнение при построении множества Мандельброта

По заданию необходимо построить множество Мандельброта в режиме 13h.
Программа поначалу рисует нормально множество, но почти сразу после его середины выдает ошибку: 215 Арифмитическое переполнение.
Код:
Program MondelbrotSet;
uses crt,windos;

procedure Dot(x,y:integer);
begin
Mem[$A000:320*y+x]:=25;
end;

var
i,scrX,scrY:integer;
x,x2,y,realY,realx:real;
regs:Tregisters;
BeGIN
Regs.AH:=$00;
Regs.AL:=$13;
Intr($10,Regs);
scry:=0;
realY:=1;
while(realY >= -1.1) do begin
realx:=-2; scrx:=0;
while( realx <= 1) do begin
x:= realX; y:= realY; i:=0;
while((x*x + y*y < 4) and (i < 80)) do begin
x2:= x*x - y*y + realx;
y:= 2*x*y + realy;
x:=x2;
i:=i+1;
end;
if(x*x + y*y < 4)then Dot(scrx,scry);
realX:= realX + 0.011;
scrx:= scrx + 1;
end;
realY:= realY - 0.011;
scry:= scry + 1;
end;
readln;
eND.
Здесь realx,realy - координаты точки на кмплексной плоскости
scrx,scry - координаты точки на экране
x,y,i используются для проверки попадания точки в множество.
Уже реализовал эту же программу в режиме 4h, все работает, и по идее в них различается только процедура вывода точки на экран.
В чем может быть проблема ? (если что максимальные значения, принимаемые scrx и scry 273 и 191)
Beywer вне форума Ответить с цитированием
Старый 28.09.2012, 22:51   #2
Sciv
Старожил
 
Аватар для Sciv
 
Регистрация: 16.05.2012
Сообщений: 3,211
По умолчанию

На уровне предположения:

Код:
Mem[$A000:320*y+x]:=25;
При указанных Вами значениях Х и У имеем:

320*191+273=61393 - больше допустимого в типе integer. Отсюда и переполнение

Попробуйте объявить переменные как longint или word
Начал решать проблему с помощью регулярных выражений. Теперь решаю две проблемы...
Sciv вне форума Ответить с цитированием
Старый 28.09.2012, 23:44   #3
Beywer
Новичок
Джуниор
 
Регистрация: 28.09.2012
Сообщений: 2
По умолчанию

Спасибо, помогло.
Beywer вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Ошибка при построении Release в VC 2010 Express. alsav22 Общие вопросы C/C++ 2 27.04.2012 22:35
Ошибки при построении yugik Visual C++ 7 27.08.2010 17:58
Ошибка при построении в visual c++ ghost1st Visual C++ 2 13.02.2010 22:55
MS Visual Studio. ошибка при построении Backfire Софт 0 11.10.2009 18:19
Рекурсия при построении матрицы достигаемости [MI_nor] Общие вопросы C/C++ 0 29.03.2009 22:16