nan число что такое

NaN в C ++ — что это такое и как это проверить?

Что такое NaN?
NaN, аббревиатура «Not a Number» — это исключение, которое обычно происходит в тех случаях, когда выражение приводит к числу, которое невозможно представить. Например, квадратный корень из отрицательных чисел.

// C ++ код для демонстрации NaN-исключения
#include
#include // for sqrt()

using namespace std;

// печатает число (1.41421)

// Печатает исключение «nan»

Как проверить на NaN?

// C ++ код для проверки на исключение NaN
// используя оператор «==»
#include
#include // for sqrt()

using namespace std;

// Возвращает true, a является действительным числом

// выводит «Это реальное число»

a==a? cout «Its a real number»

b==b? cout «Its a real number»


Способ 2. Использование встроенной функции «isnan ()».

Другой способ проверить NaN — использовать функцию «isnan ()», эта функция возвращает true, если число сложное, иначе возвращает false.

// C ++ код для проверки на исключение NaN
// используя «isnan ()»
#include
#include // for sqrt() and isnan()

using namespace std;

// Возвращает ложь как

isnan(a)? cout «Its NaN»

cout «Its a real number»

isnan(b)? cout «Its NaN»

cout «Its a real number»

Эта статья пополняемая Manjeet Singh Если вы любите GeeksforGeeks и хотела бы внести свой вклад, вы также можете написать статью с помощью contribute.geeksforgeeks.org или по почте статьи contribute@geeksforgeeks.org. Смотрите свою статью, появляющуюся на главной странице GeeksforGeeks, и помогите другим вундеркиндам.

Пожалуйста, пишите комментарии, если вы обнаружите что-то неправильное или вы хотите поделиться дополнительной информацией по обсуждаемой выше теме.

Источник

Полезный NaN

О NaN больше всего известно то, что он не равен самому себе.

И что операции, невозможные арифметически, вернут NaN.

Но у NaN есть одно мало известное(?), и, как мне кажется, весьма полезное применение.

TL;DR Все дело в Date

Чем полезно? Invalid Date все равно Date. И все операции с Date все ещё на месте.
Любые операции с Date, кроме прямой установки timestamp вернут NaN, оставив Date как Invalid Date.

При этом, проверка на валидность даты становится проще некуда

Заметьте, преобразование в timestamp здесь не требуется, valueOf() делает это под капотом.

Все операции с Date — мутабельные. Тем не менее, клонирование через конструктор прекрасно работает и с Invalid Date.

Сравнение двух дат напрямую в Date не реализовано и сравнивать даты можно только через timestamp. NaN гарантирует что Invalid Date точно не будет равно никакой другой дате. Думаю, это весьма полезное свойство.

К моему сожалению, конструктор Date ведёт себя несколько странно по отношению к входному параметру.

Было бы намного логичнее конструировать Invalid Date, ведь null — это не совсем ноль. Оставим это на совести Javascript-а.

Читайте также:  nvidia studio drivers что это

Однако, если насильственно передать в конструктор undefined, то результат выглядит ожидаемым. Так что будьте осторожны.

Статья получилась больше о Date чем о NaN, но, в целом, именно об этой связке я хотел рассказать.

Источник

Почему NaN это не «Not a Number»?

При разработке ПО очень важно быть точным при использовании терминов, ведь если все разработчики понимают термины одинаково, то эффективность коммуникации между ними будет высокой. Это как быть с человеком «на одной волне» и «понимать с полуслова».

Один из таких терминов, который часто используется не к месту и без понимания — NaN (Not a Number). Дословно — «нечисло».

Все становится еще интереснее, если проверить, а как же представлено NaN в памяти компьютера.

У чисел с плавающей точкой двойной (64 бита) точности (как тип Number в JS) для представления NaN ‘ов используется специальный ДИАПАЗОН значений.

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

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

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

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

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

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

Если вам понравилась статья, поделитесь ей!

Источник

Что такое NaN?

Подскажите, что такое nan?
Из-за этого у меня иногда появляется ошибка в вычисление формулы. Насколько я понял, это что-то типа ошибки, появляющейся при преобразовании типов данных, но все элементы в формуле double. В результате чего(при каких значениях) это появляется понять пока не могу.

NaN = Not a number
например 0 поделил на 0
или бесконечность на бесконечность

#define FLOAT_SIGN 0x80000000
#define FLOAT_EXPONENT 0x7F800000
#define FLOAT_MANTISSA 0x007FFFFF

void _check_chislo(float a)
<
int intf;
__asm mov eax,a
__asm mov intf,eax

Boo
Спасибо за расшифровку.
>или бесконечность на бесконечность
Это вряд ли.
>например 0 поделил на 0
А вот это вполне возможно. Буду проверять в этом направлении.

Насколько помню можно легко отключать ошибку, то есть делать так, чтобы она не возникала. Но точно не помню как.

Спасибо всем за крайне познавательную информацию.

Ошибка оказалась в другом месте, я кое-где ступил, и половина чисел в формуле оказалась нулями.

int nanmask = 255 4:57, 7 мая 2011

Кто нибудь знает как сделать так чтобы C# просто выдавал ошибку деления на ноль, а не записывал этот дурацкий NaN?

Читайте также:  Что значит минус в платежке за газ

Neponimayushiy
Проверяй на NAN/zero. Если NAN тогда бросай исключение.

Вроде так можно проверить на NaN:

aloha_hawaii
> синус числа больше 1
может все-таки арксинус?

Neponimayushiy
Nikopol
> Вроде так можно проверить на NaN:

Вот из нашего геймбуста, так называемого.

