|
|
Регистрация Восстановить пароль |
Повторная активизация e-mail |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
|
Опции темы | Поиск в этой теме |
24.05.2012, 23:05 | #1 |
Новичок
Джуниор
Регистрация: 24.05.2012
Сообщений: 4
|
Деление на ноль происходит без ошибок
Вроде не новичок, но с подобным сталкиваюсь впервые.
Следующий кусок кода выполняется Delphi7 без обработки исключения, более того, если убрать try..except - выполняется без ошибок, в Х - INF. Код:
В чем может быть дело? Последний раз редактировалось Dim4; 24.05.2012 в 23:12. |
24.05.2012, 23:19 | #2 |
Сливочное масло
Участник клуба
Регистрация: 01.01.2011
Сообщений: 1,149
|
Дело в том, что x при делении на ноль даст положительную бесконечность ибо real это число с точкой.
Тоесть после выполнения x будет равен +inf - положительная бесконечность. http://www.delphisources.ru/pages/fa...inity.php.html
Сливочное масло Valio - компиляция как по маслу
|
24.05.2012, 23:32 | #3 |
Новичок
Джуниор
Регистрация: 24.05.2012
Сообщений: 4
|
Valio, спасибо за ответ.
Получается все действительные типы, кроме Comp и Currency, ошибку деления на ноль не выдадут. Но почему именно на цифру ноль? Если ноль присвоить переменной хоть целочисленного типа, хоть действительного и на него поделить, то ошибка будет. Разве цифра 0 и значение 0 целочисленной переменной, например integer, не одно и то же в машинном представлении? Повторюсь, просто не сталкивался с такими нюансами, для меня все таки немного странно это. Видимо, что-то где-то я упустил о типах данных. Последний раз редактировалось Dim4; 24.05.2012 в 23:39. |
24.05.2012, 23:43 | #4 | |
Сливочное масло
Участник клуба
Регистрация: 01.01.2011
Сообщений: 1,149
|
Цитата:
Код ниже делает деление на ноль. Но ошибки не произойдёт ибо Делфи оптимизирует код и деление не будет произведено. Ибо дальше x не используется. И даже если y будет integer, оптимизатор уберёт. Код:
Сливочное масло Valio - компиляция как по маслу
Последний раз редактировалось Valio; 24.05.2012 в 23:45. |
|
24.05.2012, 23:58 | #5 |
Новичок
Джуниор
Регистрация: 24.05.2012
Сообщений: 4
|
Да-да, про оптимизатор я знаю, но чтобы было проще, проверил так.
Код:
Код:
|
25.05.2012, 07:11 | #6 | |
Старожил
Регистрация: 13.08.2009
Сообщений: 2,581
|
Цитата:
С Comp/Currency ситуация иная, видимо потому что нужно преобразование типов.
Опытный программист на C++ легко решает любые не существующие в Паскале проблемы.
|
|
25.05.2012, 07:14 | #7 | |
Старожил
Регистрация: 13.08.2009
Сообщений: 2,581
|
Цитата:
Опытный программист на C++ легко решает любые не существующие в Паскале проблемы.
|
|
25.05.2012, 10:08 | #8 | ||
Новичок
Джуниор
Регистрация: 24.05.2012
Сообщений: 4
|
Цитата:
Цитата:
Последний раз редактировалось Dim4; 25.05.2012 в 10:18. |
||
28.05.2012, 23:20 | #9 | |
Старожил
Регистрация: 08.04.2012
Сообщений: 3,229
|
Вообще-то FPU на аппаратном уровне поддерживает бесконечность, но в большинстве случаев ЯВУ считают появление бесконечности ошибкой (что, в общем-то, правильно).
Цитата:
Достаточно сказать, что код цифры 0 равен 48. |
|
28.05.2012, 23:22 | #10 | |
Старожил
Регистрация: 04.02.2009
Сообщений: 18,136
|
Цитата:
Маньяк-самоучка
Utkin появился в результате деления на нуль. Осторожно! Альтернативная логика |
|
Опции темы | Поиск в этой теме |
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Деление на ноль и запрет ввода букв | sunnyws | Microsoft Office Word | 2 | 10.06.2011 14:20 |
Возможен ли отлов ошибок "чужих" программ без скана экрана на предмет окон-ошибок? | Человек_Борща | Общие вопросы Delphi | 4 | 21.04.2011 00:18 |
Деление на ноль | Bearw08 | Свободное общение | 26 | 18.03.2009 18:39 |
Деление на ноль! | Hacker19_90 | Паскаль, Turbo Pascal, PascalABC.NET | 7 | 01.10.2008 22:59 |