Wat is het grootste getal in SAS met drie bytes?

Fons, 61 jaar
2 mei 2019

Ik hoorde dat het grootste cijfer met drie bytes (in SAS) 8192 is. Dat is 2^13. Ik dacht dat het grootste cijfer met 3 bytes 2^24 is = 1,4… x 10^73 (zonder rekening te houden met de controlebits). Nu vond ik een paper waarin uitgelegd wordt dat je met drie bytes (in SAS) als grootste cijfer 8192 krijgt. Zij gebruiken deze bytes als volgt: SEEEEEEE EEEEMMMM MMMMMMMM (S = sign, E = exponent en M is mantissa). Representatie van 8192 zou als volgt zijn: 01000000 11000000 00000000. Hier laat mijn verstand het afweten.

Antwoord

Indien men een groep van 8 bits "byte" noemt, wat gebruikelijk is, kan een getal voorgesteld door drie bytes 2^24 verschillende waardes aannemen. Welke getallen deze waardes voorstellen, kan arbitrair beslist worden door de ontwerper van software. Indien deze enkel positieve gehele getallen (met inbegrip van 0) wenst voor te stellen, dan kunnen getallen van 0 tot 2^24 - 1 voorgesteld worden en dan is de meest logische wijze dit te doen gewoonweg het getal voor te stellen door het overeenstemmend 24 bit binair getal.

Indien men echter zowel positieve als negatieve gehele getallen wenst voor te stellen, zijn er verschillende conventies mogelijk. Ik zal enkele voorbeelden opsommen, waarbij ik volgende notaties zal gebruiken:

n is het aantal bit van de voorstelling (in dit geval dus 24)

V is de voorstelling (een binair getal met n bit, dat als positief beschouwd wordt)

X is het voor te stellen getal (positief, nul of negatief)

s is de meest linkse bit van de n bit voorstelling

De meest gebruikte voorstellingen zijn:

Naam                               Voorstelling                                      Voorstelbare waardes              Voor en nadelen                                    

"Absolute value + sign"    Indien X>=0,  V = X                         -2^(n-1) < X < 2^(n-1)               Praktisch voor vermenigvuldigingen en delingen maar twee voortsellingen voor 0.
                                         Indien X<=0,  V = -X + 2^(n-1)

"Binary Offset"                 V = X + 2^(n-1)                               -2^(n-1) <= X < 2^(n-1)             De waarde 0 wordt niet voorgesteld met allemaal nullen.

"Two's complement"        V = (X + 2^n) MOD 2^n                  -2^(n-1) <= X < 2^(n-1)             Veruit meest gebruikte voorstelling voor gehele getallen.
                                                                                                                                                  De modulo operator (MOD) betkent dat men geen bits links van de nde gebruikt.

Indien men zich niet wenst te beperken tot gehele getallen, maar reële getallen wenst voor te stellen, gebruikt men een "floating point" voortelling, waarbij men 1 van de bits gebruikt voor het teken, e bits voor een exponent E en m bits voor de mantissa M, waarbij e+m = n-1.

De benaderde waarde van dergelijk getal wordt gegeven door een uitdrukking zoals V = (-1)^s.M.2^E, waarbij het aantal bits m van M bepaald welke de precisie van de voorstelling is en het aantal bits e van E welke de gamma van mogelijke waardes is. Historisch hebben er zeer veel verschillende formaten bestaan, maar sinds 1985 gebruikt quasi iedereen de formaten gedefinieerd in de IEEE754 standaard. In die standaard is het type REAL een 32 bit voorstelling met m = 23 en e = 8. Dank zij allerlij zeer vernuftige "trucjes" resuleerd dit formaat in een gamma die gaat van 10^-38 tot 10^+38 en een relatieve preciesie van 2^-23, of 6 betekenisvolle decimale cijfers. Een snelle presentatie van dit formaat vindt men op http://cs.boisestate.edu/%7Ealark/cs354/lectures/ieee754.pdf en een volledige uitleg vindt men op wikipedia.

Ik heb zelf nooit gehoord van een 24 bit formaat dat SAS zou gebruiken, maar ik ben geen SAS gebruiker. Volgens de gegevens die U geeft zou dit formaat tegenover IEEE754 REAL een grotere gamma toelaten (meer E bits) maar met een veel kleinere precisie (maar 12 bits voor M, wat, in eerste benadering zou overeenkomen met een precisie van 2^⁻12, of 3 betekenisvolle decimale cijfers.

Ik hoop U hiermee heb kunnen helpen en verblijf bereid u verdere uitleg te verstrekken

Jacques Tiberghien

jacques.tiberghien@vub.ac.be

Reacties op dit antwoord

  • 09/05/2019 - Fons (vraagsteller)

    Bedankt voor je uitleg. Ga ik zeker in detail bestuderen.

Enkel de vraagsteller en de wetenschapper kunnen reageren op een antwoord.

Zoek andere vragen

© 2008-2021
Ik heb een vraag wordt gecoördineerd door het
Koninklijk Belgisch Instituut voor Natuurwetenschappen