Почему у нас есть функции "не является числом" (isNan)? - PullRequest
4 голосов
/ 07 октября 2010

Многие языки имеют функцию isNaN (). Я спрашиваю себя: зачем проверять, не является ли число ?

Является ли причина чисто логической или быстрее проверить, что не число вместо это число ?

Обратите внимание , что это чистый вопрос понимания. Я знаю, что я могу отрицать isNaN () для достижения функции isNumber (), например.
Однако я ищу причину, ПОЧЕМУ мы проверяем , а не число ?

Ответы [ 7 ]

7 голосов
/ 07 октября 2010

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

Статья Wiki

Потому что «Не число» - это особый случай выражения.

Вы не можете просто использовать 0 или -1 или что-то подобное, потому что эти числа уже имеют значения.

«Не число» означает, что в вычислениях что-то пошло не так, и из этого нельзя вычислить действительное число.

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

3 голосов
/ 07 октября 2010

«Не число» является результатом конкретных вычислений с плавающей запятой.Дело не в "эй, эта переменная содержит 120 или" abc "? '

2 голосов
/ 07 октября 2010

Проверка на предмет того, является ли это число, потому что предполагается, что это число.NaN - исключительный случай, когда вы ожидаете числовое значение, поэтому для меня имеет смысл, что это делается именно так.Я бы предпочел проверять isNaN нечасто, чем проверять, часто ли значение isNum, в конце концов.

2 голосов
/ 07 октября 2010

isThisCaseExceptional кажется мне более разумным, чем isEverythingNormal, потому что я, вероятно, напишу

possible_number = some_calculation();

if (inNaN(possible_number)) handle_the_surprise;

// .. keep going 

вместо

possible_number = some_calculation();

if (inANumber(possible_number)) {

   // .. keep going 

} else {
   // handle the surprise
}
1 голос
/ 07 октября 2010

Это способ сообщить об ошибке (математически не определено или выходит за пределы технических ограничений).

0 голосов
/ 07 октября 2010

NaN используются для:

  • Нереальные или неопределенные значения.
  • Обработка ошибок. Инициализация переменной с помощью NaN позволяет проверить NaN и убедиться, что для него задано правильное значение.
  • Объекты, которые игнорируют член или свойство. Например, WPF использует NaN для представления ширины и высоты визуальных элементов, которые не определяют их собственный размер.
0 голосов
/ 07 октября 2010

Многие языки имеют специальные представления, если результат вычисления не представлен числом, например, NaN и Inf. Поэтому isNaN () проверяет, является ли результат на самом деле числом или специальным маркером для NaN.

...