Het representeren van hele getallen

Op deze pagina, ga je leren hoe computers gehele getallen opslaan.

Zoals je wel weet, komen getallen overal voor in algoritmes, zelfs als getallen niet het onderwerp zijn. De gebruiker kan bijvoorbeeld geïnteresseerd zijn in een plaatje, maar dat plaatje is een abstractie, de gegevens waaruit de afbeelding bestaat zijn getallen. Getallen worden ook gebruikt om bijvoorbeeld een specifiek element in een lijst te vinden. De komende pagina's, zal je dieper ingaan op getallen in de computer.

  1. Als je naar de code kijkt zul je zien dat het blok recursie gebruikt. Hoe werkt het? Je hebt recursie voor het eerste gezien in Hoofdstuk 2 Les 4: Fractale kunst .
    De faculteit van een positief geheel getal n (geschreven als "n!") is het product van alle gehele getallen van 1 tot en met n. Bijvoorbeeld:

    5! = 1 \times 2 \times 3 \times 4 \times 5 = 120

    Geen Afbeelding Probeer deze invoeren uit:
    Je krijgt wellicht andere resultaten afhankelijk van de processor van je computer.
    1. Geen Afbeelding
    2. Geen Afbeelding
    3. Geen Afbeelding
    4. Geen Afbeelding

De "e+" betekent "tien keer de macht van" dus deze notatie betekent 2,6525285981219103 × 1032 = 265.252.859.812.191.030.000.000.000.000.000.

Computer hardware met een Vaste Breedte

breedte: Het aantal bits dat een CPU kan verwerken tegelijkertijd

woord: een binaire reeks van een bepaald aantal bits

Dus waarom toonde Snap! het resultaat van 20! in natuurlijke hele getallen maar dat van 30! in wetenschappelijke notatie? Elke computer is ontworpen met een bepaalde breedte, het aantal bits dat de processor tegelijk van het geheugen leest of in het geheugen schrijft. Dat aantal bits wordt een woord genoemd. Sinds 2016 hebben de meeste nieuwe computers een breedte van 64 bits. De eerste microcomputer, verkocht in 1971, was 4 bits breed!

Als je een antwoord voor 20! krijgt in wetenschappelijke notatie, gebruik je een 32-bit computer.

Een 64-bit woord representeert 264 verschillende waardes. De helft van die waardes worden gebruikt om negatieve getallen weer te geven, één waarde voor 0 en de rest voor positieve getallen. De helft van 264 ( wat 263 = 9.223.372.036.854.775.808 is) is ongeveer 9 × 1018. 20! is ongeveer 2,4 × 1018 en past dus nog net in een 64-bit woord. Maar 30! is te groot, 2,6 × 1033 is veel groter dan in een 64-bit woord past. Daarom geeft de computer aan dat er een overflow error is, en berekent Snap! een benadering.

Zijn processor breedtes altijd machten van twee?
Processorbreedtes hoeven niet machten van twee te zijn. Sommige oude computers, degenen die je in oude films ziet die een grote kamer vullen, gebruikten 12-bit, 36-bit, en 60-bit woorden. Maar moderne persoonlijke computers begonnen met 8-bits en de breedtes zijn daarna verdubbeld met elke nieuwe generatie.
  1. Experimenteer in Snap!. Wat is het eerste hele getal waarvan de faculteit niet in een 64-bit woord past?

Bignums

Een heel getal dat uit meerdere woorden bestaat noemen we een bignum. Dit is een afkorting voor 'big number', wat 'groot getal' betekent.

Waarom kunnen programmeertalen niet gewoon meer dan een woord gebruiken om een heel getal te representeren? Dat kunnen ze. Het probleem is dat één instructie in machinetaal alleen kan werken met getallen van één woord. Het is hierdoor iets lastiger om een programmate schrijven om getallen groter dan één woord op te tellen. Dit is niet zo voor alle talen, het komt vooral voor bij talen van laag niveau.

  Geen Afbeelding
  1. Een geweldig voorbeeld van een programmeertaal van hoog niveau is Scheme. Je kunt deze taal leren met het gratis online book Structure and Interpretation of Computer Programs .
Het ontwerp van een programmeertaal is niet alleen een kwestie van smaak; het een kan een zaak van leven of dood zijn. Tussen 1985 en 1987 doodde een therapeutisch röntgenapparaat vier patiënten en bracht serieuze verwondingen aan bij twee andere patiënten vanwege verschillende foutjes in de software; een van de foutjes was dat een teller die in een 8-bit variabele werd bewaard zijn maximale waarde van 127 zou bereiken en dan zou worden teruggezet naar nul in plaats van verhoogd naar 128. Als de variabele nul was, werd een belangrijke veiligheidscontrole niet uitgevoerd. Dit zou niet gebeurd zijn als de software in een betere programmeertaal geschreven was.
    Je kan bignums in ieder Snap!-project gebruiken door de "Infinite precision integers, exact rationals, complex"-library te importeren. Je leerde hoe je libraries moest importeren op de Bibliotheken pagina.
  1. Klik op dit blok in het script-gebied:
    Geen Afbeelding
  2. Probeer nu weer 30!.
    Geen Afbeelding
    Deze (precieze) waarde is anders dan het (afgeronde) zwevendekommagetal hierboven. (Meer over zwevendekommagetal later.)
  3. Probeer 200!. Het gerapporteerde resultaat past niet op je scherm, maar je kan op het deze manier zien: Geen Afbeelding
    1. Hou de Controltoets ingedrukt; terwijl je dit doet hou je de Shifttoets ingedrukt (het moet in die volgorde) en daarna klik je op het Geen Afbeelding blok.
    2. Klik in het menu dat nu verschijnt op het rode stuk tekst "script pic with result...". (Als een ander menu verschijnt klik dan een keer buiten dat menu.)
    3. Een afbeelding wordt dan gedownload op je computer. Je kan op deze afbeelding inzoomen om de getallen te lezen.
  4. Hoeveel getallen zitten er in 200! (Tel dit niet met de hand; je hebt een computer).
Terug Volgende