Форум программистов, компьютерный форум, киберфорум
Visual C++
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.78/9: Рейтинг темы: голосов - 9, средняя оценка - 4.78
0 / 0 / 0
Регистрация: 12.01.2016
Сообщений: 2

Разница вычислений в Debug и Release

12.01.2016, 16:37. Показов 1926. Ответов 2
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Доброго времени суток!
Недавно в большом проекте вылезла проблема (MFC, IDE и компилятор Visual studio 2005 8.0.50727.42)
код выглядит так:
C++
1
2
3
4
5
6
7
    float a;
    int x;
    int y;
    
    a=-1.0;
    x=100;
    y=x+10-12*a;
Компилирую в debug - получаю y=122;
Компилирую в release - получаю y=98;
Тобишь в релизе пропал знак - у единицы, или у результата умножения -1.0*12.

Скобки не помогли, но помогло вот какое решение: меняем 12 на 12.0
C++
1
y=x+10-12.0*a;
И результат в дебаге и релизе стал одинаковый y=122.
начал копать опции компилятора, которые различаются в debug и release - и выяснил, что все дело в оптимизации на скорость /O2 в релизной версии. Включение и выключение ее давало разницу в вычислениях.
Но поптыка создать проблему в минимальном проекте, тоесть создал минимальное mfc приложении, перенес настройки с большого проекта, вставил только код приведенный выше, к такому результату не приводит.

Вопрос в задаче: как связаны /О2 и простые математические операции типа умножения и сложения? Хелп по /О2 дает оптимизацию циклов, инлайнинг, но вроде про сложение там ничего нет... Куда копать?

И для справки по этой проблеме:
код типа
C++
1
2
3
4
5
6
7
8
9
    float a;
    int x;
    int y[3];
    
    a=-1.0;
    x=100;
    y[0]= x + 6 - 12*a;
    y[1]= x + 9 - 15*a;
    y[2]= x + 8 - 16*a;
в релизе дает 3 неправильных ответа
но если поменять 12 на 12.0 в одном месте - функция дает три правильных ответа, хотя вроде бы вторая и третья строчка вычисления должны опятьже посчитаться неправильно!
C++
1
2
3
4
5
6
7
8
9
    float a;
    int x;
    int y[3];
    
    a=-1.0;
    x=100;
    y[0]= x + 6 - 12.0*a;
    y[1]= x + 9 - 15*a;
    y[2]= x + 8 - 16*a;
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
12.01.2016, 16:37
Ответы с готовыми решениями:

Режимы debug и release - в чем принципиальная разница?
Ситуация такая: есть довольно древний проект на VS 2008, и мне приходится его поддерживать. Столкнулся с такой проблемой: если собираю в...

Debug и Release разница?
объяснить пожалуйста разница между Debug И Release? и почему после компиляции Debug->Dll fail 460kb а Release->17кб.

Разница между Debug и Release
Какая разница в них? Я только знаю,что при компиляции Debug ми не можем увидеть как обрабатываются ошибки. Я так понимаю разницы...

2
337 / 185 / 80
Регистрация: 22.08.2013
Сообщений: 724
13.01.2016, 14:55
В 10-й студии без разницы: 122.
0
Evg
Эксперт CАвтор FAQ
 Аватар для Evg
21281 / 8305 / 637
Регистрация: 30.03.2009
Сообщений: 22,660
Записей в блоге: 30
13.01.2016, 16:45
Цитата Сообщение от Zhivoi Посмотреть сообщение
ак связаны /О2 и простые математические операции типа умножения и сложения?
Они никак не связаны. С вероятностью 99% в программе есть выход заграницу массива или что-то типа того, который и портит какую-то из переменных. Как только ты немного меняешь исходник, то переменные в стеке разлягутся в другом порядке и выход за границу массива испортит что-то, что уже не повлияет на ход вычислений
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
13.01.2016, 16:45
Помогаю со студенческими работами здесь

Разница release & debug
В чём собствено разница в версии релиза и дебага? Как бы теорию то знаю, но вот не понимаю чем в отладке может помочь дебаг версия, и куда...

В чем разница между Debug and Release?
Какие действия выполняет debug в Visual studio и какие Release, в чем разница? Никогда не задавался этим фундаментальным вопросом, что...

Разница в выводе графики между release и debug
Добрый день. Пример из книги М. Шлее. Qt версия 5.7. У всех так, или только у меня картинки разные получаются? Программу переставлял,...

В чем принципиальная разница между Debug и Release
Подскажите в чем принципиальная разница между Debug и Release?У меня получается при сборке Debug 1мб а Release 30 кб, но Release работает в...

Разница в размере стека Debug и Release версиях программы
Есть программа, одной из целей которой является вызвать переполнение стека, поймать exception и вывести MessageBox с информацией. Вот......


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
3
Ответ Создать тему
Новые блоги и статьи
Идея фильтра интернета (сервер = слой+фильтр).
Hrethgir 31.03.2026
Суть идеи заключается в том, чтобы запустить свой сервер, о чём я если честно мечтал давно и давно приобрёл книгу как это сделать. Но не было причин его запускать. Очумелые учёные напечатали на. . .
Модель здравосоХранения 6. ESG-повестка и устойчивое развитие; углублённый анализ кадрового бренда
anaschu 31.03.2026
В прикрепленном документе раздумья о том, как можно поменять модель в будущем
10 пpимет, которые всегда сбываются
Maks 31.03.2026
1. Чтобы, наконец, пришла маршрутка, надо закурить. Если сигарета последняя, маршрутка придет еще до второй затяжки даже вопреки расписанию. 2. Нaдоели зима и снег? Не надо переезжать. Достаточно. . .
Перемещение выделенных строк ТЧ из одного документа в другой
Maks 31.03.2026
Реализация из решения ниже выполнена на примере нетипового документа "ВыдачаОборудованияНаСпецтехнику" с единственной табличной частью "ОборудованиеИКомплектующие" разработанного в конфигурации КА2. . . .
Functional First Web Framework Suave
DevAlt 30.03.2026
Sauve. IO Апнулись до NET10. Из зависимостей один пакет, работает одинаково хорошо как в режиме проекта так и в интерактивном режиме. из сложностей - чисто функциональный подход. Решил. . .
Автоматическое создание документа при проведении другого документа
Maks 29.03.2026
Реализация из решения ниже выполнена на нетиповых документах, разработанных в конфигурации КА2. Есть нетиповой документ "ЗаявкаНаРемонтСпецтехники" и нетиповой документ "ПланированиеСпецтехники". В. . .
Настройка движения справочника по регистру сведений
Maks 29.03.2026
Решение ниже реализовано на примере нетипового справочника "ТарифыМобильнойСвязи" разработанного в конфигурации КА2, с целью учета корпоративной мобильной связи в коммерческом предприятии. . . .
Автозаполнение реквизита при выборе элемента справочника
Maks 27.03.2026
Программный код из решения ниже на примере нетипового документа "ЗаявкаНаРемонтСпецтехники" разработанного в конфигурации КА2. При выборе "Спецтехники" (Тип Справочник. Спецтехника), заполняется. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru