méthode permettant de multiplier deux nombres. Selon la taille des nombres, certains algorithmes sont plus efficaces que d'autres. De nombreux algorithmes sont connus et le sujet a fait l'objet de nombreuses recherches.
La méthode la plus ancienne et la plus simple, connue depuis l'Antiquité sous le nom de multiplication posée ou multiplication classique , consiste à multiplier chaque chiffre du premier nombre par chaque chiffre du second, puis à additionner les résultats. Sa complexité temporelle est de O (n ), où n est le nombre de chiffres. Effectuée manuellement, cette opération peut également être appelée multiplication par grille ou multiplication en treillis . En informatique, on parle souvent de « décalage et addition », car seuls des décalages de bits et des additions sont nécessaires.
En 1960, Anatoly Karatsuba découvrit la multiplication de Karatsuba , déclenchant une vague de recherches sur les algorithmes de multiplication rapide. Cette méthode utilise trois multiplications au lieu de quatre pour multiplier deux nombres à deux chiffres. (Une variante permet également de multiplier rapidement des nombres complexes .) Appliquée récursivement , sa complexité temporelle est de O ( n^2). Décomposer un nombre en plus de deux parties donne lieu à la multiplication de Toom-Cook ; par exemple, avec trois parties, on obtient l' algorithme de Toom-3 . Utiliser un grand nombre de parties permet de fixer l'exposant arbitrairement près de 1, mais le facteur constant augmente également, ce qui rend cette méthode impraticable.
En 1968, l' algorithme de Schönhage-Strassen , qui utilise une transformée de Fourier sur un module , a été découvert. Sa complexité temporelle est O(n^2) . En 2007, Martin Fürer a proposé un algorithme de complexité O(n^2) . En 2014, Harvey, Joris van der Hoeven et Lecerf en ont proposé un de complexité O(n^3) , explicitant ainsi la algorithme galactique de complexité O(n^3) . Ce résultat correspond à une hypothèse de Schönhage et Strassen selon laquelle il s'agirait de la borne optimale, bien que cela reste à ce jour une conjecture .
Les algorithmes de multiplication d'entiers peuvent également être utilisés pour multiplier des polynômes au moyen de la méthode de substitution de Kronecker .
système de numération positionnel , une méthode naturelle de multiplication est enseignée à l'école : la multiplication posée , parfois appelée multiplication de base ou algorithme standard . Elle consiste à multiplier le multiplicande par chaque chiffre du multiplicateur , puis à additionner les résultats obtenus après décalage. Elle nécessite la mémorisation des tables de multiplication à un chiffre.Voici l'algorithme habituel pour multiplier manuellement de grands nombres en base 10. Une personne effectuant une longue multiplication sur papier notera tous les produits puis les additionnera ; un utilisateur d'abaque additionnera les produits dès que chacun sera calculé.
Exemple
Cet exemple utilise la multiplication longue pour multiplier 23 958 233 (multiplicande) par 5 830 (multiplicateur) et arrive à 139 676 498 390 pour le résultat (produit).
23958233 × 5830 ——————————————— 00000000 ( = 23 958 233 × 0) 71874699 ( = 23 958 233 × 30) 191665864 ( = 23 958 233 × 800) + 119791165 ( = 23 958 233 × 5 000) ——————————————— 139676498390 ( = 139 676 498 390)
Autres notations
Dans certains pays comme l'Allemagne , la multiplication ci-dessus est représentée de manière similaire, mais avec le produit original conservé à l'horizontale et le calcul commençant par le premier chiffre du multiplicateur :
23958233 · 5830 ——————————————— 119791165 191665864 71874699 00000000 ——————————————— 139676498390
Le pseudocode ci-dessous décrit le processus de multiplication. Il ne conserve qu'une seule ligne pour stocker la somme, qui devient le résultat final. Notez que l'opérateur « += » est utilisé pour ajouter une valeur à une autre et stocker l'opération (comme dans des langages tels que Java et C) par souci de concision.
Lorsqu'ils sont implémentés dans un logiciel, les algorithmes de multiplication longue doivent gérer les dépassements de capacité lors des additions, ce qui peut s'avérer coûteux. Une solution courante consiste à représenter le nombre dans une petite base, b , telle que, par exemple, 8b soit un entier représentable par la machine. Plusieurs additions peuvent alors être effectuées avant qu'un dépassement de capacité ne survienne. Lorsque le nombre devient trop grand, on en ajoute une partie au résultat, ou on reporte la partie restante et on la ramène à un nombre inférieur à b . Ce processus est appelé normalisation . Richard Brent a utilisé cette approche dans son package Fortran, MP.
Les ordinateurs utilisaient initialement un algorithme très similaire à la multiplication posée en base 2, mais les processeurs modernes ont optimisé les circuits pour des multiplications rapides grâce à des algorithmes plus efficaces, au prix d'une implémentation matérielle plus complexe. En base 2, la multiplication posée est parfois appelée « décalage et addition » , car l'algorithme se simplifie et consiste simplement à décaler vers la gauche (multiplier par les puissances de deux) et à additionner. La plupart des microprocesseurs actuels implémentent cet algorithme, ou d'autres similaires (comme le codage de Booth ), pour différentes tailles d'entiers et de nombres à virgule flottante, soit dans des multiplicateurs matériels , soit dans du microcode .la division par une constante peuvent être réalisées à l'aide d'une séquence de décalages et d'additions ou de soustractions. Par exemple, il existe plusieurs façons de multiplier par 10 en utilisant uniquement des décalages binaires et des additions.
