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