De presentatie wordt gedownload. Even geduld aub

De presentatie wordt gedownload. Even geduld aub

Les 2: Gegevensvoorstelling

Verwante presentaties


Presentatie over: "Les 2: Gegevensvoorstelling"— Transcript van de presentatie:

1 Les 2: Gegevensvoorstelling
Deze les handelt over de voorstelling van gegevens in een computer. Aangezien een computer enkel met enen en nullen werkt, zal men alle gegevens die men wil voorstellen in een computersysteem moeten representeren als een sequentie van enen en nullen. De manier waarop dit gebeurt is het onderwerp van deze les. There are only 10 different kinds of people in the world: those who know binary and those who don't Anoniem

2 Overzicht Logische operaties op bits en bitstrings
Hexadecimale representatie Voorstelling van natuurlijke getallen Voorstelling van gehele getallen Voorstelling van reële getallen Voorstelling van lettertekens Voorbeelden

3 Eenheid van informatie
binary digit of bit 0 of 1 “vals” of “waar” “false” of “true” George Boole ( ) In een computer wordt alle informatie voorgesteld als patronen van bits. Een bit of “binary digit” kan enkel de waarde 0 of 1 aannemen. Men spreekt ook wel van vals/false/off (0) en waar/true/on (1). George Boole is de vader van de “boolese logica”, een vorm van algebra voor de representatie van logica, uitgaande van bits.

4 Logische operaties O1 O2 en 0 0 0 0 1 0 1 0 0 1 1 1 O niet 0 1 1 0
O niet monadische operatie dyadische operaties O1 O2 of O1 O2 eof Operaties in de boolese algebra noemen we “logische operaties”. Hier worden enkele monadische (één operand) en dyadische (twee operandi) operaties getoond door middel van hun waarheidstabel. De waarheidstabel (truth table) toont de waarde van het resultaat (of de output) bij een bepaalde input, en dit voor alle mogelijke inputs. Net omdat het om logische operaties gaat, waarbij de operandi aan de input enkel 0 of 1 als waarde aannemen, is het mogelijk alle inputs op te sommen zonder een al te lange lijst te bekomen. De operaties zijn - NIET: keert de waarde om - EN: geeft 1 als output enkel als beide inputs 1 zijn, anders 0 als output - OF: geeft 0 als output enkel als beide inputs 0 zijn, anders 1 als output - EOF (exclusieve OF): geeft 1 als output als beide inputs verschillend zijn, anders 0. De hier besproken binaire operaties zijn commutatief, d.w.z. dat de volgorde van de operandi in de bewerking geen invloed heeft op het resultaat.

5 Bitsgewijze logische operaties: en
masker en en Bitsgewijze logische operaties voeren logische operaties uit op bitpatronen, waarbij de logische operatie wordt uitgevoerd ‘bit-per-bit’, ttz. de operatie wordt uitgevoerd op de corresponderende bits van de beide bitpatronen. Naast deze puur logische benadering kan je één van de 2 bitpatronen ook zien als een “masker”, dat wordt toegepast op het andere bitpatroon. Voor de EN operatie is het effect van het masker dat het enkel die bits doorlaat van het originele patroon welke overeenstemmen met een 1 in het masker (te vergelijken met een carnavalsmasker dat sommige delen van het gelaat bedekt laat en andere dan weer niet). De andere bits worden op 0 gezet. Hier wordt dit geïllustreerd door de 1-bits in het masker rood te kleuren, en de “doorgelaten” bits van het originele patroon groen te kleuren (zowel in input als output). Door de commutativiteit van de EN-operatie, kan men ook het andere bitpatroon als masker gebruiken, en toch hetzelfde resultaat bereiken. De werking van het masker is wel verschillend (andere bits). Een EN-masker laat toe bepaalde bits op nul te zetten, en ander door te laten.

6 Bitsgewijze logische operaties: of
masker of of Zie ook de opmerkingen bij de vorige dia “Bitsgewijze logische operaties: EN” Ook bij de bitsgewijze OF kan je de werking van een “masker” herkennen. Het masker laat de echte waarde van de input door (groene bits) waar het masker de waarde 0 heeft (rode bits). Waar het masker de waarde 1 heeft, komt ook een 1 in de output (blauwe bits). Ook de bitsgewijze OF is commutatief. Een OF-masker laat toe bepaalde bits op 1 te zetten, en andere door te laten.

7 Bitsgewijze logische operaties: exclusieve of (eof)
masker eof eof eof Zie ook de opmerkingen bij de vorige dia “Bitsgewijze logische operaties: EN” Ook bij de bitsgewijze EOF kan je de werking van een “masker” herkennen. Het masker laat de echte waarde van de input door (groene bits) waar het masker de waarde 0 heeft (zwarte bits). Waar het masker de waarde 1 heeft (rode bits), worden de originele bits omgekeerd in de output (blauwe bits). Door de operatie te herhalen met hetzelfde masker, bekomen we de originele waarde terug. Een EOF-masker laat toe bepaalde bits om te keren (zoals in een NIET operatie), en andere door te laten. De EOF operatie kan nog anders omgeschreven worden: EOF berekent een modulo-2 optelling van de input bits (0+0=0, 0+1=1, 1+0=1, 1+1=0) EOF telt het aantal 1-bits aan de input, en geeft 1 als dit aantal oneven is, anders 0. Beide beschrijvingen blijven van toepassing wanneer de EOF operatie wordt toegepast op meer dan 2 operandi. eof = modulo-2 optelling eof = oneven aantal 1-bits

8 Voorbeelden en en of of eof Hier worden nog enkele voorbeelden gegeven van de bitsgewijze logische operaties. Met de uitleg bij de vorige dia’s, mag je hier geen problemen mee hebben. Merk op dat de verzameling van operaties compleet is. We kunnen immers een willekeurig bit Op 0 zetten Op 1 zetten Omkeren Behouden Dit zijn de enige 4 operaties zijn die we op een bit kunnen uitvoeren. Door de geschikte combinatie van masker en operatie te kiezen kan dit op efficiënte manier gebeuren. ?

9 Alle boolese functies van 2 veranderlijken
“0” en O1 O2 eof of of eof O2 O1 en “1” Eerder zagen we al enkele waarheidstabellen van dyadische operaties. De waarheidstabel van elke binaire logische functie verschilt enkel in de 4 binaire output waarden. Zodoende weet men dat er 24 (=16) binaire logische functies bestaan. Deze zijn hierboven voorgesteld, met vermelding van de functie die ze uitvoeren. Een streep boven de naam van de functie, stelt de negatie van die functie voor. Andere functies die we nog niet tegenkwamen zijn: - O1: herhaalt de input O1 - O2: herhaalt de input O2 -  : als O1 dan O2 -  : als O2 dan O1 Bemerk dat (O1  O2) overeenkomt met ((NIET O1) OF O2) (ga dit na aan de hand van hun waarheidstabel). A  B  A of B

10 Overzicht Logische operaties op bits en bitstrings
Hexadecimale representatie Voorstelling van natuurlijke getallen Voorstelling van gehele getallen Voorstelling van reële getallen Voorstelling van lettertekens Voorbeelden

11 Hexadecimale notatie 4 bits = 1 nibble: in C: z = 0x15 0000 0001 0010
0011 0100 0101 0110 0111 1000 1001 1010 1011 1100 1101 1110 1111 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 1 2 3 4 5 6 7 8 9 A B C D E F Een patroon van 4 bits noemen we een nibble. Wanneer we dit patroon gaan interpreteren als binair getal (getal in het 2- delig talstelsel), dan is een nibble de voorstelling van een getal tussen 0 en 15 (10-delig talstelsel), zoals hierboven aangegeven. Om elke waarde voor te stellen met één enkel teken, worden de getallen 10 tot 15 in de hexadecimale voorstelling (16-delig talstelsel) voorgesteld door de letters A tot F. Samengevat: een hexadecimaal cijfer wordt binair voorgesteld door een nibble (4 bits), en hexadecimaal door de hexadecimale tekens 0-F. In de programmeertaal C worden hexadecimale getallen voorgesteld door ze te laten voorafgaan door het prefix 0x. Het getal 0x13 stelt dan de decimale waarde 19 voor. in C: z = 0x15

12 Octale Notatie 000 001 010 011 100 101 110 111 1 2 3 4 5 6 7 Bitpatronen van 3 bits stellen de decimale getallen 0 tot 7 voor. Soms gebruikt men het octale talstelsel (8-delig), met gebruik van de octale cijfers 0-7. In de programmeertaal C kan men octale getallen ingegeven door ze met een leidende 0 te laten starten. Dit wil zeggen dat 014 eigenlijk het decimale getal 12 voorstelt en niet het decimale getal 14. Die leidende 0 heeft in dit geval dus wel degelijk een semantische betekenis. in C: z = 015

13 Byte 2 nibbles = 1 byte Voorbeeld van een byte: 0101 1101
Hexadecimaal: D 1 kibibyte (KiB) = 210 = 1024 bytes 1 mebibyte (MiB) = 220 = bytes 1 gibibyte (GiB) = 230 = bytes Een byte is 2 nibbles of 8 bits. Het is voor te stellen door 2 hexadecimale cijfers. Een byte is de eenheid voor de grootte van zowat alle geheugenopslagruimten in een computer (RAM, harde schijf, CD, DVD, etc). De volgende orden van grootten worden standaard gebruikt (bi = binair) - 1 KiB (kibibyte): 210 bytes = 1024 bytes (kilobinair – let op de hoofdletter) - 1 MiB (mebibyte): 220 bytes (megabinair) - 1 GiB (gibibyte): 230 bytes (gigabinair) - 1 TiB (tebibyte): 240 bytes (terabinair) Vuistregel! Onthoud dat bij benadering 210 ongeveer gelijk is aan 103. De oude benamingen kilobyte, megabyte enz. worden nu enkel nog gebruikt voor machten van 10, dit om verwarring met de binaire equivalenten te vermijden. Merk op dat de woorden bit, byte, en nibble (toevallig) allemaal wel iets met beetjes afknabbelen te maken hebben: a bit: een beetje a nibble: het geknabbel a bite: een beet of hap Dezelfde regels gelden voor bits. In de afkortingen gebruikt men dan wel een b i.p.v. B. 1 tebibyte (TiB) = 240 ~ 1 biljoen bytes 1 Kibibit (Kib) = 210 bit = 1024 bit

14 Grootte-orden Yotta (Y) 1024 Zetta (Z) 1021 Exa (E) 1018 Peta (P) 1015
Tera (T) 1012 Giga (G) 109 Mega (M) 106 kilo (k) 103 yocto (y) 10-24 zepto (z) 10-21 atto (a) 10-18 femto (f) 10-15 piko (p) 10-12 nano (n) 10-9 micro (,u) 10-6 milli (m) 10-3 Deze dia geeft de metrische grootte-orden weer. Merk op dat, zoals gezien in de vorige dia, deze voorvoegsels in combinatie met binair, de orden kibi, Mebi, etc. niet 103 , 106 … voorstellen, maar wel 210, 220, etc. De eenheden in het rood zijn de meest voorkomenden in de informatica. Merk op dat KiB en Kib met een K geschreven wordt i.p.v. een k.

15 En verder, voor de nerds 1021 zetta Z 10-21 zepto z 1024 yotta Y 10-24
yocto y 1027 xona X 10-27 xonto x 1030 weka W 10-30 wekto w 1033 vunda V 10-33 vunkto v 1036 uda U 10-36 unto u 1039 treda TD 10-39 trekto td 1042 sorta S 10-42 sotro s 1045 rinta R 10-45 rimto r 1048 quexa Q 10-48 quekto q 1051 pepta PP 10-51 pekro pk 1054 ocha O 10-54 otro o 1057 nena N 10-57 nekto nk 1060 minga MI 10-60 mikto mi 1063 luma L 10-63 lunto l

16 Een woord Woord: aantal bytes (2,4,8) (architectuur-afhankelijk)
Dubbelwoord: 2 woorden Quadwoord: 4 woorden Een woord is een bepaald aantal bytes. Het aantal is afhankelijk van de context. Vaak wordt de woordgrootte (of breedte) van een processor gedefinieerd als het aantal bytes die in één keer kunnen bewerkt worden (b.v. opgeteld). Indien men spreekt over de woordbreedte van het geheugen dat heeft men het doorgaans over het aantal bytes dit in een keer met het geheugen kunnen uitgewisseld worden. Huidige architecturen hebben doorgaans woorden van 4 tot 8 bytes. Oude architecturen, en sommige eenvoudige architecturen, werken met 4, 8 of 16 bit woorden. In de praktijk wordt om historische redenen woord vaak gebruikt voor een 16- bit grootheid.

17 Voorbeeld E A B EA B7 ... EAB7 ... Een bitpatroon kan je op verschillende manieren bekijken of interpreteren… - als een lange bitstring - als opeenvolging van nibbles (4 bits) - als opeenvolging van hexadecimale cijfers - als opeenvolging van bytes (2 hex cijfers). - als opeenvolging van 2-byte woorden - als opeenvolging van 4-byte woorden etc. De wijze waarop je een bitpatroon interpreteert hangt af van wat het bitpatroon voorstelt, en welke architectuur je gebruikt. 5550EAB7 ...

18 Overzicht Logische operaties op bits en bitstrings
Hexadecimale representatie Voorstelling van natuurlijke getallen Binair Gray code UPC code QR-code Binair gecodeerde decimalen (BCD) Excess-3 code Voorstelling van gehele getallen Voorstelling van reële getallen Voorstelling van lettertekens Voorbeelden

19 Natuurlijke getallen: binair
1 2 3 4 5 6 1 10 11 100 101 110 0000 0001 0010 0011 0100 0101 0110 4 bit 8 bit Natuurlijke getallen (= positieve gehele getallen) binair voorstellen, gebeurt op dezelfde manier als in het tiendelig talstelsel, maar dan met slechts twee symbolen. In het kader van een vast bitpatroonlengte, zal men een gepast aantal nullen (groen) toevoegen vooraan het binaire getal, om het bitpatroon een vaste lengte te geven. Deze leidende nullen hebben geen invloed op de waarde van het voorgesteld getal.

20 Waarde van binaire voorstelling
Bereik: [0 2n-1] Aantal verschillende waarden: 2n De waarde A van een binaire voorstelling wordt berekend aan de hand van de formule die de waarde van een getal in een positioneel talstelsel met basis 2 uitdrukt. In n bits kunnen we precies 2n verschillende waarden voorstellen. Alle bitpatronen worden m.a.w. gebruikt om een verschillende waarde voor te stellen.

21 Waarde van binair getal
= 22 27 24 23 15610 = 1x27 + 1x24 + 1x23 + 1x22 = = 156 Een binair getal is de voorstelling van dat getal in het tweedelig talstelsel. Zoals = 1x x10 + 6x1 in het tiendelig talstelsel, zo is = 1x27 + 1x24 + 1x23 + 1x22 in het tweedelig talstelsel Het tweedelig talstelsel, is - net zoals het tiendelig talstelsel - een positioneel talstelsel, hetgeen betekent dat de uiteindelijke waarde van een cijfer in het getal afhangt van zijn plaats in het getal. Hoe meer een cijfer zich naar links bevindt, des te groter zijn gewicht.

22 Decimaal  binair 10011100 156/2 = 78 rest 0 78/2 = 39 rest 0
De omzetting van decimaal getal naar binair getal gebeurt volgens de geïllustreerde berekeningswijze: Het begingetal (156) wordt gedeeld door 2 (gehele deling). Het resultaat is 78, de rest is 0. Deze rest (hier 0) is het minst beduidende cijfer van het binaire getal. Dan gaat men door met het resultaat van de vorige deling. Men deelt opnieuw door 2, onthoudt het resultaat voor het vervolg van de bewerking, en behoudt de rest als volgende cijfer van het binaire getal. Dit herhaalt men tot het resultaat van de deling 0 is. Aldus wordt het binaire getal geconstrueerd van minst beduidend cijfer tot meest beduidend cijfer. Mits enige oefening kan men dit algoritme uit het hoofd uitvoeren.

23 Binair  decimaal 10011100 0 x 2 + 1 = 1 1 x 2 + 0 = 2 2 x 2 + 0 = 4
De omzetting van binair getal naar decimaal getal, is een eenvoudige berekening. Zoals eerder getoond, stelt elke bit een bepaalde waarde voor, zoals dit geldt voor elke getalvoorstelling in de n-delig talstelsels. Aldus kan men berekenen dat = 1x27 + 1x24 + 1x23 + 1x22 = = 156. Een andere berekeningswijze die hetzelfde resultaat oplevert begint bij de meest beduidende bit. Voor elke bit wordt het vorige tussenresultaat vermenigvuldigd met 2, en wordt er dan de waarde van de bit bijgeteld. Ook deze berekening kan - mits enige oefening - uit het hoofd uitgevoerd worden. Toon aan dat deze manier van werken kan afgeleid worden aan de hand van de formule die de waarde van een binaire voorstelling weergeeft (som van gewogen machten van 2).

24 De binaire representatie is niet de enig mogelijke afbeelding
11 3 10 2 00 1 Deze figuur geeft weer op welke manier de getallen 0,1,2,3 afgebeeld worden op een patroon van 2 bits in de binaire voorstelling. Dit is slechts 1 manier om getallen af te beelden op bitpatronen. In theorie zijn er hier 4! of 24 verschillende afbeeldingen mogelijk. In principe kunnen die allemaal gebruikt worden om deze 4 getallen af te beelden op een bitpatroon, maar uiteraard zullen de verschillende afbeeldingen verschillende eigenschappen bezitten die voor bepaalde toepassingen meer of minder nuttige eigenschappen hebben. In wat volgt zullen een aantal alternatieve afbeeldingen voor gehele getallen besproken worden. 01

25 Gray code G3 0 0 0 0 0 1 0 1 1 0 1 0 1 1 0 1 1 1 1 0 1 1 0 0 1 2 3 4 5 6 7 G2 1 1 1 2 3 1 G1 1 11 10 01 00 3 2 1 Door hun structuur komt het bij het sequentieel aflopen van de getallen in een binaire of in een complement-notatie geregeld voor dat een groot aantal bits simultaan van waarde veranderen. In sommige gevallen is dit ongewenst omdat men niet steeds kan garanderen dat alle cijfers simultaan veranderen (zeker indien de verandering mechanisch gebeurt, zoals b.v. het optisch uitlezen van de stand van een roterende schijf met geponste gaten). Gray codes hebben als eigenschap dat er per overgang precies 1 bit verandert. Op deze dia staat de structuur van de reflectieve Gray codes beschreven. Merk op dat er na de grootste waarde door 1 bitovergang terug naar de kleinste waarde overgegaan wordt. Wiskundig kan men de gray code voor het getal x berekenen door x eerst om te zetten naar zijn binaire voorstelling: xb en dan de volgende bewerking uit te voeren: xb xor (xb>>1). Reflectieve Gray code

26 UPC-code cijfer linkercode rechtercode 0 0001101 1110010
Universal Product Codes (UPC) worden gebruikt in barcodes (voornamelijk in de VS, daarbuiten wordt een internationale variant, de EAN-13-code gebruikt). De code begint met een start code (101), gevolgd door 6 cijfers uit de linkercode, een middencode (01010 ), 6 cijfers uit de rechtercode en een eindcode (101). Er worden 7 bits per cijfer gebruikt, en voor elk cijfer bestaan er twee varianten die elkaars inverse zijn. Zelfs dan worden er maar 20 van de 128 verschillende bitpatronen effectief gebruikt. Indien alle bitpatronen gebruikt zouden worden zou het niet mogelijk zijn om foute patronen te detecteren of te corrigeren. Indien men de detectie van fouten belangrijk vindt, moet men redundantie in de codering inbouwen. Bij de UPC-code worden er per cijfer twee varianten gebruikt. Dit is een bijkomende beveiliging om de oriëntatie van de barcode te kunnen vaststellen. In de linker helft wordt de linkercode gebruikt, in de rechterhelft de rechtercode. In het begin, in het midden en op het einde van de code staan er zogenaamde guard bars die moeten helpen om de barcode te lokaliseren en de rest van het patroon te interpreteren.

27 QR-code Versie 40: (177x177) (Max capaciteit: 2953 B) Versie 1 (21x21)
4 niveaus van foutcorrectie De QR-code (Quick Response Code) is een tweedimensionale barcode die uiteraard meer informatie kan opslaan. Er bestaan 40 versies gaande van een matrix van 21x21 tot een matrix van 177x177. Er zijn vier niveaus van foutcorrectie. Hoe hoger het niveau van foutcorrectie, hoe minder data er kan opgeslagen worden. Het verschil in opslagcapaciteit tussen het hoogste en het laagste niveau is ongeveer 50%. Linksonder ziet u ‘beschadigde’ qr-codes die dankzij de foutcorrigerende eigenschappen toch nog correct gelezen kunnen worden. Versie 40: (177x177) (Max capaciteit: 2953 B)

28 Natuurlijke getallen: BCD Binary Coded Decimal
156 Binary coded decimal (binair gecodeerde decimalen) is een andere getalvoorstelling, waarbij elk decimaal cijfer van het getal wordt omgezet naar een nibble (4 bit). Deze nibbles worden dan aan elkaar geschakeld in dezelfde volgorde als de cijfers in het decimale getal. Zie de illustratie, waarbij 156 enerzijds is omgezet in een binair getal (links), en anderzijds in een BCD getal. Bemerk dat men met een nibble 16 verschillende waarden kan voorstellen, maar dat elk nibble in een BCD getal maar 10 verschillende waarden zal aannemen. Zes bitpatronen blijven dus onbenut. Dit zorgt ervoor dat de voorstelling in BCD gemiddeld groter zal zijn dan de zuiver binaire voorstelling. Anders gezegd zal men in een bitpatroon met een gegeven lengte (b.v. 16 of 32 bit) meer verschillende getallen kunnen opslaan in een binaire representatie, dan in een BCD- representatie. De binaire representatie is compacter dan de BCD-representatie. 9C 01 56

29 Packed vs. unpacked 156 1 5 6 0 1 0 5 0 6 01 56 01 05 06 packed BCD
01 56 Bij BCD kan men nog een onderscheid maken tussen packed BCD (4 bit per decimaal cijfer) of unpacked BCD (8 bits per cijfer). De unpacked BCD representatie is nog minder compact dan de packed BCD-representatie. BCD-voorstellingen worden niet zo vaak gebruikt. De voornaamste toepassingen bevinden zich in de financiële sector waar men graag met getallen met een vaste (decimale) lengte werkt (b.v. 9 cijfers). Een dergelijke conventie komt men ook tegen in databanktoepassingen. packed BCD unpacked BCD

30 Excess-3 code BCD 0000 0001 0010 0011 0100 0101 0110 0111 1000 1001 E3 0011 0100 0101 0110 0111 1000 1001 1010 1011 1100 1 2 3 4 5 6 7 8 9 1 0001 De excess-3 code is een alternatief voor de BCD-code. Deze code heeft twee belangrijke voordelen. De optelling genereert automatisch een overdracht naar de hogere rang. Het berekenen van het complement van x (9-x) kan gebeuren door de individuele bits te complementeren. Het nadeel van de code is dat haar interpretatie minder intuïtief is en dat ze niet gewogen is. Dit laatste wil zeggen dat er geen gewichten per rang kunnen gevonden worden om de uiteindelijke waarde te bepalen. Bewerkingen met deze code zijn verre van eenvoudig. De regel is dat indien er geen overdracht is het resultaat met 3 moet verminderd worden, en indien er wel een overdracht is het resultaat met 3 moet verhoogd worden.

