![]() |
|
Модераторы: Poseidon, Snowy, bems, MetalFan |
![]()
|
|
| zalex |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 129 Регистрация: 13.5.2005 Репутация: 2 Всего: 2 |
Тривиальный код
Понятно, что возникает переполнение (вот боюсь ошибиться в терминах) И нигде ничего об этом не оповещает... Вопросы 1. Как отследить оприсанную ситуацию? 2. Есть ли подобные ситуации,имеется ввиду приводящие к неправильному результату, но молчаливо. Это сообщение отредактировал(а) Girder - 2.11.2005, 10:53 |
|||
|
||||
| MFSham |
|
||||
![]() Бывалый ![]() Профиль Группа: Участник Сообщений: 220 Регистрация: 28.8.2005 Где: Беларусь, Гродно Репутация: 1 Всего: 3 |
Да вроде только самому. Именно поэтому вначале решения какой-либо задачи необходимо продумать все максимальные значения каждой переменной, и только потом заносить ее в раздел объявления. А в приведенном коде никакого переполнения не возникнет, а просто в b присвоится 0, т.к. если к максимальной границе в ходе выполнения программы прибавить некое число, то счетчик перемещается на нижнюю границу диапазона типа. Компилятору ведь пофиг что у тебя там будет. Главное, что ты написал все правильно с его точки зрения. А на приведенный частный случай у него имеется решения. Следовательно на первый вопрос, ИМХО, никак.
По моему вопрос поставлен не особо некорректно. Что значит приводят к неправильному результату? Если ты неправильно совмещаешь типы данных, то ты соответственно получишь и неверный результат. Как написал выше, вначале все надо обмозговать, а только потом реализовывать. Тогда и придешь к правильному результату. А если вообщем, то с такими ситуациями я не сталкивался. --------------------
Без ветра трава неподвижна. Без программ компьютеры бесполезны. |
||||
|
|||||
| MBo |
|
|||
|
Бывалый ![]() Профиль Группа: Участник Сообщений: 234 Регистрация: 10.6.2002 Репутация: 3 Всего: 18 |
В вышеприведенном коде все вычисляется на этапе компиляции, поэтому в Runtime все проходит гладко.
А в таком коде при установленной опции компилятора Overflow checking ({$Q+} ) будет ругань:
Это сообщение отредактировал(а) Girder - 1.11.2005, 10:00 |
|||
|
||||
| zalex |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 129 Регистрация: 13.5.2005 Репутация: 2 Всего: 2 |
ОК, действительно вставило. Такой вопрос - никомц не казалось, что директивы эти отрабатываются как то заторможенно. Т.е. не сразу что ли. Вот поставил директиву (Д7) - и никакого результата. А потом через нектр время - сработало.
|
|||
|
||||
| MBo |
|
|||
|
Бывалый ![]() Профиль Группа: Участник Сообщений: 234 Регистрация: 10.6.2002 Репутация: 3 Всего: 18 |
>Вот поставил директиву (Д7) - и никакого результата
Может, не перебилдил сначала? |
|||
|
||||
| Sardar |
|
|||
![]() Бегун ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 6986 Регистрация: 19.4.2002 Где: Нидерланды, Groni ngen Репутация: 2 Всего: 317 |
В статусном регистре проца всегда существует флаг, показывающий было ли переполнение после последней арифметической операции. Вывод: попробовать зачитать на асме
-------------------- Опыт - сын ошибок трудных © А. С. Пушкин Процесс написания своего велосипеда повышает профессиональный уровень программиста. © Opik Оценить мои качества можно тут. |
|||
|
||||
| zalex |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 129 Регистрация: 13.5.2005 Репутация: 2 Всего: 2 |
ОК, и с директивами разобрался, а Асм он вообще рулит. Спасибо.
|
|||
|
||||
![]()
|
| Правила форума "Delphi: Общие вопросы" | |
|
|
Запрещается! 1. Публиковать ссылки на вскрытые компоненты 2. Обсуждать взлом компонентов и делиться вскрытыми компонентами
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Snowy, MetalFan, bems, Poseidon, Rrader. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | Delphi: Общие вопросы | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |