La manipulation des très grands nombres s'avère indispensable pour de nombreuses applications comme la cryptographie, l'analyse de signaux. Même si la puissance de calcul des calculateurs particuliers ne cessent d'augmenter, la taille des nombres manipulables directement par le processeur ne peut guère dépasser 32 bits, c'est-à-dire 4294967296. Néanmoins, nous pouvons élaborer des techniques de calcul qui permettent en séparant les données par paquets de manipuler des grands nombres pour les ajouter, les soustraire, les multiplier (...)
[...] L'addition : L'addition est une opération élémentaire. Elle représente une excellente initiation au calcul avec les grands nombres compte tenu de sa grande simplicité. Dans cet article nous ne nous intéressons seulement qu'aux opérations sur des entier positifs. Présentation de l'algorithme : L'algorithme utilisé pour l'addition est véritablement simple. Il suffit d'additionner les chiffres de 2 nombres en base 256 un à un de la même manière qu'en base 10. Evidemment il y a le problème avec la retenue. [...]
[...] Soient nb1 et nb2 deux grands nombres. Soit nb3 un grand nombre tel que nb3=nb1+nb2 On effectue tout d'abord l'addition membre à membre des chiffres de nb1 et de nb2 ce qui donne : (Avec nb1i et nb2i les chiffres de nb1 et nb2 associés à i et j le nombre de chiffres du nombre le plus grand entre nb1 et nb2. ) Ensuite il faut effectuer une sorte de remise en forme. Lorsqu' on additionne deux nombres appartenant à ; 255] (8Bits) le résultat appartient à ; 510]. [...]
[...] Comment effectuer une telle remise en forme ? Pour se faire nous allons utiliser les congruences. Avant tout pour comprendre ce qu'est la congruence il faut parler de division euclidienne. Nous n'allons effectuer aucune démonstration mathématique, vous devrez admettre ceci : Soit a un entier naturel et b un entier naturel non nul. Alors il existe un unique couple d'entiers naturels verifiant a=bq + r et r appartient a Ceci définit la division euclidienne dans N (l'ensemble des entiers naturels). [...]
[...] Ainsi nous allons d'abord effectuer 4 calculs. nb3.nomb[0] = nb1.nomb[0]+nb2.nomb[0] = 185; nb3.nomb[1] = nb1.nomb[1]+nb2.nomb[1] = 141; nb3.nomb[2] = nb1.nomb[2]+nb2.nomb[2] = 266; nb3.nomb[3] = nb1.nomb[3]+nb2.nomb[3] = 221; Et ensuite la remise en forme nb3.nomb[0] = nb3.nomb[0] (modulo 256) = 185; nb3.nomb[1] = nb3.nomb[1] (modulo 256) = 141 ; nb3.nomb[2] = nb3.nomb[2] (modulo 256) = 10 ; Comme 266/256=1 nb3.nomb[3]=nb3.nomb[3]+1=222 : nb3.nomb[3] = nb3.nomb[3] (modulo 256) = 222 ; Donc nb3= 185.256 + 141.256 + 10.256 + 222.256 Optimisation : Nous allons désormais optimiser cet algorithme en fusionnant les deux processus : celui d'addition puis celui de remise en forme en un seul processus. [...]
[...] (et non pas 8 bits voire plus loin). Ainsi les grands nombres seront sous la forme : Avec ai appartenant à ; 255] Comme nous avons déterminé de quelle manière nous allons représenter les grands nombres nous allons pouvoir passer à la première opération arithmétique : l'addition. Définition d'un nouveau type pour la programmation : Du point de vue de la programmation dans cet article les listings seront rédigés en C et pour une meilleure compréhension nous n'utiliserons pas de pointeurs mais des tableaux prédéfinis Voici le type bignb : typedef struct bignb { int signe; //signe du nombre = positif et = negatif) int nb; //nombre de chiffres (en fait nombre de chiffres unsigned int nomb[200]; //tableau contenant les chiffres du nombre ( on peut observer ici la limite de calcul cite précédemment) } bignb; 3. [...]
Source aux normes APA
Pour votre bibliographieLecture en ligne
avec notre liseuse dédiée !Contenu vérifié
par notre comité de lecture