Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Система";
Текущий архив: 2002.10.03;
Скачать: [xml.tar.bz2];

Вниз

Try..Except...   Найти похожие ветки 

 
wdr   (2002-07-23 08:23) [0]

Почему-то на двух компутерах (из 20) не поддерживается обработка исключительной ситуации при попытке деления на 0.
Подскажите, кто знает, в чем может быть причина. На одном из этих компов установлен проц Сел-333 и Win-98, на другом
Duron-850 и Win-98. Вот пример проги:

procedure TForm1.Button2Click(Sender: TObject);
var
X, Y, Z: real;
begin
X:=StrToFloat(Edit1.Text);
Y:=StrToFloat(Edit2.Text);
try
Z:=X / Y;
Edit3.Text:=Format("%15.2f", [Z]);
except
ShowMessage("!!! ERROR !!!");
Edit3.Text:="ERROR";
end;
end;

Проще некуда, но если делить на 0, то сразу "синий экран смерти",
хорошо, хоть перезагрузки не требуется.

Спасибо, Alex.


 
kerberos   (2002-07-23 09:22) [1]

Посмотри какой на этих машинах установлен системный разделитель


 
Lord Warlock   (2002-07-23 09:36) [2]

вообще-то неплохо StrToFloat поместить в try


 
doomin   (2002-07-23 09:49) [3]

Такие серьезные аппаратные исключения лучше не обрабатывать а не допускать. Ресурсов это займет меньше... Можно просто проверить Y на предмет нуля. А StrToFloat настоятельно рекомендуется поместить в try..except


 
VICTOR_   (2002-07-23 11:31) [4]

>wdr © (23.07.02 08:23)
>Почему-то на двух компутерах (из 20) не поддерживается >обработка исключительной ситуации при попытке деления на 0.
Вероятно, у тебя материнка с VIA логикой. Сам сталкивался с такой проблемой.
Варианты решения
1.Поменяй материнку на Intel логику
2.Поставь WIN2000,NT,XP
3.Делай проверку типа
If Y <> 0 then


 
AlSok   (2002-07-23 12:32) [5]

VIA zdes" ne prichem.
J proverjl raboty na samih raznih konfigyracijh, nachinaj s 600MGz pojvljetsj takaj oshibka.
Eto voznikaet ne tol"ko v slychae s deleniem na 0, no i pri perepolnenii float tipa, ymnojenie, fynkcij "power", ...;
Takje pri izvlechenii kornj iz NAN, v fynkcii "tan", "arctan" pri zadanii nedopystimih znachenii.
V svoe vremj ob etom pisali Borlandy, no on otmalchivalsj, a obnaryjili eto esche v Delphi4.
-----
Samii pravil"nii pyt" eto vsegda proverjt" na dopystimost" operacii i ne ispol"zovat" try-except.


 
IlyaA   (2002-07-24 09:52) [6]

Замечание:
Я провёл несколько эксперементов и замитил что если писать a:=b/0, то Exception Raised, а если писать a:=1/0, то нет.


 
Вячеслав   (2002-07-24 13:52) [7]

Никогда не делай >> проверку типа
If Y <> 0 then...
Никакого разумного результата не будет. Знаменатель надо сранивать не с нулем, а с малым числом, близким к нулю с нужной точностью. И не на равенство, а на больше/меньше.
И StrToFloat действительно нужно загнать в обработчик исключений.


 
Anatoly Podgoretsky   (2002-07-24 14:01) [8]

IlyaA (24.07.02 09:52)
Ты думаешь это выполняется a:=1/0? Компилятор не настолько дурной.


 
Ростопопулас   (2002-07-24 14:03) [9]

А железо одинаковое на этих компах или нет?


 
IlyaA   (2002-07-24 14:14) [10]

> Anatoly Podgoretsky - А ты попробуй.
Я пробовал перед тем как написал. В данном случае он выдёт INF при сл. выводе ShowMessage(FloatToStr(a));


 
МИФИст   (2002-07-24 15:57) [11]

