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:
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).
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)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