Форум: "Основная";
Текущий архив: 2003.08.04;
Скачать: [xml.tar.bz2];
ВнизДеление на 0 Найти похожие ветки
← →
MVova (2003-07-21 17:39) [0]Всем привет.
На одной машине заметили "фичу", при выполнении данного кода машина зависает на 2 - 60 сек и уходит в перезагрузку.
Windows98
procedure TForm1.Button1Click(Sender: TObject);
var
P : Double;
begin
P := 0;
P := 10/P;
if P = 1 then;
end;
← →
Skier (2003-07-21 17:42) [1]И что ?
← →
Caligula (2003-07-21 17:43) [2]Видимо, хотел, вирус на основе этой штучки сделать...
← →
MVova (2003-07-21 17:50) [3]
> Skier © (21.07.03 17:42)
Неприятно.
Как с этим бороться?
> Caligula (21.07.03 17:43)
И получилось, не скажу как :)
← →
Skier (2003-07-21 17:51) [4]>MVova © (21.07.03 17:50)
> Как с этим бороться?
try-except-end
← →
MVova (2003-07-21 17:57) [5]
> Skier © (21.07.03 17:51)
Если б было так просто.
Не помогает.
← →
ZrenBy (2003-07-21 17:58) [6]>>Skier © (21.07.03 17:51)
Не поможет.
На некоторых процессорах - мгновенная голубая смерть
только явная проверка if(P=0)
← →
MVova (2003-07-21 18:02) [7]
> ZrenBy © (21.07.03 17:58)
Та до этого год работало
← →
Skier (2003-07-21 18:04) [8]Ну...не знаю у меня работает :
var
P : Double;
begin
try
P := 0;
P := 10/P;
if P = 1 then;
except
ShowMessage("Division By Zero !");
end; //try
end;
Но слышал я такую штуку, что деление на ноль уже не является
ошибкой (а является -/+ бесконечностью), таково требование Intel"a к компиляторам.
← →
MVova (2003-07-21 18:07) [9]
> Skier © (21.07.03 18:04)
Оно и должно работать.
Это что-то или с windows или с железом, если кто-то такое исправлял, подскажите.
← →
ZrenBy (2003-07-21 18:09) [10]>>... у меня работает
:). Ага, у меня тоже все работает,
а у заказчика на какой-то левой машине - синий экран.
С тех пор в корку въелось - проверяю на 0
← →
VMcL (2003-07-21 18:09) [11]
$SafeDivide
?
← →
Skier (2003-07-21 18:10) [12]>MVova © (21.07.03 18:07)
Есть ещё баг от программистов Windows для Win95/98 (если я правильно помню...). Баг состоит в некорретном работе (восстановлении) с управляющем словом сопроцессора, только я не уверен что здесь это уместно.
Вот статья : http://www.delphikingdom.ru/helloworld/reals.htm
← →
MVova (2003-07-21 18:20) [13]
> VMcL © (21.07.03 18:09)
$SafeDivide On
$SafeDivide Off
Без разницы, эффект тот же.
← →
VMcL (2003-07-21 18:42) [14]>MVova © (21.07.03 18:20)
Ну это я на всякий случай - это, вроде, только на старых Пнях бывает.
← →
Anatoly Podgoretsky (2003-07-21 19:52) [15]Skier © (21.07.03 18:04)
И правильно.
N=100;
N/10 -> 10
N/1 -> 100
N/0.1 -> 1000
N/0.01 -> 10000
N/0.0...1 -> 0 = 10..................0
N/0 = INF
← →
MVova (2003-07-21 19:58) [16]
> Anatoly Podgoretsky © (21.07.03 19:52)
Я это понимаю. Должно быть сообщение, а не перегружатся.
← →
Романов Р.В. (2003-07-21 19:59) [17]
> Anatoly Podgoretsky © (21.07.03 19:52)
А чему равно
2*Inf/Inf = ? (Inf - бесконечность)
← →
Anatoly Podgoretsky (2003-07-21 20:10) [18]Обратись к математикам, не все операции с бесконечностью имеют смысл и допустимы
← →
Aldor (2003-07-21 20:24) [19]2 Романов Р.В.
Если бесконечности одного порядка, то выражение равно двум, иначе - нулю или бесконечности.
← →
Романов Р.В. (2003-07-21 20:34) [20]Зачем вводить в процессоре понятие бесконечности, если с ним нельзя осуществлять математические операции? С нулем еще не разобрались, а уже руки к бесконечности потянули :)))
← →
Morfein (2003-07-21 20:37) [21]2*Inf/Inf в пределе стремится к единице
← →
Serginio (2003-07-21 21:00) [22]2(Романов Р.В. © (21.07.03 20:34)) На этом все дифферинциальные уравнения все построены. Уровень старших классов. А вот проблема проблема численного решения диф уравнений и увеличения значимости числа актуальна.
← →
Best Gun (2003-07-21 21:35) [23]Че вы херню несете?
2*Inf/Inf
Это неопределенность. Как ни крутитесь
Тоже самое, что 0/0
Или если угодно 2*0/0
← →
JohnJ (2003-07-22 03:03) [24]Best Gun: Ты давно школу закончил?
Inf/Inf=1, если бесконечности равного порядка!!!, т.е. если x->Inf, то x/x=1, x/x^2=0, x^n/x=x^(n-1)=Inf;
а с нулём тоже самое, потому что бескочность, это 1/0.
← →
Alex Konshin (2003-07-22 08:02) [25]Ты это зря про школу вспомнил. Ты сам не прав.
Мы вот еще и университет помним.
вспомни про 2x/x -> 2, бесконечности одного порядка, не так ли?
← →
KSergey (2003-07-22 08:30) [26]ZrenBy © (21.07.03 17:58)
только явная проверка if(P=0)
И часто такая проверка помогает при условии, что P типа Real, например? Как-то сомнения разбирают...
← →
121 (2003-07-22 10:18) [27]>2*Inf/Inf
производную ищитеЖ)
← →
Fantasist (2003-07-23 05:55) [28]
> если бесконечности равного порядка
Вообще, конечно, "порядок бесконечности" - это новое слово в математике. Они так и говорят: бесконечность порядка n деленая на бесконечность порядка n-1 дает бесконечность порядка 1. А ежели наоборот, то это бесконечность порядка -1. Что самое интересное при этом, что бесконечность порядка 1 равна бесконечности любого положительного порядка, а бесконечность отрицательного или равного нулю порядка равна нулю. Так что с бесконечнотсями теперь полный порядок.
> 2*Inf/Inf в пределе стремится к единице
В пределе чего? Бесконечности? Типа при бесконечности стремящейся к бесконечности данное выражение стремиться к 2*1. Однко же если бесконечность никуда не устремлять (т. е. не рассматривать ее в пределе), то явная неопределенность. Вообще, предел бесконечности - это тоже новое слово в математике, но о нем в следующий раз.
> (а является -/+ бесконечностью), таково требование Intel"a
> к компиляторам
Ага, а в процессоре будет специальный регистр IF (Infinity Flag), который будет высталяться при делении на ноль. Куда эту бесконечность записывать? Или просто зафигачивать максимальное значение в переменную? Как много процессор знает о переменных?
Страницы: 1 вся ветка
Форум: "Основная";
Текущий архив: 2003.08.04;
Скачать: [xml.tar.bz2];
Память: 0.51 MB
Время: 0.014 c