Баланс nan что это означает

Баланс nan что это означает

NaN (англ. Not-a-Number ) — одно из особых состояний числа с плавающей запятой. В соответствии с IEEE 754, такое состояние задаётся через установку показателя степени в зарезервированное значение. Используется во многих математических библиотеках и математических сопроцессорах. Данное состояние может возникнуть в различных случаях, например, когда предыдущая математическая операция завершилась с неопределённым результатом, или если в ячейку памяти попало не удовлетворяющее условиям число.

К операциям, приводящим к появлению NaN в качестве ответа, относятся:

Содержание

Свойства

См. также

Примечания

Ссылки

Полезное

Смотреть что такое «NaN» в других словарях:

NaN — NaN, proviene del acrónimo en inglés Not a Number (en español: no es un número). Este acrónimo se usa generalmente en algunos lenguajes de programación para expresar un resultado imposible de calcular, como el caso de las raíces negativas,… … Wikipedia Español

Nan — or NAN may refer to one of the following. Contents 1 Acronyms 2 Places 3 People … Wikipedia

NAN — bezeichnet: eine Stadt im Norden von Thailand, siehe Nan den gleichnamigen Fluss (Maenam Nan), siehe Nan (Fluss) die gleichnamige Provinz, siehe Nan (Provinz) den Kreis Nan (chin. 南县 Nán Xiàn) der chinesischen Provinz Hunan, siehe Nan (Yiyang)… … Deutsch Wikipedia

NaN — (« Not a Number », en français « pas un nombre ») est, en informatique, une valeur ou un symbole produit par le résultat d une opération arithmétique invalide, plus spécialement dans les calculs utilisant la virgule flottante … Wikipédia en Français

Nan — … Deutsch Wikipedia

Nan — /nan/, n. 1. a word formerly used in communications to represent the letter N. 2. a female given name. * * * (as used in expressions) Hai nan Ho nan Huai nan tzu Hu nan Chi nan Nan ch ang Nan ching Nan ning Yün nan T ai nan * * * ▪ Thailand… … Universalium

Nan-ao — 南澳鄉 Staat: Republik China Koordinaten … Deutsch Wikipedia

Nan’yō — shi 南陽市 Geographische Lage in Japan … Deutsch Wikipedia

Nan’an — ist mehrdeutig. Es bezeichnet: die kreisfreie Stadt Nan an (南安市) der bezirksfreien Stadt Quanzhou in der chinesischen Provinz Fujian, siehe Nan an (Quanzhou); den Stadtbezirk Nan an (南岸区 Nan an Qū) der chinesischen regierungsunmittelbaren Stadt… … Deutsch Wikipedia

Источник

NaN все еще может немного удивить

Баланс nan что это означает. image loader. Баланс nan что это означает фото. Баланс nan что это означает-image loader. картинка Баланс nan что это означает. картинка image loader.

Сначала, я подумал, что это очередной вопрос из тех, которые могут задаваться на собеседовании. Наверное, если как следует пораскинуть мозгами, то можно догадаться до того, каким будет результат. Откинувшись на спинку кресла, начал размышлять, включать логику, вспоминать что-нибудь, на что можно опереться в рассуждениях. Но тщетно! Вдруг стало совершенно очевидно, что найти ответ не удается. Но почему? В чем нужно разбираться, чтобы он был найден? В математике? В языке программирования?

Ответ должен быть NaN. Но почему я не уверен в этом? Всю дорогу была уверенность в том, что любые выражения, содержащие NaN, вернут NaN. Ну разве что только если поделить NaN на ноль — в этом случае будет вызвано исключение ZeroDivisionError. Сто процентов NaN!

Ввожу выражение в ячейку блокнота:

В самом деле? Постойте:

То есть, по какой-то причине, единица в степени NaN — это единица, а вот ноль и все остальные числа в степени NaN — это NaN. Где логика? В чем дело?

Так, давайте еще раз:

Может быть я просто из-за отсутствия какой-то практической надобности в глубоких познаниях о NaN, просто о чем-то не подозревал? А может я знал, но забыл? А может еще хуже — я не знал и забыл?

Заходим на Википедию. Там данный вопрос тоже обозначен как проблема, но почему все именно так устроено, никак не объясняется. Зато узнал что:

Хотя, в то же время:

Что, согласитесь, тоже немного странно.

Ладно, с Википедии отправляемся в C99 на 182 страницу и наконец-то получаем логическое объяснение, почему pow(x, 0) возвращает 1 для любых x, даже для x равного NaN:

