Loading AI tools
особое состояние числа с плавающей запятой Из Википедии, свободной энциклопедии
Нечисло[1] (NaN от англ. Not-a-Number) — одно из особых состояний числа с плавающей запятой. Используется во многих математических библиотеках и математических сопроцессорах. Данное состояние может возникнуть в различных случаях, например, когда предыдущая математическая операция завершилась с неопределённым результатом или если в ячейку памяти попало не удовлетворяющее условиям число.
Эту страницу предлагается переименовать в «NaN». |
В соответствии с IEEE 754, такое состояние задаётся через установку показателя степени в зарезервированное значение 11…11, а мантиссы — во что угодно, кроме 0 (зарезервированное значение для машинной бесконечности). Знак и мантисса могут нести какую-то дополнительную информацию: многие библиотеки «отрицательное» нечисло выводят как -NaN
.
К операциям, приводящим к появлению нечисла в качестве результата, относятся:
Нечисло не равно ни одному другому значению (даже самому себе). Благодаря этому один из распространённых, однако не очевидных, способов проверки результата на нечисло — это сравнение полученной величины с самой собой. Более прозрачным и явным способом является вызов функции проверки числа на NaN — isnan
в большинстве языков программирования.
Поведение других операций сравнения зависит от языка. Одни языки дают значение «ложь»[4] (так что a < b
и b > a
по-разному ведут себя с NaN), другие — формируют исключительную ситуацию даже для «тихого» нечисла.
Любая нетривиальная операция, принимающая «тихое» нечисло как аргумент, всегда возвращает нечисло вне зависимости от значения других аргументов. Единственными исключениями из этого правила являются функции max()
и min()
, которые возвращают значение другого аргумента (отличного от нечисла).
В некоторых языках программирования есть «тихое нечисло» (qNaN) и «сигнальное нечисло» (sNaN): первое, попав в любую операцию, возвращает обычное нечисло (NaN), второе — вызывает исключительную ситуацию. Обычно «тихое нечисло» или «сигнальное нечисло» определяются старшим битом мантиссы.
По стандарту IEEE754-1985 1NaNдолжно быть равно NaN, однако большинство математических библиотек возвращало 1. В связи с этим, в стандарте 2008 года результатом этой операции является 1.
Нечисло может по-разному выводиться на экран, например:
nan
(вывод программ на Си, C++)NaN
(ECMAScript, Rust, C#)+nan.0
(Scheme)Большинство представлений целых чисел не поддерживают указание на то, что число некорректно. В этом случае стандарт IEEE754 предписывает выбрасывать исключение при конвертации нечисла в целое число. Так, в Java такие операции выдают исключение java.lang.ArithmeticException
. В Си это приводит к неопредёленному поведению, но также возможен выброс исключения и возврат неопределённого значения, как того требует стандарт.
Пакет Math::BigInt
языка Perl использует «NaN» для строк, которые не могут быть преобразованы в числа.
> perl -mMath::BigInt -e "print Math::BigInt->new('foo')"
NaN
Seamless Wikipedia browsing. On steroids.
Every time you click a link to Wikipedia, Wiktionary or Wikiquote in your browser's search results, it will show the modern Wikiwand interface.
Wikiwand extension is a five stars, simple, with minimum permission required to keep your browsing private, safe and transparent.