procedure TForm1.Button2Click(Sender: TObject);
var
X, Y, Z: extended;
begin
X:=StrToFloat(Edit1.Text);
Y:=StrToFloat(Edit2.Text);
if Y=0 then
begin
ShowMessage("!!! ERROR !!!");
Edit3.Text:="ERROR";
Exit;
end;
Z:=X / Y;
Edit3.Text:=Format("%15.2f", [Z]);
end;


 
AlexanderVasjuk   (2002-07-25 11:26) [12]

Подобная проблема знакома. Причем в целочисленной арифметике. На Intel все нормально, на AMD - фатальный глюк глюк. Пришлось ставить проверку на нуль, всё ОК.


VICTOR_ (23.07.02 11:31)
Менять материнки у всех юзеров накладно однако.


 
wdr   (2002-07-25 11:38) [13]

Проверку типа <<If Y <> 0 then...>> делать не собираюсь, т.к.
try ... except специально для этого и придумали. По поводу железа могу сказать следуещее: два абсолютно одинаковых компа, на одном Win-98, на другом XP. Проц:- Duron-850. Где 98 - смерть,
на ХР все O"k.


 
AlexanderVasjuk   (2002-07-25 12:37) [14]

wdr © (25.07.02 11:38)

Ну, если "смерть" тебя устраивает...


 
VICTOR_   (2002-07-25 15:18) [15]

>AlexanderVasjuk © (25.07.02 11:26)
>Подобная проблема знакома. Причем в целочисленной арифметике. >На Intel все нормально, на AMD - фатальный глюк глюк. Пришлось >ставить проверку на нуль, всё ОК.
Проблему решал аналогично
По опыту работы - проблема не в процессоре AMD + WIN98, а в материнке VIA + WIN98(напр. VIA KT133/A). К сожалению не могу сказать на всех ли новых VIA-материнках проявляется эта ошибка

>Менять материнки у всех юзеров накладно однако.
Согласен, но никто не гарантирует, что подобная ошибка не вылезет в другой аналогичной, но чужой, программе.

>AlSok (23.07.02 12:32)
Ты точно проверял на материнках с Intel-логикой или только были разные процессоры?


 
987   (2002-07-26 00:04) [16]

О, у меня похожая проблема. Можете глянуть
<Просто кошмар!!! Ln(X), где X 0 вешает Win98>


 
987   (2002-07-26 00:13) [17]

Да, тут некоторые высказывали мнения, что нужно самому что-то там проверять. Так делать нельзя. Во-первых, всех случаев можно у не учесть. А Во-вторых, что самое главное, это-же очень медленно!!! Хорошо, если нужно проверить при вводе юзера. А если надо 1000 раз в секунду? Именно, что только try..except. Только как?

А это только на Дельфи? Если на каком нибудь VC++?


 
wdr   (2002-07-26 07:17) [18]

Благодарю всех за столь бурное обсуждение этой проблемы.
Вчера установил ХР на Duron и ни-каких проблем с делением на 0
не было. Советую всем, у кого аналогичная проблема, установить
XP (если позволяею ресурсы железа). Проблема не только в материнке с VIA. У меня на двух компах VIA-Appolo и Win-98,
все работает как надо. Это наверное "черная дыра", как в Бермудском треугольнике.



Страницы: 1 вся ветка

Форум: "Система";
Текущий архив: 2002.10.03;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.48 MB
Время: 0.007 c
1-7978
Осирис
2002-09-20 14:18
2002.10.03
Отладка VCL


3-7797
Dmitry Toropov
2002-09-10 17:14
2002.10.03
ADO не работает


4-8240
MMT
2002-08-16 14:17
2002.10.03
Количество страниц отпечатанных принтером


3-7874
strahov
2002-09-09 17:40
2002.10.03
Потушите пожар в мозгах !!!!!


1-8035
Korona
2002-09-22 15:35
2002.10.03
Почему не работает енаблед?





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский