Что такое nan: NaN — Википедия – Что такое NaN в математике?

  • 17.11.2019

Содержание

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 — Викисловарь

Disambig.svg См. также 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

Существительное.

Корень: .

Произношение[править]

Семантические свойства[править]

Значение[править]
  1. анат. лицо (передняя часть головы) ◆ Отсутствует пример употребления (см. рекомендации).
Синонимы[править]
Антонимы[править]
Гиперонимы[править]
Гипонимы[править]

Родственные слова[править]

Ближайшее родство

Этимология[править]

От ??

Фразеологизмы и устойчивые сочетания[править]

Interrobang.svg
Для улучшения этой статьи желательно:
  • Добавить описание морфемного состава с помощью {{морфо}}
  • Добавить транскрипцию в секцию «Произношение» с помощью {{transcriptions}}
  • Добавить пример словоупотребления для значения с помощью {{пример}}
  • Добавить синонимы в секцию «Семантические свойства»
  • Добавить гиперонимы в секцию «Семантические свойства»
  • Добавить сведения об этимологии в секцию «Этимология»

Морфологические и синтаксические свойства[править]

ед. ч. мн. ч.
nan nans

nan

Существительное.

Корень: .

Произношение[править]

  • МФА: [næn]

Семантические свойства[править]

Значение[править]
  1. разг. бабушка ◆ Отсутствует пример употребления (см. рекомендации).
Синонимы[править]
Антонимы[править]
Гиперонимы[править]
Гипонимы[править]

Родственные слова[править]

Ближайшее родство

Этимология[править]

От ??

Фразеологизмы и устойчивые сочетания[править]

Interrobang.svg Для улучшения этой статьи желательно:
  • Добавить описание морфемного состава с помощью {{морфо}}
  • Добавить пример словоупотребления для значения с помощью {{пример}}
  • Добавить синонимы в секцию «Семантические свойства»
  • Добавить гиперонимы в секцию «Семантические свойства»
  • Добавить сведения об этимологии в секцию «Этимология»

Морфологические и синтаксические свойства[править]

nan

Существительное.

Корень: .

Произношение[править]

Семантические свойства[править]

Значение[править]
  1. хлеб ◆ Отсутствует пример употребления (см. рекомендации).
Синонимы[править]
Антонимы[править]
Гиперонимы[править]
Гипонимы[править]

Родственные слова[править]

Ближайшее родство

Этимология[править]

От ??

Фразеологизмы и устойчивые сочетания[править]

Interrobang.svg Для улучшения этой статьи желательно:
  • Добавить описание морфемного состава с помощью {{морфо}}
  • Добавить транскрипцию в секцию «Произношение» с помощью {{transcriptions}}
  • Добавить пример словоупотребления для значения с помощью {{пример}}
  • Добавить синонимы в секцию «Семантические свойства»
  • Добавить гиперонимы в секцию «Семантические свойства»
  • Добавить сведения об этимологии в секцию «Этимология»

Морфологические и синтаксические свойства[править]

  • форма сандхи от местоимения naṃ

Произношение[править]

Перевод[править]

  • его ◆ taṃ khādāpessāmi nanti — я заставлю тебя есть его (т.е. обезьяну, которая упоминалась ранее)
Interrobang.svg Для улучшения этой статьи желательно:
  • Использовать соответствующий шаблон словоизменения в «Морфологические и синтаксические свойства»
  • Добавить описание морфемного состава с помощью {{морфо}}
  • Добавить транскрипцию в секцию «Произношение» с помощью {{transcription}}
  • Добавить секцию «Значение» внутри «Семантические свойства»
  • Добавить секцию «Этимология»

Морфологические и синтаксические свойства[править]

nan

Существительное.

Корень: .

Произношение[править]

Семантические свойства[править]

Значение[править]
  1. хлеб ◆ Отсутствует пример употребления (см. рекомендации).
Синонимы[править]
Антонимы[править]
Гиперонимы[править]
Гипонимы[править]

Родственные слова[править]

Ближайшее родство

Этимология[править]

От ??

Фразеологизмы и устойчивые сочетания[править]

Interrobang.svg Для улучшения этой статьи желательно:

  • Добавить описание морфемного состава с помощью {{морфо}}
  • Добавить транскрипцию в секцию «Произношение» с помощью {{transcriptions}}
  • Добавить пример словоупотребления для значения с помощью {{пример}}
  • Добавить синонимы в секцию «Семантические свойства»
  • Добавить гиперонимы в секцию «Семантические свойства»
  • Добавить сведения об этимологии в секцию «Этимология»

