Как делить на ноль?

1. Вобще-то уже все поделили до нас!

1.1 Аффинное расширение числовой прямой

Начнем с того, с чего начинают, наверное, все искатели приключений при делении на ноль. Вспомним график функции.

Слева и справа от нуля функция уходит в разные стороны «небытия». В самом нуле вообще “омут” и ничего не видно.
Вместо того, чтобы бросаться в «омут» с головой, посмотрим что туда втекает и что оттуда вытекает. Для этого воспользуемся пределом — основным инструментом математического анализа. Основная “фишка” в том, что предел позволяет идти к заданной точке так близко, как это возможно, но не “наступить на нее”. Такая себе “оградка” перед “омутом”.

Оригинал
Хорошо, «оградку» поставили. Уже не так страшно. У нас есть два пути к «омуту». Зайдем слева — крутой спуск, справа — крутой подъем. Сколько к “оградке” не иди, ближе она не становится. Пересечь нижнее и верхнее «небытие» никак не выходит. Возникают подозрения, может мы идем по кругу? Хотя нет, числа-то меняются, значит не по кругу. Пороемся в сундучке с инструментами математического анализа еще. Кроме пределов с «оградкой» в комплекте идет положительная и отрицательная бесконечности. Величины совершенно абстрактные (не являются числами), хорошо формализованы и готовы к употреблению! Это нам подходит. Дополним наше «бытие» (множество вещественных чисел) двумя бесконечностями со знаком.

Математическим языком:
Именно это расширение позволяет брать предел при аргументе стремящемся к бесконечности и получить бесконечность в качестве результата взятия предела.
Есть два раздела математики которые описывают одно и тоже используя разную терминологию.

С геометрической точки зрения выполнено аффинное расширение числовой прямой. То есть привычная последовательность вещественных чисел “сжата” так, чтобы можно было оперировать границами этой последовательности. В качестве границ (условных) введены две абстрактные бесконечно большие величины. Расширение аффинное, но это не значит что оно пришло из Греции, это значит что сохраняется относительное положение точек (в нашем случае чисел) на прямой. Отсюда и следует, что сохраняются отношения “больше” и ”меньше” как для чисел между собой, так и в сравнении с границами.


С точки зрения общей топологии выполнена двухточечная компактификация числовой прямой путем добавления двух идеализированных точек (бесконечностей с противоположным знаком).

1.2 Проективное расширение числовой прямой

Прогуливаясь по графику, у нас есть только два пути к нулю (слева и справа). В конце каждого пути стоит небольшая «оградка». По странному стечению обстоятельств одна и та же «оградка» оказалась и на дне и на вершине «бытия». Если мы хотим чтобы пути сошлись, то за «оградкой» нам нужен телепорт из одного конца «бытия» в другой. Мы уже такие телепорты видали. Не проблема.

Попробуем состыковать обе границы «бытия» так, как это делали наши предки. Перейдем на одно измерение выше. Отобразим одномерную линию на двумерной плоскости.

После стыковки наличие двух знаковых бесконечностей теряет смысл. Вместо них можно ввести одну общую точку пересечения, беззнаковую бесконечность.


Эта стыковка очень похожа на линию перемены даты находящуюся (в основном), между часовыми поясами UTC+12 и UTC-12 в Тихом океане. Именно там находится телепорт из сегодня во вчера и из сегодня в завтра. У нас же телепорт из сверхмалых в сверхбольшие.
Математическим языком:
По факту это самостоятельное расширение, проведенное над исходным множеством вещественных чисел. Данное расширение не основывается на рассмотренном ранее аффинном расширении.
С геометрической точки зрения выполнено проективное расширение числовой прямой (есть информация на wolfram.com). То есть введена идеализированная точка которая соединяет оба конца вещественной прямой. Так как расширение не аффинное, сравнение вещественных чисел с бесконечностью не определено.
С точки зрения общей топологии выполнена одноточечная компактификация числовой прямой путем добавления идеализированной точки (бесконечности без знака).
Аналогичным расширением над полем комплексных чисел является широко известная в математических кругах Сфера Римана.
Хорошо, избавились от знака минус. Однако в нуле у нас разрыв второго рода и устранимой точкой разрыва его нельзя считать по определению. Нарушается требование «конечности» предела. Соответственно мы не можем судить о равенстве предела справа и слева.
Но так как приближение к бесконечности выполняется по одинаковым правилам, мы можем утверждать что пределы слева и справа совпадают. Соответственно мы можем принять наш разрыв за точку устранимого разрыва в бесконечности.
Математическим языком:
Посмотрим внимательнее, как мы оперируем бесконечно большими и малыми величинами. При операциях мы часто пренебрегаем малыми низшего порядка попросту отбрасывая их при записи результата.