Если функция Баланс nan что это означает. d9313f8d06735d6988074f717265c2ac. Баланс nan что это означает фото. Баланс nan что это означает-d9313f8d06735d6988074f717265c2ac. картинка Баланс nan что это означает. картинка d9313f8d06735d6988074f717265c2ac.возводится в степень Баланс nan что это означает. 41d1c265e788bb39c5f094f4c3acf330. Баланс nan что это означает фото. Баланс nan что это означает-41d1c265e788bb39c5f094f4c3acf330. картинка Баланс nan что это означает. картинка 41d1c265e788bb39c5f094f4c3acf330.и при этом Баланс nan что это означает. 41d1c265e788bb39c5f094f4c3acf330. Баланс nan что это означает фото. Баланс nan что это означает-41d1c265e788bb39c5f094f4c3acf330. картинка Баланс nan что это означает. картинка 41d1c265e788bb39c5f094f4c3acf330.стремится к 0, то в результате получится 1, вне зависимости от того, какое значение имеет Баланс nan что это означает. d9313f8d06735d6988074f717265c2ac. Баланс nan что это означает фото. Баланс nan что это означает-d9313f8d06735d6988074f717265c2ac. картинка Баланс nan что это означает. картинка d9313f8d06735d6988074f717265c2ac..

Баланс nan что это означает. image loader. Баланс nan что это означает фото. Баланс nan что это означает-image loader. картинка Баланс nan что это означает. картинка image loader.

А если результат не зависит от числового значения функции Баланс nan что это означает. d9313f8d06735d6988074f717265c2ac. Баланс nan что это означает фото. Баланс nan что это означает-d9313f8d06735d6988074f717265c2ac. картинка Баланс nan что это означает. картинка d9313f8d06735d6988074f717265c2ac., то 1 — является подходящим результатом, даже для NaN. Однако это по-прежнему не объясняет, почему 1 в степени NaN равна 1.

Отыскиваем еще один C99 и на 461 странице не видим никаких объяснений, просто требование того, что pow(+1, y) должно возвращать 1 для всех y, даже равных NaN. Все.

С другой стороны, объяснение, почему pow(NaN, 0)=1 является более предпочтительным, чем pow(NaN, 0)=NaN все-таки наталкивает на мысль о том, что NaN не стоит воспринимать буквально, как Not-a-Number. Допустим, в результате каких- то вычислений мы получили число, превышающее размер памяти, выделенный под данный тип чисел, например:

В результате мы получили inf, что именно это за число мы не знаем, но все же это какое-то число. Затем мы снова что-то вычислили и снова получили слишком большое число:

Разность a и b вернет NaN:

Единственная причина, по которой мы можем считать c не числом, заключается в том, что мы использовали недостаточно точные вычисления. Однако, в c под NaN все же скрывается какое-то значение. О том, что это за значение, мы не знаем. Но все же это число, а раз это число, то нет ничего удивительного в том, что pow(1, NaN)=1.

Почему же тогда pow(0, NaN)=NaN? Дело в том, что если возвести 0 в любую степень, то мы действительно получим ноль. Кроме одного единственного случая — когда степень равна 0:

Из-за чего в выражении pow(0, NaN) появляется неопределенность с конкретным значением NaN. Конечно, вероятность того, что под NaN может скрываться 0 — исчезающе мала и можно было бы принять, что pow(0, NaN)=0. Но все же лучше перестраховаться, мало ли к чему это может привести. Возможно, так и рассуждали, когда создавались стандарты.

Даже не знаю, что еще сказать… если вы заранее знали ответ, то скорее всего вам можно позавидовать, ведь сферы, где могут пригодиться такие познания, наверняка, переполнены интересными задачами. А может и наоборот. Напишите об этом в комментариях.

P.S. Поскольку NaN относится к числам с плавающей точкой, оно может быть ключом словаря:

Имеет ли смысл использовать такое на практике? Думаю, что лучше не стоит.

Источник

СОДЕРЖАНИЕ

Плавающая запятая

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

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

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

Сравнение с NaN

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

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

СравнениеNaN ≥ xNaN ≤ xNaN> xNaN Операции, генерирующие NaN

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

NaN не обязательно генерируются во всех вышеупомянутых случаях. Если операция может вызвать исключительную ситуацию и ловушки не замаскированы, тогда операция вызовет ловушку. Если операнд является тихим 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. Например, ECMAScript использует только одно значение NaN.

Кодирование

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

В редакциях стандарта IEEE 754 от 2008 и 2019 гг. Содержатся формальные требования и рекомендации по кодированию состояния сигнализации / молчания.

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

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

Источник

Полезный 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-а.

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

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

Источник

Почему typeof NaN возвращает «число»?

просто из любопытства.

Это не кажется очень логичным, что typeof NaN номер. Прямо как NaN === NaN или возврат false. Является ли это одной из особенностей javascript, или для этого есть причина?

Edit: спасибо за ваши ответы. Это не простая вещь, чтобы получить их голову вокруг, хотя. Чтение ответов и wiki я понял больше, но все же, предложение, как

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

просто голова кружится. Если кто-то может перевести это на человеческий (в отличие от, скажем, математического) читаемый язык, я был бы благодарен.

