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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 06.05.2009, 11:57   #1
Vistar
учащийся
Форумчанин
 
Аватар для Vistar
 
Регистрация: 26.04.2009
Сообщений: 144
Восклицание Ошибка с плавающей точкой

Я нарисовал несколько кругов. Сохранил их координаты в массиве Picture, который имеет тип
Код:
Type
   Figura = record
      x_min: integer;
      y_min: integer;
      x_max: integer; {использую только для квадратов}
      y_max: integer; {использую только квадратов}
      type_of_pic: string; {здесь указываю тип моей фигуры}
   end;
Переменные x_min и y_min использую как координаты центра круга который рисуется.

Я ставлю точку на экране и нада определить принадлежит ли эта точка нарисованному кругу. Для этого я сравниваю расстояние между центром каждого круга и точкой на экране с радиусом этих кругом. Но когда я определяю расстояние между центром и точкой то выскакивает ошибка "207, invalid floating point operation". Вроди и стоит округление к целому числу, но всеравно иногда выскакивает. Когда я ставлю точку в квадрат и круг, то все работает так как нада, а когда только в круг то вот такая ошибочка. Уже все переискал. Нигде немогу найти решение. Помогите устранить ошибку. Заранее благодарен.

Код:
if Picture[n].type_of_pic = 'circle' then
begin
   distance := round(sqrt(sqr(f_x - Picture[n].x_min) + sqr(f_y - Picture[n].y_min)));
   if distance < f_circle_radius[n] then
   begin
      Inc(w);
      f_circle[w] := n;
   end;
end;
distance типа integer
В f_circle_radius[n] записан радиус каждого круга.
Vistar вне форума Ответить с цитированием
Старый 06.05.2009, 12:57   #2
OCTAGRAM
Oldschool geek
Форумчанин
 
Аватар для OCTAGRAM
 
Регистрация: 09.03.2009
Сообщений: 611
По умолчанию

Помогает ли добавление {$N-,E+} в начало файла?
If you want to get to the top, you have to start at the bottom

http://pascal.net.ru/
OCTAGRAM вне форума Ответить с цитированием
Старый 06.05.2009, 13:09   #3
Vistar
учащийся
Форумчанин
 
Аватар для Vistar
 
Регистрация: 26.04.2009
Сообщений: 144
По умолчанию

нет. всеравно иногда выбрасывает. и указывает на ошибку в строке
Код:
distance := round(sqrt(sqr(f_x - Picture[n].x_min) + sqr(f_y - Picture[n].y_min)));
Vistar вне форума Ответить с цитированием
Старый 06.05.2009, 13:57   #4
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Цитата:
Vistar
А прикрепи ка свой проектик сюда в архиве...
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 06.05.2009, 16:41   #5
Vistar
учащийся
Форумчанин
 
Аватар для Vistar
 
Регистрация: 26.04.2009
Сообщений: 144
По умолчанию

..........................
Вложения
Тип файла: rar GRAPHICS.rar (3.2 Кб, 10 просмотров)
Vistar вне форума Ответить с цитированием
Старый 06.05.2009, 19:47   #6
Vistar
учащийся
Форумчанин
 
Аватар для Vistar
 
Регистрация: 26.04.2009
Сообщений: 144
По умолчанию

Я теперь написал вот так
Код:
distance := round(sqrt(round(sqr(round(f_x - Picture[n].x_min))) +
                  round(sqr(round(f_y - Picture[n].y_min)))));
Работает.
Vistar вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Сравнение чисел с плавающей точкой ? Ulex Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM 11 12.04.2008 21:14
Числа с плавающей точкой Blondinka Общие вопросы Delphi 8 21.09.2007 11:32