Меня тут окружающие гуманитарии время от времени спрашивают: почему нельзя
делить на ноль, и можно ли, если очень хочется?
Отвечаем:
можно всё! Но не всё возможно. А некоторые вещи так вообще нельзя. Просто надо понимать, что означает слово "нельзя" в каждом конкретном случае.
Можно попросить программу или железку поделить на ноль, просто вам результат может не понравиться. В совсем печальном случае (например, программа будет делить методом вычитания) вы просто никогда не дождётесь результата вычисления. Но вы ждите, ждите, результат скоро будет! Ваш звонок очень важен для нас! В хорошем случае мы всё же получим результат, просто неподготовленного человека он может повергнуть в шок, например: ЕГГОГ, INT 0, SIGFPE, ArithmeticException, DivideByZeroException, NAN и ещё много других страшных слов, в зависимости от платформы. Подготовленный же человек может быть и таким результатом вполне доволен, ну или хотя бы уметь с ним справляться, так что ему —
можно.
Можно взять бумажку, начать процедуру деления на ноль в столбик и обнаружить, что предлагаемый алгоритм не даёт нам нормального ответа, что же нам делать на первом же шаге. Что ни подставляй вместо первой цифры ответа — всё равно ерунда получается. Алгоритм не определён для таких данных, а значит — "нельзя" выполнить его. А так-то
можно писать на бумаге что угодно, она всё стерпит :)
Или вот обратимся к арифметике, возьмём функцию
f(x,y)=x/y и с удивлением обнаружим, что она не определена в области
y=0. Спросить-то её тоже
можно, просто она ответа не знает, так что получить ответ на свой вопрос — "нельзя". А
можно доопределить функцию, и тогда станет опять
можно даже получить ответ. Математики всю историю так и делают, придумывая то ноль, то бесконечности разных видов, то комплексные числа, то ещё более страшные слова, которые неподготовленный человек даже и не слышал (со словом "бесконечность" хуже: слышал, и потому полагает, что знает его значение, что в общем случае неверно). Обычно выкручиваются, расширяя область разрешённого, однако, даже им кое-что нельзя, а именно: допустить внутренние противоречия в построенной логической системе.
Вроде, с математикой всё. Перейдём от абстрактной арифметики к более ощутимым "нельзя".
( Read more... )