Различия между 0, -0 и +0

Я никогда не понимал, почему -0 обрабатывается отдельно, чем 0.

Интересным фактом является то, что 0 равно -0

> 0 === -0
true

Тогда возникает вопрос: почему -0 обрабатывается отдельно, чем 0 и +0?

Есть ли случай, когда имеет значение знак перед 0?

В математике +0 значение немного больше, чем 0. Кроме того, -0 - это значение чуть ниже 0. Например: n / Infinity вернет +0 и n / -Infinity -0 (предположим, что n - действительное число, большее 0). Это происходит в математике.

Ответ 1

"Отсеки веток для сложных элементарных функций или много шума из ничего не значат" объясняет причины подписанных нулей. Такой анализ сообщил IEEE-754, который является основой для большинства современных наборов инструкций  и поведение языков с плавающей запятой языков программирования.

Вкратце, многие обычные числовые функции могут быть непрерывными с подписанными нулями в местах, где они не могут быть с беззнаковым нулем, что приводит к меньшему числу NaN и меньшему числу особых случаев. Подразделение - одна из таких функций.


Тогда возникает вопрос: почему -0 обрабатывается отдельно, чем 0 и +0?

Чтобы быть ясным, есть только два нулевых значения. -0 и +0. Токены (0) могут быть заменены маркерами (+0), где бы они ни происходили, без изменения семантики.


Интересным фактом является то, что 0 равно -0

0 === -0
true

Такое поведение предусмотрено IEEE-754.

Чтобы проверить, являются ли два числовых значения "одинаковыми":

function same(x, y) {
  if (x === y) {
    if (x !== 0) {
      return true;  // Non-zero values.
    } else {
      return (1/x === 1/y);  // Test signed-ness of zeroes.
    }
  } else {
    return x !== x && y !== y;  // Treat NaNs the same
  }
}