Почему на самом деле нельзя делить на ноль? Физический и аксиоматический подходы

от автора

Знаете, какой вопрос математикам и популяризаторам науки задают чаще всего? Нет, это не просьба на пальцах объяснить теорему Пуанкаре или устройство квантового компьютера. Взрослые, состоявшиеся люди и даже журналисты с серьезным видом просят растолковать совершенно базовые вещи: например, почему 2 \times 2 = 4 или почему, всё-таки нельзя делить на ноль.

И в этом нет ничего постыдного. Проблема кроется в том, как устроена школа. Там нам просто выдали набор аксиом в виде «заученных правил». Учительница строгим голосом отрезала: «На ноль делить нельзя!», и на этом дискуссия была окончена. Большинство из нас приняло это как догму, эдакое математическое табу, не пытаясь докопаться до сути. Заучили, сдали контрольную и пошли дальше.

Но мы инженеры и айтишники, мы не привыкли верить на слово или следовать правилам, не понимая, как работает механизм под капотом.

В этой статье мы окончательно закроем этот детский гештальт. Чтобы понять природу запрета на деление на ноль, мы используем два принципиально разных подхода. Первый — физический: он очень наглядный, жизненный и объясняет проблему через пределы. Второй — формально-математический: строгий, опирающийся на сухую логику и аксиомы.

Давайте разбираться.

2. Физический (интуитивный) подход: Парадокс бесконечного диска

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

Представьте себе мысленный эксперимент. Вы — системный администратор, и вам выделили сервер с новеньким SSD-накопителем объемом ровно 1000 ГБ (для простоты расчетов опустим степени двойки). Ваша задача — распределить это место между пользователями корпоративного облака.

  • Шаг первый: щедрый. Вы решаете выделить каждому пользователю квоту в 10 ГБ. Простая арифметика подсказывает, что вашего диска хватит ровно на 100 человек.

  • Шаг второй: экономный. Приходит эффективный менеджер и говорит, что 10 ГБ — это перебор, люди будут хранить там фильмы. Отныне квота составляет строго 1 ГБ. Что происходит математически? Мы берем наши 1000 ГБ, делим на порции по 1 ГБ и понимаем, что теперь на сервере поместится уже 1000 пользователей.

  • Шаг третий: хардкорный. Правила снова ужесточились. Теперь облако используется только для хранения крошечных текстовых конфигов. Квота урезается до 1 МБ (это 0,001 ГБ). Сколько юзеров теперь получат место? Мы делим 1000 на 0,001 и получаем внушительную цифру: нашего терабайтного диска хватит на 1 000 000 пользователей.

Вы уже наверняка уловили суть парадокса. Мы наблюдаем классический переход к пределу в реальной жизни: чем на меньшую квоту (делитель) мы делим наш фиксированный объем диска, тем большее число пользователей (результат) мы можем завести в системе.

А теперь доводим ситуацию до абсолютного логического финала. Что будет, если мы станем выдавать каждому юзеру квоту объемом ровно в 0 байт? Логика предела неумолима: если выделяемое место равно нулю, мы сможем вместить бесконечное множество пользователей. Вы будете бесконечно создавать новые пустые учетные записи, а место на SSD никогда не закончится.

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

3. Формально-математический (аксиоматический) подход

Физические аналогии с SSD-накопителем — это здорово для понимания «на пальцах». Посмотрим, как этот запрет устроен на уровне «исходного кода» самой математики.

Для начала давайте вспомним, что вообще такое деление в своей первооснове. В математике деление — это не какая-то самостоятельная, базовая сущность. Это всего лишь операция, обратная умножению. Мы придумали деление просто как удобный способ открутить умножение назад.

Отсюда рождается строгая аксиома. Запись A / B = C верна тогда и только тогда, когда существует такое число C, которое при умножении на B вернет нам исходное число A.

То есть:

\frac{A}{B} = C \iff C \times B = A

Всё просто. Если мы говорим, что 6 / 2 = 3, то это верно только потому, что существует число 3, которое при умножении на 2 дает 6.

