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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 12.10.2011, 07:02   #1
Drozd-A
Пользователь
 
Регистрация: 01.06.2011
Сообщений: 12
По умолчанию Сложности с плавающей точкой

Нахожу точку пересечения прямых на оси координат
Код :
Код:
d :=(xs1-xs2)*(pl-pl) - (ys1-ys2)*(x0+w-x0);
    da:=(xs1-x0)*(pl-pl) - (ys1-pl)*(x0+w-x0);
    db:=(xs1-xs2)*(ys1-pl) - (ys1-ys2)*(xs1-x0); 
\\ операции с координатами точек прямых, все переменные типа Integer. 
Возвращают целые неотрицательные числа, ..проверено выводом в label.

    ta:=da/d;
    tb:=db/d; 
\\ в результате операции получаются числа с плавающей запятой, ta и tb - переменные типа extended

    xt:= xs1+ta*(xs2-xs1);
    yt:= ys1+tb*(ys2-ys1); \\ xt и yt - переменные типа extended

    lbl1.caption := FloatToStr(xt); 
\\ компилятор выдает ошибку: Project raised exception class EInvalidOp 
wih message 'Invalid floating point operation'..
пробывал через formatfloat выводить в showmessage,
пробывал округлять Round-ом пременные xt и yt, результат тот же
..примечателно что если прописать ta=0.2 и tb=0.2, тогда все считается

На всякий случай прилагаю проект:
Новая папка (7).zip

Последний раз редактировалось Drozd-A; 12.10.2011 в 07:04.
Drozd-A вне форума Ответить с цитированием
Старый 12.10.2011, 08:06   #2
Прик
Форумчанин
 
Регистрация: 08.09.2010
Сообщений: 880
По умолчанию

Щас расскажу.
Вот запускается программа. Вот в самом начале она пытается сформировать объекты на форме, в частности едиты. Но так как в эдитах есть начальные значения, то их присвоение провоцирует вызов обработчика события EditChange.
Что получается.
При каждом таком вызове происходит вся цепочка расчетов, но...
Процедура обработки вызывается для Edt1 (например, это первый в очереди формирования компонент), а в других едитах еще нет значений.
Что происходит? Правильно, в переменной d нулевое значение. А что будет если что-то делить на 0? Тоже правильно, "событие исключительной важности".

Можно сделать так (один из вариантов):
Присобачивать к едитам процедуру обработки OnChange в событии OnCreate формы, разумеется, после всех операторов, в конце процедуры:
Код:
  ...  
  Edt1.OnChange := EditChange;
  Edt2.OnChange := EditChange;
  Edt3.OnChange := EditChange;
  Edt4.OnChange := EditChange;
  Edt5.OnChange := EditChange;
end;
А в Object Inspector привязки эти убрать.
Тогда события эти при запуске программы мешать не будут, а будут работать так как и предназначено: при изменении значений в едитах во время работы проги.

---
Но решение такое (формировать графики на каждый чих - изменения в аргументах) не самое разумное.
Что будет, если при изменении значения какого-либо из едитов стереть в нем значения (для благородного желания, естественно, заменить цифры)? Догадаться не сложно. Будет тот же облом: "Invalid..."
Все равно придется в начале кода проверять на пустое значение всех едитов, значения которых участвуют в расчете.

Последний раз редактировалось Прик; 12.10.2011 в 08:19.
Прик вне форума Ответить с цитированием
Старый 12.10.2011, 18:27   #3
Drozd-A
Пользователь
 
Регистрация: 01.06.2011
Сообщений: 12
По умолчанию

Уже сам дошел до тех же выводов,.. все равно спасибо, вы мой спаситель и бог ..c утра начну эксперименты..
Drozd-A вне форума Ответить с цитированием
Старый 13.10.2011, 09:10   #4
Drozd-A
Пользователь
 
Регистрация: 01.06.2011
Сообщений: 12
По умолчанию

[empty...]

Последний раз редактировалось Drozd-A; 13.10.2011 в 09:42.
Drozd-A вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Числа с плавающей точкой [MI_nor] Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM 3 11.04.2011 11:53
числа с плавающей точкой cleversleazoid Общие вопросы C/C++ 5 30.12.2010 00:43
помогите с плавающей точкой Egory4 Помощь студентам 5 01.11.2009 14:48
Ошибка с плавающей точкой Vistar Паскаль, Turbo Pascal, PascalABC.NET 5 06.05.2009 19:47
Числа с плавающей точкой Blondinka Общие вопросы Delphi 8 21.09.2007 11:32