31 Overzicht Logische operaties op bits en bitstrings
Hexadecimale representatie Voorstelling van natuurlijke getallen Voorstelling van gehele getallen Teken + grootte 1-complement 2-complement Verschoven Binair gecodeerde decimalen (BCD) Voorstelling van reële getallen Voorstelling van lettertekens Voorbeelden

32 Gehele getallen: teken + grootte
-3 -2 -1 -0 1011 1010 1001 1000 8 bit 1 2 3 000 001 010 011 3 bit Tot dusver hebben we positieve gehele getallen omgezet in binaire getallen. Om alle gehele getallen te kunnen voorstellen, moeten we ook een oplossing hebben om negatieve getallen voor te stellen. Een mogelijkheid hiertoe wordt voorgesteld in deze dia (teken + grootte of signed magnitude): de absolute waarde van het getal wordt binair voorgesteld en voorafgegaan door een tekenbit (1 voor negatieve getallen, 0 voor positieve getallen). Dit is gelijkaardig aan de wijze waarop we werken in het decimaal talstelsel: de absolute grootte van een getal wordt al dan niet voorafgegaan door een minteken. Het enige verschil is dat het minteken hier door een 1 wordt voorgesteld. Bemerk dat er aldus 2 voorstellingen zijn voor het cijfer 0! Dit fenomeen doet zich ook voor in het decimaal talstelsel, maar wij hebben geleerd daar mee om te gaan (weinigen zullen -0 schrijven als ze 0 bedoelen). Twee voorstellingen voor dezelfde waarde zijn echter niet wenselijk in een computer (het maakt het vergelijken van getallen moeilijker). Een ander probleem is dat de rekenregels voor negatieve getallen verschillend zijn van die voor positieve getallen (b.v. indien men 1 wenst op te tellen). Ook de regel om de precisie van de getallen te veranderen (b.v. van 4 naar 8 bit) is niet echt eenvoudig: men moet eerst de tekenbit weghalen, dan de precisie aanpassen, en naderhand de tekenbit terugplaatsen. 4 bit -7  7 -127  127

33 Gehele getallen: teken+grootte
Bereik: [-(2n-1-1) 2n-1-1] Aantal verschillende waarden: 2n-1 Het bereik van deze notatie is symmetrisch maar gebruikt niet alle bitpatronen om verschillende waarden voor te stellen. Door de dubbele voorstelling voor de nul kunnen er dus maar 2n-1 verschillende waarden voorgesteld worden. De teken+grootte voorstelling wordt gebruikt bij vlottende- kommagetalvoorstellingen (zie verder).

34 Gehele getallen: 1-complement
“inverteren van bits” Alle positieve getallen worden afgebeeld op negatieve en vice versa Een andere manier om gehele getallen voor te stellen, is door de negatieve getallen af te leiden van de positieve getallen door een bitsgewijze inversie van het positieve getal (1-complement). Opnieuw herken je negatieve getallen gemakkelijk doordat de meest beduidende bit 1 is. Bemerk dat er aldus opnieuw 2 voorstellingen zijn voor het cijfer 0! In totaal kunnen de getallen van -7 tot 7 voorgesteld worden (4 bit) of -127 tot 127 (8 bit) 1-complement wordt weinig gebruikt in de praktijk.

35 Gehele getallen: 1-complement
-3 -2 -1 -0 1100 1101 1110 1111 8 bit +1 +1 +1 +1 tekenuitbreiding 1 2 3 0000 0001 0010 0011 4 bit +1 +1 +1 Vergeleken met de teken+grootte voorstelling, kan men al iets makkelijker berekeningen maken met de 1-complement voorstelling, zoals in de dia wordt getoond. De voorstelling van getal N+1 kan je berekenen bij het bitpatroon van N de waarde 1 op te tellen (zowel voor positieve als voor negatieve getallen). Dit lukt echter niet in de buurt van 0 omdat omdat (-0) + 1 = (+0). De overgang van 4 bit naar b.v. 8 bit is gemakkelijk te realiseren door de meest linkse bit (de tekenbit) van het 4-bit getal te herhalen vooraan het 8-bit getal. Men kan ook van een grotere naar een kleinere voorstelling gaan door de meest linkse bit weg te laten, op voorwaarde dat de nieuwe tekenbit dezelfde blijft. Als deze verandert klapt immers het teken van het getal om, waardoor we met zekerheid een andere waarde krijgen (tenzij bij 0). -7  7 -127  127

36 Voorbeeld 1-complementoptelling
+ 11010 1 + 1011 -4 + 4 0100 10001 + 1 0010 2 Het rekenen met 1-complementgetallen vereist een wat speciale aanpak. De regel is dat de overdracht die gegenereerd wordt ook nog eens moet opgeteld worden bij de som om de correcte 1-complementvoorstelling te genereren. De rekenregel is dezelfde voor de positieve als voor de negatieve getallen. Som = A+B+overdracht

37 Gehele getallen: 2-complement
-3 -2 -1 1 2 3 1101 1110 1111 8 bit +1 +1 0000 0001 0010 0011 4 bit tekenuitbreiding De 2-complement voorstellingswijze is de meest gebruikte voor gehele getallen, omwille van de eenvoud waarmee men ermee kan rekenen. Er is nu slechts 1 voorstelling voor het getal 0. De voor te stellen getallen gaan van -8 tot 7 (voor 4-bit getallen). Dezelfde methode van tekenuitbreiding als voor 1-complement getallen is van toepassing: herhaling van de tekenbit vooraan het getal om over te gaan van b.v. 4-bit naar 8-bit getalvoorstelling. -8  7 -128  127

38 1-complement 2-complement
Bereik: [-(2n-1-1) 2n-1-1] Aantal verschillende waarden: 2n-1 2-complement Het bereik van de 1-complementnotatie is symmetrisch. Door de dubbele voorstelling voor de nul kunnen er dus maar 2n-1 verschillende waarden voorgesteld worden. Het bereik van de 2-complementnotatie is asymmetrisch en gebruikt nu wel alle bitpatronen om verschillende waarden voor te stellen. Daardoor kunnen er nu 2n verschillende waarden voorgesteld worden. Bereik: [-2n-1 2n-1-1] Aantal verschillende waarden: 2n

39 Voorbeeld 2-complementoptelling
+ + 2 10010 modulo 4 bit modulo 8 bit Dit voorbeeld toont aan dat we eenvoudig kunnen rekenen met 2-complement getallen. We maken een gewone binaire optelling, zonder onderscheid te moeten maken voor negatieve of positieve getallen. Het resultaat is correct, en correct voorgesteld in 2-complement getalvoorstelling.

40 Berekening van 2-complement
-4 -3 -2 -1 1 2 3 000 001 010 011 100 101 110 111 1-complement + 1 110 010 000 100 001 101 111 011 1 1 1 1 010 110 1000 100 De 2-complement getalvoorstelling wordt berekend als de 1-complement +1. Voor elk positief/negatief getal bekomt men de negatieve/positieve waarde door de bits te inverteren, en er dan 1 bij op te tellen. Dit wordt in de dia geïllustreerd voor 3-bit getallen. De meest beduidende bit (MSB = most significant bit) is de tekenbit, en duidt op negatieve getallen (als de tekenbit = 1). Als we 0 aanzien als een positief getal, dan zijn er evenveel positieve als negatieve getallen. De voorbeelden tonen aan hoe je berekent dat 110 = -210 omdat de bit-inverse van 110 gelijk is aan 001, en dit vermeerderd met 1 is 010 = 210. Het voorbeeld met de berekening van 000 toont aan dat de voorstelling voor +0 en -0 gelijk zijn (000). De inverse-plus-1 van 000 levert immers 1000 op, waarvan we in 3-bit notatie enkel de minst beduidende 000 behouden. Voor -4d loopt de berekening mank, omdat +4 niet voor te stellen is in dit 3-bit 2-complement systeem. De inverse-plus-1 van -4d of dus 100 is opnieuw Als we 100 interpreteren als gewoon binair getal, is het inderdaad +4. Maar in het 3-bit 2-complement systeem is het -4. Later zullen we zien dat deze (foutieve) berekening kan gedetecteerd worden als overflow. De 2-complementwaarde kan ook berekend worden door de binaire interpretatie van het bitpatroon af te trekken van 2n. Concreet geeft dit b.v =2 OVERFLOW Ook: (2n – waarde) [binair geïnterpreteerd]

41 Gehele getallen: verschoven
-2 -1 1 2 3 4 5 100 101 110 111 000 001 010 011 1 2 3 4 5 6 7 100 101 110 111 000 001 010 011 +1 +1 bias = 2 +1 +1 +1 +1 Een andere voorstellingswijze voor gehele getallen, is “verschoven notatie” of “excess representation”. De getallen worden geïnterpreteerd als unsigned of positief, maar worden verschoven door een “bias” af te trekken van hun waarde. Zo wordt het kleinste numerieke bitpatroon (nullen) toegekend aan de kleinste voorgestelde waarde (- bias). In de dia wordt deze voorstellingswijze geïllustreerd met bias = 2. Deze voorstellingswijze vereenvoudigt het vergelijken van getallen, aangezien het bitpatroon van een kleiner getal steeds kleiner is dan het bitpatroon van een groter getal, wanneer de bitpatronen als voorstelling van een natuurlijk getal wordt geïnterpreteerd. Dit is van nut bij de exponent van vlottende-kommagetallen. Deze exponenten worden immers vergeleken bij optellingen of aftrekkingen, met de bedoeling ze gelijk te maken (zie verder). De andere rekenkundige bewerkingen worden echter ingewikkelder. +1

42 Gehele getallen: verschoven
B = bias Bereik: [-B 2n-1-B] Aantal verschillende waarden: 2n De verschoven notatie verschuift het bereik van de binaire voorstelling met B naar beneden. Het kleinst voorstelbare getal is m.a.w. –B. De verschoven notatie heeft veel goede eigenschappen, maar is minder geschikt dan de 2- complementnotatie omdat de positieve getallen geen door mensen gemakkelijk interpreteerbare representatie hebben. Een belangrijke troef van deze notatie is wel dat men de verdeling tussen positieve en negatieve getallen nu vrij kan kiezen aan de hand van de keuze van de bias.

43 Basiscomplement codes
Het principe van 1-complement en 2-complement kan uitgebreid worden naar een willekeurige basis 2-complement wordt dan de basiscomplementnotatie genoemd voor het talstelsel met basis 2 1-complementnotatie wordt dan de verminderde basiscomplementnotatie genoemd voor het talstelsel met basis 2 Het principe van 1-complement en 2-complement kan verder uitgebreid worden. Voor een cijfer x wordt in het B-delig talstelsel het complement berekend als (B-1)-x. Voor de verminderde basiscomplementnotatie volstaat het om de cijfers te complementeren. Voor de gewone basiscomplementnotatie moet men daar nog 1 bij optellen.

44 Binair gecodeerde decimalen
3 1 Teken + grootte -301 6 9 8 9-complement ( =999) 6 9 10-complement -301 (9-compl + 1) Ook gehele getallen kunnen met behulp van de eerder besproken BCD voorgesteld worden. Een eerste methode is de eerste positie te behouden als teken van het getal (0 voor plus, 1 voor min). Dit is de formalisering van de menselijke handelswijze, maar ze wordt weinig/niet in computers gebruikt. Een tweede methode is de “9-complement”. Dit is de verminderde basiscomplementnotatie voor het tiendelig talstelsel. Voor positieve getallen is de meest linkse positie minder dan 5, voor negatieve getallen is dat 5 of meer. Zo wordt (in een BCD voorstelling met 4 BCD cijfers) +301 voorgesteld door 0301 en -301 door Dit laatste wordt bekomen door het verschil te maken van 9999 en 0301. Een laatste methode is de “10-complement”. Dit is de basiscomplementnotatie voor het tiendelig talstelsel. Negatieve getallen worden dan berekend als het 9-complement negatieve getal plus 1. In het zelfde voorbeeld wordt het getal -301 voorgesteld als Voorts zijn de positieve getallen deze van 0 tot 4999 en de negatieve getallen zijn voorgesteld door 5000 tot 9999 (= tot -1). packed & unpacked

45 Overzicht Logische operaties op bits en bitstrings
Hexadecimale representatie Voorstelling van natuurlijke getallen Voorstelling van gehele getallen Voorstelling van reële getallen Vaste-kommavoorstelling Vlottende-kommavoorstelling Voorstelling van lettertekens Voorbeelden

46 Vaste-kommavoorstelling
,01010 + ,01010 ,10100 Geef de komma een vaste plaats in het bitpatroon, en hou rekening met de plaats ervan. Is enkel mogelijk indien het bereik van de te representeren getallen niet te groot is. Deze manier van werken is doorgaans handiger bij het gebruik van BCD- getallen. B.v. rekenen met centen i.p.v. met euro’s. Bij binaire getallen werkt men dan met b.v. 1/16 of 1/128.

47 Vlottende-kommavoorstelling
Vlottende komma: exponent Vlottende komma: mantisse s exp mantisse s expon mantisse s exponent mantisse Reële getallen worden in computers meestal voorgesteld als vlottende- kommagetallen. Deze laten toe een heel groot bereik van getallen voor te stellen in een relatief klein aantal bits. De bits worden opgesplitst in: - een teken bit (sign-bit S) - een exponent E, het aantal bits bepaalt het “bereik” - een mantisse M, het aantal bits bepaalt de “precisie” De waarde van een vlottend-kommagetal volgt uit deze voorstelling via de formule: (-1)S * M * 2E Er bestaan een aantal formaten en standaarden voor vlottende- kommagetallen, waarvan de voornaamste gegeven wordt door ANSI/IEEE Deze beschrijft 2 formaten: single precision en double precision. Het single precision formaat gebruikt 32 bits, waarvan 8 voor de exponent en 23 voor de mantisse. In dubbele precisie zijn er 11 bits voor de exponent en 52 voor de mantisse, en dus 64 bits in totaal. De bits voor mantisse en exponent zijn trouwens nog een beetje “gecodeerd”, zoals wordt uitgelegd in wat volgt. ANSI/IEEE 754 1|8|23 1|11|52 (1980) (-1) × M × 2 S E

48 Vlottende-kommagetallen
Verschoven representatie Bias = 127 Exponent: = 2 De exponent wordt voorgesteld als een verschoven versie van het gehele getal. Deze voorstellingswijze werd reeds eerder besproken. In IEEE 754 is de bias 127 (single precision) en 1023 (double precision). Voorts zijn in de standaard de exponenten met enkel 0-bits, en met enkel 1- bits (kleinste en grootste waarde) gereserveerd voor speciale getallen. De werkelijke, gehele waarde van de exponent wordt dus bekomen door de waarde van het exponent-bitpatroon, geïnterpreteerd als natuurlijk getal, te verminderen met de bias.

49 Vlottende-kommagetallen
Genormaliseerde fractie = x x x … = … = 1.25 In de mantisse slaat men de genormaliseerde binaire fractie op. Dat wil zeggen dat het een getal betreft met een 1 voor de komma. Omdat dit altijd zo is, wordt die 1 voor de komma ook niet opgeslagen (de zogenaamde “hidden bit”). De mantisse bevat letterlijk enkel het deel na de komma. (Noot: voor het getal 0.0 bestaat een speciale regeling) De dia toont hoe de mantisse geïnterpreteerd moet worden, en hoe de decimale waarde van de genormaliseerde fractie berekend wordt.Voor het gegeven voorbeeld worden ook alle componenten samen genomen (teken, exponent, mantisse) en de reële waarde berekend: (-1)1 x 1.25 x 22 = x 4 = De interpretatie van een getal in dit formaat is heel wat complexer dan voor binaire of 2-complement notatie. Waarde: (-1)1 x 1.25 x 22 = x 4 = -5.0

50 Bereik & precisie Formaat: 1|2|2, bias = 1 s | e e | m m 00 -1 0.5
Vlottende-kommagetallen maken, binnen de beschikbare bitlengte, een compromis tussen bereik en precisie van de voor te stellen getallen. Het bereik (het grootste en kleinste getal in absolute waarde) wordt vnl. bepaald door het aantal bits in de exponent, en het getal waarvan de macht wordt genomen (hier 2); de precisie wordt vnl. bepaald door het aantal bits in de mantisse. In het voorbeeld dat wordt gegeven (2 bits voor exponent (bias 1) en 2 bits voor mantisse), kunnen we eenvoudig berekenen welke waarden mogelijk zijn voor de delen M en 2E in de formule (-1)S * M * 2E. De mantisse gaat van tot 1.75, en het exponent-deel neemt waarden aan van 0.5 tot 4 (E = -1 tot 2). De uiteindelijke waarde zal voorgesteld worden door het product van de twee. Noot: eerder werd al verteld dat getal 0.0 een uitzonderlijk geval is. In deze voorstelling werd hier opzettelijk nog geen rekening mee gehouden. De uitzondering wordt verderop besproken.

51 Alle 5-bit vk-getallen Formaat: 1|2|2, bias = 1
1.00 1.25 1.50 1.75 e -1  0.5  0.625  0.75  0.875  1  1.25  1.5  1.75  2  2.5  3  3.5  4  5  6  7 1 Voortgaand op hetzelfde voorbeeld, kunnen we alle mogelijke getallen berekenen die met dit formaat van vlottende-kommagetallen kan worden voorgesteld. De rode pijl geeft aan hoe de getallen van klein naar groot worden gesorteerd (in absolute waarde). 2 Vlottende-kommavoorstelling kan gesorteerd worden

52 Gesorteerd De getallen worden hier expliciet gesorteerd, en weergegeven in (binaire) vlottende-kommavoorstelling en in decimale voorstelling. Links staan de positieve getallen, rechts de negatieve getallen. Bemerk dat ook de getallen in binaire voorstelling oplopend gesorteerd zijn voor oplopende absolute waarden. Dit volgt uit de specifieke constructie van de vlottende komma getallen (eerst de verschoven voorstelling van de exponent en daarna de genormaliseerde fractie). Gevolg: om vlottende-kommagetallen te sorteren volstaat het om hun bitpatronen te sorteren, zonder de waarde van de getallen te moeten bepalen (de enige uitzondering hierop vormen de negatieve waarden die groter dan de positieve waarde beschouwd zullen worden).

53 Bereik Formaat: 1|2|2 50%  0.500  0.625  0.750  0.875  1.00
 1.25  1.50  2.00  2.50  3.00  3.50  4.00  5.00  6.00  7.00 Formaat: 1|2|2  1.75 0.500 0.625 0.750 0.875 1.000 -0.500 -0.625 -0.750 -0.875 -1.000 0.0000 We zien dat het grootste voor te stellen getal 7 is. Anderzijds is het kleinste voor te stellen positieve getal 0.5. Van het gebied [-1,1] is maar liefst 50% niet voor te stellen. Vooral het feit dat 0 niet kan voorgesteld worden is een grote tekortkoming. 50%

54 Bereik Formaat: 1|2|2, bias = 1 Gedenormaliseerde getallen (e=0) m 00
01 10 11 e -1  0  0.25  0.50  0.75 Gedenormaliseerde getallen (e=0)  1  1.25  1.5  1.75 1  2  2.5  3  3.5   2  Nan In de IEEE 754 standaard zijn de exponenten met enkel 0-bits, en met enkel 1-bits, gereserveerd voor speciale getallen, zoals reeds gemeld. Als we deze regel ook in dit voorbeeld introduceren, en we ook “gedenormaliseerde” getallen bekijken, krijgen we de volgende gevallen: - clean zero: enkel 0-bits in de exponent en in de mantisse; tekenbit is 0 of 1. Er zijn dus 2 voorstellingen van 0. - gedenormaliseerde getallen (dirty zero): enkel 0-bits in de exponent, mantisse is verschillend van 0. Gedenormaliseerde getallen hebben dezelfde waarde voor de exponent als getallen met exponent-bitpatroon 000…01 (nulpatroon + 1), maar hebben geen hidden 1-bit in de fractie. In het voorbeeld is bv. “00001” gelijk aan: teken 0, exponent 00 (zelfde waarde als voor exponent 01, dus 20), mantisse 01 (dus =0.012 =2-2). Totaal: (-1)0 x 20 x 2-2 = 0.25. - infinity: enkel 1-bits in de exponent, enkel 0-bits in de mantisse; tekenbit is 0 of 1. Infinity wordt gebruikt om getallen voor te stellen die groter zijn dan het grootste getal dat kan voorgesteld worden in het gegeven formaat. Dit kan voorkomen indien men twee getallen optelt waarvan de som niet meer kan voorgesteld worden. - NaN (not a number): enkel 1-bits in de exponent, mantisse is verschillend van 0. NaN kan gebruikt worden als resultaat bij deling 0/0 of  / , of ook bij het nemen van de vierkantswortel uit negatieve getallen.

55 Gesorteerd Nan Nan Nan Nan Nan Nan Wanneer we het voorgaande op de gekende wijze in tabelvorm gieten, krijgen we bovenstaande tabellen. Het blijft zo dat de getallen zowel in binaire vorm als in werkelijk waarde oplopend gesorteerd zijn (naar absolute waarde). Nu wordt ook duidelijk waarom de IEEE standaard 127 of 1023 als bias kiest. Uit een even aantal exponenten (b.v. 256, of 2048) kan men geen middelste waarde kiezen. Van zodra men de grootste exponentwaarde opgeeft om Nan, +  en -  te kunnen voorstellen, krijgt men een oneven aantal exponenten (255, of 2047), waarvan 127 of 1023 precies in het midden ligt.

56 Bereik en precisie Formaat: 1|2|2  0.00  0.25  0.50  0.75  1.00
 1.25  1.50  1.75 -  +   2.00  2.50  3.00  3.50   0.500 0.750 1.000 -0.500 -0.750 -1.000 -0.000 0.250 -0.250 0.000  Nan  Nan  Nan Met de voorgaande aanpassingen werd het bereik iets verder uitgebreid, en is het kleinste positieve getal nu iets kleiner en dichter bij nul gekomen. Toch blijft het zo dat we slechts een klein aantal van alle reële getallen kunnen voorstellen. Wanneer we b.v. een getal willen voorstellen dat ligt tussen 0.25 en 0.5, zal dat niet lukken. We zullen het dus moeten benaderen door ofwel 0.25 of 0.5. De afstand tussen 2 opeenvolgende voor te stellen getallen, geeft de precisie aan van het vlottende-kommaformaat. Bemerk dat deze afstand niet constant is, maar groeit met de grootte van de getallen waartussen de afstand gemeten wordt.

57 Voorbeeld Representeer 5.1 in 1|4|8 met bias 7 5.1 = 5 + 0.1 5 = 101
0.1 * 2 = 0.2 0.2 * 2 = 0.4 0.4 * 2 = 0.8 0.8 * 2 = 1.6 0.6 * 2 = 1.2 5.1 = = x 22 Exponent = in 4 bits 9 = 1001 Als voorbeeld trachten we het getal 5.1 om te zetten tot een vlottend- kommagetal in het formaat 1|4|8 met bias 7. De manier om decimale fracties om te zetten tot binaire fracties, wordt in de dia geïllustreerd, en heet “multiplication method”. Ze laat toe de binaire fractie te berekenen vanaf de meest beduidende bit. Het gaat als volgt: vermenigvuldig je (tussen)resultaat met 2 en bekom je nieuw resultaat. Is dit nieuw resultaat kleiner dan 1, onthoud dan 0 en ga verder met dit nieuw tussenresultaat. Is het nieuw resultaat groter dan 1, onthoud dan 1, en ga verder met het nieuw resultaat verminderd met 1. Is het nieuw resultaat gelijk aan 1, onthoud dan 1 en stop. Zie je een tussenresultaat dat gelijk is aan een eerder tussenresultaat, dan is er geen eindige binaire voorstelling voor deze fractie. Stop dan en herhaal het patroon dat werd “onthouden” tussen het vorige en huidige optreden van dit tussenresultaat. We schrijven het binaire getal neer dat we hebben gevonden door omzetting van het gehele deel en de fractie, en normaliseren het (schrijven als 1.fff…ff * 2E). Het bitpatroon van de exponent wordt bepaald door de gevonden E te vermeerderen met de bias. De gevonden waarden “fff…ff” worden afgekapt op 8 bits. Eigenlijk: maar is !

58 Bereik en precisie 1|8|23 1|11||52 Exponent bits 8 11
1|8| |11||52 Exponent bits Gebruikte exp’ten Mantisse bits Efficiëntie ,60% ,95% Aantal decimalen Bereik Gehelen - Decimalen - Bereik Doordat de grootste exponentwaarde niet gebruikt wordt om effectieve waarden voor te stellen gaan er een aantal mogelijkheden om waarden voor te stellen verloren. Op die manier zal men in enkelvoudige precisie slechts 99,60% van alle mogelijkheden benutten en in dubbele precisie slechts 99,95%. Het bereik van vlottende-kommagetallen is echter fenomenaal. Zij kunnen een precisie van 6-7 decimalen aanbieden over een bereik dat zich uitstrekt over 76 grootte-orden voor enkelvoudige precisie en hebben een precisie van decimalen over een bereik van 616 grootte-orden voor dubbele precisie! Gehele getallen kunnen met zelfde aantal bits ongeveer hetzelfde aantal getallen voorstellen maar wel met een precisie van decimalen en een bereik van 9 grootte-orden in 32 bits, en een precisie van decimalen, en een bereik van 18 grootte-orden. De vlottende- kommavoorstelling ruilt met andere woorden precisie in voor extra bereik.

59 Vlottende-kommagetallen
Gehele getallen die niet meer bits nodig hebben dan beschikbaar in de mantisse kunnen steeds exact voorgesteld worden (en zullen dus niet afgerond worden). Slechts een zeer klein aantal reële getallen kan exact voorgesteld worden. Alle andere worden benaderd. Testen op gelijkheid is geen goed idee. Voor wat de precisie betreft kan men in enkelvoudige precisie (32 bit) reële getallen met 6 tot 7 beduidende cijfers opslaan. In dubbele precisie (64 bit) krijgt men 15 tot 16 beduidende cijfers. Bij vlottende-kommabewerkingen kan het resultaat afhangen van de volgorde van bewerkingen. Daarom is het veiliger om nooit twee vlottende- kommagetallen op gelijkheid te vergelijken, maar steeds na te gaan of hun verschil b.v. kleiner is dan 10-6.

60 Afronden Er kan op vier manieren afgerond worden Naar + ∞ Naar - ∞
Naar 0 (afkappen) Naar de dichtste voorstelbare waarde +1 indien > 0,5 Afkappen indien < 0,5 Even mantisse indien = 0,5 Met enkele extra bits kan men de afronding van de berekeningen controleren. Meest logisch is om af te ronden naar de dichtst voorstelbare waarde. Speciaal hieraan is dat indien de berekende waarde even ver verwijderd is van de twee voorstelbare waarden, de even waarde gekozen wordt. Op die manier wordt vermeden dat de afronding in dezelfde richting werkt en na verloop van tijd zou beginnen accumuleren. Vlottende komma: afronden

61 Extra bits Om de precisie te verhogen kunnen er bij de berekening nog 3 extra bits gebruikt worden Guard bit Rounding bit Sticky bit Vlottende komma: guard bit Vlottende komma: rounding bit Vlottende komma: sticky bit Om een onderscheid te kunnen maken tussen de gevallen < 0,5 = 0,5 en > 0,5 zijn er in principe 2 extra bits nodig (om deze drie toestanden te kunnen coderen). Daarvoor kunnen bij tussenresultaten de guard bit en de rounding bit gebruikt worden. Bij sommige berekeningen kan er een normalisatie nodig zijn (naar links) waardoor enkel het rounding bit overblijft. Het sticky bit kan dan helpen om de afronding te helpen regelen. Het sticky bit wordt aangezet indien er na het R- bit nog een niet-nul bit voorkomt (b.v. tijdens het aligneren van de decimale punt bij een optelling). GRS IEEE 754

62 Vlottende-komma-optelling
start Maak de twee exponenten gelijk aan de grootste Rond af Tel de mantissen op Genormaliseerd? Normaliseer resultaat Dit is het schema van de vlottende-komma-optelling. De verschillende gevallen worden hierna geïllustreerd. Overflow Underflow exceptie stop

63 Vlottende-komma-optelling
x 23 x 23 15.5 +9.0 x 23 24.5 = x 24 24.5 = x 24 24.0 Voor een optelling of aftrekking van vlottende-kommagetallen, moeten eerst de exponenten gelijk gemaakt worden. Wanneer dit het geval is, kunnen we vrij eenvoudig de mantissen optellen. De komma heeft daarbij een vaste positie. Na de eerste stap, waarbij de mantissen worden opgeteld, moet de som opnieuw genormaliseerd worden. Daarbij schuift men zo nodig de mantisse naar rechts en incrementeert men de exponent, waarna men moet afronden, in dit geval naar een even mantisse. Wegens de beperking van het aantal bitposities in de mantisse (hier 5 bits), kan een verlies aan precisie van het resultaat optreden (hier: 24.0 ipv 24.5).

64 Vlottende-komma-optelling
x 23 x 21 15.5 +2.25 x 23 +2.25 x 23 17.75 = x 24 17.75 In deze dia wordt geïllustreerd hoe, indien nodig, eerst de exponent van de 2 somtermen gelijk gemaakt wordt. Men stelt de exponent gelijk op de grootste waarde. Daarna telt men op en rondt men af. Opnieuw wordt in het resultaat aan precisie verloren, omdat niet alle bits van het resultaat in de mantisse kunnen bewaard worden. = x 24 18

65 Vlottende-komma-aftrekking
x 24 17.0 -2.25 x 21 x 24 -2.25 x 24 14.75 x 23 14.75 Wanneer één van de 2 somtermen negatief is, gebeuren dezelfde stappen als bij de optelling van 2 positieve vlottende-kommagetallen, met dat verschil dat het verschil wordt gemaakt van de 2 mantissen (na gelijkstelling van de exponenten op de grootste van de 2), i.p.v. de som. Opnieuw toont het voorbeeld hoe precisie verloren kan gaan in het resultaat. Merk ook op hoe nu, na de aftrekking van de 2 mantissen, het tussenresultaat naar links moet verschoven worden (en niet naar rechts, zoals eerder), om het resultaat te normaliseren. Hierbij kan het goed uitkomen dat er naast de guard bit, ook nog een round bit en een sticky bit zijn om de afronding te kunnen sturen. x 23 15

66 Vlottende-komma-aftrekking
x 24 18.0 x 21 -2.25 x 24 -2.25 x 24 15.75 x 23 15.75 Wanneer men, zoals in de vorige dia besproken, de mantisse afrondt, kan het soms nodig zijn het getal nadien te hernormaliseren, zoals in deze dia getoond wordt. x 23 16 x 24 16

67 Vlottende-komma-optelling
Berekeningen in vlottende-kommagetallen zijn benaderingen Bewerkingen zijn niet steeds reversibel. Associativiteit geldt niet B.v. precisie van 4 decimalen Enkele conclusies van de voorafgaande bespreking zijn dus duidelijk: berekeningen in vlottende kommagetallen zijn benaderingen. Tenzij wanneer alle resultaten (én tussenresultaten) gehele getallen zijn die voor te stellen zijn door het gebruikte vlottende-kommaformaat, of wanneer het reëel getal toevallig de som van machten van 2 zou zijn; berekeningen zijn niet altijd reversibel. Immers, als er in een tussenresultaat precisie verloren gaat, kan de inverse bewerking (wellicht) niet meer bij het originele getal terechtkomen; bewerkingen zijn niet associatief. Afhankelijk van de volgorde van bewerkingen, zal het verlies aan precisie anders zijn, en andere gevolgen hebben op het eindresultaat. Testen op gelijkheid is geen goed idee. Het is beter om na te gaan of het verschil voldoende klein is. Bij het maken van het verschil van 2 ongeveer even grote getallen kunnen grote fouten op het verschil ontstaan. ( ) = = 0.001 ( ) = = 0

