Rekenen met grote getallen door Theo Kortekaas

Rekenen met grote getallen

De meeste computers hebben een instructie-set waarmee eenvoudige rekenkundige bewerkingen kunnen worden uitgevoerd, zoals optellen en aftrekken, vermenigvuldigen en delen. Deze bewerkingen worden uitgevoerd op getallen die een beperkte waarde hebben. De maximale waarde is meestal de grootste waarde die past in een van de registers van de computer. We noemen deze registers gewoonlijk integer registers en de getallen die daarin passen worden integers genoemd. De grootte van zo'n register wordt uitgedrukt in aantal bits; zo hebben de meest gangbare computers (laptop en desktop computers) integer registers van 32 bits en/of 64 bits. De maximale waarde die een 32 bits register kan bevatten is 232 - 1 = 4.294.967.295.
Bij een 64 bits register is dat 264 - 1 = 18.446.744.073.709.551.615. De computer instructies die met deze registers werken zijn vaak eenvoudig en omvatten bewerkingen als Add voor optellen, Sub voor aftrekken en Shl en Shr (Shift left en Shift right) voor naar links en naar rechts schuiven van de inhoud van een register.
Zodra we met grotere getallen moeten werken (zoals bij cryptografie) kunnen we niet meer volstaan met simpele computer-instructies die op enkelvoudige registers werken, maar moeten we maatregelen nemen om de inhoud van registers aan elkaar te koppelen, om zodoende op grotere getallen bewerkingen te kunnen uitvoeren.

LBA (Long Binary Architecture) is een architectuur die gebruikt wordt om computerprogramma's te ontwerpen waarin op een simpele manier met grote getallen kan worden gewerkt. Deze architectuur is ten eerste bedoeld voor assembler programmeurs voor Windows programma's die op een computer met X86 processors werken. Maar de Lba architectuur kan ook worden gebruikt in C++ programma's bij het werken met grote getallen.

Er zijn al programma-bibliotheken met functies voor grote getallen, zoals de GMP/GNU library. Waarom dan deze nieuwe architectuur ?
LBA beoogt zo dicht mogelijk bij de X86 instructie-set te blijven en voor vele X86-instructies die op integer registers werken een soortgelijke (macro)instructie te bieden voor het werken met grote getallen. Dat kan aantrekkelijk zijn voor assembler programmeurs. Voorts kan Lba gebruikt worden in C++ programma's om de leesbaarheid van deze programma's te verbeteren ten opzichte van programma's die gebruik maken van ondermeer de GMP library.
LBA krijgt gestalte door de volgende componenten: