Нечисло (NaN от ) — одно из особых состояний числа с плавающей запятой. Используется во многих математических библиотеках и математических сопроцессорах. Данное состояние может возникнуть в различных случаях, например, когда предыдущая математическая операция завершилась с неопределённым результатом или если в ячейку памяти попало не удовлетворяющее условиям число.
В соответствии с IEEE 754, такое состояние задаётся через установку показателя степени в зарезервированное значение 11…11, а мантиссы — во что угодно, кроме 0 (зарезервированное значение для машинной бесконечности). Знак и мантисса могут нести какую-то дополнительную информацию: многие библиотеки «отрицательное» нечисло выводят как -NaN.
Есть три типа операций, приводящих к появлению нечисла в качестве результата: Все нетривиальные математические операции, содержащие нечисло в качестве одного из операндов. Таким образом, программа делает вычисление, ничего не проверяя, и только окончательный результат проверяет на NaN. Неопределённости и существенные особые точки, когда разные пути стремления к аргументу дают разный результат: 0:0, ∞:∞, 0·∞, ∞−∞. При вычислении по стандарту IEEE 754-2008В некоторых языках, таких как Python результат операции будет равен 1, а не NaN.. , когда M настолько большое, что невозможно дать значимый ответ. А если точка — полюс (), результатом будет не NaN, а . Непопадание в ОДЗ: результат выходит комплексный, а расчёт в действительных. В их числе: , , , где .
Свойства Нечисло не равно ни одному другому значению (даже самому себе). Благодаря этому один из распространённых, однако не очевидных, способов проверки результата на нечисло — это сравнение полученной величины с самой собой. Более прозрачным и явным способом является вызов функции проверки числа на NaN — isnan в большинстве языков программирования.
Поведение других операций сравнения зависит от языка. Одни языки дают значение «ложь» (так что a < b и b > a по-разному ведут себя с NaN), другие — формируют исключительную ситуацию даже для «тихого» нечисла.
Любая нетривиальная операция, принимающая «тихое» нечисло как аргумент, всегда возвращает нечисло вне зависимости от значения других аргументов. Единственными исключениями из этого правила являются функции max() и min(), которые возвращают значение другого аргумента (отличного от нечисла).
Особенности реализаций В некоторых языках программирования есть «тихое нечисло» (qNaN) и «сигнальное нечисло» (sNaN): первое, попав в любую операцию, возвращает обычное нечисло (NaN), второе — вызывает исключительную ситуацию. Обычно «тихое нечисло» или «сигнальное нечисло» определяются старшим битом мантиссы.
По стандарту IEEE754-1985 1NaNдолжно быть равно NaN, однако большинство математических библиотек возвращало 1. В связи с этим, в стандарте 2008 года результатом этой операции является 1.
Нечисло может по-разному выводиться на экран, например: nan (вывод программ на Си, C++) NaN (ECMAScript, Rust, C#) #SNAN, #QNAN или #IND (Excel) +nan.0 (Scheme)
Целочисленный NaN Большинство представлений целых чисел не поддерживает указания на то, что число некорректно. В этом случае стандарт IEEE754 предписывает выбрасывать исключение при конвертации нечисла в целое число. Так, в Java такие операции выдают исключение . В Си это приводит к неопредёленному поведению, но также возможен выброс исключения и возврат неопределённого значения, как того требует стандарт.
Пакет языка Perl использует «NaN» для строк, которые не могут быть преобразованы в числа. > perl -mMath::BigInt -e "print Math::BigInt->new('foo')" NaN
Примечания
Источники
Ссылки NaN на FOLDOC
См. также Еггогология
Категория:Арифметика с плавающей запятой