Подтвердить что ты не робот

В JavaScript, почему ноль, деленный на нуль, возвращает NaN, но любой другой, деленный на нуль, возвращает бесконечность?

Мне кажется, что код

console.log(1 / 0)

должен возвращать NaN, но вместо этого он возвращает Infinity. Однако этот код:

console.log(0 / 0)

возвращает NaN. Может ли кто-нибудь помочь мне понять аргументы в пользу этой функции? Не только это кажется непоследовательным, но также и неправильным, в случае x / 0, где x !== 0

4b9b3361

Ответ 1

Потому что это то, что определяется с плавающей запятой (в общем, как Javascript). См. Например:

Грубо говоря, вы могли бы думать о 1/0 как о пределе 1/x, когда x стремится к нулю. И 0/0 не имеет никакой разумной интерпретации вообще, поэтому NaN.

Ответ 2

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

0/0 действительно может быть 1e-500/1e-600, или 1e-600/1e-500, или многими другими отношениями очень малых значений.

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

Теперь рассмотрим 1/0. Не имеет значения, представляет ли 0 1е-500 или 1е-600. Несмотря на это, деление будет переполняться, а правильным результатом будет значение, используемое для представления переполнений, Infinity.

Ответ 3

Я понимаю, что это старо, но я считаю важным отметить, что в JS есть также -0, который отличается от 0 или +0, что делает эту функцию JS намного логичнее, чем на первый взгляд.

1 / 0 -> Infinity
1 / -0 -> -Infinity 

что логически имеет смысл, поскольку в исчислении причина, делящаяся на 0, равна undefined, заключается только в том, что левый предел переходит в отрицательную бесконечность и правый предел к положительной бесконечности. Поскольку -0 и 0 - разные объекты в JS, имеет смысл применить положительный 0 для оценки к положительному Infinity, а отрицательный 0 - к отрицательному Infinity

Эта логика не относится к 0/0, которая является неопределенной. В отличие от 1/0, мы можем получить два результата, ограничивающих этот метод с помощью 0/0

lim h->0(0/h) = 0
lim h->0(h/0) = Infinity

что, конечно, противоречиво, поэтому оно приводит к NaN