Морфологические и синтаксические свойства[править]

nan

Наречие. Неизменяемое.

Корень: .

Произношение[править]

Семантические свойства[править]

Значение[править]
  1. разг. нет, не, не-а ◆ Отсутствует пример употребления (см. рекомендации).
Синонимы[править]
  1. non
Антонимы[править]
Гиперонимы[править]
Гипонимы[править]

Родственные слова[править]

Ближайшее родство

Этимология[править]

От ??

Фразеологизмы и устойчивые сочетания[править]

Interrobang.svg Для улучшения этой статьи желательно:
  • Добавить описание морфемного состава с помощью {{морфо}}
  • Добавить транскрипцию в секцию «Произношение» с помощью {{transcription}}
  • Добавить пример словоупотребления для значения с помощью {{пример}}
  • Добавить гиперонимы в секцию «Семантические свойства»
  • Добавить сведения об этимологии в секцию «Этимология»

Полезный 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 Википедия

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 в качестве ответа, относятся:

  • все математические операции, содержащие NaN в качестве одного из операндов;
  • деление нуля на ноль;
  • деление бесконечности на бесконечность;
  • умножение нуля на бесконечность;
  • сложение бесконечности с бесконечностью противоположного знака;
  • вычисление квадратного корня отрицательного числа[1];
  • логарифмирование отрицательного числа.

В некоторых языках программирования есть «тихий» и «сигнальный» NaN: первый, попав в любую операцию, возвращает NaN, второй — вызывает аварийную ситуацию. Обычно «тихий» или «сигнальный» определяется старшим битом мантиссы.

Свойства

  • NaN не равен ни одному другому значению (даже самому себе). Благодаря этому один из распространённых, однако не интуитивных, способов проверки результата на NaN — это сравнение полученной величины с самой собой. Более прозрачным способом является вызов функции isNaN().
  • Поведение других операций сравнения зависит от языка. Одни языки дают ложь[2] (так что a < b и b > a по-разному ведут себя с NaN), другие — выбрасывают аварию даже для «тихого» NaN.
  • Любая нетривиальная операция, принимающая «тихий» NaN как аргумент, всегда возвращает NaN вне зависимости от значения других аргументов. Единственными исключениями из этого правила являются функции max и min, которые возвращают значение «второго» аргумента (отличного от NaN).
  • Тривиальные операции, являющиеся тождеством, обрабатываются особо: так, например, 1NaN равно 1.

См. также

Примечания

Ссылки

Почему 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‘ов используется специальный ДИАПАЗОН значений.

А именно: числа (мн.ч.), показатель степени которых равен 0x7FF (hex) или 11111111111 (bin) (11 бит), отведены для представления NaN значений.

Рассмотрим рис. 1.

1

Сейчас все биты равны 0, cледовательно все число равно 0 или 0.0 * 100, это тот самый 0, который нам всем привычен.

А теперь покажем, что такое NaN. Для этого, как мы уже упоминали, поставим все биты показателя степени в 1 (рис. 2)

2

Теперь запишем это число в шестнадцатеричной системе — 0x_7FF_0000000000000. Дамы и господа, перед вами «нечисло» с точки зрения IEEE754.

Более того, остальные 64 - 11 = 53 бита могуть быть любыми, за исключением полностью нулевой мантиссы, которая зарезервирована для представления +Бесконечность при первом знаковом бите равном 0 и -Бесконечность при знаковом бите равным 1 — число будет NaN в любом случае.

Скажем, на рис. 3 по-прежнему NaN

3

Запишем это число в шестнадцатеричной системе — 0x_7FF_B000000000000.

Путем нехитрых комбинаторных расчетов получим, что у чисел с плавающей точкой двойной точности мы имеем (по IEEE754) 253 - 2 чисел, которые будут NaN по стандарту IEEE754. Многовато, не правда ли?

Таким образом, если вы используете NaN как замену для всего, что «нечисло» (строки, значение типа null, объекты и т.д.) — не делайте так. Если нет — поделитесь знанием и помогите остальным быть такими же точными как числа двойной точности как вы.

Материалы для дальнейшего изучения:

