Article de reference

Algorithme de division

Un algorithme de division est un algorithme qui, étant donné deux entiers N et D (respectivement le numérateur et le dénominateur), calcule leur quotient et/ou leur reste , résu...

algorithme qui, étant donné deux entiers N et D (respectivement le numérateur et le dénominateur), calcule leur quotient et/ou leur reste , résultat de la division euclidienne . Certains sont appliqués manuellement, tandis que d'autres sont utilisés dans la conception de circuits numériques et de logiciels.

Les algorithmes de division se répartissent en deux grandes catégories : la division lente et la division rapide. Les algorithmes de division lente produisent un chiffre du quotient final par itération. Parmi les exemples de division lente, on peut citer la division avec restauration , la division avec restauration non performante, la division sans restauration et la division SRT . Les méthodes de division rapide partent d'une approximation précise du quotient final et produisent deux fois plus de chiffres de ce quotient à chaque itération. Les algorithmes de Newton-Raphson et de Goldschmidt appartiennent à cette catégorie.

Des variantes de ces algorithmes permettent d'utiliser des algorithmes de multiplication rapides . Il en résulte que, pour les grands entiers, le temps de calcul nécessaire à une division est le même, à un facteur constant près, que celui nécessaire à une multiplication, quel que soit l'algorithme de multiplication utilisé.

La discussion portera sur le formulaire , où

est l'entrée, et

est le résultat.

de plus grand commun diviseur présenté dans les Éléments d'Euclide , Livre VII, Proposition 1, trouve le reste de la division de deux entiers positifs en utilisant uniquement des soustractions et des comparaisons :

la division euclidienne ) donne lieu à un algorithme de division complet, applicable aux nombres négatifs et positifs, utilisant des additions, des soustractions et des comparaisons :

algorithme sensible à la valeur de sortie ) et peut servir de spécification exécutable.

Mise en œuvre alternative

Considérez ce code en Python :

tuple[int, int] quotient: int = 0 remainder: int = 0 for _ in range(numerator): remainder += 1 if remainder == denominator: quotient += 1 remainder = 0 return quotient, remainder "
def divide_unsigned2 ( numerator : int , denominator : int ) -> tuple [ int , int ] quotient : int = 0 remainder : int = 0 for _ in range ( numerator ): remainder += 1 if remainder == denominator : quotient += 1 remainder = 0 return quotient , remainder

Notes

  • Les cas particuliers sont
  • La variable quotientn'est jamais lue. Ainsi, même si ses affectations

Implémentation alternative sous forme de compteur Une machine à compteurs simple peut être basée sur l'implémentation alternative. Les instructions de la machine à compteurs sont

  • Z (n) : Remplacez r n par 0.
  • S (n) : Ajouter 1 à r n .
  • J (m, n, q) : Si r m = r n , sautez à la qème instruction ; sinon, passez à l'instruction suivante dans le programme.

Le programme de la machine de comptage est

division euclidienne est une forme abrégée de la division euclidienne, adaptée aux diviseurs à un chiffre. La méthode par quotients partiels (ou méthode du pendu ) est une forme moins efficace de la division euclidienne, mais potentiellement plus facile à appréhender. En autorisant la soustraction de multiples supplémentaires à chaque étape, on peut également développer une variante plus flexible de la division euclidienne.division euclidienne , divise N par D , plaçant le quotient dans Q et le reste dans R. Dans le pseudo-code suivant, toutes les valeurs sont traitées comme des entiers non signés.

méthodes de division rapide

Division Newton-Raphson

La méthode de Newton-Raphson utilise la méthode de Newton pour trouver l' inverse de et multiplier cet inverse par pour trouver le

Les étapes de la division de Newton-Raphson sont :

  1. Calculez une estimation de l'inverse du diviseur .
  2. Calculer des estimations de plus en plus précises de l'inverse. C'est là qu'intervient la méthode de Newton-Raphson.
  3. Calculez le quotient en multipliant le dividende par l'inverse du diviseur : .

Pour appliquer la méthode de Newton afin de trouver l'inverse de , il est nécessaire de trouver une fonction qui s'annule en . La fonction évidente est , mais l'itération de Newton-Raphson est inefficace pour cette fonction, car elle ne peut être calculée sans connaître au préalable l'inverse de (de plus, elle tente de calculer l'inverse exact en une seule étape, au lieu de permettre des améliorations itératives). Une fonction qui fonctionne est , pour laquelle l'itération de Newton-Raphson donne

qui peut être calculé en utilisant uniquement la multiplication et la soustraction, ou en utilisant deux multiplications-additions fusionnées .

Du point de vue du calcul, les expressions et ne sont pas équivalentes. Pour obtenir un résultat avec une précision de 2n bits en utilisant la seconde expression, il faut calculer le produit entre et avec une précision double de celle donnée ( n bits). En revanche, le produit entre et ne nécessite qu'une précision de n bits, car les n bits de poids fort (après la virgule binaire) de sont nuls.

Si l'erreur est définie comme , alors :

Cette élévation au carré de l'erreur à chaque itération la convergence quadratique de la méthode de Newton-Raphson a pour effet de doubler approximativement le nombre de chiffres exacts du résultat à chaque itération , une propriété qui devient extrêmement précieuse lorsque les nombres en jeu ont un grand nombre de chiffres (par exemple, dans le domaine des grands entiers). Cependant, cela signifie également que la convergence initiale de la méthode peut être relativement lente, surtout si l'estimation initiale est mal choisie.

estimation initiale

Pour le sous-problème du choix d'une estimation initiale , il est pratique d'appliquer un décalage binaire au diviseur D afin de le normaliser de sorte que 0,5 ≤ D ≤ 1. Appliquer le même décalage binaire au numérateur N garantit que le quotient reste constant. Une fois dans cet intervalle, une approximation polynomiale simple permet d'obtenir une estimation initiale.

L' approximation linéaire avec une erreur absolue minimale dans le pire des cas sur l'intervalle est :

Les coefficients de l' approximation linéaire sont déterminés comme suit. La valeur absolue de l'erreur est . Le minimum de la valeur absolue maximale de l'erreur est déterminé par le théorème d'équioscillation de Tchebychev appliqué à . Le minimum local de se produit lorsque , ce qui admet la solution . La fonction en ce minimum doit être de signe opposé à celle aux extrémités, c'est-à-dire . Les deux équations à deux inconnues ont une solution unique et , et l'erreur maximale est . En utilisant cette approximation, la valeur absolue de l'erreur sur la valeur initiale est inférieure à

La meilleure approximation quadratique de dans l'intervalle est

On choisit de rendre l'erreur égale à un polynôme de Tchebychev de première espèce du troisième ordre, mis à l'échelle, et on obtient une valeur absolue de l'erreur inférieure ou égale à 1/99. Cette amélioration est équivalente aux itérations de Newton-Raphson, pour un coût de calcul inférieur à une itération.

Il est possible de générer une approximation polynomiale de degré supérieur à 2, en calculant les coefficients à l'aide de l' algorithme de Remez . En contrepartie, l'estimation initiale nécessite davantage de cycles de calcul, mais on peut espérer réduire le nombre d'itérations de la méthode de Newton-Raphson.

Puisque la convergence de cette méthode est exactement quadratique, il s'ensuit que, à partir d'une erreur initiale , les itérations donneront une réponse précise à

Positions binaires. Les valeurs typiques sont :

Chiffres binaires d'exactitude réciproque
Itérations
01234
la précision simple IEEE , mais trois itérations sont limites pour la double précision . Une estimation initiale linéaire suivie de quatre itérations est suffisante pour les formats double précision et double précision étendue .

Pseudocode

La formule suivante calcule le quotient de

Le terme Y i ε i est nouveau.

En développant ce qui précède, on peut écrire :

avec pour résultat le terme d'erreur

Cette méthode représente les trois moitiés du calcul de l'itération quadratique, mais atteint la même convergence, ce qui la rend légèrement plus efficace. Autrement dit, deux itérations de cette méthode élèvent l'erreur à la puissance neuf pour un coût de calcul équivalent à celui de trois itérations quadratiques, qui ne l'élèvent qu'à la puissance huit.

Le nombre de bits corrects après itérations est

Positions binaires. Les valeurs typiques sont :

Bits de précision réciproque
Itérations
0123