Rekenen met computers

Leer hoe processorhardware rekent. Tel op en trek af met één tweecomplementopteller, onderscheid overdracht van overloop en bouw een ALU die ook getallen vergelijkt en logische bewerkingen uitvoert. Volg hoe vermenigvuldigers en delers werken, van schakelingen die schuiven en optellen tot het algoritme van Booth en snelle boomvermenigvuldigers, inclusief de RISC-V-instructies. Codeer vervolgens getallen als IEEE 754-drijvendekommagetallen, tel ze op, vermenigvuldig ze en rond ze af zoals de hardware dat doet. Leg uit waarom resultaten zoals 0,1 + 0,2 niet exact zijn.

GemiddeldLes 3 van 6 in Cursus Computerarchitectuur: processors, geheugen en prestaties

Wat je leert

  1. Gebruik één binaire opteller voor optellen en aftrekken met en zonder teken en bepaal wanneer een resultaat niet meer in de beschikbare bits past.
    • Tel binaire gehele getallen op en trek ze af met één opteller
      Tel getallen van n bits kolomsgewijs op, trek af door het tweecomplement op te tellen en zie waarom dezelfde schakeling geschikt is voor waarden met en zonder teken.
    • Detecteer overloop bij resultaten met en zonder teken
      Onderscheid overdracht van overloop, detecteer beide met eenvoudige hardware of een korte instructiereeks en weet wat processors en programmeertalen doen als dit gebeurt.
  2. Bouw een ALU uit 1-bits-slices die optelt, aftrekt, vergelijkt en logische bewerkingen uitvoert, en versnel de overdrachtsketen.
    • Bouw een n-bits-ALU uit 1-bits-slices
      Combineer logische poorten, een volledige opteller en multiplexers tot een 1-bits-ALU, schakel de slices tot een n-bits-ALU en selecteer bewerkingen met besturingslijnen.
    • Vergelijk getallen en detecteer nul in de ALU
      Genereer de nuluitgang voor sprongen bij gelijkheid en het resultaat van een kleiner-danvergelijking voor getallen met en zonder teken, inclusief de correctie voor overloop.
    • Versnel het optellen met vooruitberekening van de overdracht
      Leg uit waarom overdrachten ripple-carryoptellers vertragen en bereken overdrachten vooraf met generatie- en doorgiftesignalen.
  3. Vermenigvuldig en deel zoals hardware dat doet, van eenvoudige schakelingen die schuiven en optellen tot tekenregels, snelle vermenigvuldigers en de RISC-V-instructies.
    • Vermenigvuldig door te schuiven en op te tellen
      Vermenigvuldig binaire getallen zonder teken met het sequentiële algoritme voor schuiven en optellen, bepaal de juiste productbreedte en gebruik verschuivingen voor machten van twee.
    • Vermenigvuldig getallen met teken en voer snelle vermenigvuldigingen uit
      Werk met tweecomplementoperanden, hercodeer vermenigvuldigers met het algoritme van Booth en leg uit hoe boomvermenigvuldigers hoge snelheden bereiken.
    • Deel gehele getallen en handel de bijzondere gevallen af
      Deel met het algoritme dat de rest herstelt, pas de tekenregels voor quotiënt en rest toe en weet hoe hardware en RISC-V omgaan met deling door nul en overloop.
  4. Codeer en decodeer binaire IEEE 754-waarden, leg het bereik en de precisie van elk formaat uit en herken nullen, oneindigheden, NaN-waarden en subnormale getallen.
    • Codeer en decodeer binaire IEEE 754-formaten
      Schrijf een getal in genormaliseerde binaire wetenschappelijke notatie, sla het op in de velden voor het teken, de exponent met bias en de fractie, en lees opgeslagen bits terug als een waarde.
    • Gebruik nullen, oneindigheden, NaN-waarden en subnormale getallen
      Herken de gereserveerde exponentpatronen, leg geleidelijke onderloop uit en voorspel de resultaten en vlaggen van uitzonderlijke bewerkingen.
  5. Volg de hardwarestappen voor het optellen en vermenigvuldigen van drijvendekommagetallen, rond resultaten correct af en voorspel de precisiefouten die daaruit volgen.
    • Tel drijvendekommagetallen op en vermenigvuldig ze
      Lijn uit, voer de bewerking uit, normaliseer en rond af in de volgorde van drijvendekommahardware, en gebruik de RISC-V-drijvendekomma-instructies.
    • Rond resultaten correct af
      Pas de IEEE 754-afrondingsrichtingen toe, rond bij gelijke afstand af naar even en gebruik bewakings-, afrondings- en plakbits om af te ronden alsof de precisie oneindig is.
    • Voorspel en voorkom precisiefouten
      Leg uit waarom vertrouwde decimale waarden binair niet exact zijn, waarom optellen met drijvendekommagetallen niet associatief is en hoe absorptie, cijferverlies door aftrekking en conversies echte fouten veroorzaken.

Rekenen met computers: uitleg

5 hoofdstukken

1

Tel gehele getallen op, trek ze af en detecteer overloop

Een opteller produceert bits voordat iemand bepaalt of die bits getallen met of zonder teken voorstellen. Volg de overdrachten bij het optellen, gebruik dezelfde schakeling opnieuw voor aftrekken en toets het resultaat vervolgens aan het juiste bereik. Het onderscheid is ook in software van belang: een processor kan statusvlaggen bijhouden, de lage bits teruggeven of een uitzondering veroorzaken, terwijl een programmeertaal eigen regels aan die machinebewerkingen geeft.

1.1 Tel binaire gehele getallen op en trek ze af met één opteller

Een binaire opteller voert op elke bitpositie dezelfde kleine taak uit. De opteller combineert de twee operandbits met een overdracht van de positie rechts ervan. De betekenis van het voltooide bitpatroon volgt daarna.

Volg de overdracht

Een halve opteller heeft twee ingangen: de som is de XOR ervan en de overdracht is de AND ervan. Een volledige opteller accepteert ook een inkomende overdracht:

si=ai⊕bi⊕ci ci+1=aibi+aici+bici

Hier betekent vermenigvuldiging AND en optelling OR. De som is 1 bij een oneven aantal ingangen met waarde 1; de overdracht is 1 bij minstens twee. Door volledige optellers achter elkaar te schakelen, maak je een ripple-carryopteller. Alleen bit 0 ontvangt de initiële overdracht; elke volgende bit ontvangt de overdracht van de aangrenzende bit.

Voor 23 + 45 schrijf je 0001 0111 + 0010 1101. Bij bit 0 geeft 1 + 1 som 0 en overdracht 1. Bij bit 1 geeft 1 + 0 + 1 opnieuw 0 en overdracht 1. Bij bit 2 geven drie ingangen met waarde 1 som 1 en overdracht 1. Als je naar links doorgaat, krijg je 0100 0100, oftewel 68, zonder uitgaande overdracht aan het eind.

Een resultaat van n bits bewaart alleen de lage n bits, dus de schakeling berekent de som modulo 2n. In 8 bits geeft 1111 1100 + 0000 0101 de uitkomst 0000 0001 en uitgaande overdracht 1. Met teken gelezen is dit −4 + 5 = 1. Zonder teken gelezen is het 252 + 5 = 257, waarvan de lage acht bits 1 voorstellen. De schakeling is niet veranderd; het toegestane bereik wel.

Maak van aftrekken optellen

Tweecomplement geeft de identiteit

a−b=a+b‾+1.

Een besturingslijn voor aftrekken past XOR toe op elke bit van de tweede operand en 1, waardoor de bit wordt geïnverteerd, en stelt de initiële inkomende overdracht in op 1. Voor optellen is die lijn 0, zodat de tweede operand ongewijzigd doorgaat en de initiële overdracht 0 is.

Om 23 − 45 te berekenen, inverteer je 0010 1101 tot 1101 0010. Tel 0001 0111 + 1101 0010 + 1 op om 1110 1010 te krijgen, met uitgaande overdracht 0. De waarde met teken is −22. Als je de initiële overdracht op 0 laat staan, krijg je −23: alleen inverteren levert één minder dan de vereiste negatieve waarde.

Bij aftrekken zonder teken betekent uitgaande overdracht 1 geen leenbit; uitgaande overdracht 0 betekent dat een leenbit nodig was. De uitgaande overdracht 0 in 23 − 45 geeft dus aan dat het resultaat zonder teken onder nul ligt. Arm legt deze overdracht die geen leenbit aangeeft vast; x86 legt de inverse ervan vast als de leenvlag.

Maak breedtes gelijk vóór de bewerking
InterpretatieUitbreidingsregel1110 van 4 bits uitbreiden tot 8 bits
Tweecomplement met tekenKopieer de tekenbit1111 1110, nog steeds −2
Zonder tekenVoeg nullen in0000 1110, nog steeds 14

RISC-V lb past tekenuitbreiding toe op een byte, lbu past nuluitbreiding toe en addi past tekenuitbreiding toe op de onmiddellijke operand van 12 bits. Kies de uitbreiding op basis van de betekenis van de operand voordat je de bits naar de opteller stuurt.

De meest negatieve waarde met teken heeft geen positieve tegenhanger met dezelfde breedte. Als je 1000 0000 van 8 bits negatief maakt, wordt die geïnverteerd tot 0111 1111 en wordt 1 opgeteld, wat 1000 0000 oplevert. De gewenste +128 vereist een breder formaat met teken.

Belangrijkste punten

  • Een volledige opteller combineert twee operandbits en één inkomende overdracht.
  • De opgeslagen som van n bits is de wiskundige som modulo 2n.
  • Bij aftrekken wordt de tweede operand geïnverteerd en wordt alleen de initiële inkomende overdracht op 1 ingesteld.
  • In deze aftrekschakeling betekent uitgaande overdracht 1 dat er geen leenbit is bij getallen zonder teken.
  • Tekenuitbreiding behoudt waarden met teken; nuluitbreiding behoudt waarden zonder teken.

1.2 Detecteer overloop bij resultaten met en zonder teken

Overloop betekent dat het exacte resultaat buiten het bereik van het doelformaat valt. Waarden zonder teken van n bits lopen van 0 tot en met 2n−1; tweecomplementwaarden met teken lopen van −2n−1 tot en met 2n−1−1. Acht bits bevatten 0 tot en met 255 zonder teken, of −128 tot en met 127 met teken. Hetzelfde opgeslagen resultaat kan bij de ene interpretatie geldig zijn en bij de andere overloop geven.

Test het juiste signaal
BewerkingOverloop zonder tekenOverloop met teken
OptellenUitgaande overdracht van de hoogste bit is 1Ingangen met hetzelfde teken geven een resultaat met het tegengestelde teken
AftrekkenEen leenbit is nodigIngangen met verschillende tekens geven een resultaat waarvan het teken verschilt van dat van de eerste ingang

Voor optellen of aftrekken met teken kan hardware dit gebruiken:

V=cn−1⊕cn,

waarbij de twee overdrachten de tekenpositie binnenkomen en verlaten. De uitgaande overdracht alleen geeft antwoord op de vraag voor getallen zonder teken.

Tel 107 en 54 op in 8 bits: 0110 1011 + 0011 0110 geeft 1010 0001. Er komt een overdracht bit 7 binnen, maar er gaat er geen uit, dus de overloop is 1. De waarde 161 zonder teken past; de interpretatie met teken, −95, is niet gelijk aan de werkelijke som 161. Omgekeerd geeft −4 + 5 overdracht 1 maar overloop met teken 0. Als je 1000 0000 bij zichzelf optelt, krijg je overdracht 1 en overloop 1, zodat beide interpretaties onjuist zijn.

Optellen met tegengestelde tekens kan geen overloop veroorzaken: de exacte som ligt tussen de operanden. Aftrekken heeft een eigen tekenregel nodig, omdat het aftrekken van een negatief getal de eerste operand vergroot. Zo is 100 − (−40) te groot voor 8 bits met teken, ook al passen beide invoerwaarden.

Weet wat de instructie doet

x86 add stelt overdrachts- en overloopvlaggen in. Arm-instructies die vlaggen instellen, zoals ADDS, doen dat ook; een gewone ADD behoudt de bestaande vlaggen. MIPS add en addi veroorzaken een synchrone uitzondering bij overloop met teken, terwijl addu en addiu dat niet doen. Het optellen van gehele getallen in RISC-V schrijft de lage bits en heeft geen overloopvlaggen of synchrone uitzondering bij rekenkundige overloop.

Na add t0, t1, t2 is een RISC-V-controle zonder teken:

bltu t0, t1, overflow

Een omgeslagen som zonder teken is kleiner dan een oorspronkelijke operand. Waarden met teken hebben een andere controle nodig:

slti t3, t2, 0
slt  t4, t0, t1
bne  t3, t4, overflow

De eerste instructie legt vast of de tweede operand negatief is. De tweede legt vast of het resultaat kleiner is dan de eerste operand. Zonder overloop komen deze tests overeen: een negatief getal optellen verlaagt de waarde, terwijl een niet-negatief getal optellen die niet kan verlagen. Een verschil detecteert overloop. Voor een bekende positieve onmiddellijke operand volstaat een voorwaardelijke sprong met teken die test of de som is afgenomen.

Onderscheid hardware van taalregels

Rekenkundige bewerkingen zonder teken in C en C++ slaan om modulo 2n; overloop met teken is ongedefinieerd gedrag. De typen int en long van Java slaan om, terwijl Math.addExact overloop met een uitzondering meldt. Gehele getallen in Python groeien waar nodig. Een omslag in hardware bepaalt dus niet wat een C-programma mag doen.

Omslaande optellingen en aftrekkingen behouden een eindresultaat dat past: in modulaire rekenkunde met 8 bits slaat (100 + 50) − 60 eerst om naar −106 en daarna naar 90. Deze redenering geldt voor omslaande rekenkunde, niet voor expressies met teken in C die overlopen.

Verzadiging is een andere aanpak. Zonder teken in 8 bits verzadigt 200 + 100 tot 255 in plaats van om te slaan naar 44. Dit is nuttig voor pixelintensiteiten en andere begrensde signalen, waarbij omslag van een groot positief resultaat naar een kleine waarde misleidend zou zijn.

Belangrijkste punten

  • Kies overlooptests op basis van de interpretatie van de operanden en de bewerking.
  • Overloop met teken is de XOR van de inkomende en uitgaande overdracht van de tekenbit.
  • RISC-V-software moet op overloop van gehele getallen testen wanneer die overloop moet worden gemeld.
  • Overloop met teken in C, omslag in Java en groeiende gehele getallen in Python hebben een verschillende betekenis.
  • Modulair optellen en aftrekken kan na tussentijdse omslag een representeerbare eindwaarde opleveren.
  • Verzadiging begrenst een resultaat buiten het bereik op een grenswaarde.
2

Ontwerp een rekenkundig-logische eenheid

Een ALU brengt een keuze aan bewerkingen samen in één gedeelde schakeling. Poorten en een opteller berekenen mogelijke resultaten, besturingslijnen selecteren er één en enkele extra uitgangen ondersteunen gelijkheids- en ordeningsvergelijkingen. Bouw die structuur uit bitslices, zie waarom een vergelijking met teken correctie voor overloop nodig heeft en verkort vervolgens het overdrachtspad, zodat een breder datapad een rekenkundig resultaat kan leveren zonder te wachten tot een overdracht elke bit heeft doorlopen.

2.1 Bouw een n-bits-ALU uit 1-bits-slices

Een rekenkundig-logische eenheid, of ALU, ontvangt operanden en besturingsingangen en levert een resultaat en statusuitgangen. De ALU is combinatorisch: de uitgangen hangen af van de huidige ingangen. Registers bewaren operanden en nemen resultaten op; de ALU zelf slaat niets op.

Bouw één bit en herhaal die

Een 1-bits-slice berekent AND, OR en een som met een volledige opteller parallel. Een multiplexer kiest welk mogelijk resultaat de resultaatbit bereikt. In een n-bits-ALU delen alle slices de besturingssignalen voor de bewerking, terwijl de uitgaande overdracht van elke opteller naar de inkomende overdracht van de volgende slice gaat. Logische bewerkingen werken op elke positie onafhankelijk; optellen hangt af van de overdrachtsketen.

Een Bnegate-besturingssignaal inverteert de tweede operand en stelt ook de inkomende overdracht van bit 0 in. Als je vervolgens de opteller selecteert, wordt een aftrekking berekend. Hogere slices ontvangen hun overdracht van de voorgaande slice, niet rechtstreeks van Bnegate. Als je elke overdrachtsingang hoog maakt, voeg je extra enen toe aan de berekening.

Een Ainvert-besturingssignaal kan ook de eerste operand inverteren. Als je AND selecteert met beide operanden geïnverteerd, krijg je volgens de wet van De Morgan NOR:

a‾⋅b‾=a+b‾.

Als je OR selecteert met beide geïnverteerd, krijg je NAND. In deze logische vergelijkingen staat het plusteken voor OR.

Lees een besturingswoord

Een klassieke ALU uit een leerboek gebruikt de velden Ainvert, Bnegate en een Operation-keuzeveld van twee bits:

BesturingswoordGeselecteerd resultaat
0000AND
0001OR
0010Optellen
0110Aftrekken
0111Instellen bij kleiner dan met teken
1100NOR

Dit zijn de coderingen van dit specifieke ontwerp. Het zijn interne besturingscodes, geen coderingen van RISC-V-instructies.

Voor ingangen 0101 en 0011 inverteert besturingscode 0110 de tweede ingang tot 1100 en levert die initiële overdracht 1. De opteller geeft 0010, met uitgaande overdracht 1: 5 − 3 = 2, zonder leenbit bij getallen zonder teken. Als je voor de oorspronkelijke ingangen AND selecteert, krijg je daarentegen 0001. De ingangswaarden kunnen gelijk blijven terwijl een wijziging van de besturing een ander resultaatpad selecteert.

De meest significante slice levert ook informatie over overloop en vergelijking. Een reductie van alle resultaatbits levert Zero. Met die statusuitgangen kan de omringende processorbesturing het rekenkundige resultaat testen zonder een tweede resultaat over de volledige breedte op te slaan.

Voeg verschuiven naast de opteller toe

Een volledige ALU voor de RISC-V-basisinstructies voor gehele getallen heeft ook XOR, vergelijking zonder teken en verschuivingen nodig. Een barrelshifter gebruikt een reeks multiplexerniveaus. Elk niveau geeft de ingang ongewijzigd door of verschuift die met een macht van twee. Een schuifschakeling van 32 bits heeft niveaus voor 1, 2, 4, 8 en 16 posities en verwerkt zo elke verschuiving van 0 tot en met 31 in vijf niveaus.

Om 13 posities te verschuiven selecteer je de niveaus voor 8, 4 en 1. De geselecteerde verschuivingen vormen samen één resultaat. Een logische verschuiving naar rechts voegt nullen in. Een rekenkundige verschuiving naar rechts kopieert de tekenbit en behoudt zo het teken van een negatieve waarde. Als je 1111 0000 twee posities naar rechts verschuift, krijg je dus 0011 1100 bij logisch verschuiven en 1111 1100 bij rekenkundig verschuiven.

Belangrijkste punten

  • Een ALU rekent met de huidige ingangen; registers zorgen voor opslag.
  • Bitslices delen de besturing voor bewerkingen en geven overdrachten door tussen aangrenzende posities.
  • Bnegate inverteert de tweede operand en levert de initiële overdracht voor aftrekken.
  • Een multiplexer kiest tussen rekenkundige en logische resultaten.
  • Niveaus van een barrelshifter combineren verschuivingen met machten van twee.

2.2 Vergelijk getallen en detecteer nul in de ALU

Vergelijkingen gebruiken vaak een aftrekking. Bij gelijkheid is de vraag of het verschil nul is. Bij ordening is de vraag of het wiskundige verschil negatief is. Dat vraagt extra aandacht wanneer een aftrekking met vaste breedte overloopt.

Detecteer gelijkheid over alle bits

De nuluitgang Zero is de NOR van alle resultaatbits:

Nul=r0+r1+⋯+rn−1‾.

Eén resultaatbit ongelijk aan nul maakt Zero onwaar. Twee gelijke bitpatronen van elkaar aftrekken geeft nul; twee verschillende patronen van n bits kunnen geen veelvoud ongelijk aan nul van 2n verschillen, dus een omslaande aftrekking creëert geen valse gelijkheid. Een alternatieve gelijkheidsschakeling past XOR toe op overeenkomstige operandbits en test of elk XOR-resultaat nul is.

Corrigeer het teken voor kleiner dan met teken

RISC-V slt schrijft het gehele getal 1 over de volledige breedte als de eerste operand met teken kleiner is, en anders 0. In een ALU met slices berekent de meest significante slice een Set-signaal en stuurt dat terug naar de Less-ingang van bit 0. Alle hogere resultaatbits worden op nul gedwongen.

Het juiste Set-signaal is

Kleinersigned=teken(a−b)⊕V.

Zonder overloop werkt het teken van het verschil direct. Bij overloop is dat teken omgekeerd ten opzichte van het werkelijke verschil, zodat XOR met 1 het corrigeert.

Vergelijk 7 met −8 in vier bits. De aftrekking 0111 + 0111 + 1 geeft 1111. Het teken suggereert een negatief verschil, maar het exacte verschil is 15, buiten het bereik van −8 tot en met 7. De overloop is 1, dus het gecorrigeerde Less-signaal is 1 XOR 1 = 0. Het resultaat van slt is 0000 en geeft terecht aan dat 7 niet kleiner is dan −8.

Gebruik de leenbit voor kleiner dan zonder teken

Vergelijking zonder teken gebruikt een ander signaal:

Kleinerunsigned=cn‾

voor een aftrekking met geïnverteerde tweede ingang en initiële overdracht 1. Uitgaande overdracht 0 betekent dat een leenbit nodig was, dus is de eerste operand zonder teken kleiner.

InvoerpatronenVergelijking met tekenVergelijking zonder teken
0111, 10007 < −8 is onwaar7 < 8 is waar
1000, 0111−8 < 7 is waar8 < 7 is onwaar

Dit onderscheid zie je in slt tegenover sltu, en in de voorwaardelijke sprongen blt tegenover bltu en bge tegenover bgeu. Noch alleen het teken van het resultaat, noch een algemene “negatiefvlag” beantwoordt beide vragen.

Pas de vergelijking toe in software

Een bereikcontrole zonder teken kan zowel negatieve indices als indices vanaf de arraylengte afwijzen:

bgeu x10, x11, IndexOutOfBounds

Hier bevat x10 de index met teken en x11 een niet-negatieve lengte die binnen het bereik met teken past. Een negatieve index, opnieuw geïnterpreteerd zonder teken, is minstens 2n−1 en is daarom groter dan elke dergelijke lengte. De voorwaarde voor de lengte is van belang: die maakt één vergelijking zonder teken voldoende.

Conversies in programmeertalen kunnen ook de betekenis van een vergelijking veranderen. Bij een C-type unsigned int van 32 bits is -1 < 0u onwaar, omdat −1 vóór de vergelijking wordt omgezet naar 4.294.967.295. Volg de conversie voordat je redeneert op basis van het geschreven minteken.

Belangrijkste punten

  • Zero test elke resultaatbit, zodat aftrekken gelijkheid kan bepalen.
  • Kleiner dan met teken gebruikt het teken van het verschil XOR overloop met teken.
  • Kleiner dan zonder teken gebruikt de leenbit van de aftrekking.
  • Instellen bij kleiner dan schrijft 0 of 1 over de volledige resultaatbreedte.
  • Een bereikcontrole zonder teken vangt negatieve indices af als de lengte in het niet-negatieve bereik met teken past.
  • Conversies kunnen een vergelijking met teken veranderen in een vergelijking zonder teken.

2.3 Versnel het optellen met vooruitberekening van de overdracht

De overdracht van een ripple-carryopteller moet elke bit achtereenvolgens doorlopen. Vooruitberekening van de overdracht vervangt dat achtereenvolgende wachten door logica die overdrachten voorspelt op basis van operandbits en de initiële overdracht.

Beschrijf het overdrachtsgedrag van elke bit

Definieer generatie en doorgifte als

gi=aibi,pi=ai+bi.

Dit zijn Booleaanse expressies: vermenigvuldiging is AND en optelling is OR. Generatie is 1 als de bit een overdracht maakt, ongeacht de inkomende overdracht. Doorgifte is 1 als een inkomende overdracht kan worden doorgegeven. De recursieve betrekking is

ci+1=gi+pici.

Een bit met beide ingangen op 1 genereert een overdracht; een bit met één ingang op 1 geeft een overdracht door; een bit met beide ingangen op 0 stopt die. Bij deze OR-definitie heeft een genererende bit ook doorgifte 1, wat de overdrachtsformule niet verandert.

Werk de afhankelijkheid uit

Vervang elke voorgaande overdracht door de expressie ervoor:

c1=g0+p0c0 c2=g1+p1g0+p1p0c0 c3=g2+p2g1+p2p1g0+p2p1p0c0 c4=g3+p3g2+p3p2g1+p3p2p1g0+p3p2p1p0c0.

Elke expressie hangt nu af van signalen die uit de operanden zijn afgeleid en van de initiële overdracht, niet van een opeenvolgende keten van tussenliggende overdrachtsuitgangen. Zodra de overdrachten beschikbaar zijn, is elke sombit nog steeds de XOR van de twee ingangen en de inkomende overdracht.

Voor 1011 + 0110 met initiële overdracht 0 is de generatie vanaf bit 0 naar boven 0, 1, 0, 0 en de doorgifte 1, 1, 1, 1. De inkomende overdrachten van bits 1 tot en met 4 zijn dus 0, 1, 1, 1. De vier resultaatbits zijn 0001 met uitgaande overdracht 1, samen 11 + 6 = 17.

Bouw groepen in plaats van reusachtige poorten

Een blok van vier bits heeft groepssignalen

G=g3+p3g2+p3p2g1+p3p2p1g0, P=p3p2p1p0.

De uitgaande overdracht is G+Pc0. Een tweede niveau voor vooruitberekening combineert deze bloksignalen volgens dezelfde regel. Vier blokken van vier bits en een eenheid voor vooruitberekening per groep vormen een opteller van 16 bits. Verdere groepering ondersteunt bredere ontwerpen; parallelle prefixoptellers zoals Kogge–Stone ordenen deze verbanden in een snel netwerk.

In een eenvoudig model voor poortvertraging kost het doorschakelen van een overdracht ongeveer twee poortvertragingen per bit, of 32 voor 16 bits. Een ontwerp met vooruitberekening op twee niveaus kan de laatste overdracht in ongeveer vijf poortvertragingen leveren: één voor bitsignalen, twee voor groepssignalen en twee voor de groepsoverdracht. Deze schatting telt logische niveaus en veronderstelt de vereiste poorten; de werkelijke vertraging hangt ook af van de poortgrootte en bedrading. Groepering ruilt meer hardware in voor een overdrachtspad dat ongeveer logaritmisch groeit met de breedte.

Een opteller met overdrachtsselectie gebruikt oppervlak anders: de opteller berekent een bovenste blok tweemaal, eenmaal voor inkomende overdracht 0 en eenmaal voor inkomende overdracht 1. Een multiplexer selecteert het juiste resultaat wanneer de overdracht van het onderste blok aankomt.

Sommige optellers definiëren doorgifte met XOR in plaats van OR. Ook dat geeft correcte overdrachten en maakt de som si=pi⊕ci. Gebruik de gekozen definitie consequent bij het afleiden van de groepslogica.

Belangrijkste punten

  • Generatie maakt een overdracht; doorgifte geeft een inkomende overdracht door.
  • Het uitwerken van overdrachtsvergelijkingen neemt de opeenvolgende afhankelijkheid van elke voorgaande overdrachtsuitgang weg.
  • Met groepsoverdrachtsgeneratie en -doorgifte kunnen brede optellers meerdere niveaus van vooruitberekening gebruiken.
  • Vooruitberekening en overdrachtsselectie ruilen schakelingoppervlak in voor snelheid zonder de som te veranderen.
3

Vermenigvuldig en deel gehele getallen met hardware

Vermenigvuldiging combineert verschoven deelproducten; deling bepaalt een quotiëntcijfer uit een veranderende rest. Volg beide processen in kleine registers en bekijk vervolgens hoe operanden met teken de verwerking veranderen. Snellere vermenigvuldigers vormen veel deelproducten tegelijk en brengen hun aantal samen terug, terwijl delers rekening moeten houden met afhankelijkheden tussen stappen. RISC-V-instructies leveren producthelften, quotiënten en resten volgens precieze regels voor bijzondere invoer.

3.1 Vermenigvuldig door te schuiven en op te tellen

Elke binaire vermenigvuldigerbit kiest een verschoven kopie van het vermenigvuldigtal of nul. Het optellen van die deelproducten geeft het resultaat. Voor een operand van n bits maal een operand van m bits kunnen n + m bits nodig zijn, dus twee operanden van 32 bits hebben een volledig product van 64 bits nodig.

Volg schuiven en optellen

Begin voor operanden zonder teken van n bits met een product van 2n bits dat nul is. Herhaal n keer: test de lage bit van de vermenigvuldiger, tel het huidige vermenigvuldigtal op als die bit 1 is, verschuif het vermenigvuldigtal naar links en verschuif de vermenigvuldiger naar rechts. Het vermenigvuldigtalregister moet breed genoeg zijn om de verschoven kopieën te bewaren.

Voor 6 × 5 met vier bits is de vermenigvuldiger 0101:

StapLage vermenigvuldigerbitVerschoven vermenigvuldigtalTussenproduct
110000 01100000 0110
200000 11000000 0110
310001 10000001 1110
400011 00000001 1110

Het eindproduct is 30. De geteste bit en de verschuivingsrichting werken samen: als je de hoge bit test terwijl je de vermenigvuldiger naar rechts verschuift, koppel je bits aan de verkeerde gewichten. Dit sequentiële ontwerp neemt n stappen, inclusief stappen waarbij de vermenigvuldigerbit nul is.

Deel registerruimte

Het eerste ontwerp gebruikt een vermenigvuldigtalregister en een opteller van 2n bits. Een verbeterd ontwerp houdt het vermenigvuldigtal vast in n bits, plaatst de vermenigvuldiger in de lage helft van een productregister van 2n bits en begint met nul in de hoge helft.

Als de lage bit 1 is, tel je het vermenigvuldigtal op bij de hoge helft. Bewaar de uitgaande overdracht van de opteller in één extra bit en verschuif daarna die overdracht en beide producthelften samen naar rechts. De vermenigvuldigerbits verlaten het register aan de rechterkant terwijl productbits de vrijgekomen ruimte innemen. Als je de overdracht weglaat, worden grote producten onjuist: met operanden van vier bits zou 15 × 15 ten onrechte 1 worden in plaats van 225. Bij één stap per klokcyclus duurt de eenvoudige implementatie van 32 bits ongeveer 32 cycli.

Houd de productbreedte in het oog

Een product zonder teken past precies dan in n bits als de bovenste n bits van het volledige product nul zijn. Voor 6 × 5 is het volledige resultaat 0001 1110; als je alleen 1110 opslaat, krijg je 14. De vermenigvuldiging zelf was correct, maar de smalle bestemming heeft een deel weggegooid.

Een verschuiving van k posities naar links vermenigvuldigt met 2k als het resultaat past. Vermenigvuldigen met 8 wordt een verschuiving van drie posities; vermenigvuldigen met 10 kan met twee verschoven kopieën:

(x << 3) + (x << 1)

De berekening is 8x+2x=10x. Breedte en regels van de programmeertaal blijven gelden voor de verschuivingen en optelling; deze herschrijving maakt geen extra resultaatbits.

Lees de RISC-V-resultaathelften

mul geeft de lage XLEN bits terug, waarbij XLEN de breedte van het integerregister is. mulhu geeft de hoge helft voor operanden zonder teken. De instructies voor de hoge helft met teken zijn mulh voor twee operanden met teken en mulhsu voor een eerste operand met teken en een tweede zonder teken.

Software die het volledige product nodig heeft, kan de passende instructie voor de hoge helft uitvoeren, gevolgd door mul met dezelfde operanden. Een implementatie kan het paar samenvoegen. Het lage resultaat alleen kan niet aantonen dat een product zonder teken past; de bovenste helft levert dat bewijs.

Belangrijkste punten

  • Elke vermenigvuldigerbit selecteert één verschoven deelproduct of nul.
  • Het volledige product kan de som van de operandbreedtes nodig hebben.
  • Sequentieel schuiven en optellen duurt één stap per vermenigvuldigerbit.
  • De compacte vermenigvuldiger moet de overdracht van de optelling bewaren vóór het verschuiven.
  • Een versmald product zonder teken past precies dan als de bovenste helft nul is.
  • RISC-V biedt één vermenigvuldigingsinstructie voor de lage helft en drie voor de hoge helft, elk voor een specifieke interpretatie.

3.2 Vermenigvuldig getallen met teken en voer snelle vermenigvuldigingen uit

Vermenigvuldiging met teken moet de tekens van de operanden verwerken zonder de meest negatieve waarde te verliezen. Snellere hardware heeft ook een manier nodig om veel deelproducten terug te brengen zonder telkens op een volledige optelling met overdrachtsdoorgifte te wachten.

Vermenigvuldig absolute waarden veilig

Eén aanpak legt de tekens vast, vormt absolute waarden zonder teken van n bits, vermenigvuldigt die tot 2n bits en maakt het volledige product negatief als precies één operand negatief was. Voor −8 in vier bits stellen de bits 1000 de waarde 8 zonder teken voor. Je kunt ze niet lezen als een positieve waarde met teken van vier bits.

De lage n productbits zijn identiek bij interpretaties met en zonder teken. 1111 × 0010 geeft 30 zonder teken (0001 1110) of −2 met teken (1111 1110). Beide lage helften zijn 1110; alleen de bovenste helften verschillen. Daarom is één mul-instructie geschikt voor beide interpretaties.

Volg de beslissingen van Booth

Het algoritme van Booth werkt rechtstreeks met tweecomplement. Geef de accumulator n + 1 bits en breid het vermenigvuldigtal met tekenuitbreiding uit tot die breedte, zodat zowel het vermenigvuldigtal als de negatieve waarde ervan past. Begin met de accumulator op nul, plaats de vermenigvuldiger in zijn register van n bits en voeg één extra bit toe die op nul begint.

Bekijk de lage bit van de vermenigvuldiger en de toegevoegde bit als een paar:

PaarBewerking op de accumulator
10Trek het vermenigvuldigtal af
01Tel het vermenigvuldigtal op
00 of 11Laat de accumulator onveranderd

Verschuif na elke beslissing het volledige register met accumulator, vermenigvuldiger en extra bit rekenkundig naar rechts. Herhaal dit n keer; verwijder de toegevoegde bit en de overtollige bovenste tekenbit van de accumulator om het product van 2n bits te krijgen.

Gebruik voor 2 × (−3) vermenigvuldigtal 00010, vermenigvuldiger 1101 en accumulator 00000. De paren zijn 10, 01, 10, 11. Na de respectieve bewerkingen en verschuivingen zijn accumulator en vermenigvuldiger 11111 0110, 00000 1011, 11111 0101 en 11111 1010. De lage acht productbits 1111 1010 stellen −6 voor.

Een logische verschuiving zou bovenaan nul invoegen en negatieve tussenresultaten onjuist maken. De extra accumulatorbit is ook van belang: het aftrekken van een meest negatief vermenigvuldigtal van n bits vereist een positieve waarde die niet beschikbaar is in n bits met teken.

Verminder het werk en verkort de overdrachtspaden

Booth-hercodering vervangt een reeks bits met waarde 1 door een aftrekking aan de lage kant en een optelling boven de hoge kant. Zo is 126 gelijk aan 128 − 2. Afwisselende bits leveren mogelijk geen besparing op. Booth met grondtal 4 bekijkt twee vermenigvuldigerbits per stap en gebruikt cijfers van −2 tot en met +2, waardoor het aantal deelproducten afneemt.

Een snelle vermenigvuldiger vormt deelproducten parallel. Een opteller met opgeslagen overdracht brengt drie woorden terug tot twee zonder overdrachten door het woord door te geven. Wallace- of Dadda-bomen herhalen die reductie en gebruiken daarna één laatste opteller met overdrachtsdoorgifte. Het terugbrengen van 32 rijen tot twee kost acht niveaus met opgeslagen overdracht. Pipelining maakt het mogelijk dat meerdere producten tegelijk worden verwerkt; elke cyclus een nieuw product accepteren betekent niet dat elk product in één cyclus klaar is.

Voor een resultaat met teken dat tot n bits wordt versmald, moet elke bit van de bovenste helft gelijk zijn aan de tekenbit van de lage helft. De berekening −8 × −1 met vier bits geeft het volledige product 0000 1000. De bovenste helft is nul maar de behouden tekenbit is 1, dus +8 past niet in het doelformaat met teken.

Belangrijkste punten

  • Absolute waarden zonder teken behouden de absolute waarde van de meest negatieve operand met teken.
  • Producten met en zonder teken hebben dezelfde lage helft, maar kunnen verschillende bovenste helften hebben.
  • Booth gebruikt een extra accumulatorbit, beslissingen op basis van bitparen en rekenkundige verschuivingen naar rechts.
  • Reeksen bits met waarde 1 kunnen worden vervangen door twee Booth-bewerkingen; afwisselende patronen besparen mogelijk geen werk.
  • Bomen met opgeslagen overdracht brengen veel deelproducten terug vóór één laatste optelling met overdrachtsdoorgifte.
  • Pipelining maakt onderscheid tussen de latentietijd van een resultaat en de snelheid waarmee nieuwe producten kunnen starten.
  • Een versmald product met teken past als de bovenste helft de tekenuitbreiding van de lage helft is.

3.3 Deel gehele getallen en handel de bijzondere gevallen af

Een deling levert een quotiënt en een rest op die samen voldoen aan

deeltal=quotie¨nt×deler+rest.

Voor een deler zonder teken die niet nul is, is de rest niet-negatief en kleiner dan de deler. Een deeltal en deler van n bits hebben een quotiënt en rest van n bits nodig.

Maak het quotiënt bit voor bit

Lees deeltalbits vanaf de meest significante kant. Verdubbel de gedeeltelijke rest, haal de volgende bit erbij en test of de deler past. Zo ja, trek die af en schrijf quotiëntbit 1; behoud anders de gedeeltelijke rest en schrijf 0.

Voor 0111 gedeeld door 0010 zijn de gedeeltelijke resten na het naar beneden halen 0, 1, 3 en 3. De eerste twee zijn kleiner dan 2, dus hun quotiëntbits zijn 0. Bij elke 3 is een aftrekking mogelijk, met rest 1 en quotiëntbit 1. Het quotiënt is 0011 en de rest 0001: 3 × 2 + 1 = 7.

Deling met herstel van de rest probeert eerst een aftrekking. Als het proefresultaat negatief is, tel je de deler terug en schrijf je 0; anders behoud je het resultaat en schrijf je 1. Detecteer het mislukken met een leenbit of een verschil met teken van n + 1 bits. Een tekentest van n bits is onveilig: 0 − 9 in vier bits slaat om naar 0111, waarvan de bovenste bit 0 is ondanks de leenbit.

Compacte hardware plaatst het deeltal in de lage helft van een register van 2n bits en de gedeeltelijke rest in de hoge helft. Het register verschuift elke stap naar links en voegt rechts quotiëntbits in. Aan het eind bevat de hoge helft de rest en de lage helft het quotiënt.

Deling zonder herstel van de rest neemt een negatief proefresultaat mee en telt de deler in de volgende stap op in plaats van direct te herstellen. Een negatieve gedeeltelijke rest aan het eind vereist nog één optelling. SRT-deling selecteert meerdere quotiëntbits per stap met behulp van de voorste bits van deler en rest; ontbrekende waarden in zo'n selectietabel veroorzaakten de Pentium FDIV-fout van 1994. Deling blijft afhankelijk van elke voorgaande gedeeltelijke rest.

Pas deling met teken en afkappen toe

Deel de absolute waarden, maak het quotiënt negatief als de tekens verschillen en geef een rest ongelijk aan nul het teken van het deeltal.

BerekeningQuotiëntRest
−7 gedeeld door 2−3−1
7 gedeeld door −2−31
−7 gedeeld door −23−1

Deze resultaten kappen het quotiënt af naar nul en behouden de delingsidentiteit. RISC-V, Java en C sinds C99 gebruiken deze regel. Python // rondt daarentegen naar beneden af: -7 // 2 is −4 en -7 % 2 is 1.

Handel bijzondere invoer af

Deling door nul in RISC-V geeft een quotiënt dat geheel uit enen bestaat en het oorspronkelijke deeltal als rest. Het geval van overloop met teken, de meest negatieve waarde gedeeld door −1, geeft het meest negatieve quotiënt en rest nul. Geen van beide gevallen veroorzaakt een synchrone uitzondering. x86 veroorzaakt in beide gevallen een uitzondering wegens een delingsfout. Software die fouten moet melden, controleert eerst op nul en controleert ook het paar dat overloop met teken veroorzaakt.

Een logische verschuiving naar rechts deelt waarden zonder teken door machten van twee en rondt naar beneden af. Een rekenkundige verschuiving rondt negatieve waarden ook naar beneden af: −5 één positie naar rechts verschoven wordt −3, terwijl deling door 2 met afkappen −2 geeft. Om afkappen met een verschuiving te implementeren, tel je 2k−1 op bij een negatieve invoer voordat je k posities naar rechts verschuift. Voor −5 en k = 1 verschuif je −4 om −2 te krijgen.

Belangrijkste punten

  • Quotiënt en rest moeten voldoen aan de delingsidentiteit.
  • Deling met herstel van de rest telt de deler terug na een mislukte proefaftrekking.
  • Een leenbit of een extra verschilbit is nodig om een proefaftrekking zonder teken veilig te testen.
  • Deling met teken en afkappen geeft een rest ongelijk aan nul het teken van het deeltal.
  • RISC-V definieert resultaten zonder synchrone uitzondering voor deling door nul en overloop van een quotiënt met teken.
  • Rekenkundig naar rechts verschuiven en delen met teken en afkappen verschillen voor negatieve waarden met een rest.
4

Stel reële getallen voor als IEEE 754-drijvendekommagetallen

Een drijvendekommagetal slaat een teken, een schaal en een beperkt aantal significante bits op. Decodeer die velden om bereik van precisie te onderscheiden en gebruik vervolgens de gereserveerde exponentpatronen om nullen, subnormale getallen, oneindigheden en NaN-waarden te herkennen. De bijzondere waarden maken deel uit van het rekensysteem: ze laten heel kleine resultaten geleidelijk nul naderen en laten uitzonderlijke bewerkingen vastgelegde resultaten teruggeven terwijl statusvlaggen worden bijgehouden.

4.1 Codeer en decodeer binaire IEEE 754-formaten

Een normale binaire drijvendekommawaarde heeft de vorm

(−1)s×1,f×2e.

De significand is de volledige waarde 1,f; de opgeslagen fractie bevat alleen f. Normalisatie garandeert de voorste 1, dus het weglaten van deze verborgen bit levert één bit precisie op.

Lees de drie velden
FormaatTekenbitsExponentbitsFractiebitsBiasPrecisie
binary1615101511 bits
binary32182312724 bits
binary6411152102353 bits

IEEE 754-2019 definieert deze formaten. Enkele en dubbele precisie betekenen meestal binary32 en binary64. De opslagvolgorde is teken, exponent, fractie. Voor een normale waarde trek je de bias af van het exponentveld zonder teken:

waarde=(−1)S(1+Fractie)2E−Bias.

Fractie betekent de binaire breuk na de komma, niet de bits gelezen als geheel getal. In binary32 coderen exponentvelden 1 tot en met 254 de exponenten −126 tot en met 127. Velden 0 en 255 hebben bijzondere betekenissen.

Een bias zorgt ervoor dat grotere exponenten grotere velden zonder teken hebben. Voor positieve eindige getallen volgt de volgorde van de volledige patronen zonder teken de numerieke volgorde. Negatieve waarden en NaN-waarden vereisen extra afhandeling.

Codeer en decodeer

Om −0,75 te coderen, schrijf je de absolute waarde als 0,112=1,12×2−1. Het teken is 1 en het exponentveld is −1 + 127 = 126, oftewel 01111110. Laat de verborgen voorste 1 weg en vul de fractie aan met nullen. De velden zijn 1 01111110 10000000000000000000000, wat 0xBF400000 geeft. In binary64 is dezelfde waarde 0xBFE8000000000000.

Om 0x41460000 te decoderen, splits je het op in 0 10000010 10001100000000000000000. Het exponentveld is 130, dus de werkelijke exponent is 3. De significand is

1,1000112=1+12+132+164=1,546875.

Vermenigvuldigen met 8 geeft 12,375. Als je de verborgen 1 in de opgeslagen fractie zou schrijven, zou de waarde veranderen; als je −1 rechtstreeks in het exponentveld zou opslaan, zou de biasregel verloren gaan.

Onderscheid bereik van precisie

binary32 reikt tot ongeveer 3,40×1038, met kleinste positieve normale waarde 2−126 en ongeveer zeven significante decimale cijfers. binary64 reikt tot ongeveer 1,80×10308, met kleinste positieve normale waarde 2−1022 en ongeveer 15–16 significante cijfers. binary16 heeft maximum 65.504, kleinste positieve normale waarde 2−14, kleinste positieve subnormale waarde 2−24 en ongeveer 3,3 significante decimale cijfers.

Precisie telt significante cijfers, geen cijfers na de komma. Zo slaat binary32 1.234.567,89 op als 1.234.567,875.

Binnen het binary32-interval van 2e tot 2e+1 liggen aangrenzende normale waarden 2e−23 uit elkaar. Deze afstand is een ulp, een eenheid op de laatste positie. Net boven 1 is die 2−23, vaak machine-epsilon genoemd. Bij 224 wordt de afstand 2, zodat 16.777.217 ontbreekt, ook al passen veel grotere getallen. Meer exponentbits vergroten het schaalbereik; meer fractiebits plaatsen representeerbare waarden bij een bepaalde schaal dichter bij elkaar.

Belangrijkste punten

  • Normale formaten laten de gegarandeerde voorste 1 weg uit de opgeslagen fractie.
  • Decodeer een normale exponent door de bias af te trekken.
  • binary16, binary32 en binary64 hebben een precisie van 11, 24 en 53 bits.
  • Bereik en precisie zijn verschillende grenzen.
  • De afstand tussen normale getallen groeit met de exponent.

4.2 Gebruik nullen, oneindigheden, NaN-waarden en subnormale getallen

Gereserveerde exponentpatronen laten IEEE 754 waarden voorstellen buiten de gewone genormaliseerde getallen. Classificeer de velden altijd voordat je een formule voor de waarde toepast.

Herken de gereserveerde patronen
ExponentveldFractieveldBetekenis
Alleen nullenNulNul met teken
Alleen nullenNiet nulSubnormaal getal
Alleen enenNulOneindigheid met teken
Alleen enenNiet nulNaN

binary32 heeft +0 op 0x00000000 en −0 op 0x80000000. Bij vergelijking zijn ze gelijk, maar deling kan het teken zichtbaar maken: 1 gedeeld door +0 geeft +∞, terwijl 1 gedeeld door −0 de uitkomst −∞ geeft. Een heel klein negatief resultaat dat naar nul wordt afgerond, wordt −0.

Positieve oneindigheid is 0x7F800000; de grootste eindige positieve waarde is 0x7F7FFFFF. Bij afronden naar het dichtstbijzijnde getal geeft rekenkundige overloop een oneindigheid met teken. Deling van een eindige waarde ongelijk aan nul door nul geeft ook een oneindigheid met teken, met een andere uitzonderingsvlag. Verdere berekeningen handelen oneindigheid consequent af: 1 optellen bij +∞ laat +∞ onveranderd, vermenigvuldiging met −2 geeft −∞ en de reciproke is +0.

Onderscheid NaN van oneindigheid

Bewerkingen zoals nul gedeeld door nul, oneindigheid min zichzelf, nul maal oneindigheid en de reële wortel van −1 hebben geen betekenisvol numeriek resultaat. Ze leveren NaN, “geen getal”, op en signaleren een ongeldige bewerking.

NaN is ongeordend: gelijkheidstests en geordende tests op kleiner dan of groter dan met NaN zijn onwaar, terwijl ongelijkheid waar is. Met name x == NaN kan NaN niet detecteren. Gebruik isnan(x). Stille NaN-waarden planten zich normaal voort in berekeningen; signalerende NaN-waarden veroorzaken een ongeldige bewerking wanneer ze worden gebruikt. In deze binaire formaten onderscheidt de bovenste fractiebit een stille NaN. De canonieke stille binary32-NaN van RISC-V is 0x7FC00000.

Benader nul geleidelijk

Een subnormaal getal heeft geen verborgen 1. De exponent staat vast op de kleinste normale exponent:

waarde=(−1)S×0,f×21−Bias.

Voor binary32 is 0x00000001 gelijk aan 2−149 en 0x00400000 aan 2−127. Voor binary64 is de kleinste positieve waarde 2−1074. Als je bij een exponentveld van nul de exponent min de bias zou gebruiken, zou je er een factor twee naast zitten, zelfs voordat je ten onrechte een verborgen 1 toevoegt.

Subnormale getallen bieden geleidelijke onderloop: de precisie neemt af naarmate waarden kleiner worden, met een vaste absolute afstand dicht bij nul. Verschillende eindige waarden in één formaat hebben nog steeds een representeerbaar verschil ongelijk aan nul. Modi die naar nul afkappen laten die bescherming vervallen en kunnen de verwerking van subnormale getallen op sommige processors versnellen.

Lees de uitzonderingsvlaggen

IEEE 754 definieert ongeldige bewerking, deling door nul, overloop, onderloop en niet-exact resultaat. De standaardafhandeling geeft een resultaat terug en legt de status vast; de uitvoering hoeft niet te stoppen. Niet-exact betekent dat het afgeronde resultaat verschilt van het exacte resultaat.

Bij de standaardafhandeling vereist onderloop zowel een heel kleine als een niet-exacte waarde. In binary32 is 2−126/2=2−127 een exact subnormaal getal en veroorzaakt dit geen onderloop. RISC-V legt NV, DZ, OF, UF en NX vast in fflags binnen fcsr, en uitzonderingen bij drijvendekommagetallen veroorzaken geen rekenkundige synchrone uitzonderingen. Een teruggegeven oneindigheid alleen laat niet zien of er overloop of deling door nul optrad; controleer de vlag.

Belangrijkste punten

  • Classificeer gereserveerde exponentvelden voordat je een normale waarde decodeert.
  • Nullen met teken zijn bij vergelijking gelijk, maar kunnen oneindigheden met verschillende tekens opleveren.
  • NaN is ongeordend en moet met een NaN-test worden gedetecteerd.
  • Subnormale getallen gebruiken een voorste 0 en exponent één min de bias.
  • Geleidelijke onderloop behoudt kleine verschillen die bij afkappen naar nul kunnen verdwijnen.
  • Een exact subnormaal getal zet de onderloopvlag niet.
5

Reken met drijvendekommagetallen en rond ze af

Hardware voor drijvendekommagetallen moet significante bits verschuiven en combineren voordat die het antwoord kan afronden. Doorloop uitlijnen, normaliseren en afronden en verbind die stappen vervolgens met bekende precisiefouten. Extra afrondingsbits onderscheiden een waarde precies halverwege van een waarde die daar net boven ligt, en gecombineerde vermenigvuldiging en optelling bewaart informatie die bij twee afzonderlijke bewerkingen verloren kan gaan. Dezelfde grenzen verklaren veranderende sommen, stilvallende tellers en riskante conversies.

5.1 Tel drijvendekommagetallen op en vermenigvuldig ze

Rekenen met drijvendekommagetallen werkt afzonderlijk met significands en exponenten. Het eindresultaat moet de exacte bewerking zijn, afgerond naar het doelformaat, dus het tussentijds verschuiven van bits moet voldoende informatie voor die laatste beslissing bewaren.

Tel op met een gemeenschappelijke exponent

Optellen volgt vier stappen: uitlijnen, de bewerking uitvoeren, normaliseren, afronden. Vergelijk de exponenten en verschuif de significand van de kleinere operand naar rechts met het verschil tussen de exponenten. Tel bij gelijke tekens de absolute waarden op; trek bij tegengestelde tekens de absolute waarden van elkaar af. Verschuif het resultaat naar genormaliseerde vorm en pas de exponent aan. Rond daarna af en normaliseer opnieuw als afronden een overdracht veroorzaakt.

Gebruik significands van vier bits om 0,5 + (−0,4375) te bekijken:

  1. Schrijf de operanden als 1,0002×2−1 en −1,1102×2−2.
  2. Lijn de tweede uit tot −0,1112×2−1.
  3. Trek de absolute waarden af: 1,0002−0,1112=0,0012.
  4. Normaliseer tot 1,0002×2−4, oftewel 0,0625. Er zijn geen bits ongelijk aan nul verloren gegaan, dus afronden hoeft niets te veranderen.

Cijferverlies door aftrekking kan een grote verschuiving naar links voor normalisatie vereisen. Hardware gebruikt een exponentaftrekker, een schuifschakeling voor uitlijnen, een significandopteller, een teller voor voorloopnullen en logica voor normalisatie en afronding. Optellers voor drijvendekommagetallen gebruiken gewoonlijk pipelining over meerdere cycli.

Een decimaal model laat zien waarom extra cijfers van belang zijn: met vier significante cijfers wordt 99,99 + 0,161 uitgelijnd als 9,999+0,01610 op schaal 101. Het exacte tussenresultaat is 10,01510 op die schaal. Normaliseer tot 1,00151×102 en rond af tot 1,002×102. Als je de uitgelijnde term te vroeg afkapt, verlies je informatie die nodig is om 100,2 te kiezen.

Vermenigvuldig schalen en significands

Vermenigvuldig de significands, tel de werkelijke exponenten op en pas XOR toe op de tekens. Trek bij velden met bias eenmaal de bias af:

Eresult=Ea+Eb−Bias

voordat je aanpassingen voor normalisatie doet. Twee normale significands vermenigvuldigd geven een waarde vanaf 1 tot 4, dus hun product vereist hoogstens één verschuiving naar rechts voor normalisatie. Afronding kan nog een aanpassing vereisen; ook de exponentgrenzen moeten worden gecontroleerd.

Voor 0,5 × (−0,4375) geven de binary32-exponentvelden 126 + 125 − 127 = 124, oftewel werkelijke exponent −3. Het significandproduct is 1,0002×1,1102=1,1102. De XOR van de tekens is 1, wat −1,1102×2−3=−0,21875 geeft.

Rond eenmaal af met gecombineerde vermenigvuldiging en optelling

FMA berekent a × b + c met één afronding na de volledige expressie. Afzonderlijk vermenigvuldigen en optellen rondt tweemaal af. Neem in binary32 a=1+2−23, b=1−2−23 en c = −1. Hun exacte product is 1−2−46. Een afzonderlijke vermenigvuldiging rondt dit af tot 1, zodat de optelling nul oplevert. FMA behoudt het kleine productverschil en geeft −2−46 terug.

RISC-V F levert 32 drijvendekommagetalregisters, f0 tot en met f31; D verbreedt dezelfde bank voor dubbele precisie. flw/fsw en fld/fsd verplaatsen waarden. Rekenkundige instructies zijn onder meer fadd.s, fmul.s, fdiv.s en fsqrt.s, met .d-vormen voor dubbele precisie. fmadd.s berekent een gecombineerde vermenigvuldiging en optelling. Vergelijkingen zoals flt.s schrijven 0 of 1 naar een integerregister en fcvt zet formaten of integerwaarden om.

Belangrijkste punten

  • Optellen lijnt exponenten uit voordat significands worden gecombineerd.
  • Normalisatie verandert zowel de positie van de significand als de exponent.
  • Bij vermenigvuldiging met exponentvelden met bias moet één bias worden afgetrokken.
  • Afronding kan een tweede normalisatie vereisen.
  • FMA rondt het volledige resultaat van product en optelling eenmaal af.
  • Rekenkundige bewerkingen van RISC-V F en D gebruiken een drijvendekommagetalregisterbank; vergelijkingen geven gehele waarheidswaarden terug.

5.2 Rond resultaten correct af

Een eindig formaat kan niet elk exact resultaat opslaan. Correcte afronding betekent dat je het representeerbare resultaat kiest dat de afrondingsrichting vereist, alsof de bewerking eerst exact was berekend. Elementaire rekenkundige bewerkingen, worteltrekken en FMA volgen deze regel. Payload- en tekenbits van NaN hoeven niet op alle processors identiek te zijn.

Kies een afrondingsrichting
RichtingRegel
roundTiesToEvenDichtstbijzijnde waarde; bij gelijke afstand is de laatste significandbit 0
roundTowardPositiveNaar +∞
roundTowardNegativeNaar −∞
roundTowardZeroNaar nul
roundTiesToAwayDichtstbijzijnde waarde; bij gelijke afstand van nul af

De eerste vier zijn vereist voor binaire implementaties; bij gelijke afstand naar even afronden is de standaard. Bij gelijke afstand van nul af afronden is vereist voor decimale formaten en RISC-V biedt dit ook voor binaire bewerkingen. De namen zijn RNE, RUP, RDN, RTZ en RMM; een instructie kan een modus direct selecteren of de dynamische modus in fcsr gebruiken.

Bij afronden op gehele getallen met gelijke afstand naar even wordt 2,5 gelijk aan 2 en 3,5 gelijk aan 4. Binair met significands van vier bits rondt 1,00112 af naar 1,0102 en rondt 1,01012 ook af naar 1,0102. De even bit hoort bij de behouden significand, niet bij de exponent of een weergegeven decimaal cijfer.

Bewaar bewakings-, afrondings- en plakinformatie

Bewaar na normalisatie twee extra bits na de doelsignificand: de bewakingsbit en de afrondingsbit. De plakbit is de OR van elke latere weggegooide bit. Die legt vast of die hele staart nul is.

Bij afronden naar het dichtstbijzijnde getal betekent bewakingsbit 0 dat de waarde onder de helft ligt. Bewakingsbit 1 met afrondingsbit of plakbit 1 betekent boven de helft. Bewakingsbit 1 met beide latere indicatoren 0 betekent precies halverwege. Verhoog bij een waarde precies halverwege de behouden significand alleen als de huidige lage bit 1 is.

Voor de som 8 + 0,5625 met een significand van vier bits geeft uitlijnen

1,00010012×23.

Behoud 1.000; de bewakingsbit is 1, de afrondingsbit is 0 en de plakbit is 1 omdat de resterende staart een 1 bevat. De waarde ligt boven de helft, dus verhoog tot 1,0012×23=9. Als je de plakbit weggooit, lijkt de waarde ten onrechte precies halverwege te liggen en wordt 8 gekozen.

Een plakbit geeft informatie over alle verloren bits, niet alleen over de derde bit na het behouden deel. Als tijdens het verschuiven een verloren bit eenmaal 1 is, blijft de plaktoestand voor die verzamelde staart 1.

Interpreteer fout en overloop

Voor eindige resultaten binnen het bereik heeft afronden naar het dichtstbijzijnde getal een absolute fout van hoogstens een halve ulp; gericht afronden heeft een fout van minder dan één ulp. Voor normale binary32-resultaten is de gebruikelijke relatieve grens bij afronden naar het dichtstbijzijnde getal 2−24; voor binary64 is die 2−53. Subnormale resultaten vereisen een redenering met de absolute fout, omdat hun relatieve precisie afneemt.

De afrondingsrichting bepaalt ook de resultaten bij overloop. Positieve overloop geeft +∞ bij afronden naar het dichtstbijzijnde getal of naar positief, maar de grootste eindige positieve waarde bij afronden naar nul of naar negatief. Negatieve overloop geeft het gespiegelde gedrag.

Conversies naar gehele getallen hebben eigen regels. In C kappen representeerbare typeconversies zoals (int)2.7 en (int)-2.7 af tot 2 en −2, onafhankelijk van de huidige afrondingsrichting voor drijvendekommagetallen. Controleer zowel het bereik van het doelformaat als het weggegooide fractionele deel.

Belangrijkste punten

  • Correcte afronding kiest de doelwaarde op basis van het exacte resultaat en de afrondingsrichting.
  • Bij afronden naar het dichtstbijzijnde getal kiest een waarde precies halverwege het buurgetal waarvan de behouden lage bit 0 is.
  • Bewakings- en afrondingsbit bewaren twee extra bits; de plakbit legt vast of de staart daarna iets anders dan nul bevat.
  • Een plakbit ongelijk aan nul kan een resultaat boven de helft onderscheiden van een resultaat precies halverwege.
  • De afrondingsrichting bepaalt of overloop oneindigheid of een eindige grenswaarde oplevert.

5.3 Voorspel en voorkom precisiefouten

Fouten met drijvendekommagetallen volgen vaak direct uit de eindige afstand tussen waarden. Onderscheid de fout die al in opgeslagen operanden zit van de afronding door een bewerking en van informatie die tijdens conversie verloren gaat.

Herken representatiefouten

Een vereenvoudigde breuk heeft precies dan een eindige binaire ontwikkeling als de noemer een macht van twee is. Waarden zoals 0,5, 0,25 en 0,375 zijn exact. De ontwikkeling van 0,1 herhaalt zich, dus binary32 slaat 0x3DCCCCCD op, ongeveer 0,10000000149011612. Ook binary64 slaat een benadering op.

Daardoor levert binary64 0.1 + 0.2 de uitkomst 0,30000000000000004 op, anders dan de opgeslagen waarde die het dichtst bij 0,3 ligt. Een kort weergegeven resultaat zoals 0.1 kan het kortste decimale getal zijn dat bij terugconversie dezelfde opgeslagen bits oplevert; het bewijst niet dat de waarde exact is.

Gebruik voor benaderde eindige resultaten een tolerantie die bij het probleem past, bijvoorbeeld

∣a−b∣≤max⁡(atol,rtolmax⁡(∣a∣,∣b∣)).

De absolute tolerantie behandelt waarden dicht bij nul; de relatieve tolerantie schaalt mee met de absolute waarde. De toleranties moeten passen bij de berekening en de aanvaardbare fout, niet alleen bij het aantal weergegeven cijfers.

Let op hoe optellen een kleine invoer verliest

Absorptie treedt bij afronden naar het dichtstbijzijnde getal op wanneer een kleine optelterm een grote operand niet naar het volgende representeerbare buurgetal kan verplaatsen. In binary32 rondt 16.777.216 + 1 terug af naar 16.777.216: de buurwaarden liggen twee uit elkaar en bij gelijke afstand wordt de even significand gekozen. Een teller van het type float die 1 optelt, kan daardoor stoppen met vooruitgaan.

Een andere optelvolgorde kan het antwoord veranderen. Met binary32 x = −1,5 × 10³⁸, y = 1,5 × 10³⁸ en z = 1 geeft (x + y) + z de uitkomst 1. Maar y + z rondt af naar y, dus x + (y + z) geeft nul. Optellen is niet associatief. Parallelle reducties kunnen hun groepering veranderen wanneer het aantal threads verandert, wat de laatste bits beïnvloedt.

Herhaald afronden stapelt zich ook op: als je binary32-waarde 0,1 tien miljoen keer optelt bij een binary32-totaal, krijg je 1.087.937 in plaats van 1.000.000. Een bredere accumulator vermindert het verlies door afronding. Kleinere absolute waarden eerst optellen kan ook bijdragen behouden die een groot lopend totaal zou absorberen.

Onderscheid cijferverlies van niet-exact aftrekken

Cijferverlies door aftrekking verwijdert gemeenschappelijke voorste cijfers van bijna gelijke operanden. De aftrekking zelf kan exact zijn terwijl eerdere operandfouten groot worden ten opzichte van het kleine antwoord. In binary32 wordt 1,0000001 opgeslagen als 1+2−23. Daar 1 van aftrekken geeft ongeveer 1,1920929×10−7 in plaats van 1,0×10−7, een relatieve fout van ongeveer 19%.

Controleer conversies en formaatkeuzes

binary64 stelt elk geheel getal van 32 bits exact voor. binary32 doet dat niet: 16.777.217 rondt bij gelijke afstand naar even af naar 16.777.216. Boven 253 mist ook binary64 sommige gehele getallen. Het omzetten van een drijvendekommawaarde naar een kleiner type voor gehele getallen kan volledig buiten het bereik vallen.

Tijdens de eerste vlucht van Ariane 5 in 1996 schakelde een conversie buiten het bereik van een drijvendekommagetal van 64 bits naar een geheel getal met teken van 16 bits de traagheidsreferentiesystemen uit en droeg die bij aan het verlies van de raket. Bij het falen van het Patriot-systeem in 1991 in Dhahran zorgde een afgeknotte vastekommabenadering van 0,1 na ongeveer 100 uur voor een opgelopen tijdfout van ongeveer 0,34 s, waardoor het volgvenster ongeveer 687 m verschoof. Dit was een representatiefout met vaste komma, geen IEEE-drijvendekommabewerking.

Kies binary64 voor een grotere precisie bij algemeen gebruik, binary32 wanneer het kleinere geheugengebruik bij de taak past en binary16 of bfloat16 voor geschikte taken met lage precisie. bfloat16 heeft acht exponentbits en zeven fractiebits. Exacte geldbedragen horen in gehele aantallen van de kleinste munteenheid of in een decimaal type.

Belangrijkste punten

  • Een eindige binaire breuk vereist na vereenvoudiging een noemer die een macht van twee is.
  • Een korte decimale weergave kan een representatiefout verbergen.
  • Absorptie en herhaald afronden kunnen sommen veranderen en tellers met drijvendekommagetallen laten stoppen.
  • Optellen met drijvendekommagetallen is niet associatief, dus de groepering beïnvloedt de reproduceerbaarheid.
  • Cijferverlies door aftrekking maakt een eerdere operandfout groot ten opzichte van een klein verschil.
  • Conversies vereisen controles op zowel precisie als bereik.
  • De formaatkeuze hangt af van de vereiste precisie, het bereik en de opslagkosten.

Rekenen met computers: voorbeelden

5 Walkthroughs

1

Volg een opteller en beoordeel het resultaat

12 stappen
Volg optellen en aftrekken door een 8-bitsopteller en onderscheid vervolgens de signalen voor bereikcontroles met en zonder teken.
  1. 1
    IntroductieEerst de bits, dan de interpretatie

    Een 8-bitsopteller bewaart acht sombits en produceert een uitgaande overdracht. Dezelfde sombits kunnen een waarde zonder teken of een tweecomplementwaarde met teken voorstellen. Of ze gelijk zijn aan het bedoelde resultaat, hangt af van die interpretatie.

    Begin met 58 + 27. Beide waarden passen bij beide interpretaties, dus je kunt eerst de schakeling volgen en daarna de vragen over het bereik stellen.

  2. 2
    UitlegEén positie combineert drie bits

    Een volledige opteller combineert twee ingangsbits en de inkomende overdracht. De som is de XOR ervan. De uitgaande overdracht is 1 als minstens twee van de drie ingangen 1 zijn.

    In een ripple-carryopteller wordt die uitgaande overdracht de inkomende overdracht van de volgende positie. Alleen de laagste positie ontvangt de initiële overdracht rechtstreeks. Bij gewoon optellen is de initiële overdracht nul.

  3. 3
    VoorbeeldWerk de lage kolommen uit

    Schrijf 58 als 0011 1010 en 27 als 0001 1011. Vanaf rechts telt bit 0 de waarden 0 en 1 op met overdracht 0, wat som 1 en overdracht 0 geeft.

    Bit 1 telt 1 en 1 op en geeft som 0 en overdracht 1. Bit 2 telt vervolgens 0 en 0 op met die overdracht en geeft som 1 en overdracht 0. De overdracht moet worden meegenomen waar die aankomt, ook als beide operandbits nul zijn.

  4. 4
    VoorbeeldMaak de som af

    Ga verder met de hogere posities. Bit 3 telt twee bits met waarde 1 op en geeft som 0 en overdracht 1. Bit 4 combineert twee bits met waarde 1 met die overdracht en geeft som 1 en overdracht 1. Bit 5 combineert 1, 0 en 1 en geeft som 0 en overdracht 1. Bit 6 ontvangt die overdracht en geeft 1.

    Het volledige resultaat is 0101 0101, oftewel 85. De laatste overdracht is 0 en het resultaat met teken blijft positief.

  5. 5
    UitdagingKies de uitbreiding

    Een operand met teken van 4 bits 1011 moet bij een operand van 8 bits worden opgeteld. Welk 8-bitsbitpatroon behoudt de waarde en wat zou nuluitbreiding doen?

    ---reveal---

    Tekenuitbreiding geeft 1111 1011, nog steeds −5. Nuluitbreiding geeft 0000 1011, oftewel +11, en verandert de invoer vóór de optelling. De uitbreiding volgt uit de interpretatie van de operand, niet uit de breedte van de andere operand.

  6. 6
    VoorbeeldGebruik de opteller opnieuw voor aftrekken

    Bereken nu 58 − 27. Inverteer 0001 1011 tot 1110 0100 en stel de initiële overdracht in op 1. Tel 0011 1010 + 1110 0100 + 1 op om 0001 1111 te krijgen, met uitgaande overdracht 1.

    Het resultaat is 31. Voor deze aftrekking zonder teken betekent uitgaande overdracht 1 dat er geen leenbit is. Als je de tweede operand zonder de initiële 1 zou inverteren, zou je 30 krijgen.

  7. 7
    KernpuntOverdracht en overloop beantwoorden verschillende vragen

    De uitgaande overdracht geeft aan of een optelling zonder teken de beschikbare bits overschrijdt. Overloop met teken toetst het bereik met teken: opteltermen met hetzelfde teken mogen geen resultaat met het tegengestelde teken opleveren.

    Hardware berekent overloop met teken door XOR toe te passen op de inkomende en uitgaande overdracht van de tekenbit. Je kunt overdracht zonder overloop met teken hebben, overloop met teken zonder overdracht, beide of geen van beide.

  8. 8
    VoorbeeldEen geldige som zonder teken kan met teken mislukken

    Tel 90 en 60 op in 8 bits. Het resultaat is 1001 0110, met uitgaande overdracht 0. De waarde 150 zonder teken past in het bereik van 0 tot en met 255.

    Beide ingangen met teken zijn positief, maar de opgeslagen waarde met teken is −106. De overloop met teken is daarom 1. Het opgeslagen patroon is nog steeds de lage acht bits van 150; het doelformaat met teken kan het exacte resultaat niet bevatten.

  9. 9
    UitdagingLees beide signalen

    Een 8-bitsopteller telt 1111 0110 en 0001 0100 op en produceert 0000 1010 met uitgaande overdracht 1. Wat vertellen de interpretaties zonder en met teken je?

    ---reveal---

    Zonder teken loopt 246 + 20 = 266 over en wordt 10 opgeslagen. Met teken past −10 + 20 = 10, dus de overloop met teken is 0. Een optelling met tegengestelde tekens kan niet buiten het bereik met teken vallen, ook al heeft deze bitberekening een uitgaande overdracht.

  10. 10
    VerbandHet programma bepaalt hoe het reageert

    RISC-V add geeft lage bits terug zonder vlaggen of synchrone uitzondering bij overloop. Een controle zonder teken kan de som met een ingang vergelijken; een kleiner resultaat wijst op omslag. Een controle met teken moet in plaats daarvan relaties met teken gebruiken.

    Taalregels zijn ook van belang. Optellen zonder teken in C slaat om, terwijl overloop met teken ongedefinieerd is. Optellen van gehele getallen in Java slaat om en gehele getallen in Python groeien. Alleen een correct overzicht van de bits bepaalt het gedrag op taalniveau niet.

  11. 11
    UitdagingVerbind aftrekken met het bereik met teken

    Een 8-bits-ALU berekent 100 − (−35). Welke opgeslagen waarde met teken levert dat op en bij welke interpretatie moet overloop worden gemeld?

    ---reveal---

    Het exacte resultaat met teken is 135, waarvan de lage acht bits 1000 0111 zijn, geïnterpreteerd als −121. De aftrekking met teken loopt over omdat de ingangen verschillende tekens hebben en het teken van het resultaat verschilt van dat van 100. Als je het tweede patroon daarentegen leest als 221 zonder teken, krijg je 100 − 221, waarvoor een leenbit nodig is.

  12. 12
    SamenvattingKies een bereiktest na het volgen van de bits

    Optellen en aftrekken delen volledige optellers, waarbij inverteren en een initiële overdracht aftrekken selecteren. Breid elke ingang vóór de bewerking uit volgens de betekenis ervan.

    Controleer daarna overdracht of leenbit voor waarden zonder teken en overloop voor waarden met teken. Pas vervolgens de regels van processor en taal toe. Verzadigingsrekenkunde maakt een andere keuze: die begrenst een resultaat buiten het bereik op een grenswaarde in plaats van omgeslagen lage bits te bewaren.

2

Bouw een ALU die correct vergelijkt

14 stappen
Selecteer rekenkundige en logische resultaten, corrigeer kleiner dan met teken na overloop en verkort het overdrachtspad.

Sla deze les op om elke Walkthrough stap voor stap te volgen.

  1. 1
    IntroductieMeerdere resultaten, één geselecteerde uitgang
  2. 2
    UitlegHerhaal een 1-bits-slice
  3. 3
    VoorbeeldDecodeer de besturing van één ontwerp
  4. 4
    UitdagingBouw NOR met dezelfde poorten
  5. 5
    VerbandVerschuif over geselecteerde afstanden
  6. 6
    UitlegReduceer het resultaat tot Zero
  7. 7
    VoorbeeldBekijk een misleidend teken van het verschil
  8. 8
    UitdagingInterpreteer dezelfde patronen op twee manieren
  9. 9
    UitlegBeschrijf een overdracht voordat die aankomt
  10. 10
    VoorbeeldVoorspel de laatste overdracht van een blok
  11. 11
    UitdagingEen gegenereerde overdracht wordt gestopt
  12. 12
    KernpuntGebruik poorten om de wachttijd te verkorten
  13. 13
    UitdagingHoud vergelijking correct na een snellere opteller
  14. 14
    SamenvattingOnderscheid selectie, interpretatie en snelheid
3

Volg een product en een quotiënt door de hardware

18 stappen
Volg vermenigvuldiging zonder teken, Booth-hercodering en deling met herstel van de rest en pas daarna tekenregels en breedtecontroles toe.

Sla deze les op om elke Walkthrough stap voor stap te volgen.

  1. 1
    IntroductieProducten combineren rijen; quotiënten ontstaan uit beslissingen
  2. 2
    VoorbeeldKies deelproducten voor 9 maal 6
  3. 3
    VoorbeeldMaak de geselecteerde bijdragen af
  4. 4
    KernpuntBewaar de overdracht van de compacte vermenigvuldiger
  5. 5
    UitdagingControleer een smal product zonder teken
  6. 6
    UitlegBewaar de absolute waarde van een getal met teken in bits zonder teken
  7. 7
    UitlegStel het register van Booth in
  8. 8
    VoorbeeldVoer de eerste twee stappen van Booth uit
  9. 9
    VoorbeeldMaak het product met teken af
  10. 10
    UitdagingTest na vermenigvuldiging of het resultaat met teken past
  11. 11
    VerbandBreng rijen terug in plaats van elke som af te maken
  12. 12
    VoorbeeldHaal de eerste deeltalbits naar beneden
  13. 13
    VoorbeeldMaak quotiënt en rest af
  14. 14
    UitdagingPas de tekenregel voor de rest toe
  15. 15
    TipGebruik de leenbit voor de proefaftrekking
  16. 16
    UitdagingVerbind een kortere deling met vermenigvuldiging
  17. 17
    VerbandLees bijzondere RISC-V-resultaten
  18. 18
    SamenvattingControleer de invariant en het doelformaat
4

Decodeer drijvendekommabits voordat je gaat rekenen

12 stappen
Codeer een normale waarde, leg het verband tussen afstand en precisie en classificeer nullen, subnormale getallen, oneindigheden en NaN-waarden.

Sla deze les op om elke Walkthrough stap voor stap te volgen.

  1. 1
    IntroductieEen schaal en een beperkt aantal cijfers
  2. 2
    VoorbeeldNormaliseer de absolute waarde
  3. 3
    VoorbeeldTel de bias op en stel de velden samen
  4. 4
    UitdagingDecodeer een nieuwe normale waarde
  5. 5
    UitlegBereik garandeert geen detail bij gehele getallen
  6. 6
    UitlegClassificeer eerst gereserveerde exponenten
  7. 7
    VoorbeeldDecodeer een subnormaal getal zonder verborgen 1
  8. 8
    KernpuntEen heel klein exact resultaat heeft geen onderloopvlag nodig
  9. 9
    UitdagingOnderscheid oneindigheid van een ongeldig resultaat
  10. 10
    TipTest op NaN zonder gelijkheid
  11. 11
    UitdagingVerbind codering met geleidelijke onderloop
  12. 12
    SamenvattingInterpreteer velden voordat je een waarde bepaalt
5

Lijn uit, rond af en verklaar precisieverlies

18 stappen
Volg bewerkingen met drijvendekommagetallen, gebruik informatie uit bewakings-, afrondings- en plakbits en voorspel absorptie, cijferverlies door aftrekking en conversiefouten.

Sla deze les op om elke Walkthrough stap voor stap te volgen.

  1. 1
    IntroductieBewaar informatie tot de afrondingsbeslissing
  2. 2
    VoorbeeldLijn een optelling uit
  3. 3
    VoorbeeldNormaliseer voordat je het buurgetal kiest
  4. 4
    UitlegVermenigvuldig met één biascorrectie
  5. 5
    UitdagingCorrigeer een exponentberekening
  6. 6
    UitlegEen even behouden bit bepaalt de keuze bij gelijke afstand
  7. 7
    VoorbeeldVolg bewakings-, afrondings- en plakbit
  8. 8
    UitdagingOnderscheid gelijke afstand van een nabijgelegen waarde
  9. 9
    VerbandDe afrondingsrichting verandert negatieve resultaten
  10. 10
    KernpuntFMA bewaart een product tot na de optelling
  11. 11
    UitlegDecimale invoer kan al afgerond binnenkomen
  12. 12
    VoorbeeldEen teller bereikt een grens door de afstand tussen waarden
  13. 13
    UitdagingVoorspel een veranderde groepering
  14. 14
    KernpuntExact aftrekken kan een eerdere fout blootleggen
  15. 15
    TipKies een tolerantie die dicht bij nul werkt
  16. 16
    UitdagingControleer een heen- en terugconversie van een geheel getal
  17. 17
    UitdagingCombineer uitlijnen, plakbit en absorptie
  18. 18
    SamenvattingBepaal waar informatie verloren gaat

Rekenen met computers: oefenvragen

60 Oefenvragen in 6 sets

Set 1: Gehele getallen optellen en aftrekken en ALU-beslissingen10 Oefenvragen

Vraag 1 van 10

Een volledige opteller ontvangt operandbits 1 en 0 met inkomende overdracht 1. Welke sombit en uitgaande overdracht produceert die?
  1. Som 1, overdracht 0
  2. Som 1, overdracht 1
  3. Som 0, overdracht 1
  4. Som 0, overdracht 0
Toon antwoordVerberg antwoord
Antwoord: C
De drie ingangen tellen op tot twee, binair geschreven als 10, dus de sombit is 0 en de overdracht is 1. Een sombit van 1 zou ontstaan als je de inkomende overdracht negeert en alleen XOR op de twee operandbits toepast; een volledige opteller moet alle drie de ingangen meenemen.

Vraag 2 van 10

Een 8-bitsaftrekschakeling inverteert de tweede operand, maar laat de initiële inkomende overdracht per ongeluk op 0 staan. Welk resultaat met teken produceert die voor 42 − 17?
  1. 24
  2. 25
  3. 26
  4. −25
Toon antwoordVerberg antwoord
Antwoord: A
Inverteren zonder de initiële 1 berekent a − b − 1, dus deze schakeling geeft 42 − 17 − 1 = 24 terug. De bedoelde 25 vereist de extra inkomende overdracht die het tweecomplement van 17 voltooit; inverteren alleen maakt een getal niet negatief.

Vraag 3 van 10

Wat zijn de uitgaande overdracht en de overloop met teken bij de 8-bitsoptelling 118 + 19?
  1. Overdracht 1, overloop 0
  2. Overdracht 0, overloop 0
  3. Overdracht 1, overloop 1
  4. Overdracht 0, overloop 1
Toon antwoordVerberg antwoord
Antwoord: D
De som is 137, onder het maximum 255 zonder teken, dus de uitgaande overdracht is 0. Het opgeslagen patroon heeft tekenbit 1 ondanks twee positieve ingangen met teken, dus de overloop met teken is 1; als je alleen het bereik zonder teken gebruikt, zou je ten onrechte concluderen dat beide interpretaties passen.

Vraag 4 van 10

Welk ALU-onderdeel selecteert één resultaat uit de mogelijke AND-, OR- en optelleruitgangen?
  1. De overdrachtsketen
  2. De uitgangsmultiplexer
  3. De tekenuitbreidingsschakeling
  4. Het operandregister
Toon antwoordVerberg antwoord
Antwoord: B
De uitgangsmultiplexer geeft één mogelijk resultaat door volgens de besturingssignalen voor de bewerking. De overdrachtsketen helpt de som berekenen maar kiest niet tussen rekenkundige en logische paden, terwijl het operandregister een waarde bewaart in plaats van een ALU-resultaat te selecteren.

Vraag 5 van 10

Welk 8-bitsbitpatroon behoudt de waarde van de operand met teken 1101 van 4 bits?
  1. 0000 1101
  2. 1111 1101
  3. 1000 1101
  4. 0000 0011
Toon antwoordVerberg antwoord
Antwoord: B
De invoer stelt −3 voor, dus tekenuitbreiding kopieert de voorste 1 naar elke toegevoegde hoge bit. Het resultaat 1111 1101 stelt nog steeds −3 voor; nuluitbreiding tot 0000 1101 zou het oorspronkelijke patroon interpreteren als 13 zonder teken en de waarde met teken veranderen.

Vraag 6 van 10

Welke resultaten over de volledige breedte geven slt met teken en sltu zonder teken voor de 4-bitsingangen a = 0101 en b = 1010?
  1. slt: 0001; sltu: 0000
  2. slt: 0001; sltu: 0001
  3. slt: 0000; sltu: 0000
  4. slt: 0000; sltu: 0001
Toon antwoordVerberg antwoord
Antwoord: D
Met teken zijn de waarden 5 en −6, dus 5 < −6 is onwaar en slt geeft 0 terug. Zonder teken zijn de waarden 5 en 10, dus sltu geeft 1 terug; als je op beide instructies dezelfde interpretatie met teken toepast, mis je waarom dezelfde bits verschillende vergelijkingen opleveren.

Vraag 7 van 10

Wat geeft verzadigend optellen zonder teken in 8 bits terug voor 220 + 70?
  1. 255
  2. 34
  3. 254
  4. 290
Toon antwoordVerberg antwoord
Antwoord: A
De exacte som 290 ligt boven het maximum zonder teken voor 8 bits, dus verzadiging begrenst die op 255. Als je alleen de lage acht bits bewaart, krijg je 34, maar dat is omslaande rekenkunde; verzadiging behoudt een grenswaarde in plaats van de rest modulo 256.

Vraag 8 van 10

Een 64-bits-barrelshifter gebruikt verschuivingsniveaus met machten van twee. Welke niveaus worden geselecteerd voor een verschuiving van 37?
  1. 32, 4 en 2
  2. 16, 8, 4 en 1
  3. 32, 4 en 1
  4. 32, 8 en 1
