|
Форумный житель
Регистрация: 08.06.2005
Адрес: Филадельфия
Сообщений: 320
Благодарностей от вас: 0
Вас поблагодарили 13 раз(-а) в 7 сообщении(-ях)
|
"Из твоего ответа логически вытекает, что в случае деления на ноль любой компьютер должен подвиснуть, вариантов нет."
Компьютер не подвиснет, а завершит программу аварийно с состоянием, которое называется ZERO DIVIDED (деление на ноль).
То есть, программа не выполнит свой код до конца нормально, а следовательно, результат достигнут не будет.
В случае Больших Машин (Mainframe)(по которым я специалист) аварийный код состояния подобного рода в шестнадцатиричной системе исчисления равен 0CB (в персональных компах я не знаю).
В высшей математике деление на ноль дает бесконечность, если числитель тоже не равен нулю или бесконечности. Если равен, то такое состояние называется состоянием неопределенности. Его можно раскрыть в том случае, если числитель и/или знаменатель являются функциями от одного или нескольких аргументов, причем непрерывными функциями. Тогда можно воспользоваться так называемым правилом Лопиталя, беря производную функции по аргументу(ам) (это можно сделать несколько раз). Если производная числителя (первая, вторая и т.д.) не будет равна нулю или бесконечности, то неопределенность будет раскрыта. При этом, если производная знаменателя по-прежнему будет равна нулю, ответ будет равен бесконечности. А если и производная числителя, полученная путем дифференциации функции (один или несколько раз), по-прежнему будет равна нулю (или бесконечности), то тут уж простите, раскрытие неопределенности невозможно.
Однако в программировании дифференциальное исчисление использоваться не может, ибо оно оперирует с непрерывными величинами (функциями).
Можно написать код, который защитит арифметическую операцию деления на ноль. Код довольно простой: перед тем, как делить, проверить делитель на ноль. Если он равен нулю, не делит на него.
Допустим, мы хотим A разделить на B, а результат присвоить С .
Мы не пишем код прямо: C = A/B
Мы пишем:
if B not = 0
then C=A/B
else
...
end-if
Если B не равно нулю, то тут всё понятно. Тогда можно A делить на B.
А вот если B = 0, тогда извините.
Тут уж от программиста зависит, что он хочет (это ветка else - иначе).
Он может написать else C=0 или C=1 или даже C=100 в зависимости от того, что ему надо. Но это, если он знает, что ему надо. А если не знает, тогда - проблемы. Так вот, эта ситуация несколько напоминает ситуацию с ботом. Программист, кодирующий бот, не может знать, какое конкретное значение С при B, равном нулю, может пожелать тот или иной Форум, чтобы закодировать его программно заблаговременно.
То есть, ситуацию, при которой B = 0, можно сравнить с тем неизвестным состоянием, которое заранее просчитать программой невозможно (в отличии от соcтояния, когда B не равно нулю, и тогда эту ситуацию можно просчитать, как безусловную, равную отношению A на B).
Вот таков, Сусанин, анализ чисто математической модели, которую вы пожелали интерпретировать в случае нестандартной ситуации, коей вы выбрали ситуацию с математическим делением на ноль.
|