а м.. у тебя ж шарп.. но для шарпа тож должна быть такая опция.

Источник

Nan число что такое

СОДЕРЖАНИЕ

Плавающая точка [ править ]

IEEE 754 NaN кодируются с полем экспоненты, заполненным единицами (например, значениями бесконечности), и некоторым ненулевым числом в поле значимости (чтобы сделать их отличными от значений бесконечности); это позволяет определять несколько различных значений NaN, в зависимости от того, какие биты установлены в значимом поле, а также от значения бита ведущего знака (но приложения не обязаны предоставлять четкую семантику для этих отдельных значений NaN).

Например, побитовое значение NaN IEEE 754 одинарной точности (32 бита) будет

s111 1111 1xxx xxxx xxxx xxxx xxxx xxxx

Операции с плавающей точкой, отличные от упорядоченных сравнений, обычно передают тихий NaN ( qNaN ). Большинство операций с плавающей запятой в сигнальном NaN ( sNaN ) сигнализируют об исключительной ситуации недопустимой операции; тогда действие исключения по умолчанию такое же, как для операндов qNaN, и они производят qNaN, если производят результат с плавающей запятой.

Сравнение с NaN [ править ]

Сравнение с NaN всегда возвращает неупорядоченный результат даже при сравнении с самим собой. Предикаты сравнения либо сигнализируют, либо не сигнализируют о тихих операндах NaN; версии сигнализации сигнализируют об исключительной ситуации недопустимой операции для таких сравнений. Предикаты равенства и неравенства не сигнализируют, поэтому x = x, возвращающий false, можно использовать для проверки, является ли x тихим NaN. Все другие стандартные предикаты сравнения сигнализируют о получении операнда NaN. Стандарт также предоставляет несигнальные версии этих других предикатов. Предикат определяет, является ли значение NaN, и никогда не сигнализирует об исключении, даже если x является сигнальным NaN. isNaN(x)

Сравнение NaN и любого значения x с плавающей запятой (включая NaN и ± ∞)

Сравнение NaN ≥ x NaN ≤ x NaN> x NaN

Операции создания NaN [ править ]

Есть три типа операций, которые могут возвращать NaN: [6]

NaN не обязательно генерируются во всех вышеупомянутых случаях. Если операция может вызвать исключительную ситуацию и ловушки не замаскированы, тогда операция вызовет ловушку. [7] Если операнд является тихим NaN, а также нет сигнального операнда NaN, то нет условия исключения и результатом является тихий NaN. Явное присвоение не вызовет исключения даже для сигнализации NaN.

Тихий NaN [ править ]

Тихие NaN, или qNaN, не вызывают никаких дополнительных исключений, поскольку они распространяются через большинство операций. Исключение составляют случаи, когда NaN нельзя просто передать в неизмененном виде в вывод, например, при преобразовании формата или некоторых операциях сравнения.

Сигнализация NaN [ править ]

При обнаружении обработчик прерывания может декодировать sNaN и вернуть индекс вычисленному результату. На практике такой подход сталкивается со многими сложностями. Обработка знакового бита NaN для некоторых простых операций (таких как абсолютное значение ) отличается от обработки для арифметических операций. Стандарт не требует ловушек. Есть и другие подходы к решению такого рода проблем, которые были бы более переносимыми.

Определение функции [ править ]

Существуют разногласия по поводу правильного определения результата числовой функции, которая получает в качестве входных данных тихий NaN. Одна точка зрения состоит в том, что NaN должно распространяться на выход функции во всех случаях, чтобы распространять индикацию ошибки. Другой взгляд, принятый стандартами ISO C99 и IEEE 754-2008 в целом, заключается в том, что если функция имеет несколько аргументов и вывод однозначно определяется всеми входами, отличными от NaN (включая бесконечность), тогда это значение должно быть результатом. Так, например, значение, возвращаемое функцией hypot(±∞, qNaN) и, hypot(qNaN, ±∞) равно + ∞.

Целое число NaN [ править ]

Показать [ править ]

Различные операционные системы и языки программирования могут иметь разные строковые представления NaN.

Поскольку на практике закодированные NaN имеют знак, бит молчания / сигнализации и необязательную «диагностическую информацию» (иногда называемую полезной нагрузкой ), они также часто встречаются в строковых представлениях NaN, например:

(существуют другие варианты).

Кодировка [ править ]

Первый вариант был предпочтительнее, поскольку он позволяет реализации заглушить сигнальный NaN, просто установив бит сигнализации / молчания в 1. Обратное невозможно с последним выбором, поскольку установка бита сигнализации / молчания в 0 может дать бесконечность. [11]

Версия стандарта IEEE 754 ( IEEE 754-2008 ) 2008 г. дает формальные рекомендации по кодированию состояния сигнализации / молчания.

Для соответствия IEEE 754-2008 значение бита сигнализации / молчания в последних процессорах MIPS теперь настраивается через поле NAN2008 регистра FCSR. Эта поддержка является необязательной в MIPS Release 3 и требуется в Release 5. [12]

Состояние / значение остальных битов значения поля не определены стандартом. Это значение называется «полезной нагрузкой» NaN. Если операция имеет один вход NaN и передает его на выход, полезная нагрузка результата NaN должна быть полезной нагрузкой входного NaN (это не всегда возможно для двоичных форматов, когда состояние сигнализации / молчания кодируется is_signaling флагом, как объяснено выше. ). Если имеется несколько входов NaN, полезная нагрузка результата NaN должна быть из одного из входных NaN; в стандарте не указано, какие именно.

Источник

Читайте также:  с праздником мчс белоруссии
Обучающий онлайн портал