Toon antwoordVerberg antwoord
Antwoord: C
De geselecteerde afstanden moeten samen 37 zijn en 32 + 4 + 1 voldoet daaraan. De keuze 32, 4 en 2 geeft 38, een verschuiving die er één naast zit; de niveauafstanden stellen de binaire ontbinding van de gevraagde afstand voor, niet de bitposities van de verschoven waarde.

Vraag 9 van 10

Een 8-bitsroutine met omslag berekent (115 + 29) − 40 en gebruikt daarna het eindresultaat met teken. Wat is het resultaat en bij welke bewerkingen trad overloop met teken op?
  1. 104; beide bewerkingen lopen over met teken
  2. 104; alleen de optelling loopt over met teken
  3. −152; alleen de aftrekking loopt over met teken
  4. −112; geen van beide bewerkingen loopt over met teken
Toon antwoordVerberg antwoord
Antwoord: A
De eerste som 144 wordt opgeslagen als −112 en loopt over met teken. Als je 40 aftrekt van −112, krijg je −152, wat omslaat naar 104 en ook overloopt met teken; modulaire rekenkunde levert de passende eindwaarde weer op, hoewel je de tweede overloop zou missen als je alleen de eerste optelling controleert.

Vraag 10 van 10

Een 8-bits-ALU trekt twee identieke patronen 1001 0110 van elkaar af. Wat zijn het resultaat en de Zero-uitgang?
  1. Resultaat 0000 0000, Zero 0
  2. Resultaat 1111 1111, Zero 0
  3. Resultaat 0000 0000, Zero 1
  4. Resultaat 0000 0001, Zero 0
Toon antwoordVerberg antwoord
Antwoord: C
Een bitpatroon van zichzelf aftrekken produceert resultaatbits die allemaal 0 zijn en de NOR-reductie stelt Zero daarom in op 1. Een resultaat waarvan alle bits 1 zijn, zou ontstaan als je de tweede operand inverteert maar de initiële +1 vergeet, waardoor je één minder dan het bedoelde verschil berekent.
Set 2: Overdrachtsnetwerken en productvorming10 Oefenvragen

Sla deze les op om elk antwoord te zien en elke set te oefenen.

Vraag 1 van 10

Wat zijn bij OR-doorgifte de generatie en doorgifte voor operandbits 1 en 1?
  1. Generatie 1, doorgifte 0
  2. Generatie 1, doorgifte 1
  3. Generatie 0, doorgifte 1
  4. Generatie 0, doorgifte 0
Toon antwoordVerberg antwoord

Sla deze les op om dit antwoord te zien.

Vraag 2 van 10

Hoeveel bits kan het volledige product zonder teken van een operand van 7 bits en een operand van 9 bits vereisen?
  1. 9 bits
  2. 15 bits
  3. 18 bits
  4. 16 bits
Toon antwoordVerberg antwoord

Sla deze les op om dit antwoord te zien.

Vraag 3 van 10

Welk volledig 8-bitsproduct en behouden laag 4-bitsresultaat geeft 11 × 3 zonder teken?
  1. Volledig 0010 0001; laag 0001
  2. Volledig 0001 0001; laag 0001
  3. Volledig 0010 0001; laag 0010
  4. Volledig 0001 1110; laag 1110
Toon antwoordVerberg antwoord

Sla deze les op om dit antwoord te zien.

Vraag 4 van 10

Een blok van 4 bits heeft groepsoverdrachtsgeneratie 0 en groepsoverdrachtsdoorgifte 1. Welke uitgaande overdracht ontstaat bij inkomende overdracht 0 en bij inkomende overdracht 1?
  1. 1 bij inkomende overdracht 0; 1 bij inkomende overdracht 1
  2. 0 bij inkomende overdracht 0; 0 bij inkomende overdracht 1
  3. 0 bij inkomende overdracht 0; 1 bij inkomende overdracht 1
  4. 1 bij inkomende overdracht 0; 0 bij inkomende overdracht 1
Toon antwoordVerberg antwoord

Sla deze les op om dit antwoord te zien.

Vraag 5 van 10

Wat doet een niveau met opgeslagen overdracht met drie deelproductwoorden?
  1. Produceert één woord met een volledige overdrachtsketen
  2. Produceert twee woorden na een volledige overdrachtsketen
  3. Produceert drie woorden zonder volledige overdrachtsketen
  4. Produceert twee woorden zonder volledige overdrachtsketen
Toon antwoordVerberg antwoord

Sla deze les op om dit antwoord te zien.

Vraag 6 van 10

Bij een bereikcontrole van 32 bits is de index −2 en de niet-negatieve lengte binnen het bereik met teken 20. Wat meldt een vergelijking zonder teken van index ≥ lengte?
  1. Onwaar, dus de index wordt geaccepteerd
  2. Waar, dus de index wordt afgewezen
  3. Waar, want −2 met teken is groter dan 20
  4. Onwaar, want −2 wordt begrensd op nul
Toon antwoordVerberg antwoord

Sla deze les op om dit antwoord te zien.

Vraag 7 van 10

Een RV32-routine heeft het volledige product nodig van een operand zonder teken maal een andere operand zonder teken. Welke resultaten moet die combineren?
  1. mulh als hoge helft en mul als lage helft
  2. mul als hoge helft en mulhu als lage helft
  3. mulhu als hoge helft en mul als lage helft
  4. mulhsu als hoge helft en mulh als lage helft
Toon antwoordVerberg antwoord

Sla deze les op om dit antwoord te zien.

Vraag 8 van 10

Een 4-bitsblok met vooruitberekening en OR-doorgifte telt a = 1001 en b = 0111 op met initiële overdracht 0. Wat zijn de groepsoverdrachtsgeneratie, groepsoverdrachtsdoorgifte en laatste overdracht?
  1. G = 1, P = 1, overdracht = 1
  2. G = 0, P = 1, overdracht = 0
  3. G = 1, P = 0, overdracht = 1
  4. G = 0, P = 1, overdracht = 1
Toon antwoordVerberg antwoord

Sla deze les op om dit antwoord te zien.

Vraag 9 van 10

Een 4-bitsvermenigvuldiger ontvangt patronen 1110 en 0011. Welke hoge helften ontstaan bij vermenigvuldiging met en zonder teken en past een van de producten in het bijbehorende 4-bitsbereik?
  1. Met teken hoog 1111, past niet; zonder teken hoog 0010, past
  2. Met teken hoog 1111, past; zonder teken hoog 0010, past niet
  3. Met teken hoog 0000, past; zonder teken hoog 0010, past niet
  4. Met teken hoog 1111, past; zonder teken hoog 0000, past
Toon antwoordVerberg antwoord

Sla deze les op om dit antwoord te zien.

Vraag 10 van 10

Een aftrekking met teken loopt over en heeft opgeslagen tekenbit 0. Welk resultaat moet de ALU voor kleiner dan met teken produceren?
  1. 0
  2. De uitgaande overdrachtsbit
  3. De Zero-uitgang
  4. 1
Toon antwoordVerberg antwoord

Sla deze les op om dit antwoord te zien.

Set 3: Producten met teken, deling en kortere rekenwijzen10 Oefenvragen

Sla deze les op om elk antwoord te zien en elke set te oefenen.

Vraag 1 van 10

Welke grootheid levert het teken van een rest ongelijk aan nul bij deling met teken en afkappen?
  1. De deler
  2. Het quotiënt
  3. De operand met de kleinste absolute waarde
  4. Het deeltal
Toon antwoordVerberg antwoord

Sla deze les op om dit antwoord te zien.

Vraag 2 van 10

Welk quotiënt en welke rest geeft RISC-V-deling met teken voor 23 gedeeld door −6?
  1. Quotiënt −4, rest −1
  2. Quotiënt −3, rest 5
  3. Quotiënt −3, rest −5
  4. Quotiënt 3, rest 5
Toon antwoordVerberg antwoord

Sla deze les op om dit antwoord te zien.

Vraag 3 van 10

Bij een stap van Booth is A = 0, het vermenigvuldigtal = −7 en het lage bitpaar 10. Welke accumulatorwaarde is vóór het verschuiven nodig?
  1. −7
  2. 0
  3. +7
  4. −1
Toon antwoordVerberg antwoord

Sla deze les op om dit antwoord te zien.

Vraag 4 van 10

De optelling in de hoge helft van een compacte vermenigvuldiger zonder teken produceert overdracht 1. Waar moet die overdracht terechtkomen bij de volgende gecombineerde verschuiving naar rechts?
  1. Op de hoogste positie van de hoge helft
  2. Op de lage positie van de vermenigvuldiger
  3. In de lage inkomende overdracht van de volgende stap
  4. Volledig buiten het opgeslagen product
Toon antwoordVerberg antwoord

Sla deze les op om dit antwoord te zien.

Vraag 5 van 10

Een RV32-routine berekent q = div(a, b), r = rem(a, b) en daarna q × b + r, waarbij het product kan omslaan. Wat gebeurt er voor a = −2³¹ en b = −1?
  1. q = −2³¹, r = 0; reconstructie geeft 2³¹ − 1
  2. q = 2³¹ − 1, r = −1; reconstructie geeft −2³¹
  3. q = −2³¹, r = 0; reconstructie geeft −2³¹
  4. q = 2³¹, r = 0; reconstructie geeft −2³¹
Toon antwoordVerberg antwoord

Sla deze les op om dit antwoord te zien.

Vraag 6 van 10

Een deler van vier bits met herstel van de rest heeft vóór een proefaftrekking gedeeltelijke rest 2 en deler 11. Welk proefpatroon en welke actie zijn nodig?
  1. Proef 0111; behoud en schrijf 1
  2. Proef 1001; herstel en schrijf 0
  3. Proef 1001; behoud en schrijf 1
  4. Proef 0111; herstel en schrijf 0
Toon antwoordVerberg antwoord

Sla deze les op om dit antwoord te zien.

Vraag 7 van 10

Een 4-bitsimplementatie van Booth gebruikt een 5-bitsaccumulator voor vermenigvuldigtal −8 en vermenigvuldiger 1. Wat zijn de eerste aanpassing van de accumulator en het uiteindelijke 8-bitsproduct?
  1. Eerst −8 (11000); product 1111 1000
  2. Eerst +8 (01000); product 1111 1000
  3. Eerst +8 (01000); product 0000 1000
  4. Eerst −8 (11000); product 0000 1000
Toon antwoordVerberg antwoord

Sla deze les op om dit antwoord te zien.

Vraag 8 van 10

Een routine met teken vervangt deling van −29 door 8 met afkappen door een verschuiving naar rechts. Welke correctiewaarde en welk verschoven resultaat behouden het quotiënt?
  1. Tel 7 op en verschuif daarna tot −3
  2. Tel 0 op en verschuif daarna tot −4
  3. Tel 3 op en verschuif daarna tot −4
  4. Tel 8 op en verschuif daarna tot −2
Toon antwoordVerberg antwoord

Sla deze les op om dit antwoord te zien.

Vraag 9 van 10

Een vermenigvuldiger met pipelining heeft een latentie van vier cycli en accepteert elke cyclus één nieuwe vermenigvuldiging. Wanneer kan een tweede onafhankelijke vermenigvuldiging starten nadat de eerste is gestart?
  1. Vier cycli later
  2. Drie cycli later
  3. Twee cycli later
  4. Eén cyclus later
Toon antwoordVerberg antwoord

Sla deze les op om dit antwoord te zien.

Vraag 10 van 10

Welke expressie met schuiven en optellen is gelijk aan 12x als alle tussenresultaten passen en de taal de verschuivingen toestaat?
  1. (x << 3) + (x << 2)
  2. (x << 3) + (x << 1)
  3. (x << 4) + (x << 2)
  4. (x << 3) + x
Toon antwoordVerberg antwoord

Sla deze les op om dit antwoord te zien.

Set 4: Drijvendekommavelden en uitzonderlijke waarden10 Oefenvragen

Sla deze les op om elk antwoord te zien en elke set te oefenen.

Vraag 1 van 10

Welke werkelijke exponent codeert een normaal binary32-exponentveld met waarde 123?
  1. −4
  2. 4
  3. −3
  4. 123
Toon antwoordVerberg antwoord

Sla deze les op om dit antwoord te zien.

Vraag 2 van 10

Wat stelt een binary32-patroon voor met een exponent die geheel uit enen bestaat en een fractie ongelijk aan nul?
  1. Een subnormaal getal
  2. Oneindigheid
  3. NaN
  4. Een normale waarde
Toon antwoordVerberg antwoord

Sla deze les op om dit antwoord te zien.

Vraag 3 van 10

Een normale binary32-waarde heeft teken 1, exponentveld 125 en fractie 101 gevolgd door nullen. Wat is de waarde?
  1. −0,15625
  2. −0,40625
  3. −1,625
  4. −0,8125
Toon antwoordVerberg antwoord

Sla deze les op om dit antwoord te zien.

Vraag 4 van 10

Welk binary32-teken, exponentveld en begin van de fractie coderen −10,5?
  1. Teken 1; exponent 130; fractie 10101…
  2. Teken 1; exponent 124; fractie 0101…
  3. Teken 0; exponent 130; fractie 0101…
  4. Teken 1; exponent 130; fractie 0101…
Toon antwoordVerberg antwoord

Sla deze les op om dit antwoord te zien.

Vraag 5 van 10

Wat is de waarde van het positieve subnormale binary32-patroon 0x00000008?
  1. 2⁻¹⁴⁹
  2. 2⁻¹⁴⁷
  3. 2⁻¹⁴⁶
  4. 2⁻¹²⁶
Toon antwoordVerberg antwoord

Sla deze les op om dit antwoord te zien.

Vraag 6 van 10

Het product van twee positieve normale drijvendekommasignificands is 11,01₂ bij een initiële werkelijke exponent van 4. Welk genormaliseerd product ontstaat vóór afronding?
  1. 1,101₂ × 2⁵
  2. 1,101₂ × 2³
  3. 1,101₂ × 2⁴
  4. 1,010₂ × 2⁵
Toon antwoordVerberg antwoord

Sla deze les op om dit antwoord te zien.

Vraag 7 van 10

Twee positieve normale binary32-waarden zijn 2⁻⁸⁰ en 2⁻⁶⁰. Hun exacte product is representeerbaar in binary32. Welke resultaatklasse en onderloopvlag ontstaan bij de standaardafhandeling?
  1. Subnormaal; onderloopvlag gezet
  2. Normaal; onderloopvlag niet gezet
  3. Nul; onderloopvlag gezet
  4. Subnormaal; onderloopvlag niet gezet
Toon antwoordVerberg antwoord

Sla deze les op om dit antwoord te zien.

Vraag 8 van 10

Een binary32-resultaat wordt bij de standaardafhandeling berekend als (−6,0)/(−0,0) en daarna op gelijkheid met zichzelf vergeleken. Welke waarde, nieuw gezette vlag en uitkomst van de gelijkheidstest ontstaan?
  1. −∞; deling door nul; waar
  2. +∞; deling door nul; waar
  3. +∞; ongeldige bewerking; onwaar
  4. NaN; ongeldige bewerking; onwaar
Toon antwoordVerberg antwoord

Sla deze les op om dit antwoord te zien.

Vraag 9 van 10

Een binary32-formaat wordt vervangen door een formaat met hetzelfde exponentveld maar twee fractiebits minder. Hoe verandert de afstand bij absolute waarden vanaf 2¹⁰ tot waarden onder 2¹¹?
  1. Van 2⁻¹³ naar 2⁻¹⁵
  2. Van 2⁻¹⁰ naar 2⁻⁸
  3. Van 2⁻¹³ naar 2⁻¹¹
  4. Van 2⁻¹³ naar 2⁻¹²
Toon antwoordVerberg antwoord

Sla deze les op om dit antwoord te zien.

Vraag 10 van 10

Welke categorie RISC-V-instructies schrijft het resultaat naar een integerregister, hoewel die drijvendekomma-invoer vergelijkt?
  1. Optellingen met drijvendekommagetallen zoals fadd.s
  2. Vergelijkingen van drijvendekommagetallen zoals flt.s
  3. Vermenigvuldigingen van drijvendekommagetallen zoals fmul.s
  4. Gecombineerde vermenigvuldigingen en optellingen zoals fmadd.s
Toon antwoordVerberg antwoord

Sla deze les op om dit antwoord te zien.

Set 5: Afrondingsbeslissingen en precisieverlies10 Oefenvragen

Sla deze les op om elk antwoord te zien en elke set te oefenen.

Vraag 1 van 10

Een exacte waarde ligt bij een significand van vier bits precies halverwege 1,110₂ en 1,111₂. Wat kiest afronden naar het dichtstbijzijnde getal, bij gelijke afstand naar even?
  1. 1,111₂
  2. 1,101₂
  3. 1,110₂
  4. 10,000₂
Toon antwoordVerberg antwoord

Sla deze les op om dit antwoord te zien.

Vraag 2 van 10

Een genormaliseerd resultaat behoudt significand 1,011₂ met bewakings-, afrondings- en plakbits 100. Wat is de afgeronde significand bij afronden naar even?
  1. 1,011₂
  2. 1,100₂
  3. 1,010₂
  4. 1,101₂