http://www.binaryconvert.com/convert_double.html — конвертер чисел двойной точности в десятичные и обратно

https://ru.wikipedia.org/wiki/IEEE_754-2008 — статья в Википедии

P.S. Это тоже может быть интересно:

JavaScript: что такое NaN, объект или примитив?

что такое NaN, объект или примитив?

NaN-не число

javascript nan Поделиться Источник DuduAlul     08 мая 2012 в 12:21

3 Ответа



8

Это примитив. Вы можете проверить это несколькими способами:

  • typeof NaN дает «number,» не «object.»

  • Добавьте свойство, и оно исчезнет. NaN.foo = "hi"; console.log(NaN.foo) // undefined

  • NaN instanceof Number дает false (но мы знаем, что это число, поэтому оно должно быть примитивным).

На самом деле не имеет смысла, чтобы NaN был объектом , потому что выражения, такие как 0 / 0 , должны приводить к NaN, а математические операции всегда приводят к примитивам. Наличие NaN в качестве объекта также означало бы, что он не может действовать как ложное значение, что он делает в некоторых случаях.

Поделиться Dagg Nabbit     08 мая 2012 в 12:32



4

NaN -это примитивное числовое значение. Просто как 1 , 2 и т. д.

Поделиться kapa     08 мая 2012 в 12:23



1

NaN-это свойство глобального объекта.

Начальное значение NaN равно Not-A-Number-то же самое, что и значение Number.NaN. В современных браузерах NaN не настраивается, свойство, недоступное для записи. Даже если это не так, избегайте перекрываю его.

Это довольно редко использовать NaN в программе. Это возвращаемое значение когда математические функции терпят неудачу (Math.sqrt(-1)) или когда функция пытается разобрать число не удается (parseInt («blabla»)).

Ссылка

Поделиться Katti     08 мая 2012 в 12:29


Похожие вопросы:


В JavaScript, что такое конечный корень, объект или функция?

В JavaScript является ли объект корнем всех сущностей или функция является корнем? Например, в следующих исходных объектах-функциях и прототипах-in.html сначала автор говорит: каждая сущность в…


Преобразование строкового объекта в строковый примитив в Javascript

Глупый вопрос, я думаю, как мы можем преобразовать строковый объект в javascript в строковый примитив ? Проблема в том, что у меня есть карта, в которой ключ является строковым литералом, и он не…


Что такое inf и nan?

Просто вопрос, который меня немного смущает Так что я возился с float(‘inf’) и отчасти задавался вопросом, для чего он используется. Также я заметил, что если я добавлю -inf + inf , то получу nan…


Что такое typeof (NaN) в Javascript?

Я просто случайно наткнулся на код, который проверяет typeof varable, переданный ему точно так же. function myNaN(b){ if(typeof(b) == ‘number’){ // execute some code } } Всякий раз, когда я вызываю…


Rhino Javascript: как преобразовать объект в примитив Javascript?

Я использую javax.scripting с носорогом в этом проекте. У меня есть метод Java, который возвращает объект Java (Double, Long, Целое число и т. д.). Я хочу вызвать этот метод из javascript и…


что такое объект в javascript

я хочу изучить javascript объект, я провожу время в интернете и немного узнаю об javascript объекте, и меня смущает, что такое использование объекта и как построить свой собственный объект в…


Что такое C# эквивалент NaN или IsNumeric?

Каков наиболее эффективный способ проверки входной строки, содержит ли она числовое значение (или, наоборот, не является числом)? Я думаю, что могу использовать Double.Parse или regex (см. ниже), но…


AngularJS $scope прототипное наследование-примитив против объектов?

Я много читал о прототипном наследовании Javascript, особенно в дочерних областях. Я понимаю, что мы всегда обеспечиваем.находится в нашей привязке ng-модели, так что она ссылается на объект. Вот…


Опишите, что такое алгебра?

В мире функционального программирования, когда я хочу создать API, я столкнусь со словом алгебра api. Может ли кто-нибудь описать, что такое алгебра в FP в контексте проектирования API. Какие…


Что такое встроенный объект в Javascript?

Я читал, что одно из отличий между объектно-ориентированными и объектно-ориентированными заключается в том, что первые поддерживают встроенные объекты(например., window object in Javascript). Итак,…


admin

E-mail : alexxlab@gmail.com

Отправить ответ

avatar
  Подписаться  
Уведомление о