Soit et y deux nombres binaires à n bits et z = x ⋅ y le nombre binaire (longueur 2 n ) du produit de x et y . Nous voulons calculer le bit le plus siginifcant z 2 n - 1 du produit z = z 2 n - 1 … z 0 .
Afin d'analyser la complexité de cette fonction dans le modèle des diagrammes de décision binaires (en particulier les programmes de branchement à lecture unique), j'essaie de rechercher des expressions équivalentes pour le cas . La première chose évidente est z 2 n - 1 = 1 ⇔ x ⋅ y ≥ 2 2 n - 1 (ici x et y sont les entiers correspondants aux nombres binaires). Je veux avoir une intuition de ce qui se passe si je fixe des bits d'entrée constants. Par exemple, si je règle le bit d'entrée le plus significatif de et y à 0 J'obtiens la fonction constante 0. Mais les bits de moindre importance n'ont pas une telle influence sur le résultat.
Existe-t-il d'autres expressions équivalentes pour le cas qui aident davantage à voir ce qui se passe si je corrige certains bits d'entrée? Existe-t-il des méthodes raffinées pour calculer le produit de deux nombres binaires qui peuvent aider? Ou avez-vous une autre approche à ce problème?
Réponses:
Une source intéressante est DE Knuth: The Art of Computer Programming, Volume 4, Fascicle 1, Bitwise Tricks & Techniques; Diagrammes de décision binaires , Addison-Wesley, Pearson Education 2009
À la page 96, il existe un BDD pour tous les bits de z = x⋅y, où x et y ont 3 bits. Il montre que dans le cas de 3 bits, BDD représentant le bit le plus significatif a 7 nœuds non terminaux. Voir l'image ci-dessous, je l'ai redessinée en utilisant vos indices x = (x2, x1, x0) et y = (y2, y1, y0).
À la page 140 du livre de Knuth, il y a une question (n ° 183) sur BDD représentant le bit le plus significatif pour la multiplication de deux nombres avec une infinité de bits (il est appelé "limitation de la fonction de bit de tête") - ceci est similaire à ce que vous loking pour! La réponse à la page 223 donne les premiers niveaux du BDD résultant et discute du nombre de nœuds à tous les niveaux, mais malheureusement, il ne donne pas d'algorithme pour construire un tel BDD.
Fig.1: Le bit le plus significatif pour la multiplication de (x2, x1, x0) * (y2, y1, y0)
la source