Toon antwoordVerberg antwoord

Sla deze les op om dit antwoord te zien.

Vraag 3 van 10

Wat is 2,75 + 0,375 bij significands van vier bits en afronden naar het dichtstbijzijnde getal, bij gelijke afstand naar even?
  1. 3,125
  2. 3,25
  3. 2,75
  4. 3,0
Toon antwoordVerberg antwoord

Sla deze les op om dit antwoord te zien.

Vraag 4 van 10

Welke vereenvoudigde breuk heeft een exacte eindige binaire ontwikkeling: 7/16, 7/20, 7/12 of 7/10?
  1. 7/16
  2. 7/20
  3. 7/12
  4. 7/10
Toon antwoordVerberg antwoord

Sla deze les op om dit antwoord te zien.

Vraag 5 van 10

Een genormaliseerd resultaat met een significand van vier bits heeft exacte bits 1,111101₂ bij werkelijke exponent 5. Welk genormaliseerd resultaat wordt opgeslagen bij afronden naar even?
  1. 1,111₂ × 2⁵
  2. 1,000₂ × 2⁶
  3. 1,000₂ × 2⁵
  4. 1,111₂ × 2⁶
Toon antwoordVerberg antwoord

Sla deze les op om dit antwoord te zien.

Vraag 6 van 10

Een opgeslagen accumulator is in binary32 bij afronden naar even gelijk aan 2²⁶. Een lus telt de opgeslagen waarde 3 precies vier keer op en rondt na elke optelling af. Welke eindwaarde ontstaat?
  1. 2²⁶ + 8
  2. 2²⁶ + 12
  3. 2²⁶
  4. 2²⁶ + 16
Toon antwoordVerberg antwoord

Sla deze les op om dit antwoord te zien.

Vraag 7 van 10

Neem in binary32-rekenkunde met afronden naar even a = 1 + 2⁻¹², b = 1 − 2⁻¹², c = −1. Wat geven afzonderlijke bewerkingen voor a × b + c en gecombineerde vermenigvuldiging en optelling terug?
  1. Beide geven −2⁻²⁴ terug
  2. Afzonderlijk geeft 0; gecombineerd geeft −2⁻²⁴
  3. Afzonderlijk geeft −2⁻²⁴; gecombineerd geeft 0
  4. Beide geven 0 terug
Toon antwoordVerberg antwoord

Sla deze les op om dit antwoord te zien.

Vraag 8 van 10

Een positieve eindige binary32-waarde loopt over wanneer die met 2 wordt vermenigvuldigd. Welk resultaat en welke vlaggen ontstaan bij roundTowardNegative onder de standaardafhandeling?
  1. Positieve oneindigheid; overloop en niet-exact
  2. Grootste eindige positieve waarde; onderloop en niet-exact
  3. Positieve oneindigheid; deling door nul en niet-exact
  4. Grootste eindige positieve waarde; overloop en niet-exact
Toon antwoordVerberg antwoord

Sla deze les op om dit antwoord te zien.

Vraag 9 van 10

In binary32-rekenkunde met afronden naar even wordt x = 1 + 2⁻²³ exact opgeslagen. Een programma berekent (x − 1) × 2²³. Welk resultaat ontstaat en veroorzaakt de aftrekking een fout?
  1. 1; de aftrekking is exact
  2. 0; de aftrekking laat 2⁻²³ weg
  3. 1; de aftrekking rondt naar boven af
  4. 2; de aftrekking geeft 2⁻²²
Toon antwoordVerberg antwoord

Sla deze les op om dit antwoord te zien.

Vraag 10 van 10

Een negatieve exacte waarde −2,3 wordt afgerond op een geheel getal. Wat zijn de resultaten naar nul en naar negatieve oneindigheid?
  1. Naar nul −3; naar negatief −2
  2. Naar nul −2; naar negatief −2
  3. Naar nul −2; naar negatief −3
  4. Naar nul −3; naar negatief −3
Toon antwoordVerberg antwoord

Sla deze les op om dit antwoord te zien.

Set 6: Onderzoek rekenkundige bewerkingen in het datapad10 Oefenvragen

Sla deze les op om elk antwoord te zien en elke set te oefenen.

Vraag 1 van 10

Een berekening met drijvendekommagetallen geeft NaN terug. Welk soort test moet een programma gebruiken om dat te herkennen?
  1. Gelijkheid met een opgeslagen NaN-constante
  2. Een speciale NaN-test zoals isnan
  3. Een test of de waarde gelijk is aan zichzelf
  4. Een test of de tekenbit gelijk is aan 1
Toon antwoordVerberg antwoord

Sla deze les op om dit antwoord te zien.

Vraag 2 van 10

Een 8-bits-ALU trekt b = 0111 1000 af van a = 1000 1010. Welke resultaten voor kleiner dan met en zonder teken en welke Zero-uitgang volgen?
  1. Met teken 0; zonder teken 0; Zero 0
  2. Met teken 1; zonder teken 1; Zero 0
  3. Met teken 0; zonder teken 1; Zero 1
  4. Met teken 1; zonder teken 0; Zero 0
Toon antwoordVerberg antwoord

Sla deze les op om dit antwoord te zien.

Vraag 3 van 10

Een 4-bitsblok met OR-doorgifte telt 1010 en 0101 op met inkomende overdracht 1. De lage bit van de tweede operand verandert van 1 naar 0. Wat gebeurt er met de laatste overdracht en de som?
  1. Overdracht blijft 1; som verandert van 0000 naar 1111
  2. Overdracht verandert van 1 naar 0; som van 1111 naar 0000
  3. Overdracht verandert van 1 naar 0; som van 0000 naar 1111
  4. Overdracht blijft 0; som verandert van 0000 naar 1111
Toon antwoordVerberg antwoord

Sla deze les op om dit antwoord te zien.

Vraag 4 van 10

Een programma vermenigvuldigt de 8-bitspatronen zonder teken 0xFE en 0x02. Het neemt de bovenste byte uit hun product met teken en de onderste byte uit hun product zonder teken. Welke 16-bitswaarde wordt samengesteld?
  1. 0xFFFC in plaats van 0x01FC
  2. 0x01FC in plaats van 0xFFFC
  3. 0xFF02 in plaats van 0x01FC
  4. 0x00FC in plaats van 0x01FC
Toon antwoordVerberg antwoord

Sla deze les op om dit antwoord te zien.

Vraag 5 van 10

Een RV32-routine berekent divu en remu voor deeltal 37 en deler 0 en test daarna met omslaande rekenkunde of q × deler + rest gelijk is aan 37. Wat toont de test aan?
  1. De test faalt omdat het quotiënt geheel uit enen bestaat
  2. Er ontstaat een synchrone uitzondering vóór de gelijkheidstest
  3. De test slaagt omdat het quotiënt nul is
  4. De test slaagt hoewel deling door nul optrad
Toon antwoordVerberg antwoord

Sla deze les op om dit antwoord te zien.

Vraag 6 van 10

Wat is in het normale binary32-interval van 64 tot 128 de afstand tussen aangrenzende waarden?
  1. 2⁻¹⁶
  2. 2⁻¹⁷
  3. 2⁻²³
  4. 2⁻¹⁸
Toon antwoordVerberg antwoord

Sla deze les op om dit antwoord te zien.

Vraag 7 van 10

In binary32-rekenkunde met afronden naar even zijn a = 1 + 2⁻²², b = 1 − 2⁻²² en c = −1 exacte invoerwaarden. Wat geven afzonderlijk vermenigvuldigen en optellen en FMA terug?
  1. Afzonderlijk 0; FMA −2⁻⁴⁴
  2. Afzonderlijk −2⁻⁴⁴; FMA −2⁻⁴⁴
  3. Afzonderlijk 0; FMA +2⁻⁴⁴
  4. Afzonderlijk −2⁻²²; FMA −2⁻⁴⁴
Toon antwoordVerberg antwoord

Sla deze les op om dit antwoord te zien.

Vraag 8 van 10

Een model met significands van vier bits rondt elke bewerking af naar het dichtstbijzijnde getal, bij gelijke afstand naar even. Het berekent (16 + 1,25) − 16. Welk resultaat wordt teruggegeven?
  1. 0
  2. 1,25
  3. 2
  4. 1
Toon antwoordVerberg antwoord

Sla deze les op om dit antwoord te zien.

Vraag 9 van 10

Een breed geheel getal 67.108.867 wordt naar binary32 en terug naar een breed geheel getal omgezet met afronden naar even. Het programma trekt daarna het oorspronkelijke gehele getal af. Welk verschil ontstaat?
  1. +5
  2. −3
  3. 0
  4. −1
Toon antwoordVerberg antwoord

Sla deze les op om dit antwoord te zien.

Vraag 10 van 10

Na een RV32-optelling zonder teken is de opgeslagen som in de volgorde zonder teken kleiner dan de eerste ingang. Welke conclusie volgt?
  1. De optelling is noodzakelijkerwijs overgelopen met teken
  2. De optelling heeft geen overdracht en geen overloop
  3. De eerste ingang was noodzakelijkerwijs negatief
  4. De optelling is voorbij het maximum zonder teken omgeslagen
Toon antwoordVerberg antwoord

Sla deze les op om dit antwoord te zien.

Kom je niet uit je eigen opgave? Huiswerkhulp

Kernbegrippen

78 Kernbegrippen, elk met een definitie

A

Absolute tolerantie
Een absolute tolerantie stelt een toegestane fout vast die onafhankelijk is van de absolute waarde en is nuttig als benaderde eindige waarden dicht bij nul liggen.
Een absolute ondergrens voorkomt dat een vergelijking dicht bij nul alleen afhangt van een verdwijnende relatieve toegestane afwijking.
Absorptie
Absorptie treedt op als het optellen van een kleine waarde een grotere drijvendekommaoperand onveranderd laat doordat afronding de bijdrage verwijdert.
Een binary32-teller bij 2²⁴ kan stoppen met toenemen als het programma herhaaldelijk 1 optelt.
Accumulator
Een accumulator bewaart een lopend rekenkundig resultaat; het algoritme van Booth gebruikt een accumulator van n + 1 bits voor operanden van n bits.
De extra accumulatorbit maakt het mogelijk een meest negatief vermenigvuldigtal af te trekken zonder overloop.
Afronden naar het dichtstbijzijnde getal, bij gelijke afstand naar even
Afronden naar het dichtstbijzijnde getal, bij gelijke afstand naar even kiest de dichtstbijzijnde representeerbare waarde en, als de exacte waarde halverwege ligt, het getal waarvan de behouden significand eindigt op 0.
Bij gelijke afstand tussen gehele getallen rondt 6,5 volgens deze regel af naar 6 en 7,5 naar 8.
Afrondingsbit
De afrondingsbit is de tweede extra bit na de behouden significand en draagt informatie bij over het weggegooide deel.
Bewakingsbit 1 en afrondingsbit 1 wijzen op een waarde boven de helft, nog voordat de plakbit wordt bekeken.
Aftrekken met tweecomplement
Aftrekken met tweecomplement telt de geïnverteerde tweede operand en een initiële overdracht van 1 op bij de eerste operand.
Dezelfde 8-bitsopteller kan 19 + 6 of 19 − 6 berekenen door de besturing voor inverteren en overdracht te veranderen.

B

Barrelshifter
Een barrelshifter combineert verschuivingsniveaus met machten van twee om een woord over een gekozen afstand te verschuiven via een vast aantal logische niveaus.
Een 32-bits-barrelshifter selecteert de niveaus voor 16 en 4 posities om een verschuiving van 20 te produceren.
Bereikcontrole
Een bereikcontrole test of een index binnen het geldige bereik van een array valt voordat de index wordt gebruikt om een element te benaderen.
Een vergelijking zonder teken met een niet-negatieve lengte binnen het bereik met teken wijst zowel negatieve als te grote indices af.
Bewakingsbit
De bewakingsbit is de eerste extra bit na de behouden significand en helpt waarden onder, op of boven de helft te onderscheiden.
Een bewakingsbit van 0 plaatst het weggegooide deel na normalisatie onder een halve ulp.
bfloat16
bfloat16 is een 16-bits-drijvendekommaformaat met één tekenbit, acht exponentbits en zeven fractiebits, dat bereik boven precisie stelt.
De exponentbreedte komt overeen met die van binary32, terwijl de kortere fractie veel minder detail bewaart.
Bitslice
Een bitslice is het deel van een herhaalde datapadschakeling dat één operandbitpositie en de lokale signalen daarvan verwerkt.
De hoogste slice levert overloopinformatie, terwijl elke tussenliggende slice een overdracht verder doorgeeft.
Bnegate
Bnegate is een gedeeld besturingssignaal in een ALU met slices dat de tweede operand inverteert en de initiële inkomende overdracht voor aftrekken instelt.
Als je Bnegate instelt terwijl je de opteller selecteert, verandert a + b in a + NOT(b) + 1.
Booth-hercodering
Booth-hercodering vervangt binaire vermenigvuldigerreeksen door bijdragen met teken, zodat vermenigvuldiging mogelijk is met optellingen en aftrekkingen.
Een vermenigvuldiger met één lange reeks bits met waarde 1 kan worden voorgesteld als een macht van twee min een andere macht van twee.
Booth-hercodering met grondtal 4
Booth-hercodering met grondtal 4 verwerkt twee vermenigvuldigerbits per stap met cijfers met teken van −2 tot en met +2 om het aantal deelproducten te verminderen.
Een vermenigvuldiger met grondtal 4 heeft minder deelproductrijen nodig dan een ontwerp dat één rij per vermenigvuldigerbit maakt.

C

Cijferverlies door aftrekking
Cijferverlies door aftrekking verwijdert gemeenschappelijke voorste cijfers wanneer bijna gelijke waarden worden afgetrokken, waardoor eerdere operandfouten groot worden ten opzichte van het verschil.
Een exacte aftrekking kan toch een relatief onnauwkeurig resultaat blootleggen als de twee ingangen al waren afgerond.
Conditievlag
Een conditievlag is een processorstatusbit die een eigenschap van een voltooide bewerking vastlegt om later door een andere instructie te worden getest.
Een voorwaardelijke sprong kan na een optelling de overloopvlag van x86 bekijken om een resultaat met teken buiten het bereik te detecteren.
Correcte afronding
Correcte afronding geeft de exacte wiskundige bewerking terug, afgerond volgens het doelformaat en de geselecteerde afrondingsrichting.
Elementaire rekenkundige bewerkingen die aan de standaard voldoen, komen numeriek overeen bij identieke invoer, doelformaat en afrondingsrichting.

D

Deelproduct
Een deelproduct is één verschoven bijdrage aan een vermenigvuldigingsresultaat, geselecteerd door een vermenigvuldigerbit of een gehercodeerd cijfer.
Bij binaire vermenigvuldiging zonder teken is elk gewoon deelproduct een verschoven vermenigvuldigtal of nul.
Deeltal
Een deeltal is de waarde die wordt gedeeld, gelijk aan het quotiënt maal de deler plus de rest.
Bij −17 gedeeld door 5 met afkappen is het deeltal −17, het quotiënt −3 en de rest −2.
Deler
Een deler is de waarde waardoor een deeltal wordt gedeeld; bij gewone deling van gehele getallen mag die niet nul zijn.
Bij 29 gedeeld door 6 blijft een rest over die kleiner is dan de positieve deler 6.
Deling met herstel van de rest
Deling met herstel van de rest probeert een aftrekking van de deler en maakt die ongedaan als de proef mislukt, waarbij per stap één quotiëntbit ontstaat.
Als een proef een leenbit nodig heeft, telt de hardware de deler terug op en legt quotiëntbit 0 vast.
Deling zonder herstel van de rest
Deling zonder herstel van de rest neemt een negatieve gedeeltelijke rest mee naar de volgende stap en corrigeert met de volgende optelling of een laatste optelling.
Een negatieve gedeeltelijke rest aan het eind moet met de deler worden verhoogd om de uiteindelijke rest te krijgen.
Drijvendekommagetalregister
Een drijvendekommagetalregister bewaart een operand of resultaat voor drijvendekomma-instructies; RISC-V F en D gebruiken registers f0 tot en met f31.
Een vergelijking van drijvendekommagetallen schrijft het resultaat 0 of 1 naar een integerregister in plaats van naar deze bank.

E

Eenheid op de laatste positie
Een eenheid op de laatste positie, of ulp, is de afstand die hoort bij de minst significante behouden positie op een gekozen schaal.
In het binary32-interval van 16 tot 32 liggen aangrenzende normale waarden 2⁻¹⁹ uit elkaar.
Exponentbias
Een exponentbias is een vaste verschuiving die bij de werkelijke exponent van een normaal getal wordt opgeteld voordat die als veld zonder teken wordt opgeslagen.
Een werkelijke binary32-exponent van 5 wordt opgeslagen als 132 omdat de bias van het formaat 127 is.

F

Fractieveld
Het fractieveld slaat de significandbits na de binaire komma op, waarbij de voorste bit bij normale waarden impliciet blijft.
Een normale significand van 1,01₂ slaat een fractie op die begint met 01, gevolgd door nullen om het veld te vullen.

G

Gecombineerde vermenigvuldiging en optelling
Een gecombineerde vermenigvuldiging en optelling berekent een product plus een optelterm met één laatste afronding en behoudt de tussentijdse precisie van het product.
FMA kan een klein verschil behouden dat verdwijnt als een product wordt afgerond voordat een optelterm met tegengesteld teken wordt toegevoegd.
Geleidelijke onderloop
Geleidelijke onderloop stelt heel kleine waarden via subnormale getallen voor met afnemende significante precisie, in plaats van ze direct door nul te vervangen.
De exacte helft van de kleinste normale binary32-waarde blijft behouden als een subnormaal getal ongelijk aan nul.
Gerichte afronding
Gerichte afronding selecteert een representeerbaar buurgetal in een opgegeven richting: naar positieve oneindigheid, negatieve oneindigheid of nul.
Voor een negatief niet-exact resultaat kunnen afronden naar nul en naar negatief verschillende buurgetallen kiezen.
Groepsoverdrachtsdoorgifte
Een signaal voor groepsoverdrachtsdoorgifte geeft aan dat elke positie in een blok een inkomende overdracht kan doorgeven tot aan de uitgang van het blok.
Vier OR-doorgiftebits moeten allemaal 1 zijn om de groepsoverdrachtsdoorgifte van een blok van vier bits 1 te laten zijn.
Groepsoverdrachtsgeneratie
Een signaal voor groepsoverdrachtsgeneratie geeft aan dat een blok bits een uitgaande overdracht produceert onafhankelijk van de overdracht die het blok binnenkomt.
Een hoge bit die een overdracht genereert, laat het blok genereren, ook als de laagste bit inkomende overdrachten stopt.

I

Instellen bij kleiner dan
Instellen bij kleiner dan produceert het gehele getal 1 over de volledige breedte als een opgegeven operandvergelijking waar is en anders het gehele getal 0.
RISC-V slt vergelijkt operanden met teken, terwijl sltu dezelfde patronen volgens de volgorde zonder teken vergelijkt.

L

Leenbit
Een leenbit geeft aan dat een aftrekking zonder teken een eenheid van een hogere positie nodig heeft omdat de eerste operand kleiner is dan de tweede.
Als je 12 zonder teken van 5 aftrekt, is een leenbit nodig, ook al geeft de schakeling nog steeds een patroon met vaste breedte terug.

M

Machine-epsilon
Machine-epsilon duidt gewoonlijk de afstand aan tussen 1 en de eerstvolgende grotere representeerbare waarde, gelijk aan 2⁻²³ voor binary32.
De afstand net boven 1 is tweemaal de gebruikelijke relatieve binary32-foutgrens van 2⁻²⁴ bij afronden naar het dichtstbijzijnde getal.
Meest significante producthelft
De meest significante producthelft bevat de meer significante n bits van een volledig product van 2n bits van twee operanden van n bits.
Een hoge helft ongelijk aan nul laat zien dat een product zonder teken informatie verliest als het in slechts n bits wordt opgeslagen.
Modulaire rekenkunde
Modulaire rekenkunde behoudt de rest na deling door een vaste modulus; omslaande rekenkunde met n bits gebruikt een modulus van 2ⁿ.
De berekening 250 + 20 zonder teken in 8 bits geeft 14 terug omdat 270 en 14 één volledige modulus van 256 verschillen.
Multiplexer
Een multiplexer selecteert volgens besturingsbits één van meerdere mogelijke ingangssignalen en geeft dat door aan een uitgang.
Een uitgangsmultiplexer van een ALU kan een AND-resultaat selecteren terwijl de opteller tegelijk een som berekent.

N

NaN
Een NaN is een ongeordende bijzondere drijvendekommawaarde die een ongedefinieerd numeriek resultaat voorstelt, gecodeerd met een fractie ongelijk aan nul en een exponent die geheel uit enen bestaat.
Nul gedeeld door nul produceert NaN en een gelijkheidsvergelijking van dat resultaat met zichzelf geeft onwaar terug.
Niet-associativiteit
Niet-associativiteit betekent dat een andere groepering van een bewerking het resultaat kan veranderen; tussentijdse afronding veroorzaakt dit bij optellen met drijvendekommagetallen.
Een parallelle som kan de laatste bits veranderen als een ander aantal threads de groepering van de reductie verandert.
Normalisatie
Normalisatie verplaatst een significand ongelijk aan nul naar de vereiste vorm met een voorste cijfer en verandert de exponent om de waarde te behouden.
Een som met significand 10,1₂ verschuift eenmaal naar rechts terwijl de exponent met één toeneemt.
Nul met teken
Een nul met teken is een drijvendekommanul met een positieve of negatieve tekenbit; de twee zijn bij vergelijking gelijk maar behouden enkele effecten van het teken.
Positieve 1 gedeeld door negatieve nul geeft bij de standaardafhandeling van drijvendekommagetallen negatieve oneindigheid terug.
Nuluitbreiding
Nuluitbreiding verbreedt een patroon zonder teken door nullen in de nieuwe hoge posities in te voegen zonder de numerieke waarde te veranderen.
Een byte zonder teken met waarde 250 wordt 0000 0000 1111 1010 bij uitbreiding tot 16 bits.
Nuluitgang
De nuluitgang is een ALU-statussignaal dat alleen 1 is als elke resultaatbit nul is, meestal gevormd door een NOR-reductie.
Gelijke operandpatronen van elkaar aftrekken stelt Zero in, ook als die patronen negatieve waarden met teken voorstellen.

O

Onderloopuitzondering
De onderloopuitzondering vereist bij de standaardafhandeling zowel een heel klein als een niet-exact resultaat, zodat een exact subnormaal getal die niet veroorzaakt.
De kleinste normale binary32-waarde delen door 2 produceert een exact subnormaal getal zonder onderloop.
Oneindigheid
Een oneindigheid is een bijzondere drijvendekommawaarde met teken, gecodeerd met een exponent die geheel uit enen bestaat en een fractie van nul.
Positieve oneindigheid plus een eindige waarde blijft positieve oneindigheid, terwijl oneindigheid min zichzelf NaN oplevert.
Opteller met opgeslagen overdracht
Een opteller met opgeslagen overdracht brengt drie invoerwoorden terug tot een somwoord en een overdrachtswoord zonder overdrachten over de volledige breedte door te geven.
Meerdere niveaus met opgeslagen overdracht brengen deelproductrijen terug vóór een laatste optelling met overdrachtsdoorgifte.
Opteller met overdrachtsselectie
Een opteller met overdrachtsselectie berekent een blok voor beide mogelijke inkomende overdrachten en selecteert één vooraf berekend resultaat wanneer de overdracht aankomt.
Het verdubbelen van de rekenkundige schakeling voor het bovenste blok ruilt meer schakelingoppervlak in voor korter wachten op het onderste blok.
Overdrachtsdoorgifte
Een signaal voor overdrachtsdoorgifte beschrijft of een inkomende overdracht door een bitpositie kan gaan; dit ontwerp gebruikt OR van de operanden.
Met ingangen 1 en 0 is doorgifte 1 en generatie 0, zodat de inkomende overdracht de uitgaande overdracht bepaalt.
Overdrachtsgeneratie
Een signaal voor overdrachtsgeneratie geeft aan dat een bitpositie ongeacht de inkomende overdracht een overdracht produceert, omdat beide operandbits 1 zijn.
Als generatie 1 is, is de volgende overdracht 1, ook als geen lagere positie een inkomende overdracht heeft geleverd.
Overloop bij getallen met teken
Overloop bij getallen met teken treedt op als het exacte resultaat buiten het tweecomplementbereik van het doelformaat ligt, ongeacht de uitgaande overdracht.
Een positieve som van 8 bits die een negatief opgeslagen patroon wordt, kan op overloop met teken wijzen.
Overloop bij getallen zonder teken
Overloop bij getallen zonder teken treedt op als een exact resultaat buiten het bereik van nul tot en met de grootste waarde valt die bij de doelbreedte representeerbaar is.
Een som zonder teken van 230 en 40 in 8 bits slaat 14 op, terwijl de uitgaande overdracht meldt dat 270 niet paste.

P

Plakbit
De plakbit is de OR van alle weggegooide bits na de bewakings- en afrondingsbit en legt vast of er een bit ongelijk aan nul in dat resterende deel is.
Bewakingsbit 1, afrondingsbit 0 en plakbit 1 betekenen boven de helft, dus het zou onjuist zijn het resultaat als precies halverwege te behandelen.
Precisie
Precisie is het aantal significante cijfers dat in een numeriek formaat beschikbaar is en beperkt het detail op een bepaalde schaal.
Een grotere exponent kan de afstand tussen binary32-waarden vergroten, hoewel de precisie van 24 bits gelijk blijft.

Q

Quotiënt
Een quotiënt is het resultaat van de deling vóór de rest; deling van gehele getallen met teken en afkappen rondt het quotiënt af naar nul.
Voor −19 gedeeld door 4 geeft afkappen quotiënt −4, terwijl naar beneden afronden −5 zou geven.

R

Rekenkundig-logische eenheid
Een rekenkundig-logische eenheid is een combinatorische datapadschakeling die uit operanden en besturingsingangen rekenkundige of logische resultaten selecteert.
Door de besturing voor de bewerking te veranderen, kan hetzelfde paar registeruitgangen een optelling of een bitsgewijze AND voeden.
Rekenkundige verschuiving naar rechts
Een rekenkundige verschuiving naar rechts verplaatst bits naar lagere posities en kopieert de oorspronkelijke tekenbit naar nieuw vrijgekomen hoge posities.
Als je −10 met teken één positie naar rechts verschuift, krijg je −5; −9 op dezelfde manier verschuiven geeft ook −5.
Relatieve tolerantie
Een relatieve tolerantie stelt een aanvaardbare vergelijkingsfout vast in verhouding tot de absolute waarden van de eindige waarden die worden vergeleken.
Een vaste relatieve tolerantie staat een groter absoluut verschil toe voor waarden rond één miljoen dan rond één.
Representatiefout
Een representatiefout is het verschil tussen een bedoelde waarde en de opgeslagen benadering ervan wanneer het formaat die niet exact kan voorstellen.
De decimale waarde 0,1 heeft een herhalende binaire ontwikkeling en moet in binary32 worden benaderd.
Rest
Een rest is de waarde die overblijft nadat quotiënt maal deler van het deeltal is afgetrokken volgens de gekozen delingsconventie.
RISC-V rem geeft −2 voor −17 gedeeld door 5 omdat de rest ongelijk aan nul het teken van het deeltal volgt.
Ripple-carryopteller
Een ripple-carryopteller schakelt volledige optellers zo achter elkaar dat elke uitgaande overdracht de inkomende overdracht van de volgende, meer significante bit vormt.
Een overdracht die bij bit 0 ontstaat, moet mogelijk veel slices doorlopen voordat de hoogste resultaatbit stabiel is.

S

Significand
Een significand bevat de significante binaire cijfers van een drijvendekommawaarde, inclusief de impliciete voorste bit bij een normale waarde.
De normale waarde 1,101₂ × 2³ heeft significand 1,101₂ en werkelijke exponent 3.
SRT-deling
SRT-deling selecteert quotiëntcijfers op basis van de voorste bits van de deler en gedeeltelijke rest, waardoor meerdere quotiëntbits per stap mogelijk zijn.
Een verkeerde waarde in de selectietabel kan een quotiënt onjuist maken ondanks verder correcte rekenkundige hardware.
Subnormaal getal
Een subnormaal getal is een drijvendekommawaarde ongelijk aan nul met een exponentveld van nul, een voorste significandbit 0 en de minimale normale schaal.
Het binary32-patroon 0x00000002 stelt tweemaal het kleinste positieve subnormale getal voor.
Synchrone uitzondering
Een synchrone uitzondering draagt de besturing over aan code voor uitzonderingsafhandeling wanneer een instructie een situatie veroorzaakt die speciale verwerking vereist.
Een MIPS-optelling die een synchrone uitzondering kan veroorzaken, draagt de besturing over als het resultaat met teken buiten het registerbereik valt.

T

Tekenuitbreiding
Tekenuitbreiding verbreedt een tweecomplementpatroon door de tekenbit naar de nieuwe hoge posities te kopiëren, met behoud van de waarde.
Uitbreiding van 1010 met teken tot 1111 1010 behoudt −6; nullen invoegen zou positief 10 opleveren.

U

Uitlijning
Uitlijning verschuift een significand met een kleinere exponent naar rechts, zodat drijvendekommaoperanden vóór optellen of aftrekken de grotere exponent delen.
Bij het uitlijnen van exponenten 6 en 2 verschuift de tweede significand vier posities naar rechts.
Uitzondering wegens een niet-exact resultaat
De uitzondering wegens een niet-exact resultaat legt vast dat een geleverd drijvendekommaresultaat door afronding verschilt van het exacte wiskundige resultaat.
Een afgeronde waarde kan tijdens een gewone berekening de vlag voor niet-exact zetten zonder overloop of een ongeldige bewerking te produceren.

V

Verborgen bit
De verborgen bit is de impliciete voorste 1 van een normale binaire significand, die het formaat levert zonder die op te slaan.
binary32 verkrijgt 24 bits normale precisie uit een fractieveld van 23 bits en de verborgen voorste 1.
Vergelijking zonder teken
Een vergelijking zonder teken ordent patronen als niet-negatieve binaire waarden, zodat een hoge voorste bit een positief gewicht bijdraagt.
Het patroon 1111 is zonder teken groter dan 0001, hoewel de waarden met teken −1 en 1 zijn.
Vermenigvuldiger
Een vermenigvuldiger is de operand waarvan de bits verschoven bijdragen van het vermenigvuldigtal selecteren in een binair vermenigvuldigingsalgoritme.
Het vermenigvuldigerpatroon 1001 selecteert een onverschoven kopie en een kopie die drie posities naar links is verschoven.
Vermenigvuldiging door schuiven en optellen
Vermenigvuldiging door schuiven en optellen bekijkt vermenigvuldigerbits achtereenvolgens en telt de overeenkomstige verschoven waarden van het vermenigvuldigtal op.
Een sequentiële vermenigvuldiger van zes bits voert zes bitstappen uit, ook als de meeste vermenigvuldigerbits nul zijn.
Vermenigvuldigingslatentie
Vermenigvuldigingslatentie is de tijd tussen het starten van één vermenigvuldiging en het beschikbaar komen van het resultaat voor een afhankelijke bewerking.
Een vermenigvuldiger met pipelining kan elke cyclus een nieuw product accepteren, ook als de latentie meerdere cycli is.
Vermenigvuldigtal
Een vermenigvuldigtal is de operand waarvan verschoven kopieën deelproducten vormen die door de bits van de vermenigvuldiger worden geselecteerd.
Bij vermenigvuldiging van 9 met 5 door schuiven en optellen dragen verschoven kopieën van 9 bij bij vermenigvuldigerbits 0 en 2.
Verzadigingsrekenkunde
Verzadigingsrekenkunde begrenst een resultaat buiten het bereik op de grootste of kleinste waarde die het doelformaat ondersteunt.
Verzadigend optellen van 240 + 30 zonder teken in 8 bits geeft 255 terug en voorkomt dat een heldere pixel omslaat naar een donkere waarde.
Volledige opteller
Een volledige opteller combineert twee operandbits en een inkomende overdracht en produceert een sombit en een uitgaande overdracht voor de volgende positie.
Met drie ingangen met waarde 1 geeft de volledige opteller som 1 en overdracht 1, samen de binaire waarde 11.
Voor overloop gecorrigeerd teken
Het voor overloop gecorrigeerde teken is het teken van het aftrekresultaat XOR overloop met teken en geeft de juiste beslissing voor kleiner dan met teken.
Een omgeslagen positief werkelijk verschil kan negatief lijken totdat de overloopbit de vergelijking corrigeert.
Vooruitberekening van de overdracht
Vooruitberekening van de overdracht berekent overdrachten uit generatie- en doorgifte-expressies en vermindert zo de opeenvolgende overdrachtsafhankelijkheid van een ripple-carryopteller.
Een vooruitberekeningseenheid kan de uitgaande overdracht van een blok berekenen voordat elke interne overdracht is doorgeschakeld.

W

Wallace-boom
Een Wallace-boom brengt deelproductrijen terug via lagen met opgeslagen overdracht voordat een laatste optelling het product oplevert.
Parallel rijen terugbrengen verkort het pad vergeleken met het achtereenvolgens optellen van volledige deelproducten.

Over deze les

Door StudeliFout melden

Maak je eigen Studiemateriaal

Maak van je aantekeningen, slides en documenten Leermodules, Oefenvragen, Flashcards en 6 andere tools.

Aan de slag