Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 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
14-10359
DenKop
2003-07-17 14:18
2003.08.04
Где взять простой ftp сервер для win.


14-10454
Denister
2003-07-18 07:05
2003.08.04
А как же VCL?


3-10139
AndDem
2003-07-15 08:12
2003.08.04
Коннект к листу Excel из Delphi


7-10480
fil
2003-05-25 11:58
2003.08.04
Автозагрузка программы как сервис в win NT 2000 XP


1-10232
Fay
2003-07-21 09:24
2003.08.04
Что значит такое объявление параметров?





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский