![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Просто кошмар!!! Ln(X), где X < 0 вешает Win98 [D6, Win95/98]
987 © (2002-07-25 22:36:00)Ln(X), где X < 0 глючит в Win98
Пример:F := Ln(-1.0)
В Win95, WinXP это работает как и подобает, с генерацией "Invalid Floating Point Operation".
То-же в Win98 ругается Internal Error и, часто, Blue Screen of Deth. Но самое интересное, что это происходит (не только на моём компе) не каждый раз, а где-то на каждый 10-й.
Вот пример программы:
programLog;
uses
SysUtils;
var
F: Extended;
begin
repeat
try
F := Ln(-1.0)
except
end
untilFalse
end.
ACR (2002-07-29 22:47:00) [1]Думаю если масдайцам пофиг то и Borland"у пабарабану....
тут читил у Borland"a отрифки из чатов с програмистами из проекта Builder C++, там адин чел спрашивает типа уменя все глючит, нифига ниработает, типа ваще атстой... иму грят типа а какая OS? он типа Win98... ну и ему культурна так атвичают типа засунь ее себе куданить не еб%%и мозг и паставь NT .. так-та
987 (2002-07-29 22:38:00) [2]Прерывания от FPU не Борланд а Windows ловит. Полное гавно. А если Борланду написать? Они хоть читают?
987 (2002-07-29 22:36:00) [3]А что, в VC++ тоже так?
987 (2002-07-29 22:32:00) [4]Ничего в Math.pas не проверяется. А с чего взяли, что if с вещуственными аргументами будет быстро работать?
Denvor (2002-07-28 03:16:00) [5]Я вот недавно компилировал проэкт, тоже с явной ошибкой через try ...except. Самое интересное, что пока компилировал Делфа всё время выдавала ошибку, а запустил так, как программу, так всё прекрасно работало. Может Делфа обработчики ошибок при компиляции опускает, чтобы программер мог все ньюансы видеть?
А ты найди модуль Math.pas и посмотри что там происходит, если присылается недопустимый аргумент. Можешь подправить, как тебе удобно.
Mystic (2002-07-27 23:50:00) [6]Я сам натыкался на подобные грабли, только под ME и с Sqrt.
Проверка if X > 0.0 спасла ситуацию, правда ее не всегда приятно вставлять, если вычислений много.
Юрий Зотов (2002-07-27 17:40:00) [7]> Direx (27.07.02 10:37)
Это Вы мне, или постановщику вопроса?
Direx (2002-07-27 10:37:00) [8]> Это-же очень медленно!!!
> ... Именно, что только try..except
А вам не кажется, что время работы if"а настолько меньше времени работы ln, что подобный вопрос даже ставить глупо?
ACR (2002-07-27 01:57:00) [9]смешно канешно но на a = b / c, при с=0 если a,b,c Extended Win98 тоже падает, а если int то все в парядке, вообще любые операции с сопроцессором которые вызываю ошибку а соответственно и прерывание... запросто могут павешать винды... можно атключить генерацию прерываний сопрацессара но тагда и исключений небудет... вобщем M$ Х... Бл.. Пи.. .ры ....
Юрий Зотов (2002-07-27 01:14:00) [10]> Это-же очень медленно!!!
> ... Именно, что только try..except
Ох, сдается мне, что try..except будет НАМНОГО медленнее, чем обычное if X > 0 then...
Защищенные блоки - штука очень мощная и очень удобная, но ДАЛЕКО не "бесплатная". Одна лишь реализация их стекового механизма обходится НАМНОГО "дороже" простого IF. И по скорости, и по памяти.
987 (2002-07-26 22:48:00) [11]Так делать нельзя. Это-же очень медленно!!! Хорошо, если нужно проверить при вводе юзера. А если надо 1000 раз в секунду? Именно, что только try..except. Только как?
А это только на Дельфи? Если на каком нибудь VC++?
IlyaA (2002-07-26 12:45:00) [12]А на кой тебе такое. Проверяй X > 0. Не фиг честных людей в заблуждение вводить.
А можно доопределить Ln на (-бесконечнось,0] и назвать его лагорифмом 987-го эксперементатора.
Слесарь Матерящийся (2002-07-25 23:04:00) [13]Просто здОрово!
Система САМА приучает программеров к дисциплинированности!
Прекрасно!