А теперь давайте включим режим хакера и попробуем сломать систему — разделим ненулевое число на ноль. Возьмем для примера единицу. Допустим, это возможно, и результат равен какому-то числу C:

\frac{1}{0} = C

Теперь, пользуясь нашей аксиомой, сводим эту задачу к операции умножения. Мы должны найти такое число C, которое при умножении на ноль даст единицу:

C \times 0 = 1

И вот тут мы утыкаемся в глухую стену. В математике существует фундаментальное свойство нуля. Какое бы гигантское, микроскопическое, рациональное или комплексное число C мы ни взяли, при умножении на 0 оно всегда превратится в 0. Всегда. Без исключений.

Получается уравнение:

0 = 1

А это очевидный бред. Число 0 никак не равно 1.

Вывод: в нашей числовой системе просто физически не существует такого элемента C, который мог бы решить это уравнение. Нельзя разделить единицу (или любое другое число, кроме нуля) на ноль, потому что у этой операции нет математического смысла. Программа выдает ошибку компиляции из-за отсутствия подходящего аргумента. Чисто технически операция невозможна.

4. А что, если поделить 0 на 0?

А теперь давайте перейдем к самому вкусному — краевым случаям (edge cases). Любой тестировщик или разработчик знает: если хочешь проверить логику на прочность, подай на вход нули.

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

Представим, что результат существует и равен какому-то числу C:

\frac{0}{0} = C

Снова выкручиваем это через обратную операцию — умножение. Чтобы равенство было верным, нам нужно найти такое число C, которое при умножении на знаменатель (ноль) даст нам числитель (тоже ноль):

C \times 0 = 0

Попробуйте подставить вместо C единицу. Работает? Да, 1 умножить на 0 будет 0. А если взять 13? Тоже работает! А если 42? Или 10^{100}?

Неожиданный вывод: этому условию удовлетворяет абсолютно любое число в мире. Какое бы значение вы ни подставили вместо C, равенство останется математически верным.

«Ну и отлично! — скажете вы. — Раз решений так много, значит, делить ноль на ноль можно!»

Но нет, и вот почему это тоже не работает. Фундаментальное правило математики (как и хорошего, предсказуемого кода) гласит: базовая арифметическая операция должна быть детерминированной. Она подразумевает получение единственного, строго однозначного результата. Вызов функции деления должен возвращать одно конкретное значение, с которым можно работать дальше.

Если же результатом может быть вообще любое число во Вселенной, мы теряем весь практический смысл этой операции. В математике такая ситуация называется неопределенностью (результат многозначный). Так как мы не можем выбрать один-единственный правильный ответ из бесконечного множества вариантов, мы вынуждены констатировать: операция не определена. Выполнить нормальное деление снова нельзя — но в этот раз не потому, что ответов нет, а потому, что их слишком много.

5. Заключение

Давайте подведем черту и соберем всё, что мы сегодня выяснили, в два простых и логичных тезиса.

Во-первых, делить любое обычное число на ноль (N / 0) нельзя. Если смотреть на это через призму реального мира (физический подход), мы улетаем в бесконечность, которую невозможно пощупать или использовать как конкретный результат. Если же опираться на сухие аксиомы, то в природе просто не существует такого числа C, которое смогло бы решить уравнение C \times 0 = N. Ноль вариантов ответа.

Во-вторых, делить ноль на ноль (0 / 0) тоже нельзя. Но здесь причина совершенно иная, прямо противоположная! Ответом в таком уравнении становится «бесконечное множество любых чисел». Любое число подходит, а значит, базовая арифметическая операция лишается своего главного свойства — детерминированности и однозначности результата.

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

Анонсы новых статей, полезные материалы, а так же если в процессе у вас возникнут сложности, обсудить их или задать вопрос по этой статье можно в моём Telegram‑сообществе. Смело заходите, если что‑то пойдет не так, — постараемся разобраться вместе.

ссылка на оригинал статьи https://habr.com/ru/articles/1040676/