2016-04-06 3 views
1

Отдел по нольу не является ошибкой в ​​JavaScript: он просто возвращает бесконечность или отрицательный бесконечность. Однако есть одно исключение: ноль, деленный на ноль, не имеет определенного значения , а результатом этой операции является специальное значение, отличное от числа, напечатанное как NaN. NaN также возникает, если вы пытаетесь разделить бесконечность на бесконечность или взять квадрат в корне JavaScript из отрицательного числа или использовать арифметические операторы с нечисловыми операндами, которые не могут быть преобразованы в числа. для примераСистема номеров в javascripts

1. 0===0 returns True & 1==1 returns true 

2. 0/0 returns NaN & 1/1 returns 1 

ноль и один номер также ряд?

Я хочу объяснение? Почему это точно происходит только в JavaScript?

+0

, потому что не все в JS предназначен, чтобы сделать смысл. поэтому мы пишем библиотеки. : P – SpYk3HH

+0

прежде чем опустить этот вопрос, вы должны понять вопрос, о чём я спрашиваю? –

+0

Я поддержал это, я не тот, кто это сделал. прокомментировал причину, мне любопытно. поэтому я собираюсь вернуться и проверить это завтра. – SpYk3HH

ответ

1

В математике, ноль, символизирует цифровой символ 0, является одновременно:

  1. В позиционной системе счисления, A указатель места, означающий «никакие единицы этого кратного». Например, в десятичном числе 1 041 имеется единица в тысячной позиции, единицы в сотне позиции, четыре единицы в позиции десятков и одна единица в позиции 1-9.

  2. Независимое значение на полпути между +1 и -1.

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

  1. Брахмагупта разработал концепцию нуля как фактическое независимое число, а не только place-holder, и написал правила для добавления и вычитания нуля из других чисел. Индийские писания были переданы аль-Хорезми (от имени которого мы вывели термин алгоритм), а оттуда - Леонардо Фибоначчи и другим, которые продолжали развивать концепцию и число.

Перейдите по ссылке here

4

Разделение любого на 0 - Бесконечность. Это правильный ответ (из точки вычисления, не обязательно точки зрения математики). Представьте, что вы делаете разделение на бумаге. У вас будет бесконечное количество операций, потому что вы всегда продолжаете вычитать 0.

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

This is a good video showing the above. Старый механический калькулятор, который знает только правила сложения/вычитания (на самом деле это все умножение/деление). Он никогда не останавливается, потому что он всегда может вычитать 0.

JavaScript пытается быть приятным для программистов, которые не являются специалистами по математике.

Read more about the IEEE 754 design rational.

+0

да, это правда? когда я делаю это 0/0, тогда его шоу NAN почему? –

+0

Потому что 0/0 не определено, даже меньше, чем N/0. 0/0 не сходится ни к чему, а N/0 сходится к бесконечности или минус бесконечности в зависимости от знака N. – HopefullyHelpful

+0

«Дайвинг на 0 - бесконечность *». Это зависит от вашей точки зрения. В математике результат [* деления на ноль *] (https://en.wikipedia.org/wiki/Division_by_zero) не определен, я думаю, лучший результат был бы для ECMAScript для возврата NaN, но я не в комитете по стандартам. – RobG

7

Поскольку JavaScript следует IEEE 754 standard, который определяет арифметику с плавающей точкой и указывает это поведение.

Почему стандарт указывает NaN в результате этих операций? Потому что нет разумной ценности, чтобы дать им, поэтому вместо этого они имеют четко определенную бесчувственную ценность.

2

Как ни странно, они также номер:

typeof NaN;//'number' 
typeof Infinity;//'number' 

Чтобы ответить на ваш главный вопрос, это то, как JavaScript работает.

Смотрите спецификацию here

Применяя/Оператор

Оператор/производит деление, генерируя частное своих операндов. Левым операндом является дивиденд, а правый операнд - это делитель. ECMAScript не выполняет целочисленное деление. Операнды и результат всех операций деления - это числа с плавающей запятой с двойной точностью. Результат деления определяется спецификацией IEEE 754 арифметики:

  • Если один из операндов равен NaN, результат равен NaN.
  • Знак результата положителен, если оба операнда имеют один и тот же знак, отрицательный, если операнды имеют разные знаки.

  • Разделение бесконечности на бесконечность приводит к NaN.

  • Разделение бесконечности на нуль приводит к бесконечности. Знак определяется вышеизложенным правилом.

  • Разделение бесконечности на ненулевое конечное значение приводит к знаковой бесконечности. Знак определяется вышеизложенным правилом.

  • Разделение конечного значения на бесконечность приводит к нулю. Знак определяется вышеизложенным правилом.

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

  • Деление ненулевого конечного значения на нуль приводит к знаковой бесконечности. Знак определяется приведенным выше правилом.

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

+1

Значения должны иметь [* Тип *] (http://www.ecma-international.org/ecma-262/6.0/#sec-ecmascript-data-types-and-values), и их так много Выбери из. ;-) – RobG

+0

@RobG Извините, я не смог вас достать. Что ты хочешь мне сказать? –

Смежные вопросы