NaN — Википедия
Материал из Википедии — свободной энциклопедии
NaN (англ. Not-a-Number, «нечисло») — одно из особых состояний числа с плавающей запятой. Используется во многих математических библиотеках и математических сопроцессорах. Данное состояние может возникнуть в различных случаях, например, когда предыдущая математическая операция завершилась с неопределённым результатом или если в ячейку памяти попало не удовлетворяющее условиям число.
В соответствии с IEEE 754, такое состояние задаётся через установку показателя степени в зарезервированное значение 11…11, а мантиссы — во что угодно, кроме 0 (зарезервированное значение для машинной бесконечности). Знак и мантисса могут нести какую-то дополнительную информацию: многие библиотеки «отрицательный» NaN выводят как -NaN
.
К операциям, приводящим к появлению NaN в качестве ответа, относятся:
- все математические операции, содержащие NaN в качестве одного из операндов;
- деление нуля на ноль;
- деление бесконечности на бесконечность;
- умножение нуля на бесконечность;
- сложение бесконечности с бесконечностью противоположного знака;
- вычисление квадратного корня отрицательного числа[1];
- логарифмирование отрицательного числа.
В некоторых языках программирования есть «тихий» и «сигнальный» NaN: первый, попав в любую операцию, возвращает NaN, второй — вызывает исключительную ситуацию. Обычно «тихий» или «сигнальный» определяется старшим битом мантиссы.
- NaN не равен ни одному другому значению (даже самому себе). Благодаря этому один из распространённых, однако не интуитивных, способов проверки результата на NaN — это сравнение полученной величины с самой собой. Более прозрачным способом является вызов функции isNaN().
- Поведение других операций сравнения зависит от языка. Одни языки дают ложь[2] (так что
a < b
иb > a
по-разному ведут себя с NaN), другие — формируют исключительную ситуацию даже для «тихого» NaN. - Любая нетривиальная операция, принимающая «тихий» NaN как аргумент, всегда возвращает NaN вне зависимости от значения других аргументов. Единственными исключениями из этого правила являются функции max и min, которые возвращают значение «второго» аргумента (отличного от NaN).
- Тривиальные операции, являющиеся тождеством, обрабатываются особо: так, например, 1NaN равно 1.
NaN — Википедия. Что такое NaN
Материал из Википедии — свободной энциклопедииNaN (англ. Not-a-Number, «нечисло») — одно из особых состояний числа с плавающей запятой. Используется во многих математических библиотеках и математических сопроцессорах. Данное состояние может возникнуть в различных случаях, например, когда предыдущая математическая операция завершилась с неопределённым результатом или если в ячейку памяти попало не удовлетворяющее условиям число.
В соответствии с IEEE 754, такое состояние задаётся через установку показателя степени в зарезервированное значение 11…11, а мантиссы — во что угодно, кроме 0 (зарезервированное значение для машинной бесконечности). Знак и мантисса могут нести какую-то дополнительную информацию: многие библиотеки «отрицательный» NaN выводят как
.
К операциям, приводящим к появлению NaN в качестве ответа, относятся:
- все математические операции, содержащие NaN в качестве одного из операндов;
- деление нуля на ноль;
- деление бесконечности на бесконечность;
- умножение нуля на бесконечность;
- сложение бесконечности с бесконечностью противоположного знака;
- вычисление квадратного корня отрицательного числа[1];
- логарифмирование отрицательного числа.
В некоторых языках программирования есть «тихий» и «сигнальный» NaN: первый, попав в любую операцию, возвращает NaN, второй — вызывает аварийную ситуацию. Обычно «тихий» или «сигнальный» определяется старшим битом мантиссы.
Свойства
- NaN не равен ни одному другому значению (даже самому себе). Благодаря этому один из распространённых, однако не интуитивных, способов проверки результата на NaN — это сравнение полученной величины с самой собой. Более прозрачным способом является вызов функции isNaN().
- Поведение других операций сравнения зависит от языка. Одни языки дают ложь[2] (так что
a < b
иb > a
по-разному ведут себя с NaN), другие — выбрасывают аварию даже для «тихого» NaN. - Любая нетривиальная операция, принимающая «тихий» NaN как аргумент, всегда возвращает NaN вне зависимости от значения других аргументов. Единственными исключениями из этого правила являются функции max и min, которые возвращают значение «второго» аргумента (отличного от NaN).
- Тривиальные операции, являющиеся тождеством, обрабатываются особо: так, например, 1NaN равно 1.
См. также
Примечания
Ссылки
nan Википедия
В соответствии с IEEE 754, такое состояние задаётся через установку показателя степени в зарезервированное значение 11…11, а мантиссы — во что угодно, кроме 0 (зарезервированное значение для машинной бесконечности). Знак и мантисса могут нести какую-то дополнительную информацию: многие библиотеки «отрицательный» NaN выводят как -NaN
.
К операциям, приводящим к появлению NaN в качестве ответа, относятся:
- все математические операции, содержащие NaN в качестве одного из операндов;
- деление нуля на ноль;
- деление бесконечности на бесконечность;
- умножение нуля на бесконечность;
- сложение бесконечности с бесконечностью противоположного знака;
- вычисление квадратного корня отрицательного числа[1];
- логарифмирование отрицательного числа.
В некоторых языках программирования есть «тихий» и «сигнальный» NaN: первый, попав в любую операцию, возвращает NaN, второй — вызывает исключительную ситуацию. Обычно «тихий» или «сигнальный» определяется старшим битом мантиссы.
Свойства[ | ]
- NaN не равен ни одному другому значению (даже самому себе). Благодаря этому один из распространённых, однако не интуитивных, способов проверки результата на NaN — это сравнение полученной величины с самой собой. Более прозрачным способом является вызов функции isNaN().
- Поведение других операций сравнения зависит от языка. Одни языки дают ложь[2] (так что
a < b
иb > a
по-разному ведут себя с NaN), другие — формируют исключительную ситуацию даже для «тихого» NaN. - Любая нетривиальная операция, принимающая «тихий» NaN как аргумент, всегда возвращает NaN вне зависимости от значения других аргументов. Единственными исключениями из этого правила являются функции max и min, которые возвращают значение «второго» аргумента (отличного от NaN).
- Тривиальные операции, являющиеся тождеством, обрабатываются особо: так, например, 1NaN равно 1.
См. также[ | ]
Примечания[ | ]
Ссылки[ | ]
nan — Викисловарь
См. также Nan, NaN, nań, nān. |
Содержание
- 1 Айнский
- 1.1 Морфологические и синтаксические свойства
- 1.2 Произношение
- 1.3 Семантические свойства
- 1.3.1 Значение
- 1.3.2 Синонимы
- 1.3.3 Антонимы
- 1.3.4 Гиперонимы
- 1.3.5 Гипонимы
- 1.4 Родственные слова
- 1.5 Этимология
- 1.6 Фразеологизмы и устойчивые сочетания
- 2 Английский
- 2.1 Морфологические и синтаксические свойства
- 2.2 Произношение
- 2.3 Семантические свойства
- 2.3.1 Значение
- 2.3.2 Синонимы
- 2.3.3 Антонимы
- 2.3.4 Гиперонимы
- 2.3.5 Гипонимы
- 2.4 Родственные слова
- 2.5 Этимология
- 2.6 Фразеологизмы и устойчивые сочетания
- 3 Курдский
- 3.1 Морфологические и синтаксические свойства
- 3.2 Произношение
- 3.3 Семантические свойства
- 3.3.1 Значение
- 3.3.2 Синонимы
- 3.3.3 Антонимы
- 3.3.4 Гиперонимы
- 3.3.5 Гипонимы
- 3.4 Родственные слова
- 3.5 Этимология
- 3.6 Фразеологизмы и устойчивые сочетания
- 4 Пали
- 4.1 Морфологические и синтаксические свойства
- 4.2 Произношение
- 4.3 Перевод
- 5 Турецкий
- 5.1 Морфологические и синтаксические свойства
- 5.2 Произношение
- 5.3 Семантические свойства
- 5.3.1 Значение
- 5.3.2 Синонимы
- 5.3.3 Антонимы
- 5.3.4 Гиперонимы
- 5.3.5 Гипонимы
- 5.4 Родственные слова
- 5.5 Этимология
- 5.6 Фразеологизмы и устойчивые сочетания
- 6 Французский
- 6.1 Морфологические и синтаксические свойства
- 6.2 Произношение
- 6.3 Семантические свойства
- 6.3.1 Значение
- 6.3.2 Синонимы
- 6.3.3 Антонимы
- 6.3.4 Гиперонимы
- 6.3.5 Гипонимы
- 6.4 Родственные слова
- 6.5 Этимология
- 6.6 Фразеологизмы и устойчивые сочетания
Морфологические и синтаксические свойства[править]
nan
Существительное.
Корень: —.
Произношение[править]
Семантические свойства[править]
Значение[править]
- анат. лицо (передняя часть головы) ◆ Отсутствует пример употребления (см. рекомендации).
Синонимы[править]
Антонимы[править]
Гиперонимы[править]
Гипонимы[править]
Родственные слова[править]
Ближайшее родство | |
Этимология[править]
От ??
Фразеологизмы и устойчивые сочетания[править]
Для улучшения этой статьи желательно:
|
Морфологические и синтаксические свойства[править]
ед. ч. | мн. ч. |
---|---|
nan | nans |
nan
Существительное.
Корень: —.
Произношение[править]
- МФА: [næn]
Семантические свойства[править]
Значение[править]
- разг. бабушка ◆ Отсутствует пример употребления (см. рекомендации).
Синонимы[править]
Антонимы[править]
Гиперонимы[править]
Гипонимы[править]
Родственные слова[править]
Ближайшее родство | |
Этимология[править]
От ??
Фразеологизмы и устойчивые сочетания[править]
Для улучшения этой статьи желательно:
|
Морфологические и синтаксические свойства[править]
nan
Существительное.
Корень: —.
Произношение[править]
Семантические свойства[править]
Значение[править]
- хлеб ◆ Отсутствует пример употребления (см. рекомендации).
Синонимы[править]
Антонимы[править]
Гиперонимы[править]
Гипонимы[править]
Родственные слова[править]
Ближайшее родство | |
Этимология[править]
От ??
Фразеологизмы и устойчивые сочетания[править]
Для улучшения этой статьи желательно:
|
Морфологические и синтаксические свойства[править]
- форма сандхи от местоимения naṃ
Произношение[править]
Перевод[править]
- его ◆ taṃ khādāpessāmi nanti — я заставлю тебя есть его (т.е. обезьяну, которая упоминалась ранее)
Для улучшения этой статьи желательно:
|
Морфологические и синтаксические свойства[править]
nan
Существительное.
Корень: —.
Произношение[править]
Семантические свойства[править]
Значение[править]
- хлеб ◆ Отсутствует пример употребления (см. рекомендации).
Синонимы[править]
Антонимы[править]
Гиперонимы[править]
Гипонимы[править]
Родственные слова[править]
Ближайшее родство | |
Этимология[править]
От ??
Фразеологизмы и устойчивые сочетания[править]
Для улучшения этой статьи желательно:
|
Морфологические и синтаксические свойства[править]
nan
Наречие. Неизменяемое.
Корень: —.
Произношение[править]
Семантические свойства[править]
Значение[править]
- разг. нет, не, не-а ◆ Отсутствует пример употребления (см. рекомендации).
Синонимы[править]
- non
Антонимы[править]
Гиперонимы[править]
Гипонимы[править]
Родственные слова[править]
Ближайшее родство | |
Этимология[править]
От ??
Фразеологизмы и устойчивые сочетания[править]
Для улучшения этой статьи желательно:
|
Полезный NaN / Habr
О NaN больше всего известно то, что он не равен самому себе.NaN === NaN // false
И что операции, невозможные арифметически, вернут NaN.
'BlaBlaBla'/0 // NaN
Но у NaN есть одно мало известное(?), и, как мне кажется, весьма полезное применение.
TL;DR Все дело в Date
В двух словах:
new Date(NaN) // Invalid Date
Чем полезно? Invalid Date все равно Date. И все операции с Date все ещё на месте.
Любые операции с Date, кроме прямой установки timestamp вернут NaN, оставив Date как Invalid Date.
const x = new Date(NaN) // Invalid Date
x.setTime(12345) // 12345
x.toString() // "Thu Jan 01 1970 00:00:12 GMT+0000 (+00)"
При этом, проверка на валидность даты становится проще некуда
const x = new Date(NaN) // Invalid Date
isNaN(x) // true
x.setTime(0)
isNaN(x) // false
Заметьте, преобразование в timestamp здесь не требуется, valueOf() делает это под капотом.
Все операции с Date — мутабельные. Тем не менее, клонирование через конструктор прекрасно работает и с Invalid Date.
const x = new Date(NaN) // Invalid Date
const y = new Date(x) // Invalid Date
Сравнение двух дат напрямую в Date не реализовано и сравнивать даты можно только через timestamp. NaN гарантирует что Invalid Date точно не будет равно никакой другой дате. Думаю, это весьма полезное свойство.
const x = new Date(NaN) // Invalid Date
const y = new Date(NaN) // Invalid Date
x.getTime() === y.getTime() // false
К моему сожалению, конструктор Date ведёт себя несколько странно по отношению к входному параметру.
new Date(null) // Thu Jan 01 1970 00:00:00 GMT+0000 (+00)
Было бы намного логичнее конструировать Invalid Date, ведь null — это не совсем ноль. Оставим это на совести Javascript-а.
Однако, если насильственно передать в конструктор undefined, то результат выглядит ожидаемым. Так что будьте осторожны.
new Date(undefined) // Invalid Date
Статья получилась больше о Date чем о NaN, но, в целом, именно об этой связке я хотел рассказать.
Почему NaN это не «Not a Number»? — CSS-LIVE
Перевод статьи NaN is not a not a number с сайта https://zerkmsit.wordpress.com/, опубликовано на css-live.ru с разрешения автора — Ivan Kurnosov, переводчик — Друганов Яков (k0d)
При разработке ПО очень важно быть точным при использовании терминов, ведь если все разработчики понимают термины одинаково, то эффективность коммуникации между ними будет высокой. Это как быть с человеком «на одной волне» и «понимать с полуслова».
Один из таких терминов, который часто используется не к месту и без понимания — NaN
(Not a Number). Дословно — «нечисло».
Все уходит корнями в «бородатый» стандарт IEEE754-1985
и его преемника IEEE754-2008
, там NaN
определяется как «особое значение» (множество значений, как мы покажем далее), представляющее собой результат некоторого вычисления, которое не может или не должно быть представлено как конкретное число или такое значение просто неопределено в математическом смысле. Например, arcsin(2)
или 0/0
. Это также приводит нас к другому открытию: NaN
на самом деле числовой тип! Просто это число, которое используется и представляется в некой особоой форме.
Итак, еще раз, по стандарту, NaN
это НЕ произвольное значение НЕчислового типа, а число! Это значит, нельзя сказать, что строка "строка"
это NaN
, так как NaN
это на самом деле число.
Все становится еще интереснее, если проверить, а как же представлено NaN
в памяти компьютера.
У чисел с плавающей точкой двойной (64 бита) точности (как тип Number в JS) для представления NaN
‘ов используется специальный ДИАПАЗОН значений.
А именно: числа (мн.ч.), показатель степени которых равен 0x
7FF
(hex) или 11111111111
(bin) (11 бит), отведены для представления NaN
значений.
Рассмотрим рис. 1.
Сейчас все биты равны 0
, cледовательно все число равно 0
или 0.0 * 10
0
, это тот самый 0
, который нам всем привычен.
А теперь покажем, что такое NaN
. Для этого, как мы уже упоминали, поставим все биты показателя степени в 1
(рис. 2)
Теперь запишем это число в шестнадцатеричной системе — 0x_
7FF
_0000000000000
. Дамы и господа, перед вами «нечисло» с точки зрения IEEE754
.
Более того, остальные 64 - 11 = 53
бита могуть быть любыми, за исключением полностью нулевой мантиссы, которая зарезервирована для представления +Бесконечность
при первом знаковом бите равном 0 и -Бесконечность
при знаковом бите равным 1
— число будет NaN
в любом случае.
Скажем, на рис. 3 по-прежнему NaN
Запишем это число в шестнадцатеричной системе — 0x
_7FF
_B000000000000
.
Путем нехитрых комбинаторных расчетов получим, что у чисел с плавающей точкой двойной точности мы имеем (по IEEE754
) 2
53
- 2
чисел, которые будут NaN
по стандарту IEEE754
. Многовато, не правда ли?
Таким образом, если вы используете NaN
как замену для всего, что «нечисло» (строки, значение типа null, объекты и т.д.) — не делайте так. Если нет — поделитесь знанием и помогите остальным быть такими же точными как числа двойной точности как вы.
Материалы для дальнейшего изучения:
http://www.binaryconvert.com/convert_double.html — конвертер чисел двойной точности в десятичные и обратно
https://ru.wikipedia.org/wiki/IEEE_754-2008 — статья в Википедии
P.S. Это тоже может быть интересно: