![]() |
|
|
Регистрация Восстановить пароль |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
![]() |
|
Опции темы | Поиск в этой теме |
![]() |
#1 |
Новичок
Джуниор
Регистрация: 24.05.2012
Сообщений: 4
|
![]()
Вроде не новичок, но с подобным сталкиваюсь впервые.
Следующий кусок кода выполняется Delphi7 без обработки исключения, более того, если убрать try..except - выполняется без ошибок, в Х - INF. Код:
В чем может быть дело? Последний раз редактировалось Dim4; 24.05.2012 в 23:12. |
![]() |
![]() |
![]() |
#2 |
Сливочное масло
Участник клуба
Регистрация: 01.01.2011
Сообщений: 1,149
|
![]()
Дело в том, что x при делении на ноль даст положительную бесконечность ибо real это число с точкой.
Тоесть после выполнения x будет равен +inf - положительная бесконечность. http://www.delphisources.ru/pages/fa...inity.php.html
Сливочное масло Valio - компиляция как по маслу
|
![]() |
![]() |
![]() |
#3 |
Новичок
Джуниор
Регистрация: 24.05.2012
Сообщений: 4
|
![]()
Valio, спасибо за ответ.
Получается все действительные типы, кроме Comp и Currency, ошибку деления на ноль не выдадут. Но почему именно на цифру ноль? Если ноль присвоить переменной хоть целочисленного типа, хоть действительного и на него поделить, то ошибка будет. Разве цифра 0 и значение 0 целочисленной переменной, например integer, не одно и то же в машинном представлении? Повторюсь, просто не сталкивался с такими нюансами, для меня все таки немного странно это. Видимо, что-то где-то я упустил о типах данных. Последний раз редактировалось Dim4; 24.05.2012 в 23:39. |
![]() |
![]() |
![]() |
#4 | |
Сливочное масло
Участник клуба
Регистрация: 01.01.2011
Сообщений: 1,149
|
![]() Цитата:
Код ниже делает деление на ноль. Но ошибки не произойдёт ибо Делфи оптимизирует код и деление не будет произведено. Ибо дальше x не используется. И даже если y будет integer, оптимизатор уберёт. Код:
Сливочное масло Valio - компиляция как по маслу
Последний раз редактировалось Valio; 24.05.2012 в 23:45. |
|
![]() |
![]() |
![]() |
#5 |
Новичок
Джуниор
Регистрация: 24.05.2012
Сообщений: 4
|
![]()
Да-да, про оптимизатор я знаю, но чтобы было проще, проверил так.
Код:
Код:
|
![]() |
![]() |
![]() |
#6 | |
Старожил
Регистрация: 13.08.2009
Сообщений: 2,581
|
![]() Цитата:
С Comp/Currency ситуация иная, видимо потому что нужно преобразование типов.
Опытный программист на C++ легко решает любые не существующие в Паскале проблемы.
|
|
![]() |
![]() |
![]() |
#7 | |
Старожил
Регистрация: 13.08.2009
Сообщений: 2,581
|
![]() Цитата:
Опытный программист на C++ легко решает любые не существующие в Паскале проблемы.
|
|
![]() |
![]() |
![]() |
#8 | ||
Новичок
Джуниор
Регистрация: 24.05.2012
Сообщений: 4
|
![]() Цитата:
Цитата:
Последний раз редактировалось Dim4; 25.05.2012 в 10:18. |
||
![]() |
![]() |
![]() |
#9 | |
Старожил
Регистрация: 08.04.2012
Сообщений: 3,229
|
![]()
Вообще-то FPU на аппаратном уровне поддерживает бесконечность, но в большинстве случаев ЯВУ считают появление бесконечности ошибкой (что, в общем-то, правильно).
Цитата:
Достаточно сказать, что код цифры 0 равен 48. |
|
![]() |
![]() |
![]() |
#10 | |
Старожил
Регистрация: 04.02.2009
Сообщений: 17,351
|
![]() Цитата:
![]()
Маньяк-самоучка
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 |