Деление на ноль в вычислениях - имеет ли это смысл?

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

Имеет ли смысл делить любое число на ноль?

Как я вижу сейчас, ответ - да, это имеет смысл. Возможно, нам нужно вернуться к основам арифметики, чтобы сначала понять некоторые основы.

Ноль нельзя делить

Учителя математики учат своих учеников, что любое число или целое число, которое делится само по себе, всегда будет равно 1. Например:

1 / 1 = 1

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

Когда мы делим 0 на 0, разве мы не должны получить 1 на основании этого основного правила? Ответ - нет, вы не можете получить 1 из 0. Если вы не берете ничего (0) из ничего (0), тогда это не может быть чем-то (1).

Вы можете взять сумму y из x, разделив x / y. Когда дело доходит до определения y = 0 и последующего деления его на x, вам часто говорят, что оно undefined.

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

12 / 0 = 0
135 / 0 = 0
123041 / 0 = 0

Независимо от того, насколько велико число, если вы разделите его на ноль, вы всегда получите ноль. Легко сказать, что нельзя делить на ноль, потому что это общее правило, которому учат в наших школах. Однако это доказательство не так-то просто объяснить, если только вы не гений в математике. Вместо этого мы будем использовать более практические примеры в следующих разделах.

Концепция нуля

А теперь давайте вернемся в прошлое, еще до того, как мы все родились. Давайте вернемся в древнюю Индию. Именно здесь 0 впервые появился как число в человеческой цивилизации. Другим культурам, таким как майя, приписывали использование нуля в качестве заполнителя, но именно в древней Индии они использовали его как часть числовой системы. Знание 0 было затем изучено арабами, которые, в свою очередь, представили его европейцам и африканцам. Затем он распространился на Китай и другие части мира.

Наиболее известная нам числовая система - это десятичная система. Это позиционная система счисления с основанием 10, которая начинается с 0. Однако, когда мы считаем, мы не начинаем или почти никогда не начинаем с 0. Мы начинаем счет с 1, затем с 2, 3, 4 и так далее. Однако, когда дело доходит до позиции, счет начинается с нуля. Поскольку ноль существует, для чего он нужен?

Проще говоря, 0 - это просто представление null или несуществующего значения. Мы знаем, что когда мы говорим «1 яблоко», мы получаем яблоко. Когда мы говорим «2 яблока», это пара яблок со значением 2. Ноль яблок означает, что яблок нет. Поэтому, когда вы пытаетесь взять яблоко и разделить его на null, это не даст никакого результата. Таким образом, когда мы говорим, что у нас есть ноль или ничего, это означает, что это не имеет значения.

Что говорят компьютеры о делении на ноль

Давайте воспользуемся нашим компьютером, чтобы вычислить число, деленное на ноль, и посмотреть результат. Самый простой способ получить ответ со своего компьютера - использовать приложение-калькулятор. Откройте его и разделите любое число на ноль. На macOS (компьютеры Apple) возвращается результат «Not A Number». С калькулятором Windows 10 результатом будет «Невозможно разделить на ноль». Результат правильный, исходя из того, чему учили правила арифметики.

Теперь попробуем получить результат с помощью Javascript (JS). Сначала мы инициализируем наши переменные x, y и z.

var x = 1
var y = 0
var z = x / y

Когда мы выполняем var z, он возвращает следующий результат:

> z
Infinity

Деление числа на ноль в JS приведет к бесконечности. Разве это не должно быть нулем, потому что, возвращаясь к основам, любое число, деленное на ноль, должно быть равно нулю.

Теперь попробуем на Python. Я могу просто использовать консоль, чтобы посмотреть, каков будет результат.

>>> 12 / 0
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
ZeroDivisionError: division by zero

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

Теперь почему JS возвращает бесконечность, но Python может определять деление на ноль?

Объясняя бесконечность

Если вы все еще читаете это, вы только что нырнули в кроличью нору. Теперь мы собираемся глубже понять, почему JS возвращает бесконечность при делении на ноль. В спецификации JS для вычисления чисел используются операции с плавающей запятой. Согласно правилам типов данных с плавающей запятой IEEE 754, бесконечности являются результатом любой переменной x / 0. Деление на ноль приведет к переполнению и, следовательно, к бесконечности .

Это часть логики чисел с плавающей запятой для правильных и четко определенных результатов. JS представляет числа, определенные в формате с плавающей запятой IEEE 754. Числа с плавающей запятой - это особый способ хранения чисел в вычислительных системах в 32-битном формате. Он имеет большую точность для точности значений. Эти числа не являются целыми числами (целыми числами), поскольку они являются дробными и представлены десятичными точками.

Integer : 5
Floating-Point: 5.3201278

Поскольку JS использует числа с плавающей запятой, когда вы указываете ноль, он может быть либо положительным нулем, либо отрицательным нулем. В нотации с плавающей запятой 0 может быть положительным или отрицательным и иметь десятичные точки для представления маленьких или очень маленьких чисел. Если он не определен, то согласно спецификации IEEE 754 это бесконечность.

1 / 0 = Infinity
-1 / 0 = -Infinity

Деление на ноль имеет смысл

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

> 1 / 0.1
10
> 1 / 0.001
1000
> 1 / 0.0001
10000
> 1 / 0.0000001
1000000

Вы видите прогресс? Чем ближе мы к нулю делим на все меньшие и меньшие числа, тем больше число. Точно так же, если значение было отрицательным, то число становится все меньше и меньше.

> -1 / 0.1
-10
> -1 / 0.001
-1000
> -1 / 0.0001
-10000
> -1 / 0.0000001
-1000000

Итак, логика здесь в том, что когда вы делите число, которое становится все ближе и ближе к нулю, вы приближаетесь к бесконечности. Чтобы доказать это, вы не ограничены количеством десятичных знаков от 0,1 до 0,0… ∞. У вас могут быть миллионы и миллиарды нулей перед 1, и у вас все еще есть возвращаемый результат (не ноль), но это число еще не равно нулю. Если вы продолжите деление на число, которое приближается к 0, результат будет настолько большим, что вам потребуется использовать научную нотацию для отображения числа (например, 1 x 10²⁵⁶).

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

Синопсис

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

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