Форум программистов «Весельчак У»
  *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

  • Рекомендуем проверить настройки временной зоны в вашем профиле (страница "Внешний вид форума", пункт "Часовой пояс:").
  • У нас больше нет рассылок. Если вам приходят письма от наших бывших рассылок mail.ru и subscribe.ru, то знайте, что это не мы рассылаем.
   Начало  
Наши сайты
Помощь Поиск Календарь Почта Войти Регистрация  
 
Страниц: [1]   Вниз
  Печать  
Автор Тема: Разница между Debug и Release  (Прочитано 9223 раз)
0 Пользователей и 1 Гость смотрят эту тему.
SCRIBE
Гость
« : 02-02-2017 14:18 » 

Всем привет.

Случилось что-то необыкновенное, код работает в Debug режиме, но не в Release.
И я никак не пойму в чем дело.
Суть кода в формировании многоугольника с помощью GDI+ (старый API, т.е. модули GDIPAPI, GDIPOBJ), возможно причина в этом, но пока дело не дошло до переписывания кода под новый API (модуль GDIPlus), может есть на языке стандартные возможные решения таких проблем?
Как это вообще возможно?)) В первом варианте рисуется, во втором черный квадрат.

Забыл сказать, используется Delphi XE8.
« Последнее редактирование: 02-02-2017 14:23 от ..::SCRIBE::.. » Записан
SCRIBE
Гость
« Ответ #1 : 02-02-2017 15:13 » 

Решено.

Ошибка была в выходе за диапазон данных Single типа, изменив тип на Extended все заработало.
Странно что ошибок никаких небыло, и работало в Debug режиме, ну да ладно, я так понял старый модуль кривой како-то, с подавлением ошибок.
Записан
Aether
Специалист

ru
Offline Offline
Пол: Мужской

« Ответ #2 : 02-02-2017 15:27 » 

Ошибка была в выходе за диапазон данных Single типа, изменив тип на Extended все заработало.
Ого. А в расчёте точно такие цифры фигурируют? И почему сразу с Single на Extended минуя Double? Сорри, из Паскалей работал только на BP7.0 для поддержки Extended приходилось включать опцию в параметрах: "... 8087 ..." Вполне возможно, библиотеки для debug сопроцессор реализуют программно, а release использует его физическую реализацию.
Записан
SCRIBE
Гость
« Ответ #3 : 03-02-2017 07:14 » 

Нет, Double(Real) недостаточно. Вообще таких прям больших цифр там нет, там засунут алгоритм построения правильного многоугольника из C++ примера.
Вот кусок:
Код: (Delphi)
  for i:= 0 to aSides do
  begin
    angle:= 2 * rdyPi * i / aSides;
    prevPoint:= point;
    point:= TGPPointF.Create(r * cos(angle) + x, r * sin(angle) + y);
    path.AddLine(prevPoint, point);
  end;

Структура точки:
Код: (Delphi)
  TGPPointF = record
  public
    X: Single;
    Y: Single;
  public

Хмм.. только увидел, что cos и sin возвращает Extended Отлично
Записан
Aether
Специалист

ru
Offline Offline
Пол: Мужской

« Ответ #4 : 05-02-2017 09:16 » new

Хмм.. только увидел, что cos и sin возвращает Extended Отлично
Странно, компилятор должен приводить всё корректно.

Как вариант, можно адаптировать под Паскаль.
https://forum.shelek.ru/index.php/topic,30754.new.html#new
Записан
Страниц: [1]   Вверх
  Печать  
 

Powered by SMF 1.1.21 | SMF © 2015, Simple Machines