20 ответов

Это означает не число. Это не особенность javascript, а общий принцип информатики.

существует три вида операции которые возвращают Нэн:

операции с NaN как минимум один операнд

реальные операции со сложными результатами:

все эти значения могут быть разными. Простой тест для NaN-это тест value == value ложно.

Ну NaN еще числовое тип, несмотря на то, что на самом деле обозначает не число 🙂

конкретной NaN не считается равным другому NaN потому что они могут быть разные значения. Однако, NaN по-прежнему является типом номера, как 2718 или 31415.

Что касается вашего обновленного вопроса, чтобы объяснить в терминах непрофессионала:

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

все это означает (разбито на части):

сравнение с NaN всегда возвращает неупорядоченный результат даже при сравнении с самим собой.

предикаты сравнения либо сигнализируют, либо не сигнализируют, сигнализация версии сигнализируют о недопустимом исключении для таких сравнений.

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

предикаты равенства и неравенства не сигнализируют, поэтому x = x, возвращающий false, можно использовать для проверки, является ли x тихим бабушка.

стандарт ECMAScript (JavaScript) указывает, что Numbers are IEEE 754 поплавки, которые включают в себя NaN как возможное значение.

ECMA 262 5e раздел 4.3.19: числовое значение

примитивное значение, соответствующее 64-разрядному двоичному формату двойной точности IEEE 754.

ECMA 262 5e раздел 4.3.23: NaN

числовое значение, которое является IEEE 754 Значение «не-число».

IEEE 754 Википедии

стандарт IEEE для арифметики с плавающей запятой является техническим стандартом, установленным Институтом инженеров электротехники и электроники и наиболее широко используемым стандартом для вычисления с плавающей запятой [. ]

typeof NaN возвращает ‘number’ потому что:

спецификация ECMAScript говорит, что тип номера включает NaN:

набор всех возможных числовых значений, включая специальное » Не-число» (NaN) значения, положительная бесконечность и отрицательная бесконечность

так typeof возвращает соответственно:

производства объект unaryexpression : typeof объект unaryexpression is оценивается следующим образом:

примитивное значение, соответствующее 64-разрядному двоичному файлу двойной точности формат IEEE 754 значение

числовое значение, которое является значением IEEE 754 «Not-a-Number»

NaN-допустимое значение с плавающей запятой (http://en.wikipedia.org/wiki/NaN)

и NaN === NaN ложно, потому что они не обязательно одно и то же число

что касается typeof, это зависит от языка. И большинство языков скажут, что NaN-это float, double или number в зависимости от того, как они его классифицируют. Я не знаю языков, которые скажут, что это неизвестный тип или null.

хотя его имена говорят, что это не число, тип данных, используемый для его хранения, является числовым типом. Итак, в JavaScript, запрашивая тип данных NaN вернутся number (as alert(typeof(NaN)) наглядно демонстрирует).

Javascript использует NaN для представления всего, с чем он сталкивается, что не может быть представлено каким-либо другим способом его спецификациями. Это не значит, что это не число. Это самый простой способ описать встречу. NaN означает, что он или объект, который ссылается на него, не может быть представлен каким-либо другим способом javascript. Для всех практических целей она «неизвестна». Будучи «неизвестным», оно не может сказать вам, что оно такое, и даже если оно само есть. Это даже не тот объект, которому он назначен. Это может только сказать вам, что это не так, и не-ность или ничто может быть описано только математически на языке программирования. Поскольку математика связана с числами, javascript представляет ничто как NaN. Это не значит, что это не номер. Это значит, что мы не можем прочесть это по-другому. Вот почему он не может сравниться с самим собой. Потому что это не так.—1—>

позорное неравенство NaN для себя и == и === является проявлением запутанного дизайна, заставляющего этот объект исключения быть примитивным типом. Это нарушает фундаментальный принцип, согласно которому примитив однозначно определяется его значением. Если NaN предпочтительнее рассматривать как исключение (из которых могут быть разные виды), тогда оно не должно «продаваться» как примитивное. И если это если хочешь быть примитивным, этот принцип должен соблюдаться. Пока он сломан, как у нас в JavaScript, и мы не можем действительно решить между ними, путаница, приводящая к ненужной когнитивной нагрузке для всех участников, останется. Что, впрочем, очень легко исправить, просто сделав выбор между двумя:

и даже если «все так, как есть», ничто не мешает нам сделать это четкое различие для себя, чтобы помочь сделать наш код более предсказуемым и легко отлаживаемым. На практике это означает выявление эти исключения и обращение с ними как с исключениями. Что, к сожалению, означает больше кода, но, надеюсь, будет смягчено такими инструментами, как TypeScript Flowtype.

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

Это просто потому, что NaN является свойством объекта Number в JS, оно не имеет ничего общего с тем, что это число.

Источник

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *