Interested Article - Нечисло
- 2020-03-27
- 1
Нечисло ( NaN от англ. Not-a-Number ) — одно из особых состояний числа с плавающей запятой . Используется во многих математических библиотеках и математических сопроцессорах . Данное состояние может возникнуть в различных случаях, например, когда предыдущая математическая операция завершилась с неопределённым результатом или если в ячейку памяти попало не удовлетворяющее условиям число.
В соответствии с
IEEE 754
, такое состояние задаётся через установку показателя степени в зарезервированное значение 11…11, а
мантиссы
— во что угодно, кроме 0 (зарезервированное значение для
). Знак и мантисса могут нести какую-то дополнительную информацию: многие библиотеки «отрицательное» нечисло выводят как
-NaN
.
К операциям, приводящим к появлению нечисла в качестве результата, относятся:
- все нетривиальные математические операции, содержащие нечисло в качестве одного из операндов;
- деление нуля на ноль ;
- деление бесконечности на бесконечность;
- умножение нуля на бесконечность;
- сложение бесконечности с бесконечностью противоположного знака;
- вычисление квадратного корня отрицательного числа ;
- логарифмирование отрицательного числа ;
- при вычислении по стандарту IEEE 754-2008 .
Свойства
Нечисло не равно ни одному другому значению (даже самому себе). Благодаря этому один из распространённых, однако не очевидных, способов проверки результата на нечисло — это сравнение полученной величины с самой собой. Более прозрачным и явным способом является вызов функции проверки числа на NaN —
isnan
в большинстве языков программирования.
Поведение других операций сравнения зависит от языка. Одни языки дают значение «ложь»
(так что
a < b
и
b > a
по-разному ведут себя с NaN), другие — формируют исключительную ситуацию даже для «тихого» нечисла.
Любая нетривиальная операция, принимающая «тихое» нечисло как аргумент, всегда возвращает нечисло вне зависимости от значения других аргументов. Единственными исключениями из этого правила являются функции
max()
и
min()
, которые возвращают значение другого аргумента (отличного от нечисла).
Особенности реализаций
В некоторых языках программирования есть «тихое нечисло» (qNaN) и «сигнальное нечисло» (sNaN): первое, попав в любую операцию, возвращает обычное нечисло (NaN), второе — вызывает исключительную ситуацию . Обычно «тихое нечисло» или «сигнальное нечисло» определяются старшим битом мантиссы.
По стандарту IEEE754 -1985 1 NaN должно быть равно NaN, однако большинство математических библиотек возвращало 1. В связи с этим, в стандарте 2008 года результатом этой операции является 1.
Нечисло может по-разному выводиться на экран, например:
-
nan
(вывод программ на Си, C++) -
NaN
(ECMAScript, Rust, C#) - #SNAN, #QNAN или #IND (Excel)
-
+nan.0
(Scheme)
Целочисленный NaN
Большинство представлений целых чисел не поддерживают указание на то, что число некорректно. В этом случае стандарт IEEE754 предписывает выбрасывать исключение при конвертации нечисла в целое число. Так, в
Java
такие операции выдают исключение
java.lang.ArithmeticException
. В
Си
это приводит к неопредёленному поведению, но также возможен выброс исключения и возврат неопределённого значения, как того требует стандарт.
Пакет
Math::BigInt
языка
Perl
использует «NaN» для строк, которые не могут быть преобразованы в числа.
> perl -mMath::BigInt -e "print Math::BigInt->new('foo')"
NaN
Примечания
Комментарий
- ↑ В случае, если библиотека, выполняющая эту операцию, не поддерживает либо не настроена на использование комплексных чисел .
Источники
- А. Н. Степанов. Курс информатики. — СПб. : Питер, 2018. — С. 160. — 1088 с.
- IEEE Computer Society. (англ.) : journal. — IEEE, 2008. — 29 August. — ISBN 978-0-7381-5753-5 . — doi : . 16 июля 2021 года.
- В некоторых языках, таких как Python результат операции будет равен 1, а не NaN.
- . Дата обращения: 17 июня 2016. 29 июля 2016 года.
Ссылки
- от 14 марта 2008 на Wayback Machine
См. также
- 2020-03-27
- 1