Denormaliserede tal ( eng. denormalized numbers ) eller subnormale tal [1] ( eng. subnormale tal ) - en type flydende kommatal , defineret i IEEE 754 -standarden .
Tal er kodet : mantissen starter ved 0, ikke 1 (ingen implicit ), og rækkefølgen er den mindst mulige. Denormaliserede tal er tættere på 0 end det mindste repræsentative normaliserede tal. Maskine 0 er også et denormaliseret tal.
Når du skriver i float (enkelt præcision) , dobbelt (dobbelt præcision) formater , vil 0 blive skrevet i ordrefeltet.
Den 10-byte lange double (udvidet præcision) har ikke denormaliserede tal som en speciel klasse, da den har en eksplicit heltalsbit. Imidlertid har tal med den mindste orden (i ordensfeltet 0) og biten af heltalsdelen 0 lignende egenskaber.
For at spare hukommelse bruges den såkaldte implicitte enhed : tal i binær standardform skrives som 1,mmm 2 ·2 k , og hovedenheden er ikke bevaret. I dette format er det umuligt at skrive nul - derfor vil maskinens nul nødvendigvis være et specielt tal. For nemheds skyld bør den have en minimumsbestilling.
Det faktum, at disse specielle tal ikke kun er nuller, men 0,mmm 2 -126 (i en 4-byte float ) har en yderligere fordel: addition og subtraktion vil ikke føre til overløb (nulstilling af resultatet), hvis resultatet af operationen er ikke et nøjagtigt 0 Med andre ord, takket være indførelsen af denormaliserede tal, er betingelserne og ækvivalente, uanset hvor tætte (i mantissen) og små (i rækkefølge ) tal vi trækker fra. Uden introduktionen af denormaliserede tal kunne resultatet af en sådan operation være 0, selvom tallene ikke er ens. Det samme gælder ved tilføjelse af tal, der er tæt på i absolut værdi, men med et andet fortegn. Dette kan være uønsket, såsom at forårsage en divider-med-nul fejl, hvis resultatet bruges som divisor [2] .
I modsætning hertil, på MK-61 lommeregneren, vil subtrahering af 1,8 10 -99 - 1,2 10 -99 give nul, selvom tallene ikke er ens.
Nogle[ hvad? ] processorer og matematiske coprocessorer arbejder med denormaliserede tal i hardware med samme hastighed som med normaliserede. I andre er en sådan hardwarebehandling ikke implementeret (for eksempel for at undgå at komplicere implementeringen af FPU'en), og små værdier bringes enten til nul med det samme (se anti-overløb ), eller behandles i operativsystemet i software. Den anden mulighed fører til en stigning i behandlingstiden for denormaliserede tal.
Denormaliserede tal blev implementeret i Intel 8087 matematiske coprocessor på et tidspunkt, hvor IEEE 754 standarden var ved at blive skrevet. De var det mest kontroversielle træk ved den foreslåede applikation, som til sidst blev accepteret [3] , men denne implementering viste, at denormaliserede tal kunne håndteres i hardware i praksis. Nogle implementeringer af floating-point-moduler understøtter ikke denormaliserede tal i hardware, men behandler dem i stedet i software. Selvom denne behandling er gennemsigtig for brugeren, kan den forårsage, at beregninger, der genererer eller modtager denormaliserede tal som input, tager meget længere tid end de samme beregninger med normaliserede tal.
Et eksempel på et system, hvor talrepræsentationsformatet ikke inkluderede denormaliserede tal, er ZX Spectrum .
Grunden til, at denormaliserede tal blev indført er en del af et mere generelt beregningsproblem med at finde summen af tal ved hjælp af begrænset præcision (se f.eks. Kahans algoritme ). Desuden opstår problemet, der løses ved indførelsen af denormaliserede tal, i et relativt snævert antal tal - nær underløbsgrænsen . Men et lignende problem kan også være forbundet med overløb: hvis vi for eksempel ønsker at sammenligne to tal med forskellige tegn, hvis rækkefølge er maksimal, vil tilstanden blive testet med succes og give et negativt resultat, og tilstanden kan føre til til en overløbsfejl. I det generelle tilfælde løser denormaliserede tal således ikke problemet med resultatet afhængigt af permutationen af termer, og der kræves stadig en vis nøjagtighed fra programmøren, når man arbejder med flydende aritmetik. I tilfælde af at programmøren skal arbejde med tal på grænsen til underflow , virker det mere passende at skifte til et format med et bredere udvalg af eksponenter eller bruge specielle foranstaltninger til at kontrollere størrelsen af eksponenten , end at stole på denormaliserede tal. Derudover skal du huske, at denormaliserede tal har færre signifikante cifre i mantissen sammenlignet med de sædvanlige for dette format, og dette er fyldt med et betydeligt tab af nøjagtighed.