68 Vlottende-komma-vermenigvuldiging
x 23 x x 23 15.5 x 9.0 x 23+3 139.5 = x 27 139.5 Bij vermenigvuldiging moeten de exponenten niet gelijkgesteld worden als eerste stap, zoals bij optelling. Men kan gewoon de exponenten optellen en de mantissen vermenigvuldigen. Tot slot wordt het resultaat genormaliseerd en wordt er afgerond. De tekenbit wordt berekend als de XOR van de tekenbits van de 2 producttermen. = x 27 136.0

69 Overzicht Logische operaties op bits en bitstrings
Hexadecimale representatie Voorstelling van natuurlijke getallen Voorstelling van gehele getallen Voorstelling van reële getallen Voorstelling van lettertekens Voorbeelden

70 Voorstelling lettertekens
ASCII = American Standard Code for Information Interchange EBCDIC = Extended Binary Coded Decimal Interchange Code UCS = Universal character set (ISO/IEC 10646) Per uniek teken: 1 code point: U+0065 = ‘e’; U+00E9 = ‘é’; U+25A0=‘■’ Lettertekens zijn een eindige verzameling van symbolen, en kunnen eenvoudig voorgesteld worden door bitpatronen, door gebruik te maken van gestandaardiseerde tabellen of codes. ASCII (American Standard Code for Information Interchange) gebruikt bitpatronen van 7 bit, en alle 128 bitpatronen stellen een letterteken voor (in de brede zin van het woord, sommige zijn leestekens of andere controlekarakters). De cijfers, hoofdletters en kleine letters komen elk voor als een aaneensluitende set, zodat alfabetische sortering eenvoudig kan uitgaan van de getalwaarde van de code. Het is ook gemakkelijk om bv. hoofdletters in kleine letters om te zetten (code of +2016). EBCDIC is een 8-bit code die dateert uit de jaren ‘60 maar ook vandaag nog gebruikt wordt in sommige computersystemen van IBM. Unicode is een evoluerende standaard die een oplossing biedt voor de beperking van ASCII, die enkel eenvoudige accentloze Latijnse lettertekens bevat. Unicode bevat een unieke codering van alle mogelijk tekens in verschillende talen aan de hand van een natuurlijk getal dat een ‘code point’ genoemd wordt (= abstract letterteken, los van enige lettertype). De laagste 128 code points komen overeen met de ASCII codering. Een font bevat een grafische voorstelling van de code points in een bepaald lettertype en wordt gebruik bij visualisatie van tekst.

71 Ascii-tabel 00 10 20 30 40 50 60 70 0 NUL DLE SP 0 @ P ` p
NUL DLE SP @ P ` p SOH DC ! A Q a q STX DC2 “ B R b r ETX DC3 # C S c s EOT DC4 $ D T d t ENQ NAK % E U e u ACK SYN & F V f v BEL ETB ‘ G W g w BS CAN ( H X h x HT EM ) I Y i y A LF SUB * : J Z j z B VT ESC ; K [ k { C FF FS , < L \ l | D CR GS = M ] m } E SO RS > N ^ n ~ F SI US / ? O _ o DEL Ascii-tabel In de ASCII tabel zien we de gewone Latijnse karakters, de cijfers en de typische leestekens. Daarnaast zijn er een aantal controlekarakters voor de communicatie tussen verschillende randapparaten van de computer (toetsenbord, scherm, printer, …). De cijfers, hoofdletters en kleine letters komen elk voor als een aaneensluitende set, zodat alfabetische sortering eenvoudig kan uitgaan van de getalwaarde van de code. Het is ook gemakkelijk om b.v. hoofdletters in kleine letters om te zetten (code +32d of +20H).

72 LATIN SMALL LETTER E WITH ACUTE
Coderingen U+0065 U+00E9 U+25A0 Voorstelling e é LATIN SMALL LETTER E LATIN SMALL LETTER E WITH ACUTE BLACK SQUARE Decimaal 101 233 9632 UTF-8 0x65 0xC3A9 0xE296A0 UTF-16 0x0065 0x00E9 0x25A0 UTF-32 0x 0x000000E9 0x000025A0 Windows Alt 101 Alt 0233 Alt 130 Alt 9632 Alt 254 C “\u0065” “\u00E9” “\u25A0” html &#x65 / &#101 &#xe9 / &#233 &#x25a0 / &#9632 Tekenrijen bestaan uit een opeenvolging van codepoints. Een codepoint is een natuurlijk getal en correspondeert met één bepaald teken. Om een rij van codepoints voor te stellen in het geheugen worden ze gecodeerd. Hierbij zijn er verschillende mogelijkheden waarvan er hierboven een aantal voorgesteld worden. De minimale grootte in UTF-8 codering is 8 bit (UTF=unicode transformation format), 16 bit in UTF-16 and 32 bit in UTF-32. UTF-8 zal de codepoints vanaf 128 in twee, drie of vier bytes voorstellen. Idem voor UTF- 16 die vanaf een bepaalde waarde 32 bit zal gebruiken. Een gewone ascii- tekst kan doorgaan als een UTF-8 gecodeerde tekst. In de tabel staan ook nog de manieren om een codepoint in te geven in Windowstoepassing, C, en html.

73 Overzicht Logische operaties op bits en bitstrings
Hexadecimale representatie Voorstelling van natuurlijke getallen Voorstelling van gehele getallen Voorstelling van reële getallen Voorstelling van lettertekens Voorbeelden

74 Interpretatie Bitpatroon: Natuurlijk getal: Geheel getal: BCD: Letters: ÉÉ   Vlottende komma: x 10-29 Alle data in een computer wordt voorgesteld door bitpatronen. Andersom kan elk bitpatroon geïnterpreteerd worden als natuurlijk getal, geheel getal, vlottende-kommagetal, lettertekens, etc! Aangezien het er meestal niet van af te lezen is, hoe men een bitpatroon moet interpreteren, moet men er door geschikte organisatie van het geheugen voor zorgen dat men weet hoe elke locatie te interpreteren (het programma dat de data gebruikt, moet het maar weten). De betekenis van een bitpatroon hangt af van de context

75 Enkele belangrijke getallen
binair  255 2-compl -128  127 byte 20 = 1 21 = 2 22 = 4 23 = 8 24 = 16 25 = 32 26 = 64 27 = 128 28 = 256 binair  65535 2-compl  32767 Woord -1 = = FF16 = = FF FF16 Deze dia toont een aantal belangrijke getallen, die tot je parate kennis moeten behoren. Het bereik van 8-bit bytes is 0–255 (natuurlijke getallen) en -128–127 (2- complement) Het bereik van 16-bit woorden is 0–65535 (natuurlijke getallen) en – (2-complement) (noot dat een woord hier als 16-bit grootheid wordt gebruikt) -1 wordt in de 2-complement voorstelling voorgesteld door “allemaal 1-bitjes”.

76 Oefening Gegeven het bitpatroon 01100111 Wat is hiervan de waarde als
Binair getal Teken-grootte notatie 1-complementgetal 2-complementgetal Verschoven representatie (bias = 50) Binair vaste komma (2 bits na komma) BCD-getal Ascii-teken Vlottende-kommagetal (1|3|4, bias=3) Maak volgende oefening om je kennis en begrip van dit hoofdstuk te testen.

77 Oefening Stel het getal -75 voor in 16 bits (in hex)
Teken grootte notatie 1-complement 2-complement Verschoven representatie (bias = 100) BCD 9-complement BCD 10-complement Vlottende komma-getal (1|5|10, bias 15) Maak volgende oefening om je kennis en begrip van dit hoofdstuk te testen.

78 Pauze


Download ppt "Les 2: Gegevensvoorstelling"

Verwante presentaties


Ads door Google