![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Не срабатывает try
_Asph © (2007-07-06 11:37:00)Почему то не срабатывает
try
strtofloat(Edit1.Text);
except
а выдает при проверке свое сообщение?
Что не так?
Kolan (2007-07-06 21:53:00) [1]> Что такое NAN?
Not a Number
Anatoly Podgoretsky (2007-07-06 21:28:00) [2]> Так оптимизатор такое и не пропустит....
Не пропустит, если это единственная строка.
Плохиш (2007-07-06 21:26:00) [3]
> Anatoly Podgoretsky © (06.07.07 20:30) [26]
> > Плохиш (06.07.2007 20:23:23) [23]
>
> NAN будет при 0/0
Да, точно.
{RASkov} (2007-07-06 20:44:00) [4]> [23] Плохиш © (06.07.07 20:23)
> В твоём третьем примере исключение будет намного позже,
> потому что x будет равно не ноль, как ты ожидаешь, а NAN.
Что такое - NAN?
Блин.... из за Y что ли? Прицепились к этому примеру :)
Я же не говорю, что именно этот кусок кода нужно "сувать" в делфи....
Я показал основную часть задуманного... Ну Вот:
Y:=10;
Z:=(11*2-20)-2; // = 0
try
X:=Y/Z;
except
X:=0;
end;
ShowMessage(InttoStr(X)); //покажет - 0!
Без "гребаной галки", будет только сообщение - "0", а с ней и остановка в отладчике на строке ->X:=Y/Z;
Я так думаю, что покажет 0, или мне это нужно проверить в Делфи? :)
Пока писал про NAN вроде разъяснили... :)
А вот
> Деление на ноль не ошибка, а бесконечность INF
Это я знаю, но... (задумался) неужели подправленный пример в этом посте - лажа?
у меня D7 - компилятор пока вроде считает такое за "ошибку"....
> [24] Anatoly Podgoretsky © (06.07.07 20:25)
> Я говорю про код X := Z/0
Так оптимизатор такое и не пропустит....
Ладно.... всем спасибо за критику:) Вроде все встало на свои места :)
Можно конечно "превратить" ветку в своеобразную статью, как это обычно на этом форуме делается :)
Anatoly Podgoretsky (2007-07-06 20:30:00) [5]> Плохиш (06.07.2007 20:23:23) [23]
NAN будет при 0/0
Anatoly Podgoretsky (2007-07-06 20:30:00) [6]> Плохиш (06.07.2007 20:23:23) [23]
Но даже X := Z/A тоже гарантирует исключения, зависит от контрольного слова процессора.
Интел и многие другие требуют чтобы деление на 0 подчинялось правилам математики, а не ошибкам разработчиков на начальных этапах развития компьютерной науки.
Деление на ноль не ошибка, а бесконечность INF
Anatoly Podgoretsky (2007-07-06 20:25:00) [7]> {RASkov} (06.07.2007 20:15:21) [21]
Я говорю про код X := Z/0
Плохиш (2007-07-06 20:23:00) [8]
> {RASkov} © (06.07.07 20:15) [21]
В твоём третьем примере исключение будет намного позже, потому что x будет равно не ноль, как ты ожидаешь, а NAN.
{RASkov} (2007-07-06 20:15:00) [9]> чесное слова
*слово
{RASkov} (2007-07-06 20:15:00) [10]> [20] Anatoly Podgoretsky © (06.07.07 20:04)
> Не надо приводить другой код, я ничего не говорил про этот.
Анатолий, вот чесное слова не понял..(
Знаю, что хочешь помочь в чем-то, но ... да вот такой я не понятный...(
Где я лажанулся?? У меня в [14] грубо три примера, первые два - они даже не скомпилятся...
остался 3. И в нем я (может быть не явно) хотел показать, что Z=0....
Думаю, смысл-то верно разъяснил в [14] хотя из меня учитель наверное никакой ( Сорри.
и в [18] код... нет - смысл тотже...
:-)
Anatoly Podgoretsky (2007-07-06 20:04:00) [11]> {RASkov} (06.07.2007 19:58:18) [18]
Не надо приводить другой код, я ничего не говорил про этот.
{RASkov} (2007-07-06 20:04:00) [12]> [15] Virgo_Style © (06.07.07 19:47)
> [16] Anatoly Podgoretsky © (06.07.07 19:52)
Я собственно и не про конкретные переменные или расчеты, а просто хотел рассказать для чего нужна галочка в опциях проекта - [3] и [8]
{RASkov} (2007-07-06 19:58:00) [13]> [16] Anatoly Podgoretsky © (06.07.07 19:52)
> X в данном примере никогда не приравняется нулю.
Конкретно дословно в данном ?
Z:=0 - исключение при X:=Y/Z(0) Соответственно except и Х:=0
???
{RASkov} (2007-07-06 19:54:00) [14]> [15] Virgo_Style © (06.07.07 19:47)
Согласен.
Но и не зря написал
> Сам решай нужна она тебе или нет...
:)
И, еще раз, если ты "практически уверен"(как это обычно бывает), в расчетах Z не должен быть=0, то порой долго ищешь проблему, а с "галкой" все будет пучком :)
Anatoly Podgoretsky (2007-07-06 19:52:00) [15]> {RASkov} (06.07.2007 19:37:14) [14]
> ты и не узнаешь, что X приравнялся 0
X в данном примере никогда не приравняется нулю.
Virgo_Style (2007-07-06 19:47:00) [16]Я, честно говоря, так до сих пор и не понимаю, зачем это нужно, во всяком случае, в своем проекте.
Бо если я написалexcept X:=0, то, видимо, мне именно этого и хотелось...
{RASkov} (2007-07-06 19:37:00) [17]> Если галочку убрать, то эти исключения будут обрабатываться в "тихую"....
Т.е. будет работать секция except...
Например:
галка установлена
try
X:=Y/0; -> Здесь прервет отладчик
except
ShowMessage('Нельзя делить на ноль'); -> после отладчика (F9) покажеться это
end;
галка НЕ установлена
try
X:=Y/0;
except
ShowMessage('Нельзя делить на ноль'); -> покажеться это
end;
НО
В таком случае:
Z:=(11*2-20)-2; //Это просто для примера, здесь конечно же все сложнее может быть
try
X:=Y/Z;
except
X:=0;
end;
Без той самой галки, ты и не узнаешь, что X приравнялся 0... и будешь долго вникать почему же программа работает не так как хотелось бы, так как уверен что Z<>0 и соответственно уверенность в том что и секция except не отрабатывается...
{RASkov} (2007-07-06 19:26:00) [18]> [8] _Asph © (06.07.07 17:00)
> Почему? Пропущу сообщение о котором не догадываюсь?
> Хотя отработав это исключение, можно и поставить назад.
Не надо ничего ставить назад, т.е. как я и советую оставить эту галочку на месте...
Единственное неудобство - так это если происходит исключение в секции try - делфи(отладчик) прервет выполнение и покажет то место где произошло исключение, просто убедившись в этом(исключении) - жмем Ок и F9 и прога работает дальше... Если галочку убрать, то эти исключения будут обрабатываться в "тихую"....
Сам решай нужна она тебе или нет... Для "новичков", которым не суть важно, что там происходит, можно и убрать, но те "новички" автоматом идут не по той дороге :) Более того эта опция действует только на конкретный проект, так, что если остановки в отладчике мешают (бывает в циклах) можно и отключить... или стартовать прогу без отладчика..
Vlad Oshin (2007-07-06 17:44:00) [19]странно, я как сбившийся свой хелп починил (методом замены работы -> машины -> delphi :)) так все находится стало :)
Stanislav (2007-07-06 17:26:00) [20]_Asph © (06.07.07 17:00) [8]
у тебя в рабочей программе, которая без delphi будет работать ошибка выводится все равно небудет.