NaN

NaN ( eng.  Not-a-Number , "ikke et tal", ikke et tal ) er en af ​​de særlige tilstande for et flydende kommatal . Anvendes i mange matematikbiblioteker og matematiske coprocessorer . Denne tilstand kan forekomme i forskellige tilfælde, for eksempel når den tidligere matematiske operation endte med et udefineret resultat, eller hvis et tal, der ikke opfylder betingelserne, kom ind i hukommelsescellen.

I overensstemmelse med IEEE 754 specificeres denne tilstand ved at sætte eksponenten til en reserveret værdi på 11 ... 11, og mantissen  til alt andet end 0 (reserveret værdi for maskinens uendelighed ). Tegnet og mantissen kan bære nogle yderligere oplysninger: mange biblioteker udsender "negativ" NaN som -NaN.

Operationer, der producerer NaN som et resultat omfatter:

Egenskaber

NaN er ikke lig med nogen anden værdi (ikke engang sig selv). På grund af dette er en af ​​de almindelige, men ikke indlysende, måder at kontrollere resultatet for NaN på at sammenligne den resulterende værdi med sig selv. En mere gennemsigtig og eksplicit måde er at ringe til funktionen for at tjekke nummeret for NaN - isnanpå de fleste programmeringssprog.

Opførselen af ​​andre sammenligningsoperatører varierer fra sprog til sprog. Nogle sprog giver en løgn [3] (så de a < bopfører sig b > aanderledes med NaN), andre danner en undtagelse selv for en "tavs" NaN.

Enhver ikke-triviel operation, der tager en "stille" NaN som argument, returnerer altid NaN, uanset værdien af ​​de andre argumenter. De eneste undtagelser fra denne regel er funktionerne max()og min(), som returnerer værdien af ​​et andet argument (bortset fra NaN).

Funktioner ved implementeringer

I nogle programmeringssprog er der "stille" (qNaN) og "signal" (sNaN): den første, der rammer en hvilken som helst handling, returnerer NaN, den anden rejser en undtagelse . Normalt bestemmes "stille" eller "signal" af den mest signifikante del af mantissen.

Ifølge IEEE754-1985- standarden skulle 1 NaN være lig med NaN, men de fleste matematikbiblioteker returnerede 1. Derfor er resultatet af denne operation i 2008-standarden 1.

Et ikke-nummer kan vises på forskellige måder, for eksempel:

nan(output af programmer i C, C++) NaN(ECMAScript, Rust, C#) #SNAN, #QNAN eller #IND (Excel) +nan.0(skema)

Heltal NaN

De fleste repræsentationer af heltal understøtter ikke at angive, at et tal er ugyldigt. I dette tilfælde påbyder IEEE754-standarden, at der skal gives en undtagelse ved konvertering af NaN til et heltal. Så i Java giver en sådan operation en undtagelse java.lang.ArithmeticException. I C fører dette til udefineret adfærd, men det er også muligt at smide en undtagelse og returnere en udefineret værdi, som krævet af standarden.

Perl - Math::BigIntsprogpakken bruger "NaN" til strenge, der ikke kan konverteres til tal.

> perl -mMath::BigInt -e "print Math::BigInt->new('foo')" NaN

Noter

Kommentar

  1. ↑ 1 2 Hvis biblioteket, der udfører denne handling, ikke understøtter eller ikke er konfigureret til at bruge komplekse tal .

Kilder

  1. IEEE Computer Society. IEEE Standard for Floating-Point Aritmetik § 9.2.1   : journal . — IEEE, 2008. — 29. august. - ISBN 978-0-7381-5753-5 . - doi : 10.1109/IEEEESTD.2008.4610935 .
  2. På nogle sprog, såsom Python, vil resultatet af operationen være 1, ikke NaN.
  3. NUM07-J. Forsøg ikke at sammenligne med NaN-CERT Oracle Coding Standard for Java-CERT Secure Coding Standards . Dato for adgang: 17. juni 2016. Arkiveret fra originalen 29. juli 2016.

Links