Аналогичная ситуация при нахождении производных

Отбрасывая «мелочевку» мы теряем информацию! Это хорошо видно на примере взятия пределов. Рассмотрим две функции, которые стремятся к положительной бесконечности при стремлении аргумента к нулю справа.

Однако одинаковая запись результата взятия предела не свидетельствует о их равенстве. Данные бесконечности разного порядка и это подтверждается отсутствием конечного предела в отношении одной функции к другой.

В нестандартном анализе такие упрощения не допустимы. Поле вещественных чисел расширяется путем введения гиперреальных чисел. Бесконечно малые представлены в виде привычного значения — ноль, но в довесок хранится вся выкинутая “мелочевка”. Для бесконечно больших потенциальная бесконечность (две или одна — неважно), разбивается на множество актуальных бесконечностей. С одной стороны мы усложняем (теряем возможность поглощения/пренебрежения). С другой стороны мы приобретаем возможность сравнения бесконечно малых и бесконечно больших величин. А это значит что мы можем рассматривать бесконечности как числа.

Для функцииактуальные бесконечности слева и справа от нуля равны (по модулю, т.е. не учитывая знак), так как:

  • с обеих сторон путь (количество элементов, которые нужно пройти) от нуля до бесконечности одинаков;
  • алгоритм приближения (формула в виде дроби) одинаков;
  • знак минус в алгоритме не влияет на скорость или ускорение приближения к бесконечности.

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

В математической модели, использующей проективное расширение числовой прямой, деление на ноль определено.

Создается впечатление что наша задача решена. Однако не будем спешить, посмотрим к каким последствиям это привело. В дополнение к делению в системе определены следующие операции (напомним, что бесконечность беззнаковая).

Практически все они с дополнительными условиями, это настораживает. Но не будем спешить, лучше посмотрим на список неопределенных операций:

Посмотрим как будет вести себя дистрибутивный закон. Подставим в него определенные значения и выполним требуемые операции.

Как следствие, часть тождеств перестает вести себя так как мы привыкли. Однако, они не исчезли бесследно. Дистрибутивный закон работает только справа налево (т.е. в случае, когда правая часть равенства определена). Это один из ярких примеров негативных последствий. Другие же тождества сохранилась в более-менее устойчивой форме.
Подытожим:

  1. Изменилось привычное поведение тождеств. Чтобы ими оперировать, нужно не забывать про новые дополнительные условия.
  2. Искажено привычное поведение нуля. Мы привыкли рассуждать, если ноль раз взять что-либо, то будет ноль. Однако в данной алгебраической системе произведение нуля на бесконечность не определено. Соответственно алгебраическое выражение с переменными, в котором встречается например такая запись , не может быть упрощено в одностороннем порядке.
  3. Исчезает возможность привычного сравнения. Сравнение на больше-меньше определено только на части пространства. Например, сравнение вещественных чисел с бесконечностью не определено.
  4. Полученная алгебраическая структура не поле в терминах общей алгебры. Нарушается дистрибутивный закон (показано выше). Так же не существует обратного элемента для бесконечности (произведение этого элемента и бесконечности должно дать единицу). Последние можно рассматривать как следствие неопределенности деления бесконечности на бесконечность. Но все же следует понимать что это грубое упрощение. Строгое определение обратного элемента не связано с операцией деления.

В сухом остатке. Старые подходы перестали работать. Сложность системы, в виде кучи “если”, “для всех, кроме” и т.п., возросла. У нас было только две неопределенности 1/0 и 0/0 (мы не рассматривали степенные операции), стало пять. Раскрытие одной неопределенности породило еще больше неопределенностей.

1.2 Колесо

На введении беззнаковой бесконечности все не остановилось. Для того чтобы выбраться из неопределенностей нужно второе дыхание.
Итак, у нас есть множество вещественных чисел и две неопределенности 1/0 и 0/0. Для устранения первой мы выполнили проективное расширение числовой прямой (то есть ввели беззнаковую бесконечность). Попробуем разобраться со второй неопределенностью вида 0/0. Сделаем аналогично. Дополним множество чисел новым элементом, представляющим вторую неопределенность.

Определение операции деления основано на умножении. Это нам не подходит. Отвяжем операции друг от друга, но сохраним привычное поведение для вещественных чисел. Определим унарную операцию деления, обозначаемую знаком «/».

Доопределим операции.

Данная структура называется «Колесом» (Wheel). Термин был взят из-за схожести с топологической картинкой проективного расширения числовой прямой и точки 0/0.

Вроде все неплохо выглядит, но дьявол кроется в деталях:

  • Умножение ∞ либо ⊥ на ноль не дает ноль. Это приводит к тому, что в общем случае.
  • Для ∞ и ⊥ отсутствуют обратные элементы по обеим бинарным операциям. Это значит, что по умножению в общем случае. Как следствие, нет возможности ввести бинарную операцию деления покрывающую все пространство.
  • Симметричная ситуация по сложению, в общем случае.

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

Математическим языком:
С точки зрения общей алгебры мы оперировали полем. А в поле, как известно, определены всего две операции (сложение и умножение). Понятие деления выводится через обратные, а если еще глубже, то единичные элементы. Внесенные изменения превращают нашу алгебраическую систему в моноид как по операции сложения (с нулем в качестве нейтрального элемента), так и по операции умножения (с единицей в качестве нейтрального элемента).
В трудах первооткрывателей не всегда используются символы ∞ и ⊥. Вместо этого можно встретить запись в виде /0 и 0/0.
Мир уже не так прекрасен, не правда ли? Все же не стоит спешить. Проверим, справятся ли новые тождества дистрибутивного закона с нашим расширенным множеством.

На этот раз результат намного лучше.
Подытожим:

  1. Все операции хорошо определены и нет возможности «вывалиться за борт».
  2. Элементарная алгебра является частным случаем колеса. Если мы отбросим надстройки ∞ и ⊥ (то есть снова сможем утверждать что и ), то все формулы выродятся в привычные.
  3. По ощущениям все что было “не определено” (Undefined) при проективном расширении было обозначено символом . Данный объект так же поглощает все с чем столкнется как и “не определено”. Все щели, где появились неопределенности при проективном расширении, были заткнуты данным объектом.

В сухом остатке. Алгебра работает отлично. Однако за основу было взято понятие «не определено» которое стали считать чем-то существующим и оперировать им. Однажды кто-нибудь скажет, что все плохо и нужно разбить данное «не определено» еще на несколько “не определено», но помельче. Общая алгебра скажет: “Без проблем, Бро!».
Примерно так постулированы дополнительные (j и k) мнимые единицы в кватернионах.
Стоит отметить, существуют и другие алгебраические системы с делением. Например, «луга» (common meadows). Они чуть проще, так как не расширяют пространство, вводя новые элементы. Цель достигается как в колесах, трансформацией операций сложения и умножения, а так же отказом от бинарного деления.
Возможность «передвигать неизвестные» для математики норма. Но все эти обертки не дают ответа на главный вопрос, что же там внутри?

Полезная литература

В информатике

В программировании, в зависимости от языка программирования, типа данных и значения делимого, попытка деления на ноль может приводить к различным последствиям. Принципиально различны последствия деления на ноль в целой и вещественной арифметике:

  • Попытка целочисленного деления на ноль всегда является критической ошибкой, делающей невозможным дальнейшее исполнение программы. Она приводит либо к генерации исключения (которое программа может обработать сама, избежав тем самым аварийной остановки), либо к немедленной остановке программы с выдачей сообщения о неисправимой ошибке и, возможно, содержимого стека вызовов. В некоторых языках программирования, например, в Go, целочисленное деление на нулевую константу считается синтаксической ошибкой и приводит к аварийному прекращению компиляции программы.
  • В вещественной арифметике последствия могут быть различным в разных языках:
  • генерация исключения или остановка программы, как и при целочисленном делении;
  • получение в результате операции специального нечислового значения. Вычисления при этом не прерываются, а их результат впоследствии может быть интерпретирован самой программой или пользователем как осмысленное значение или как свидетельство некорректности вычислений. Широко используется принцип, согласно которому при делении вида a⁄0, где a ≠ 0 — число с плавающей запятой, результат оказывается равен положительной или отрицательной (в зависимости от знака делимого) бесконечности — +INF или −INF, а при a = 0 в результате получается специальное значение NaN (сокр. от англ. not a number — «не число»). Такой подход принят в стандарте IEEE 754, который поддерживается многими современными языками программирования.

Случайное деление на ноль в компьютерной программе порой становится причиной дорогих или опасных сбоев в работе управляемого программой оборудования. К примеру, 21 сентября 1997 года в результате деления на ноль в компьютеризированной управляющей системе крейсера USS Yorktown (CG-48) Военно-морского флота США произошло отключение всего электронного оборудования в системе, в результате чего силовая установка корабля прекратила свою работу.

> См. также

  • Деление (математика)
  • Делитель нуля
  • Асимптота