- Apprendre
- Informatique et numérique
- Informatique
- Architecture informatique : processeur, mémoire et RISC-V
- Arithmétique des ordinateurs
Arithmétique des ordinateurs
IntermédiaireUnité 3 sur 6 de la formation Formation : Architecture informatique : processeur, mémoire et RISC-V
Ce que tu vas apprendre
- Utilise un même additionneur binaire pour les additions et les soustractions signées et non signées, et détermine quand un résultat ne peut plus être représenté avec les bits disponibles.
- Additionne et soustrais des entiers binaires avec un même additionneurAdditionne des nombres de n bits colonne par colonne, soustrais en ajoutant le complément à deux et découvre pourquoi le même circuit convient aux valeurs signées et non signées.
- Détecte les dépassements de capacité pour les résultats signés et non signésDistingue la retenue du dépassement de capacité, détecte chacun avec un circuit simple ou une courte séquence d’instructions, et découvre comment les processeurs et les langages les traitent.
- Additionne et soustrais des entiers binaires avec un même additionneur
- Construis une unité arithmétique et logique à partir de tranches de 1 bit pour additionner, soustraire, comparer et effectuer des opérations logiques, puis accélère sa chaîne de retenue.
- Construis une unité arithmétique et logique à n bits à partir de tranches de 1 bitAssocie des portes logiques, un additionneur complet et des multiplexeurs pour former une unité arithmétique et logique de 1 bit, enchaîne les tranches pour obtenir une unité de n bits et sélectionne les opérations avec des lignes de commande.
- Compare des nombres et détecte un résultat nul dans l’unité arithmétique et logiqueProduis la sortie zéro pour les branchements sur égalité et le résultat de comparaison inférieur à pour les nombres signés et non signés, en tenant compte de la correction du dépassement de capacité.
- Accélère l’addition grâce à l’anticipation de retenueExplique pourquoi les retenues ralentissent les additionneurs à propagation et calcule les retenues à l’avance grâce aux signaux de génération et de propagation.
- Construis une unité arithmétique et logique à n bits à partir de tranches de 1 bit
- Multiplie et divise comme le font les circuits matériels, des simples circuits à décalages et additions aux règles des nombres signés, aux multiplicateurs rapides et aux instructions RISC-V.
- Multiplie par décalages et additionsMultiplie des nombres binaires non signés avec l’algorithme séquentiel par décalages et additions, donne au produit la bonne largeur et utilise les décalages pour les puissances de deux.
- Multiplie des nombres signés et accélère la multiplicationTraite les opérandes en complément à deux, recode les multiplicateurs avec l’algorithme de Booth et explique comment les multiplicateurs en arbre atteignent une vitesse élevée.
- Divise des entiers et traite les cas particuliersDivise avec l’algorithme avec restauration, applique les règles de signe du quotient et du reste, et découvre comment les circuits et RISC-V traitent la division par zéro et les dépassements de capacité.
- Multiplie par décalages et additions
- Code et décode des valeurs binaires IEEE 754, explique la plage de valeurs et la précision de chaque format, et reconnais les zéros, les infinis, les NaN et les nombres sous-normaux.
- Code et décode les formats binaires IEEE 754Écris un nombre en notation scientifique binaire normalisée, stocke-le dans les champs de signe, d’exposant biaisé et de fraction, puis retrouve la valeur à partir des bits stockés.
- Utilise les zéros, les infinis, les NaN et les nombres sous-normauxReconnais les configurations réservées du champ d’exposant, explique le sous-dépassement graduel et prévois les résultats et les indicateurs des opérations exceptionnelles.
- Code et décode les formats binaires IEEE 754
- Suis les étapes matérielles de l’addition et de la multiplication en virgule flottante, arrondis correctement les résultats et prévois les erreurs de précision qui en découlent.
- Additionne et multiplie des nombres à virgule flottanteAligne, effectue l’opération, normalise et arrondis dans l’ordre suivi par les circuits à virgule flottante, et utilise les instructions RISC-V à virgule flottante.
- Arrondis correctement les résultatsApplique les directions d’arrondi IEEE 754, arrondis au plus proche avec départage au pair et utilise les bits de garde, d’arrondi et collant pour arrondir comme avec une précision infinie.
- Prévois et évite les erreurs de précisionExplique pourquoi des valeurs décimales familières sont inexactes en binaire, pourquoi l’addition en virgule flottante n’est pas associative et comment l’absorption, l’annulation et les conversions provoquent des erreurs réelles.
- Additionne et multiplie des nombres à virgule flottante
Arithmétique des ordinateurs : cours
1Additionne et soustrais des entiers, et détecte les dépassements de capacité
Un additionneur produit des bits avant que l’on décide s’ils représentent des nombres signés ou non signés. Suis les retenues pendant l’addition, réutilise le même circuit pour la soustraction, puis vérifie si le résultat appartient à la plage appropriée. La distinction compte aussi dans les programmes : un processeur peut conserver des indicateurs d’état, renvoyer les bits de poids faible ou déclencher une exception, tandis qu’un langage de programmation applique ses propres règles à ces opérations machine.
1.1 Additionne et soustrais des entiers binaires avec un même additionneur
Un additionneur binaire effectue la même petite opération à chaque position de bit. Il combine les deux bits des opérandes avec une retenue provenant de la position située à droite. La signification de la configuration de bits obtenue vient ensuite.
Suivre la retenue
Un demi-additionneur possède deux entrées : sa somme est leur OU exclusif et sa retenue est leur ET. Un additionneur complet accepte aussi une retenue entrante :
Ici, la multiplication signifie ET et l’addition signifie OU. La somme vaut 1 pour un nombre impair d’entrées à 1 ; la retenue vaut 1 lorsqu’au moins deux entrées sont à l’état haut. Enchaîner des additionneurs complets forme un additionneur à propagation de retenue. Seul le bit 0 reçoit la retenue initiale ; chaque bit suivant reçoit la retenue produite par son voisin.
Pour 23 + 45, écris 0001 0111 + 0010 1101. Au bit 0, 1 + 1 produit une somme de 0 et une retenue de 1. Au bit 1, 1 + 0 + 1 produit à nouveau 0 et une retenue de 1. Au bit 2, trois entrées à 1 produisent une somme de 1 et une retenue de 1. En continuant vers la gauche, on obtient 0100 0100, soit 68, sans retenue finale.
Un résultat de n bits ne conserve que les n bits de poids faible : le circuit calcule donc la somme modulo . Sur 8 bits, 1111 1100 + 0000 0101 produit 0000 0001 et une retenue sortante de 1. En signé, cela donne −4 + 5 = 1. En non signé, cela donne 252 + 5 = 257, dont les huit bits de poids faible représentent 1. Le circuit n’a pas changé ; c’est la plage autorisée qui a changé.
Transformer la soustraction en addition
Le complément à deux donne l’identité
Une ligne de commande de soustraction combine par OU exclusif chaque bit du second opérande avec 1, ce qui l’inverse, et fixe la retenue entrante initiale à 1. Pour l’addition, cette ligne vaut 0 : le second opérande passe donc sans changement et la retenue initiale vaut 0.
Pour calculer 23 − 45, inverse 0010 1101 pour obtenir 1101 0010. Additionne 0001 0111 + 1101 0010 + 1 pour obtenir 1110 1010, avec une retenue sortante de 0. Sa valeur signée est −22. Laisser la retenue initiale à 0 donnerait −23 : l’inversion seule fournit une valeur inférieure de un à la valeur négative recherchée.
Pour une soustraction non signée, une retenue sortante de 1 signifie aucun emprunt ; une retenue sortante de 0 signifie qu’un emprunt a été nécessaire. Ainsi, la retenue sortante de 0 dans 23 − 45 indique un résultat non signé inférieur à zéro. Arm enregistre cette retenue qui indique l’absence d’emprunt ; x86 enregistre son inverse comme indicateur d’emprunt.
Adapter les largeurs avant l’opération
| Interprétation | Règle d’extension | Extension de 1110 de 4 à 8 bits |
|---|---|---|
| Signé en complément à deux | Copier le bit de signe | 1111 1110, toujours −2 |
| Non signé | Insérer des zéros | 0000 1110, toujours 14 |
En RISC-V, lb étend le signe d’un octet, lbu l’étend par des zéros et addi étend le signe de sa valeur immédiate de 12 bits. Choisis l’extension selon la signification de l’opérande avant d’envoyer les bits à l’additionneur.
La plus petite valeur signée négative n’a pas de valeur positive correspondante sur la même largeur. Calculer l’opposé de 1000 0000 sur 8 bits consiste à l’inverser en 0111 1111 puis à ajouter 1, ce qui redonne 1000 0000. La valeur souhaitée +128 nécessite un format signé plus large.
Points clés
- Un additionneur complet combine deux bits d’opérandes et une retenue entrante.
- La somme stockée sur n bits est la somme mathématique modulo .
- La soustraction inverse le second opérande et met à 1 uniquement la retenue entrante initiale.
- Dans ce circuit de soustraction, une retenue sortante de 1 signifie qu’il n’y a pas d’emprunt en non signé.
- L’extension de signe conserve les valeurs signées ; l’extension par des zéros conserve les valeurs non signées.
1.2 Détecte les dépassements de capacité pour les résultats signés et non signés
Un dépassement de capacité signifie que le résultat exact se trouve hors de la plage du format de destination. Les valeurs non signées de n bits vont de 0 à ; les valeurs signées en complément à deux vont de à . Huit bits représentent les valeurs de 0 à 255 en non signé, ou de −128 à 127 en signé. Un même résultat stocké peut être valide dans une interprétation et correspondre à un dépassement dans l’autre.
Tester le bon signal
| Opération | Dépassement non signé | Dépassement signé |
|---|---|---|
| Addition | La retenue sortante du bit de poids fort vaut 1 | Des entrées de même signe produisent un résultat de signe opposé |
| Soustraction | Un emprunt est nécessaire | Des entrées de signes différents produisent un résultat dont le signe diffère de celui de la première entrée |
Pour une addition ou une soustraction signée, le circuit peut utiliser
les deux retenues entrant dans la position du signe et en sortant. La retenue sortante seule répond à la question pour les valeurs non signées.
Additionne 107 et 54 sur 8 bits : 0110 1011 + 0011 0110 donne 1010 0001. Une retenue entre dans le bit 7 mais aucune n’en sort, donc le dépassement vaut 1. La valeur non signée 161 est représentable ; la valeur signée −95 n’est pas égale à la somme exacte 161. Inversement, −4 + 5 donne une retenue de 1 mais un dépassement signé de 0. L’addition de 1000 0000 à lui-même donne une retenue de 1 et un dépassement de 1 : les deux interprétations échouent donc.
L’addition de nombres de signes opposés ne peut pas produire de dépassement : la somme exacte se trouve entre les opérandes. La soustraction nécessite sa propre règle de signe, car soustraire un nombre négatif augmente le premier opérande. Par exemple, 100 − (−40) est trop grand pour un entier signé sur 8 bits, même si les deux valeurs d’entrée sont représentables.
Comprendre l’effet de l’instruction
Sur x86, add définit les indicateurs de retenue et de dépassement. Sur Arm, les opérations qui définissent les indicateurs, comme ADDS, les modifient ; un ADD ordinaire conserve les indicateurs existants. Sur MIPS, add et addi déclenchent une trappe en cas de dépassement signé, contrairement à addu et addiu. L’addition entière RISC-V écrit les bits de poids faible et ne possède ni indicateur de dépassement ni trappe de dépassement arithmétique.
Après add t0, t1, t2, une vérification RISC-V non signée est :
bltu t0, t1, overflow
Une somme non signée ayant subi un retour circulaire est inférieure à un opérande d’origine. Les valeurs signées nécessitent une autre vérification :
slti t3, t2, 0
slt t4, t0, t1
bne t3, t4, overflow
La première instruction indique si le second opérande est négatif. La deuxième indique si le résultat est inférieur au premier opérande. Sans dépassement, ces tests concordent : ajouter un nombre négatif diminue la valeur, tandis qu’ajouter une valeur positive ou nulle ne peut pas la diminuer. Une différence détecte un dépassement. Pour une valeur immédiate connue comme positive, un branchement signé vérifiant si la somme a diminué suffit.
Distinguer les règles du matériel et celles du langage
En C et C++, l’arithmétique non signée revient dans la plage modulo ; un dépassement signé est un comportement indéfini. En Java, int et long reviennent dans la plage, tandis que Math.addExact signale un dépassement par une exception. Les entiers Python grandissent selon les besoins. Un retour circulaire du matériel ne détermine donc pas ce qu’un programme C est autorisé à faire.
Les additions et soustractions avec retour circulaire conservent un résultat final représentable : en arithmétique modulaire sur 8 bits, (100 + 50) − 60 devient d’abord −106, puis 90 par retour circulaire. Ce raisonnement s’applique à l’arithmétique avec retour circulaire, pas aux expressions signées en C qui produisent un dépassement.
La saturation est une autre politique. En non signé sur 8 bits, 200 + 100 est saturé à 255 au lieu de revenir à 44. Cela sert pour les intensités de pixels et d’autres signaux bornés, pour lesquels le retour circulaire d’un grand résultat positif vers une petite valeur serait trompeur.
Points clés
- Choisis les tests de dépassement selon l’interprétation des opérandes et l’opération.
- Le dépassement signé est le OU exclusif des retenues entrante et sortante du bit de signe.
- Un programme RISC-V doit tester le dépassement de capacité entier lorsqu’il doit le signaler.
- Le dépassement signé en C, le retour circulaire en Java et les entiers extensibles de Python ont des sémantiques différentes.
- L’addition et la soustraction modulaires peuvent retrouver une valeur finale représentable après des retours circulaires intermédiaires.
- La saturation ramène un résultat hors plage à une borne de la plage.
2Conçois une unité arithmétique et logique
Une unité arithmétique et logique réunit plusieurs opérations dans un même circuit. Des portes et un additionneur calculent des résultats possibles, des lignes de commande en sélectionnent un et quelques sorties supplémentaires permettent de tester l’égalité et l’ordre. Construis cette structure à partir de tranches de bits, découvre pourquoi la comparaison signée nécessite une correction du dépassement de capacité, puis raccourcis le chemin de retenue pour qu’un chemin de données plus large puisse produire son résultat arithmétique sans attendre qu’une retenue traverse tous les bits.
2.1 Construis une unité arithmétique et logique à n bits à partir de tranches de 1 bit
Une unité arithmétique et logique reçoit des opérandes et des entrées de commande et produit un résultat ainsi que des sorties d’état. Elle est combinatoire : ses sorties dépendent des entrées présentes. Les registres conservent les opérandes et recueillent les résultats ; l’unité elle-même ne stocke rien.
Construire un bit, puis le répéter
Une tranche de 1 bit calcule en parallèle les opérations ET et OU et la somme d’un additionneur complet. Un multiplexeur sélectionne le résultat qui atteint le bit de sortie. Dans une unité arithmétique et logique de n bits, toutes les tranches partagent les commandes d’opération, tandis que la retenue sortante de chaque additionneur alimente la retenue entrante de la tranche suivante. Les opérations logiques fonctionnent indépendamment à chaque position ; l’addition dépend de la chaîne de retenue.
Une commande Bnegate inverse le second opérande et fixe aussi la retenue entrante du bit 0. La sélection de l’additionneur calcule alors une soustraction. Les tranches de poids plus fort reçoivent leur retenue de la tranche précédente, et non directement de Bnegate. Mettre toutes les entrées de retenue à l’état haut insérerait des uns supplémentaires dans le calcul.
Une commande Ainvert peut aussi inverser le premier opérande. Sélectionner ET avec les deux opérandes inversés produit NON-OU, d’après la loi de De Morgan :
Sélectionner OU avec les deux opérandes inversés produit NON-ET. Dans ces équations logiques, le signe plus désigne OU.
Lire un mot de commande
Une unité arithmétique et logique classique présentée dans les manuels utilise les champs Ainvert, Bnegate et un sélecteur Operation de deux bits :
| Mot de commande | Résultat sélectionné |
|---|---|
0000 | ET |
0001 | OU |
0010 | Addition |
0110 | Soustraction |
0111 | Mise à un si inférieur en signé |
1100 | NON-OU |
Ce sont les codages propres à cette conception. Il s’agit de commandes internes, et non de codages d’instructions RISC-V.
Pour les entrées 0101 et 0011, la commande 0110 inverse la seconde entrée en 1100 et fournit une retenue initiale de 1. L’additionneur produit 0010, avec une retenue sortante de 1 : 5 − 3 = 2, sans emprunt en non signé. Sélectionner ET pour les entrées d’origine produirait au contraire 0001. Les valeurs d’entrée peuvent rester fixes tandis qu’un changement de commande sélectionne un autre chemin de résultat.
La tranche de poids fort fournit aussi des informations de dépassement et de comparaison. Une réduction de tous les bits du résultat fournit la sortie zéro. Ces sorties d’état permettent à l’unité de commande du processeur de tester le résultat arithmétique sans stocker un second résultat de pleine largeur.
Ajouter le décalage à côté de l’additionneur
Une unité arithmétique et logique complète pour les instructions entières de base RISC-V nécessite aussi le OU exclusif, la comparaison non signée et les décalages. Un décaleur à barillet utilise une suite de niveaux de multiplexeurs. Chaque niveau laisse passer son entrée ou la décale d’une puissance de deux. Un décaleur de 32 bits possède des niveaux pour 1, 2, 4, 8 et 16 positions ; il réalise donc tout décalage de 0 à 31 en cinq niveaux.
Pour décaler de 13 positions, sélectionne les niveaux de 8, 4 et 1. Les décalages sélectionnés se combinent en un seul résultat. Un décalage logique à droite insère des zéros. Un décalage arithmétique à droite recopie le bit de signe, ce qui préserve le signe d’une valeur négative. Ainsi, 1111 0000 décalé de deux positions à droite donne 0011 1100 avec un décalage logique et 1111 1100 avec un décalage arithmétique.
Points clés
- Une unité arithmétique et logique calcule à partir des entrées actuelles ; les registres assurent le stockage.
- Les tranches de bits partagent les commandes d’opération et transmettent les retenues entre positions voisines.
- Bnegate inverse le second opérande et fournit la retenue initiale pour la soustraction.
- Un multiplexeur sélectionne parmi les résultats arithmétiques et logiques.
- Les niveaux d’un décaleur à barillet combinent des décalages par puissances de deux.
2.2 Compare des nombres et détecte un résultat nul dans l’unité arithmétique et logique
Les comparaisons réutilisent souvent la soustraction. Pour l’égalité, on vérifie si la différence est nulle. Pour l’ordre, on vérifie si la différence mathématique est négative, ce qui demande une attention particulière lorsqu’une soustraction de largeur fixe produit un dépassement de capacité.
Détecter l’égalité sur tous les bits
La sortie zéro est le NON-OU de tous les bits du résultat :
Un seul bit de résultat non nul met la sortie zéro à faux. La soustraction de deux configurations de bits égales produit zéro ; deux configurations distinctes de n bits ne peuvent pas différer d’un multiple non nul de , donc une soustraction avec retour circulaire ne crée pas de fausse égalité. Un autre circuit d’égalité combine par OU exclusif les bits correspondants des opérandes et vérifie si tous les résultats valent zéro.
Corriger le signe pour la comparaison signée inférieur à
En RISC-V, slt écrit l’entier 1 sur toute la largeur si le premier opérande signé est plus petit, ou 0 sinon. Dans une unité arithmétique et logique à tranches, la tranche de poids fort calcule un signal Set et le renvoie à l’entrée Less du bit 0. Tous les bits de poids plus fort du résultat sont forcés à zéro.
Le signal Set correct est
En l’absence de dépassement, le signe de la différence convient directement. En cas de dépassement, ce signe est inversé par rapport à celui de la différence exacte : un OU exclusif avec 1 le corrige donc.
Compare 7 à −8 sur quatre bits. La soustraction 0111 + 0111 + 1 donne 1111. Son signe suggère une différence négative, mais la différence exacte est 15, hors de la plage de −8 à 7. Le dépassement vaut 1, donc le signal Less corrigé vaut 1 OU exclusif 1 = 0. Le résultat de slt est 0000, ce qui indique correctement que 7 n’est pas inférieur à −8.
Utiliser l’emprunt pour la comparaison non signée inférieur à
La comparaison non signée utilise un autre signal :
pour une soustraction effectuée avec la seconde entrée inversée et une retenue initiale de 1. Une retenue sortante de 0 signifie qu’un emprunt a été nécessaire : le premier opérande non signé est donc plus petit.
| Configurations d’entrée | Comparaison signée | Comparaison non signée |
|---|---|---|
0111, 1000 | 7 < −8 est faux | 7 < 8 est vrai |
1000, 0111 | −8 < 7 est vrai | 8 < 7 est faux |
Cette distinction apparaît entre slt et sltu, ainsi qu’entre les branchements blt et bltu et entre bge et bgeu. Ni le signe du résultat seul ni un « indicateur négatif » générique ne répond aux deux questions.
Appliquer la comparaison dans un programme
Une vérification des bornes non signée peut rejeter les indices négatifs ainsi que les indices supérieurs ou égaux à la longueur du tableau :
bgeu x10, x11, IndexOutOfBounds
Ici, x10 contient l’indice signé et x11 contient une longueur positive ou nulle représentable dans la plage signée. Un indice négatif, réinterprété comme non signé, vaut au moins et dépasse donc toute longueur de ce type. La condition sur la longueur compte : elle permet à une seule comparaison non signée de suffire.
Les conversions du langage peuvent aussi changer le sens d’une comparaison. Avec un unsigned int C de 32 bits, -1 < 0u est faux car −1 est converti en 4 294 967 295 avant la comparaison. Suis la conversion avant de raisonner à partir du signe moins écrit.
Points clés
- La sortie zéro teste tous les bits du résultat : la soustraction peut donc servir à tester l’égalité.
- La comparaison signée inférieur à utilise le OU exclusif du signe de la différence et du dépassement signé.
- La comparaison non signée inférieur à utilise l’emprunt de la soustraction.
- La mise à un si inférieur écrit 0 ou 1 sur toute la largeur du résultat.
- Une vérification des bornes non signée détecte les indices négatifs lorsque la longueur est représentable dans la plage signée positive ou nulle.
- Les conversions peuvent transformer une comparaison signée en comparaison non signée.
2.3 Accélère l’addition grâce à l’anticipation de retenue
Dans un additionneur à propagation, la retenue doit traverser chaque bit successivement. L’anticipation de retenue remplace cette attente séquentielle par un circuit logique qui prévoit les retenues à partir des bits des opérandes et de la retenue initiale.
Décrire le comportement de chaque bit vis-à-vis de la retenue
Définissons les signaux de génération et de propagation par
Ce sont des expressions booléennes : la multiplication représente ET et l’addition représente OU. Le signal de génération vaut 1 lorsque le bit crée une retenue indépendamment de la retenue entrante. Le signal de propagation vaut 1 lorsqu’une retenue entrante peut passer. La relation de récurrence est
Un bit dont les deux entrées valent 1 génère une retenue ; un bit dont une entrée vaut 1 transmet une retenue ; un bit dont les deux entrées valent 0 l’arrête. Avec cette définition par OU, un bit qui génère une retenue a aussi un signal de propagation égal à 1, ce qui ne change pas la formule de la retenue.
Développer la dépendance
Remplace chaque retenue précédente par son expression :
Chaque expression dépend désormais de signaux issus des opérandes et de la retenue initiale, et non d’une chaîne séquentielle de retenues sortantes intermédiaires. Une fois les retenues disponibles, chaque bit de somme reste le OU exclusif de ses deux entrées et de sa retenue entrante.
Pour 1011 + 0110 avec une retenue initiale de 0, les signaux de génération à partir du bit 0 sont 0, 1, 0, 0 et les signaux de propagation sont 1, 1, 1, 1. Les retenues entrant dans les bits 1 à 4 sont donc 0, 1, 1, 1. Les quatre bits du résultat sont 0001 avec une retenue sortante de 1, ce qui représente 11 + 6 = 17.
Construire des groupes plutôt que des portes géantes
Un bloc de quatre bits possède les signaux de groupe
Sa retenue sortante est . Un second niveau d’anticipation combine ces signaux de bloc selon la même règle. Quatre blocs de quatre bits et une unité d’anticipation de groupe forment un additionneur de 16 bits. Des regroupements supplémentaires permettent de construire des circuits plus larges ; les additionneurs à préfixe parallèle comme Kogge–Stone organisent ces relations en un réseau rapide.
Dans un modèle simple de délai de porte, la propagation de retenue coûte environ deux délais de porte par bit, soit 32 pour 16 bits. Une conception à anticipation sur deux niveaux peut fournir la dernière retenue en environ cinq délais : un pour les signaux de bit, deux pour les signaux de groupe et deux pour la retenue de groupe. Cette estimation compte les niveaux logiques et suppose que les portes nécessaires sont disponibles ; le délai réel dépend aussi de la taille des portes et du câblage. Le regroupement utilise davantage de matériel pour obtenir un chemin de retenue dont le délai croît approximativement de façon logarithmique avec la largeur.
Un additionneur à sélection de retenue utilise la surface autrement : il calcule deux fois un bloc de poids fort, une fois pour une retenue entrante de 0 et une fois pour une retenue entrante de 1. Un multiplexeur sélectionne le bon résultat lorsque la retenue du bloc de poids faible arrive.
Certains additionneurs définissent la propagation avec un OU exclusif au lieu d’un OU. Cela donne aussi des retenues correctes et permet d’écrire la somme . Garde la même définition lorsque tu déduis le circuit logique des groupes.
Points clés
- La génération crée une retenue ; la propagation transmet une retenue entrante.
- Développer les équations de retenue supprime la dépendance séquentielle à chaque retenue sortante précédente.
- Les signaux de génération et de propagation de groupe permettent aux additionneurs larges d’utiliser plusieurs niveaux d’anticipation.
- L’anticipation et la sélection de retenue utilisent davantage de surface de circuit pour gagner en vitesse sans changer la somme.
3Multiplie et divise des entiers avec des circuits matériels
La multiplication combine des produits partiels décalés ; la division détermine un chiffre du quotient à partir d’un reste qui évolue. Suis ces deux procédés dans de petits registres, puis découvre comment les opérandes signés modifient les étapes à suivre. Les multiplicateurs plus rapides forment et réduisent simultanément de nombreux produits partiels, tandis que les diviseurs doivent gérer les dépendances entre étapes. Les instructions RISC-V fournissent les moitiés du produit, les quotients et les restes selon des règles précises pour les entrées exceptionnelles.
3.1 Multiplie par décalages et additions
Chaque bit du multiplicateur binaire sélectionne une copie décalée du multiplicande ou zéro. L’addition de ces produits partiels donne le résultat. Un opérande de n bits multiplié par un opérande de m bits peut nécessiter n + m bits : deux opérandes de 32 bits nécessitent donc un produit complet de 64 bits.
Suivre les décalages et additions
Pour des opérandes non signés de n bits, initialise à zéro un produit de 2n bits. Répète n fois : teste le bit de poids faible du multiplicateur, ajoute le multiplicande courant si ce bit vaut 1, décale le multiplicande à gauche et décale le multiplicateur à droite. Le registre du multiplicande doit être assez large pour conserver ses copies décalées.
Pour 6 × 5 sur quatre bits, le multiplicateur est 0101 :
| Étape | Bit de poids faible du multiplicateur | Multiplicande décalé | Produit en cours |
|---|---|---|---|
| 1 | 1 | 0000 0110 | 0000 0110 |
| 2 | 0 | 0000 1100 | 0000 0110 |
| 3 | 1 | 0001 1000 | 0001 1110 |
| 4 | 0 | 0011 0000 | 0001 1110 |
Le produit final est 30. Le bit testé et la direction du décalage vont ensemble : tester le bit de poids fort tout en décalant le multiplicateur à droite associerait les bits aux mauvais poids. Cette conception séquentielle prend n étapes, y compris celles dont le bit du multiplicateur vaut zéro.
Partager l’espace des registres
La première conception utilise un registre de multiplicande et un additionneur de 2n bits. Une conception améliorée garde le multiplicande fixe sur n bits, place le multiplicateur dans la moitié de poids faible d’un registre de produit de 2n bits et initialise la moitié de poids fort à zéro.
Lorsque le bit de poids faible vaut 1, ajoute le multiplicande à la moitié de poids fort. Conserve la retenue sortante de l’additionneur dans un bit supplémentaire, puis décale cette retenue et les deux moitiés du produit ensemble à droite. Les bits du multiplicateur sortent par la droite à mesure que les bits du produit occupent l’espace libéré. Supprimer la retenue fausse les grands produits : avec des opérandes de quatre bits, 15 × 15 deviendrait à tort 1 au lieu de 225. À raison d’une étape par cycle d’horloge, l’implémentation simple sur 32 bits prend environ 32 cycles.
Tenir compte de la largeur du produit
Un produit non signé est représentable sur n bits si et seulement si les n bits de poids fort de son produit complet sont nuls. Pour 6 × 5, le résultat complet est 0001 1110 ; stocker uniquement 1110 donne 14. La multiplication était correcte, mais le format de destination trop étroit en a éliminé une partie.
Un décalage de k positions à gauche multiplie par lorsque le résultat est représentable. La multiplication par 8 devient un décalage de trois positions ; la multiplication par 10 peut utiliser deux copies décalées :
(x << 3) + (x << 1)
Le calcul est . Les règles de largeur et du langage de programmation s’appliquent toujours aux décalages et à l’addition ; cette réécriture ne crée pas de bits de résultat supplémentaires.
Lire les moitiés du résultat RISC-V
mul renvoie les XLEN bits de poids faible, où XLEN est la largeur des registres entiers. mulhu renvoie la moitié de poids fort pour des opérandes non signés. Les instructions de moitié de poids fort avec opérandes signés sont mulh pour deux opérandes signés et mulhsu pour un premier opérande signé et un second non signé.
Un programme qui demande le produit complet peut émettre l’instruction appropriée pour la moitié de poids fort, suivie de mul avec les mêmes opérandes. Une implémentation peut fusionner ces deux instructions. Le résultat de poids faible seul ne permet pas d’établir si un produit non signé est représentable ; la moitié de poids fort fournit cette information.
Points clés
- Chaque bit du multiplicateur sélectionne un produit partiel décalé ou zéro.
- Le produit complet peut nécessiter la somme des largeurs des opérandes.
- La multiplication séquentielle par décalages et additions prend une étape par bit du multiplicateur.
- Le multiplicateur compact doit conserver la retenue de l’addition avant le décalage.
- Un produit non signé est représentable sur une largeur réduite si et seulement si sa moitié de poids fort est nulle.
- RISC-V fournit une instruction de multiplication pour la moitié de poids faible et trois pour la moitié de poids fort selon l’interprétation des opérandes.
3.2 Multiplie des nombres signés et accélère la multiplication
La multiplication signée doit traiter les signes des opérandes sans perdre la plus petite valeur négative. Des circuits plus rapides doivent aussi réduire de nombreux produits partiels sans attendre à chaque fois une addition complète avec propagation de retenue.
Multiplier les valeurs absolues sans erreur
Une approche consiste à mémoriser les signes, à former des valeurs absolues non signées de n bits, à les multiplier pour obtenir un résultat de 2n bits, puis à prendre l’opposé du produit complet si un seul opérande était négatif. Pour −8 sur quatre bits, les bits de valeur absolue 1000 représentent 8 en non signé. Ils ne peuvent pas être interprétés comme une valeur signée positive sur quatre bits.
Les n bits de poids faible du produit sont identiques dans les interprétations signée et non signée. 1111 × 0010 donne 30 en non signé (0001 1110) ou −2 en signé (1111 1110). Les deux moitiés de poids faible sont 1110 ; seules les moitiés de poids fort diffèrent. C’est pourquoi une seule instruction mul convient aux deux interprétations.
Suivre les décisions de Booth
L’algorithme de Booth opère directement en complément à deux. Donne n + 1 bits à l’accumulateur et étends le signe du multiplicande à cette largeur, afin que le multiplicande et son opposé soient tous deux représentables. Initialise l’accumulateur à zéro, place le multiplicateur dans son registre de n bits et ajoute un bit supplémentaire initialisé à zéro.
Examine ensemble le bit de poids faible du multiplicateur et le bit ajouté :
| Paire | Opération sur l’accumulateur |
|---|---|
10 | Soustraire le multiplicande |
01 | Ajouter le multiplicande |
00 ou 11 | Le laisser inchangé |
Après chaque décision, décale arithmétiquement à droite l’ensemble formé par l’accumulateur, le multiplicateur et le bit supplémentaire. Répète n fois ; élimine le bit ajouté et le bit de signe redondant de poids fort de l’accumulateur pour obtenir le produit de 2n bits.
Pour 2 × (−3), utilise le multiplicande 00010, le multiplicateur 1101 et l’accumulateur 00000. Les paires sont 10, 01, 10, 11. Après les opérations et décalages respectifs, l’accumulateur et le multiplicateur valent 11111 0110, 00000 1011, 11111 0101 et 11111 1010. Les huit bits de poids faible du produit 1111 1010 représentent −6.
Un décalage logique insérerait zéro en position de poids fort et fausserait les résultats partiels négatifs. Le bit supplémentaire de l’accumulateur compte aussi : soustraire le plus petit multiplicande négatif de n bits nécessite une valeur positive indisponible sur n bits signés.
Réduire le travail et les chemins de retenue
Le recodage de Booth remplace une suite de 1 par une soustraction à son extrémité de poids faible et une addition au-dessus de son extrémité de poids fort. Par exemple, 126 vaut 128 − 2. Des bits alternés peuvent ne procurer aucune économie. Le recodage de Booth en base 4 examine deux bits du multiplicateur par étape et utilise des chiffres de −2 à +2, ce qui réduit le nombre de produits partiels.
Un multiplicateur rapide forme les produits partiels en parallèle. Un additionneur à sauvegarde de retenue comprime trois mots en deux sans propager les retenues à travers le mot. Les arbres de Wallace ou de Dadda répètent cette réduction, puis utilisent un dernier additionneur à propagation de retenue. Réduire 32 rangées à deux prend huit niveaux de sauvegarde de retenue. L’exécution en pipeline permet de traiter plusieurs produits simultanément ; accepter un nouveau produit à chaque cycle ne signifie pas que chacun se termine en un cycle.
Pour un résultat signé réduit à n bits, chaque bit de la moitié de poids fort doit être égal au bit de signe de la moitié de poids faible. Sur quatre bits, −8 × −1 donne le produit complet 0000 1000. La moitié de poids fort est nulle mais le bit de signe conservé vaut 1 : +8 n’est donc pas représentable dans le format signé de destination.
Points clés
- Les valeurs absolues non signées conservent la valeur absolue du plus petit opérande signé négatif.
- Les produits signés et non signés ont la même moitié de poids faible, mais peuvent avoir des moitiés de poids fort différentes.
- L’algorithme de Booth utilise un bit supplémentaire dans l’accumulateur, des décisions sur des paires de bits et des décalages arithmétiques à droite.
- Deux opérations de Booth peuvent remplacer une suite de 1 ; les configurations alternées ne réduisent pas toujours le travail.
- Les arbres à sauvegarde de retenue réduisent de nombreux produits partiels avant une dernière addition à propagation de retenue.
- L’exécution en pipeline distingue la latence d’un résultat du rythme auquel de nouveaux produits peuvent être lancés.
- Un produit signé est représentable sur une largeur réduite lorsque sa moitié de poids fort est l’extension de signe de sa moitié de poids faible.
3.3 Divise des entiers et traite les cas particuliers
La division produit un quotient et un reste liés par
Pour un diviseur non signé non nul, le reste est positif ou nul et inférieur au diviseur. Un dividende et un diviseur de n bits nécessitent un quotient et un reste de n bits.
Produire le quotient un bit à la fois
Lis les bits du dividende en commençant par le poids fort. Double le reste partiel, fais entrer le bit suivant et vérifie si le diviseur peut être soustrait. Si oui, soustrais-le et écris 1 comme bit du quotient ; sinon, conserve le reste partiel et écris 0.
Pour 0111 divisé par 0010, les restes partiels après abaissement du bit suivant sont 0, 1, 3 et 3. Les deux premiers sont inférieurs à 2, donc leurs bits de quotient valent 0. Chaque 3 permet une soustraction, laissant un reste de 1 et un bit de quotient de 1. Le quotient est 0011 et le reste 0001 : 3 × 2 + 1 = 7.
La division avec restauration essaie d’abord une soustraction. Si le résultat de l’essai est négatif, ajoute à nouveau le diviseur et écris 0 ; sinon, conserve le résultat et écris 1. Détecte l’échec à l’aide d’un emprunt ou d’une différence signée sur n + 1 bits. Un test du signe sur n bits n’est pas fiable : sur quatre bits, 0 − 9 donne 0111 par retour circulaire, dont le bit de poids fort vaut 0 malgré l’emprunt.
Un circuit compact place le dividende dans la moitié de poids faible d’un registre de 2n bits et le reste partiel dans la moitié de poids fort. Il décale le registre à gauche à chaque étape et insère les bits du quotient à droite. À la fin, la moitié de poids fort contient le reste et la moitié de poids faible le quotient.
La division sans restauration conserve un résultat d’essai négatif pour l’étape suivante et ajoute alors le diviseur au lieu de restaurer immédiatement le reste. Un reste partiel final négatif nécessite une dernière addition du diviseur. La division SRT sélectionne plusieurs bits du quotient par étape à l’aide des bits de poids fort du diviseur et du reste ; des entrées manquantes dans une telle table de sélection ont causé le bogue FDIV du Pentium en 1994. La division reste dépendante de chaque reste partiel précédent.
Appliquer la division signée avec troncature
Divise les valeurs absolues, prends l’opposé du quotient si les signes diffèrent et donne à un reste non nul le signe du dividende.
| Calcul | Quotient | Reste |
|---|---|---|
| −7 divisé par 2 | −3 | −1 |
| 7 divisé par −2 | −3 | 1 |
| −7 divisé par −2 | 3 | −1 |
Ces résultats tronquent le quotient vers zéro et conservent l’identité de la division. RISC-V, Java et C depuis C99 utilisent cette règle. L’opérateur Python // arrondit au contraire à l’entier inférieur : -7 // 2 vaut −4 et -7 % 2 vaut 1.
Traiter les entrées exceptionnelles
La division par zéro en RISC-V renvoie un quotient dont tous les bits valent un et le dividende d’origine comme reste. Le cas de dépassement signé, la plus petite valeur négative divisée par −1, renvoie cette même valeur comme quotient et zéro comme reste. Aucun des deux cas ne déclenche de trappe. x86 déclenche une exception de division dans les deux cas. Un programme qui doit signaler les erreurs vérifie d’abord si le diviseur vaut zéro et vérifie aussi la paire qui produit le dépassement signé.
Un décalage logique à droite divise les valeurs non signées par des puissances de deux en arrondissant à l’entier inférieur. Un décalage arithmétique arrondit aussi les valeurs négatives à l’entier inférieur : −5 décalé d’une position à droite devient −3, tandis que la division par 2 avec troncature donne −2. Pour obtenir une troncature avec un décalage, ajoute à une entrée négative avant de la décaler de k positions à droite. Pour −5 et k = 1, décale −4 pour obtenir −2.
Points clés
- Le quotient et le reste doivent respecter l’identité de la division.
- La division avec restauration ajoute à nouveau le diviseur après une soustraction d’essai échouée.
- Un emprunt ou un bit supplémentaire dans la différence est nécessaire pour tester de façon fiable une soustraction d’essai non signée.
- La division signée avec troncature donne à un reste non nul le signe du dividende.
- RISC-V définit des résultats sans trappe pour la division par zéro et le dépassement de capacité du quotient signé.
- Le décalage arithmétique à droite et la division signée avec troncature diffèrent pour les valeurs négatives avec un reste.
4Représente des nombres réels en virgule flottante selon la norme IEEE 754
La virgule flottante stocke un signe, une échelle et un nombre limité de bits significatifs. Décode ces champs pour distinguer plage de valeurs et précision, puis utilise les configurations réservées de l’exposant pour reconnaître les zéros, les nombres sous-normaux, les infinis et les NaN. Les valeurs spéciales font partie du système arithmétique : elles permettent aux petits résultats d’approcher zéro progressivement et aux opérations exceptionnelles de renvoyer des résultats définis tout en enregistrant des indicateurs d’état.
4.1 Code et décode les formats binaires IEEE 754
Une valeur binaire normale à virgule flottante a la forme
Le significande est la valeur complète 1,f ; la fraction stockée ne contient que f. La normalisation garantit le 1 de tête : omettre ce bit implicite fait donc gagner un bit de précision.
Lire les trois champs
| Format | Bits de signe | Bits d’exposant | Bits de fraction | Biais | Précision |
|---|---|---|---|---|---|
| binary16 | 1 | 5 | 10 | 15 | 11 bits |
| binary32 | 1 | 8 | 23 | 127 | 24 bits |
| binary64 | 1 | 11 | 52 | 1023 | 53 bits |
IEEE 754-2019 définit ces formats. Les termes simple et double précision désignent généralement binary32 et binary64. L’ordre de stockage est signe, exposant, fraction. Pour une valeur normale, soustrais le biais du champ d’exposant non signé :
Fraction désigne la fraction binaire après la virgule, et non ses bits interprétés comme un entier. En binary32, les champs d’exposant de 1 à 254 codent les exposants de −126 à 127. Les champs 0 et 255 ont des significations spéciales.
Avec un biais, les exposants plus grands ont des champs non signés plus grands. Pour les nombres finis positifs, l’ordre non signé des configurations complètes suit l’ordre numérique. Les valeurs négatives et les NaN nécessitent un traitement supplémentaire.
Coder et décoder
Pour coder −0,75, écris sa valeur absolue sous la forme . Le signe vaut 1 et le champ d’exposant vaut −1 + 127 = 126, soit 01111110. Supprime le 1 de tête implicite et complète la fraction avec des zéros. Les champs sont 1 01111110 10000000000000000000000, ce qui donne 0xBF400000. En binary64, la même valeur est 0xBFE8000000000000.
Pour décoder 0x41460000, décompose-le en 0 10000010 10001100000000000000000. Le champ d’exposant vaut 130, donc l’exposant réel est 3. Le significande est
La multiplication par 8 donne 12,375. Écrire le 1 implicite dans la fraction stockée changerait la valeur ; stocker directement −1 dans le champ d’exposant ferait perdre la règle du biais.
Distinguer plage de valeurs et précision
binary32 atteint environ , avec une plus petite valeur normale positive de et environ sept chiffres décimaux significatifs. binary64 atteint environ , avec une plus petite valeur normale positive de et environ 15 à 16 chiffres significatifs. binary16 a un maximum de 65 504, une plus petite valeur normale positive de , une plus petite valeur sous-normale positive de et environ 3,3 chiffres décimaux significatifs.
La précision compte les chiffres significatifs, et non les chiffres après la virgule. Par exemple, binary32 stocke 1 234 567,89 sous la forme 1 234 567,875.
Dans l’intervalle binary32 de à exclu, les valeurs normales voisines sont espacées de . Cet espacement est une ulp, une unité au dernier rang. Juste au-dessus de 1, il vaut , souvent appelé epsilon machine. À , l’espacement devient 2 : 16 777 217 manque donc, même si des nombres bien plus grands sont représentables. Davantage de bits d’exposant élargissent la plage d’échelle ; davantage de bits de fraction rapprochent les valeurs représentables à une échelle donnée.
Points clés
- Les formats normaux omettent de la fraction stockée le 1 de tête garanti.
- Décode un exposant normal en soustrayant son biais.
- binary16, binary32 et binary64 ont des précisions de 11, 24 et 53 bits.
- La plage de valeurs et la précision sont des limites différentes.
- L’espacement entre nombres normaux augmente avec l’exposant.
4.2 Utilise les zéros, les infinis, les NaN et les nombres sous-normaux
Les configurations d’exposant réservées permettent à IEEE 754 de représenter d’autres valeurs que les nombres normalisés ordinaires. Identifie toujours les champs avant d’appliquer une formule de valeur.
Reconnaître les configurations réservées
| Champ d’exposant | Champ de fraction | Signification |
|---|---|---|
| Que des zéros | Zéro | Zéro signé |
| Que des zéros | Non nul | Nombre sous-normal |
| Que des uns | Zéro | Infini signé |
| Que des uns | Non nul | NaN |
binary32 possède +0 à 0x00000000 et −0 à 0x80000000. Ils sont égaux à la comparaison, mais une division peut révéler leur signe : 1 divisé par +0 donne +∞, tandis que 1 divisé par −0 donne −∞. Un petit résultat négatif qui s’arrondit à zéro devient −0.
L’infini positif est 0x7F800000 ; la plus grande valeur positive finie est 0x7F7FFFFF. Avec l’arrondi au plus proche, un dépassement arithmétique renvoie un infini signé. Diviser une valeur finie non nulle par zéro renvoie aussi un infini signé, avec un indicateur d’exception différent. Les opérations suivantes traitent l’infini de manière cohérente : ajouter 1 à +∞ laisse +∞, le multiplier par −2 donne −∞ et son inverse est +0.
Distinguer NaN de l’infini
Des opérations comme zéro divisé par zéro, l’infini moins lui-même, zéro multiplié par l’infini et la racine carrée réelle de −1 n’ont pas de résultat numérique qui ait un sens. Elles produisent NaN, une valeur qui n’est pas un nombre, et signalent une opération invalide.
NaN est non ordonné : les tests d’égalité et les comparaisons inférieur à ou supérieur à qui le font intervenir sont faux, tandis que le test de différence est vrai. En particulier, x == NaN ne peut pas détecter NaN. Utilise isnan(x). Les NaN silencieux se propagent normalement dans les opérations arithmétiques ; les NaN signalants déclenchent l’exception d’opération invalide lorsqu’ils sont utilisés. Dans ces formats binaires, le bit de poids fort de la fraction distingue un NaN silencieux. Le NaN silencieux canonique binary32 de RISC-V est 0x7FC00000.
Approcher zéro progressivement
Un nombre sous-normal n’a pas de 1 implicite. Son exposant est fixé au plus petit exposant normal :
En binary32, 0x00000001 vaut et 0x00400000 vaut . En binary64, la plus petite valeur positive est . Utiliser le champ d’exposant nul moins le biais produirait une erreur d’un facteur deux, même avant l’ajout erroné d’un 1 implicite.
Les nombres sous-normaux assurent le sous-dépassement graduel : la précision diminue lorsque les valeurs se rapprochent de zéro, avec un espacement absolu fixe près de zéro. Des valeurs finies distinctes d’un même format ont toujours une différence non nulle représentable. Les modes qui ramènent ces valeurs à zéro suppriment cette protection et peuvent accélérer leur traitement sur certains processeurs.
Lire les indicateurs d’exception
IEEE 754 définit les exceptions d’opération invalide, de division par zéro, de dépassement de capacité, de sous-dépassement et de résultat inexact. Le traitement par défaut renvoie un résultat et enregistre l’état ; il n’arrête pas nécessairement l’exécution. Un résultat inexact signifie que le résultat arrondi diffère du résultat exact.
Avec le traitement par défaut, le sous-dépassement exige à la fois une très petite valeur et un résultat inexact. En binary32, est un résultat sous-normal exact qui ne déclenche pas de sous-dépassement. RISC-V enregistre NV, DZ, OF, UF et NX dans fflags au sein de fcsr, et les exceptions à virgule flottante ne déclenchent pas de trappes arithmétiques. Un infini renvoyé ne suffit pas à déterminer si un dépassement ou une division par zéro s’est produit ; examine l’indicateur.
Points clés
- Identifie les champs d’exposant réservés avant de décoder une valeur normale.
- Les zéros signés sont égaux à la comparaison, mais peuvent produire des infinis de signes différents.
- NaN est non ordonné et doit être détecté avec un test spécifique.
- Les nombres sous-normaux utilisent un 0 de tête et un exposant égal à un moins le biais.
- Le sous-dépassement graduel conserve de petites différences que le remplacement par zéro peut effacer.
- Un résultat sous-normal exact n’active pas l’indicateur de sous-dépassement.
5Calcule et arrondis avec des nombres à virgule flottante
Les circuits à virgule flottante doivent déplacer et combiner les bits significatifs avant de pouvoir arrondir le résultat. Étudie l’alignement, la normalisation et l’arrondi, puis relie ces étapes aux erreurs de précision courantes. Des bits d’arrondi supplémentaires distinguent une valeur à mi-chemin d’une valeur juste au-dessus, et la multiplication-addition fusionnée conserve des informations que deux opérations séparées peuvent perdre. Les mêmes limites expliquent les changements dans les sommes, les compteurs bloqués et les conversions risquées.
5.1 Additionne et multiplie des nombres à virgule flottante
L’arithmétique à virgule flottante traite séparément les significandes et les exposants. Le résultat final doit être le résultat exact de l’opération arrondi dans le format de destination : les déplacements intermédiaires de bits doivent donc conserver assez d’informations pour cette dernière décision.
Additionner avec un exposant commun
L’addition suit quatre étapes : aligner, effectuer l’opération, normaliser, arrondir. Compare les exposants et décale à droite le significande de l’opérande le plus petit du nombre de positions correspondant à leur différence. Additionne les valeurs absolues si les signes sont identiques ; soustrais-les s’ils sont opposés. Décale le résultat sous forme normalisée et ajuste son exposant. Arrondis ensuite, puis normalise à nouveau si l’arrondi crée une retenue.
Utilise des significandes de quatre bits pour étudier 0,5 + (−0,4375) :
- Écris les opérandes sous les formes et .
- Aligne le second pour obtenir .
- Soustrais les valeurs absolues : .
- Normalise pour obtenir , soit 0,0625. Aucun bit non nul n’a été perdu, donc l’arrondi ne modifie pas le résultat.
L’annulation peut nécessiter un grand décalage de normalisation à gauche. Le circuit utilise un soustracteur d’exposants, un décaleur d’alignement, un additionneur de significandes, un compteur de zéros de tête et des circuits de normalisation et d’arrondi. Les additionneurs à virgule flottante sont couramment organisés en pipeline sur plusieurs cycles.
Un modèle décimal montre pourquoi les chiffres supplémentaires comptent : avec quatre chiffres significatifs, 99,99 + 0,161 s’aligne sous la forme à l’échelle . Le résultat intermédiaire exact est 10,01510 à cette échelle. Normalise pour obtenir et arrondis à . Tronquer trop tôt le terme aligné ferait perdre les informations nécessaires pour choisir 100,2.
Multiplier les échelles et les significandes
Multiplie les significandes, additionne les exposants réels et combine les signes par OU exclusif. Avec des champs biaisés, soustrais une fois le biais :
avant les ajustements de normalisation. Deux significandes normaux donnent un produit compris entre 1 inclus et 4 exclu : leur produit nécessite donc au plus un décalage de normalisation à droite. L’arrondi peut nécessiter un ajustement supplémentaire ; il faut aussi vérifier les bornes de l’exposant.
Pour 0,5 × (−0,4375), les champs d’exposant binary32 donnent 126 + 125 − 127 = 124, soit un exposant réel de −3. Le produit des significandes est . Le OU exclusif des signes vaut 1, ce qui donne .
Arrondir une fois avec la multiplication-addition fusionnée
La FMA calcule a × b + c avec un seul arrondi après l’expression complète. Une multiplication et une addition séparées arrondissent deux fois. En binary32, prends , et c = −1. Leur produit exact est . Une multiplication séparée l’arrondit à 1, donc l’addition renvoie zéro. La FMA conserve la petite différence du produit et renvoie .
RISC-V F fournit 32 registres à virgule flottante, de f0 à f31 ; D élargit le même banc pour la double précision. flw/fsw et fld/fsd transfèrent les valeurs. Les opérations arithmétiques comprennent fadd.s, fmul.s, fdiv.s et fsqrt.s, avec des formes .d pour la double précision. fmadd.s calcule une multiplication-addition fusionnée. Des comparaisons comme flt.s écrivent 0 ou 1 dans un registre entier, et fcvt convertit des formats ou des valeurs entières.
Points clés
- L’addition aligne les exposants avant de combiner les significandes.
- La normalisation modifie à la fois la position du significande et l’exposant.
- Multiplier des nombres à partir de champs d’exposant biaisés nécessite de soustraire une fois le biais.
- L’arrondi peut nécessiter une seconde normalisation.
- La FMA arrondit une seule fois l’ensemble du produit et de la somme.
- Les opérations arithmétiques RISC-V F et D utilisent un banc de registres à virgule flottante ; les comparaisons renvoient des valeurs de vérité entières.
5.2 Arrondis correctement les résultats
Un format fini ne peut pas stocker tous les résultats exacts. Un arrondi correct consiste à choisir le résultat représentable imposé par la direction d’arrondi, comme si l’opération avait d’abord été calculée exactement. Les opérations arithmétiques de base, la racine carrée et la FMA respectent cette règle. Les bits de charge utile et de signe d’un NaN ne sont pas nécessairement identiques d’un processeur à l’autre.
Choisir une direction d’arrondi
| Direction | Règle |
|---|---|
| roundTiesToEven | Valeur la plus proche ; à mi-chemin, choix d’un dernier bit de significande égal à 0 |
| roundTowardPositive | Vers +∞ |
| roundTowardNegative | Vers −∞ |
| roundTowardZero | Vers zéro |
| roundTiesToAway | Valeur la plus proche ; à mi-chemin, choix à l’opposé de zéro |
Les quatre premières sont obligatoires pour les implémentations binaires ; le départage au pair est le mode par défaut. Le départage à l’opposé de zéro est obligatoire pour les formats décimaux, et RISC-V le fournit aussi pour les opérations binaires. Leurs noms sont RNE, RUP, RDN, RTZ et RMM ; une instruction peut sélectionner directement un mode ou utiliser le mode dynamique de fcsr.
Avec le départage au pair à l’entier, 2,5 devient 2 et 3,5 devient 4. En binaire avec des significandes de quatre bits, s’arrondit à et s’arrondit aussi à . Le bit pair appartient au significande conservé, et non à l’exposant ou à un chiffre décimal affiché.
Conserver les informations de garde, d’arrondi et collantes
Après normalisation, conserve deux bits supplémentaires après le significande de destination : le bit de garde et le bit d’arrondi. Le bit collant est le OU de tous les bits éliminés ensuite. Il indique si toute cette partie est nulle.
Pour l’arrondi au plus proche, un bit de garde à 0 indique une valeur inférieure à la moitié. Un bit de garde à 1 avec un bit d’arrondi ou collant à 1 indique une valeur supérieure à la moitié. Un bit de garde à 1 avec les deux indicateurs suivants à 0 indique une valeur exactement à mi-chemin. Dans ce cas, incrémente le significande conservé uniquement si son bit de poids faible actuel vaut 1.
Pour la somme 8 + 0,5625 avec un significande de quatre bits, l’alignement donne
Conserve 1.000 ; le bit de garde vaut 1, le bit d’arrondi vaut 0 et le bit collant vaut 1 car la partie restante contient un 1. La valeur est supérieure à la moitié, donc incrémente pour obtenir . Supprimer le bit collant ferait croire à tort que la valeur est à mi-chemin et conduirait à choisir 8.
Un bit collant renseigne sur tous les bits perdus, et non simplement sur le troisième bit après la partie conservée. Pendant le décalage, dès qu’un bit perdu vaut 1, l’état collant reste à 1 pour cette partie accumulée.
Interpréter l’erreur et le dépassement de capacité
Pour les résultats finis dans la plage, l’arrondi au plus proche a une erreur absolue d’au plus une demi-ulp ; l’arrondi dirigé a une erreur inférieure à une ulp. Pour les résultats normaux binary32, la borne relative habituelle de l’arrondi au plus proche est ; pour binary64, elle est . Les résultats sous-normaux nécessitent un raisonnement en erreur absolue, car leur précision relative diminue.
La direction d’arrondi détermine aussi les résultats d’un dépassement de capacité. Un dépassement positif donne +∞ avec l’arrondi au plus proche ou vers le positif, mais la plus grande valeur positive finie avec l’arrondi vers zéro ou vers le négatif. Un dépassement négatif se comporte de façon symétrique.
Les conversions en entiers ont leurs propres règles. En C, les conversions de valeurs représentables comme (int)2.7 et (int)-2.7 tronquent à 2 et −2, indépendamment de la direction d’arrondi à virgule flottante courante. Vérifie la plage du type de destination ainsi que la partie fractionnaire éliminée.
Points clés
- L’arrondi correct choisit la valeur de destination à partir du résultat exact et de la direction d’arrondi.
- Pour une valeur exactement à mi-chemin, l’arrondi au plus proche choisit le voisin dont le bit de poids faible conservé vaut 0.
- Les bits de garde et d’arrondi conservent deux bits supplémentaires ; le bit collant indique si la partie suivante est non nulle.
- Un bit collant non nul peut distinguer un résultat supérieur à la moitié d’une valeur exactement à mi-chemin.
- La direction d’arrondi détermine si un dépassement de capacité renvoie l’infini ou une borne finie.
5.3 Prévois et évite les erreurs de précision
Les erreurs en virgule flottante découlent souvent directement de l’espacement fini des valeurs. Distingue l’erreur déjà présente dans les opérandes stockés de l’arrondi effectué par une opération et des informations perdues lors d’une conversion.
Repérer l’erreur de représentation
Une fraction irréductible a une écriture binaire finie si et seulement si son dénominateur est une puissance de deux. Des valeurs comme 0,5, 0,25 et 0,375 sont exactes. L’écriture de 0,1 est périodique, donc binary32 stocke 0x3DCCCCCD, soit environ 0,10000000149011612. binary64 stocke aussi une approximation.
Par conséquent, 0.1 + 0.2 en binary64 produit 0,30000000000000004, différent de la valeur stockée la plus proche de 0,3. Un résultat affiché court comme 0.1 peut être le plus court nombre décimal qui se reconvertit dans les mêmes bits stockés ; il ne prouve pas l’exactitude.
Pour des résultats finis approchés, utilise une tolérance choisie pour le problème, par exemple
La tolérance absolue traite les valeurs proches de zéro ; la tolérance relative s’adapte à l’ordre de grandeur. Les tolérances doivent refléter le calcul et l’erreur acceptable, pas simplement le nombre de chiffres affichés.
Observer la perte d’un petit terme lors d’une addition
L’absorption se produit avec l’arrondi au plus proche lorsqu’un petit terme ne peut pas faire passer un grand opérande à la valeur représentable voisine. En binary32, 16 777 216 + 1 s’arrondit à 16 777 216 : les valeurs voisines sont espacées de deux et ce cas à mi-chemin sélectionne le significande pair. Un compteur float qui ajoute 1 peut donc cesser d’avancer.
Changer l’ordre des additions peut changer la réponse. En binary32, avec x = −1,5 × 10³⁸, y = 1,5 × 10³⁸ et z = 1, (x + y) + z donne 1. Mais y + z s’arrondit à y, donc x + (y + z) donne zéro. L’addition n’est pas associative. Les réductions parallèles peuvent changer leur regroupement lorsque le nombre de threads change, ce qui affecte les derniers bits.
Les arrondis répétés s’accumulent aussi : ajouter dix millions de fois 0,1 en binary32 à un total binary32 donne 1 087 937 au lieu de 1 000 000. Un accumulateur plus large réduit la perte due aux arrondis. Additionner d’abord les valeurs de plus petite valeur absolue peut aussi préserver des contributions qu’un total courant élevé absorberait.
Distinguer l’annulation d’une soustraction inexacte
L’annulation supprime les chiffres de tête communs à des opérandes presque égaux. La soustraction elle-même peut être exacte alors que les erreurs antérieures des opérandes deviennent grandes par rapport à la petite différence obtenue. En binary32, 1,0000001 est stocké sous la forme . Soustraire 1 donne environ au lieu de , soit environ 19 % d’erreur relative.
Vérifier les conversions et les choix de format
binary64 représente exactement tous les entiers de 32 bits. binary32 ne le fait pas : 16 777 217 s’arrondit à 16 777 216 avec le départage au pair. Au-dessus de , binary64 ne représente pas non plus tous les entiers. La conversion d’une valeur à virgule flottante dans un type entier plus petit peut dépasser entièrement sa plage.
Lors du premier vol d’Ariane 5 en 1996, une conversion hors plage d’une valeur à virgule flottante de 64 bits en entier signé de 16 bits a arrêté les systèmes de référence inertielle et contribué à la perte de la fusée. Lors de l’échec du Patriot à Dhahran en 1991, une approximation tronquée de 0,1 en virgule fixe a accumulé environ 0,34 s d’erreur de temps après environ 100 heures, décalant la fenêtre de suivi d’environ 687 m. Il s’agissait d’une erreur de représentation en virgule fixe, et non d’une opération IEEE à virgule flottante.
Choisis binary64 pour une précision plus large dans les calculs courants, binary32 lorsque sa plus faible utilisation de mémoire convient au travail, et binary16 ou bfloat16 pour les calculs adaptés à une faible précision. bfloat16 possède huit bits d’exposant et sept bits de fraction. Les montants monétaires exacts doivent être représentés par des entiers comptant les plus petites unités monétaires ou par un type décimal.
Points clés
- Une fraction binaire finie exige un dénominateur qui soit une puissance de deux après réduction.
- Un affichage décimal court peut masquer une erreur de représentation.
- L’absorption et les arrondis répétés peuvent modifier les sommes et arrêter les compteurs à virgule flottante.
- L’addition en virgule flottante n’est pas associative : le regroupement affecte donc la reproductibilité.
- L’annulation révèle les erreurs antérieures des opérandes par rapport à une petite différence.
- Les conversions nécessitent des vérifications de précision et de plage de valeurs.
- Le choix du format dépend de la précision, de la plage de valeurs et du coût de stockage nécessaires.
Arithmétique des ordinateurs : exemples
1Suis le fonctionnement d’un additionneur et évalue son résultat
12 étapes
- 1IntroductionD’abord les bits, puis l’interprétation
Un additionneur de 8 bits conserve huit bits de somme et produit une retenue sortante. Les mêmes bits de somme peuvent représenter une valeur non signée ou une valeur signée en complément à deux. Leur égalité avec le résultat attendu dépend de cette interprétation.
Commence par 58 + 27. Les deux valeurs sont représentables dans les deux interprétations : tu peux donc suivre d’abord le circuit, puis examiner les plages de valeurs.
- 2ExplicationUne position combine trois bits
Un additionneur complet combine deux bits d’entrée et la retenue entrante. Sa somme est leur OU exclusif. Sa retenue sortante vaut 1 lorsqu’au moins deux des trois entrées valent 1.
Dans un additionneur à propagation, cette retenue sortante devient la retenue entrante de la position suivante. Seule la position de poids le plus faible reçoit directement la retenue initiale. Pour une addition ordinaire, la retenue initiale est nulle.
- 3ExempleCalcule les colonnes de poids faible
Écris 58 sous la forme
0011 1010et 27 sous la forme0001 1011. En partant de la droite, le bit 0 additionne 0 et 1 avec une retenue de 0, ce qui donne une somme de 1 et une retenue de 0.Le bit 1 additionne 1 et 1, ce qui donne une somme de 0 et une retenue de 1. Le bit 2 additionne ensuite 0 et 0 avec cette retenue, ce qui donne une somme de 1 et une retenue de 0. La retenue doit être prise en compte là où elle arrive, même lorsque les deux bits des opérandes valent zéro.
- 4ExempleTermine la somme
Continue avec les positions de poids plus fort. Le bit 3 additionne deux 1, ce qui produit une somme de 0 et une retenue de 1. Le bit 4 combine deux 1 avec cette retenue, ce qui produit une somme de 1 et une retenue de 1. Le bit 5 combine 1, 0 et 1, ce qui produit une somme de 0 et une retenue de 1. Le bit 6 reçoit cette retenue et produit 1.
Le résultat complet est
0101 0101, soit 85. La retenue finale vaut 0 et le résultat signé reste positif. - 5DéfiChoisis l’extension
Un opérande signé de 4 bits
1011doit être ajouté à un opérande de 8 bits. Quelle configuration de 8 bits conserve sa valeur et que ferait une extension par des zéros ?---reveal---
L’extension de signe donne
1111 1011, toujours égal à −5. L’extension par des zéros donne0000 1011, soit +11, ce qui modifie l’entrée avant l’addition. L’extension dépend de l’interprétation de l’opérande, et non de la largeur de l’autre opérande. - 6ExempleRéutilise l’additionneur pour soustraire
Calcule maintenant 58 − 27. Inverse
0001 1011pour obtenir1110 0100et fixe la retenue initiale à 1. Additionne0011 1010+1110 0100+ 1 pour obtenir0001 1111, avec une retenue sortante de 1.Le résultat est 31. Pour cette soustraction non signée, une retenue sortante de 1 signifie qu’il n’y a pas d’emprunt. Inverser le second opérande sans le 1 initial produirait 30.
- 7Point cléLa retenue et le dépassement répondent à des questions différentes
La retenue sortante indique si une addition non signée a dépassé les bits disponibles. Le dépassement signé vérifie la plage signée : des termes de même signe ne doivent pas produire un résultat de signe opposé.
Le circuit calcule le dépassement signé en combinant par OU exclusif la retenue entrante et la retenue sortante du bit de signe. On peut avoir une retenue sans dépassement signé, un dépassement signé sans retenue, les deux ou aucun des deux.
- 8ExempleUne somme non signée valide peut échouer en signé
Additionne 90 et 60 sur 8 bits. Le résultat est
1001 0110, avec une retenue sortante de 0. La valeur non signée 150 est représentable dans la plage de 0 à 255.Les deux entrées signées sont positives, mais la valeur signée stockée est −106. Le dépassement signé vaut donc 1. La configuration stockée correspond toujours aux huit bits de poids faible de 150 ; c’est la plage signée du format de destination qui ne peut pas contenir le résultat exact.
- 9DéfiLis les deux signaux
Un additionneur de 8 bits additionne
1111 0110et0001 0100, ce qui produit0000 1010avec une retenue sortante de 1. Que t’indiquent les interprétations non signée et signée ?---reveal---
En non signé, 246 + 20 = 266 dépasse la capacité et stocke 10. En signé, −10 + 20 = 10 est représentable, donc le dépassement signé vaut 0. Une addition de signes opposés ne peut pas dépasser la plage signée, même si ce calcul de bits produit une retenue sortante.
- 10LienLe programme décide de la réponse
L’instruction RISC-V
addrenvoie les bits de poids faible sans indicateur ni trappe de dépassement. Une vérification non signée peut comparer la somme à une entrée ; un résultat plus petit signale un retour circulaire. La vérification signée doit utiliser des relations propres aux nombres signés.Les règles du langage comptent aussi. En C, l’addition non signée revient dans la plage, tandis que le dépassement signé est indéfini. L’addition entière Java revient dans la plage et les entiers Python grandissent. Suivre correctement les bits ne suffit pas à déterminer le comportement au niveau du langage.
- 11DéfiRelie la soustraction à la plage signée
Une unité arithmétique et logique de 8 bits calcule 100 − (−35). Quelle valeur signée est stockée et quelle interprétation nécessite de signaler un dépassement de capacité ?
---reveal---
Le résultat signé exact est 135, dont les huit bits de poids faible sont
1000 0111, interprétés comme −121. La soustraction signée dépasse la capacité car les entrées ont des signes différents et le signe du résultat diffère de celui de 100. Interpréter la seconde configuration comme la valeur non signée 221 donne 100 − 221, ce qui nécessite un emprunt en non signé. - 12RécapitulatifChoisis un test de plage après le suivi des bits
L’addition et la soustraction partagent des additionneurs complets ; l’inversion et la retenue initiale sélectionnent la soustraction. Étends chaque entrée selon sa signification avant l’opération.
Ensuite, vérifie la retenue ou l’emprunt pour les valeurs non signées et le dépassement de capacité pour les valeurs signées. Applique ensuite les règles du processeur et du langage. L’arithmétique saturée fait un autre choix : elle ramène un résultat hors plage à une borne au lieu de conserver les bits de poids faible obtenus par retour circulaire.
2Construis une unité arithmétique et logique qui compare correctement
14 étapes
Enregistre cette unité pour suivre chaque Leçon Interactive pas à pas.
- 1IntroductionPlusieurs résultats, une sortie sélectionnée
- 2ExplicationRépète une tranche d’un bit
- 3ExempleDécode les commandes d’une conception
- 4DéfiConstruis NON-OU avec les mêmes portes
- 5LienDécale selon les distances sélectionnées
- 6ExplicationRéduis le résultat à la sortie zéro
- 7ExempleObserve un signe de différence trompeur
- 8DéfiInterprète deux fois les mêmes configurations
- 9ExplicationDécris une retenue avant son arrivée
- 10ExemplePrévois la retenue finale d’un bloc
- 11DéfiUne retenue générée rencontre un arrêt
- 12Point cléUtilise des portes pour raccourcir l’attente
- 13DéfiConserve une comparaison correcte avec un additionneur plus rapide
- 14RécapitulatifDistingue sélection, interprétation et vitesse
3Suis un produit et un quotient dans les circuits
18 étapes
Enregistre cette unité pour suivre chaque Leçon Interactive pas à pas.
- 1IntroductionLe produit combine des rangées ; le quotient se construit par décisions
- 2ExempleChoisis les produits partiels pour 9 fois 6
- 3ExempleTermine les contributions sélectionnées
- 4Point cléConserve la retenue du multiplicateur compact
- 5DéfiVérifie un produit non signé sur une largeur réduite
- 6ExplicationConserve la valeur absolue signée dans des bits non signés
- 7ExplicationPrépare le registre de Booth
- 8ExempleEffectue les deux premières étapes de Booth
- 9ExempleTermine le produit signé
- 10DéfiVérifie la représentation signée après multiplication
- 11LienComprime les rangées au lieu de terminer chaque somme
- 12ExempleAbaisse les premiers bits du dividende
- 13ExempleComplète le quotient et le reste
- 14DéfiApplique la règle du reste signé
- 15ConseilUtilise l’emprunt pour la soustraction d’essai
- 16DéfiRelie un raccourci de division à la multiplication
- 17LienLis les résultats RISC-V exceptionnels
- 18RécapitulatifVérifie l’invariant et le format de destination
4Décode les bits en virgule flottante avant de calculer
12 étapes
Enregistre cette unité pour suivre chaque Leçon Interactive pas à pas.
- 1IntroductionUne échelle et un nombre limité de chiffres
- 2ExempleNormalise la valeur absolue
- 3ExempleAjoute le biais et assemble les champs
- 4DéfiDécode une nouvelle valeur normale
- 5ExplicationLa plage de valeurs ne garantit pas le détail des entiers
- 6ExplicationClasse d’abord les exposants réservés
- 7ExempleDécode un nombre sous-normal sans 1 implicite
- 8Point cléUn très petit résultat exact ne nécessite pas d’indicateur de sous-dépassement
- 9DéfiDistingue l’infini d’un résultat invalide
- 10ConseilTeste NaN sans égalité
- 11DéfiRelie le codage au sous-dépassement graduel
- 12RécapitulatifInterprète les champs avant d’évaluer une valeur
5Aligne, arrondis et explique la perte de précision
18 étapes
Enregistre cette unité pour suivre chaque Leçon Interactive pas à pas.
- 1IntroductionConserve l’information jusqu’à la décision d’arrondi
- 2ExempleAligne une addition
- 3ExempleNormalise avant de choisir la valeur voisine
- 4ExplicationMultiplie avec une correction du biais
- 5DéfiCorrige un calcul d’exposant
- 6ExplicationUn bit conservé pair départage une valeur à mi-chemin
- 7ExempleSuis les bits de garde, d’arrondi et collant
- 8DéfiDistingue une valeur à mi-chemin d’une valeur proche
- 9LienLa direction d’arrondi modifie les résultats négatifs
- 10Point cléLa FMA conserve un produit jusqu’après l’addition
- 11ExplicationUne entrée décimale peut arriver déjà arrondie
- 12ExempleUn compteur atteint une barrière d’espacement
- 13DéfiPrévois l’effet d’un changement de regroupement
- 14Point cléUne soustraction exacte peut révéler une erreur antérieure
- 15ConseilChoisis une tolérance adaptée aux valeurs proches de zéro
- 16DéfiVérifie un aller-retour d’entier
- 17DéfiCombine alignement, bit collant et absorption
- 18RécapitulatifLocalise la perte d’information
Arithmétique des ordinateurs : QCM
Série 1 : Sommes entières, soustraction et décisions de l’unité arithmétique et logique10 Questions Pratiques
Question 1 sur 10
Afficher la réponseMasquer la réponse
Question 2 sur 10
Afficher la réponseMasquer la réponse
Question 3 sur 10
Afficher la réponseMasquer la réponse
Question 4 sur 10
Afficher la réponseMasquer la réponse
Question 5 sur 10
1101 ?Afficher la réponseMasquer la réponse
1111 1101 représente toujours −3 ; l’extension par des zéros en 0000 1101 réinterpréterait la configuration d’origine comme la valeur non signée 13 et changerait sa valeur signée.Question 6 sur 10
0101 et b = 1010, quels résultats sur toute la largeur produisent slt signé et sltu non signé ?Afficher la réponseMasquer la réponse
Question 7 sur 10
Afficher la réponseMasquer la réponse
Question 8 sur 10
Afficher la réponseMasquer la réponse
Question 9 sur 10
Afficher la réponseMasquer la réponse
Question 10 sur 10
1001 0110. Quels sont son résultat et sa sortie zéro ?Afficher la réponseMasquer la réponse
Série 2 : Réseaux de retenue et formation des produits10 Questions Pratiques
Enregistre cette unité pour voir chaque réponse et t'entraîner sur chaque série.
Question 1 sur 10
Afficher la réponseMasquer la réponse
Enregistre cette unité pour voir cette réponse.
Question 2 sur 10
Afficher la réponseMasquer la réponse
Enregistre cette unité pour voir cette réponse.
Question 3 sur 10
Afficher la réponseMasquer la réponse
Enregistre cette unité pour voir cette réponse.
Question 4 sur 10
Afficher la réponseMasquer la réponse
Enregistre cette unité pour voir cette réponse.
Question 5 sur 10
Afficher la réponseMasquer la réponse
Enregistre cette unité pour voir cette réponse.
Question 6 sur 10
Afficher la réponseMasquer la réponse
Enregistre cette unité pour voir cette réponse.
Question 7 sur 10
Afficher la réponseMasquer la réponse
Enregistre cette unité pour voir cette réponse.
Question 8 sur 10
1001 et b = 0111 avec une retenue initiale de 0. Quels sont les signaux de génération et de propagation de groupe et la retenue finale ?Afficher la réponseMasquer la réponse
Enregistre cette unité pour voir cette réponse.
Question 9 sur 10
1110 et 0011. Quelles moitiés de poids fort résultent des multiplications signée et non signée, et chacun des produits est-il représentable dans sa plage correspondante sur 4 bits ?Afficher la réponseMasquer la réponse
Enregistre cette unité pour voir cette réponse.
Question 10 sur 10
Afficher la réponseMasquer la réponse
Enregistre cette unité pour voir cette réponse.
Série 3 : Produits signés, division et raccourcis arithmétiques10 Questions Pratiques
Enregistre cette unité pour voir chaque réponse et t'entraîner sur chaque série.
Question 1 sur 10
Afficher la réponseMasquer la réponse
Enregistre cette unité pour voir cette réponse.
Question 2 sur 10
Afficher la réponseMasquer la réponse
Enregistre cette unité pour voir cette réponse.
Question 3 sur 10
Afficher la réponseMasquer la réponse
Enregistre cette unité pour voir cette réponse.
Question 4 sur 10
Afficher la réponseMasquer la réponse
Enregistre cette unité pour voir cette réponse.
Question 5 sur 10
q = div(a, b), r = rem(a, b), puis q × b + r avec retour circulaire. Pour a = −2³¹ et b = −1, que se passe-t-il ?Afficher la réponseMasquer la réponse
Enregistre cette unité pour voir cette réponse.
Question 6 sur 10
Afficher la réponseMasquer la réponse
Enregistre cette unité pour voir cette réponse.
Question 7 sur 10
Afficher la réponseMasquer la réponse
Enregistre cette unité pour voir cette réponse.
Question 8 sur 10
Afficher la réponseMasquer la réponse
Enregistre cette unité pour voir cette réponse.
Question 9 sur 10
Afficher la réponseMasquer la réponse
Enregistre cette unité pour voir cette réponse.
Question 10 sur 10
Afficher la réponseMasquer la réponse
Enregistre cette unité pour voir cette réponse.
Série 4 : Champs en virgule flottante et valeurs exceptionnelles10 Questions Pratiques
Enregistre cette unité pour voir chaque réponse et t'entraîner sur chaque série.
Question 1 sur 10
Afficher la réponseMasquer la réponse
Enregistre cette unité pour voir cette réponse.
Question 2 sur 10
Afficher la réponseMasquer la réponse
Enregistre cette unité pour voir cette réponse.
Question 3 sur 10
101 suivie de zéros. Quelle est sa valeur ?Afficher la réponseMasquer la réponse
Enregistre cette unité pour voir cette réponse.
Question 4 sur 10
Afficher la réponseMasquer la réponse
Enregistre cette unité pour voir cette réponse.
Question 5 sur 10
0x00000008 ?Afficher la réponseMasquer la réponse
Enregistre cette unité pour voir cette réponse.
Question 6 sur 10
Afficher la réponseMasquer la réponse
Enregistre cette unité pour voir cette réponse.
Question 7 sur 10
Afficher la réponseMasquer la réponse
Enregistre cette unité pour voir cette réponse.
Question 8 sur 10
Afficher la réponseMasquer la réponse
Enregistre cette unité pour voir cette réponse.
Question 9 sur 10
Afficher la réponseMasquer la réponse
Enregistre cette unité pour voir cette réponse.
Question 10 sur 10
Afficher la réponseMasquer la réponse
Enregistre cette unité pour voir cette réponse.
Série 5 : Décisions d’arrondi et perte de précision10 Questions Pratiques
Enregistre cette unité pour voir chaque réponse et t'entraîner sur chaque série.
Question 1 sur 10
Afficher la réponseMasquer la réponse
Enregistre cette unité pour voir cette réponse.
Question 2 sur 10
Afficher la réponseMasquer la réponse
Enregistre cette unité pour voir cette réponse.
Question 3 sur 10
Afficher la réponseMasquer la réponse
Enregistre cette unité pour voir cette réponse.
Question 4 sur 10
Afficher la réponseMasquer la réponse
Enregistre cette unité pour voir cette réponse.
Question 5 sur 10
Afficher la réponseMasquer la réponse
Enregistre cette unité pour voir cette réponse.
Question 6 sur 10
Afficher la réponseMasquer la réponse
Enregistre cette unité pour voir cette réponse.
Question 7 sur 10
Afficher la réponseMasquer la réponse
Enregistre cette unité pour voir cette réponse.
Question 8 sur 10
Afficher la réponseMasquer la réponse
Enregistre cette unité pour voir cette réponse.
Question 9 sur 10
Afficher la réponseMasquer la réponse
Enregistre cette unité pour voir cette réponse.
Question 10 sur 10
Afficher la réponseMasquer la réponse
Enregistre cette unité pour voir cette réponse.
Série 6 : Diagnostique les calculs dans le chemin de données10 Questions Pratiques
Enregistre cette unité pour voir chaque réponse et t'entraîner sur chaque série.
Question 1 sur 10
Afficher la réponseMasquer la réponse
Enregistre cette unité pour voir cette réponse.
Question 2 sur 10
0111 1000 de a = 1000 1010. Quels sont les résultats des comparaisons inférieur à signée et non signée et la sortie zéro ?Afficher la réponseMasquer la réponse
Enregistre cette unité pour voir cette réponse.
Question 3 sur 10
1010 et 0101 avec une retenue entrante de 1. Le bit de poids faible de son second opérande passe de 1 à 0. Qu’advient-il de la retenue finale et de la somme ?Afficher la réponseMasquer la réponse
Enregistre cette unité pour voir cette réponse.
Question 4 sur 10
Afficher la réponseMasquer la réponse
Enregistre cette unité pour voir cette réponse.
Question 5 sur 10
Afficher la réponseMasquer la réponse
Enregistre cette unité pour voir cette réponse.
Question 6 sur 10
Afficher la réponseMasquer la réponse
Enregistre cette unité pour voir cette réponse.
Question 7 sur 10
Afficher la réponseMasquer la réponse
Enregistre cette unité pour voir cette réponse.
Question 8 sur 10
Afficher la réponseMasquer la réponse
Enregistre cette unité pour voir cette réponse.
Question 9 sur 10
Afficher la réponseMasquer la réponse
Enregistre cette unité pour voir cette réponse.
Question 10 sur 10
Afficher la réponseMasquer la réponse
Enregistre cette unité pour voir cette réponse.
Tu bloques sur ton propre exercice ? Aide aux Devoirs
Mots-Clés
A
Absorption
Accumulateur
Additionneur à propagation de retenue
Additionneur à sauvegarde de retenue
Additionneur à sélection de retenue
Additionneur complet
Alignement des significandes
Annulation
Anticipation de retenue
Arbre de Wallace
Arithmétique modulaire
Arithmétique saturée
Arrondi au plus proche avec départage au pair
Arrondi correct
Arrondi dirigé
B
bfloat16
Biais d’exposant
Bit collant
Bit d’arrondi
Bit de garde
Bit implicite
Bnegate
C
Champ de fraction
01, suivie de zéros pour remplir le champ.Comparaison non signée
1111 est supérieure à 0001 en non signé, bien que leurs valeurs signées soient −1 et 1.D
Décalage arithmétique à droite
Décaleur à barillet
Dépassement de capacité en arithmétique non signée
Dépassement de capacité en arithmétique signée
Dividende
Diviseur
Division avec restauration
Division sans restauration
Division SRT
E
Emprunt
Epsilon machine
Erreur de représentation
Exception de résultat inexact
Exception de sous-dépassement
Extension de signe
1010 signé en 1111 1010 conserve −6 ; insérer des zéros produirait 10 positif.Extension par des zéros
0000 0000 1111 1010 lorsqu’il est étendu à 16 bits.I
Indicateur de condition
Infini
L
Latence de multiplication
M
Mise à un si inférieur
slt compare des opérandes signés, tandis que sltu applique l’ordre non signé aux mêmes configurations.Moitié de poids fort du produit
Multiplexeur
Multiplicande
Multiplicateur
1001 sélectionne une copie non décalée et une copie décalée de trois positions à gauche.Multiplication par décalages et additions
Multiplication-addition fusionnée (FMA)
N
NaN
Nombre sous-normal
0x00000002 représente deux fois le plus petit nombre sous-normal positif.Non-associativité
Normalisation
P
Précision
Produit partiel
Q
Quotient
R
Recodage de Booth
Recodage de Booth en base 4
Registre à virgule flottante
Reste
rem donne −2 pour −17 divisé par 5, car le reste non nul prend le signe du dividende.S
Signal de génération de retenue
Signal de génération de retenue de groupe
Signal de propagation de retenue
Signal de propagation de retenue de groupe
Signe corrigé du dépassement de capacité
Significande
Sortie zéro
Sous-dépassement graduel
Soustraction en complément à deux
T
Tolérance absolue
Tolérance relative
Tranche de bit
Trappe
U
Unité arithmétique et logique
Unité au dernier rang (ulp)
V
Vérification des bornes
Z
Zéro signé
À propos de cette unité
Crée ton propre Matériel d'Étude
Transforme tes notes, diapos et documents en Guides d'Étude, Questions Pratiques, Flashcards et 6 autres outils.