Arithmétique des ordinateurs

Apprends comment les circuits du processeur effectuent les opérations arithmétiques. Additionne et soustrais avec un même additionneur en complément à deux, distingue la retenue du dépassement de capacité et construis une unité arithmétique et logique qui compare aussi des nombres et effectue des opérations logiques. Découvre le fonctionnement des multiplicateurs et des diviseurs, des circuits à décalages et additions à l’algorithme de Booth et aux multiplicateurs rapides en arbre, ainsi que les instructions RISC-V associées. Code ensuite des nombres en virgule flottante selon IEEE 754, additionne-les, multiplie-les et arrondis-les comme le font les circuits, et explique pourquoi des résultats comme 0,1 + 0,2 ne sont pas exacts.

IntermédiaireUnité 3 sur 6 de la formation Formation : Architecture informatique : processeur, mémoire et RISC-V

Ce que tu vas apprendre

  1. 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 additionneur
      Additionne 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és
      Distingue 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.
  2. 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 bit
      Associe 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 logique
      Produis 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 retenue
      Explique pourquoi les retenues ralentissent les additionneurs à propagation et calcule les retenues à l’avance grâce aux signaux de génération et de propagation.
  3. 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 additions
      Multiplie 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 multiplication
      Traite 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 particuliers
      Divise 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é.
  4. 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-normaux
      Reconnais 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.
  5. 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 flottante
      Aligne, 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ésultats
      Applique 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écision
      Explique 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.

Arithmétique des ordinateurs : cours

5 chapitres

1

Additionne 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 :

si=ai⊕bi⊕ci ci+1=aibi+aici+bici

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 2n. 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é

a−b=a+b‾+1.

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étationRègle d’extensionExtension de 1110 de 4 à 8 bits
Signé en complément à deuxCopier le bit de signe1111 1110, toujours −2
Non signéInsérer des zéros0000 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 2n.
  • 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 à 2n−1 ; les valeurs signées en complément à deux vont de −2n−1 à 2n−1−1. 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érationDépassement non signéDépassement signé
AdditionLa retenue sortante du bit de poids fort vaut 1Des entrées de même signe produisent un résultat de signe opposé
SoustractionUn emprunt est nécessaireDes 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

V=cn−1⊕cn,

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 2n ; 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.
2

Conç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 :

a‾⋅b‾=a+b‾.

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 commandeRésultat sélectionné
0000ET
0001OU
0010Addition
0110Soustraction
0111Mise à un si inférieur en signé
1100NON-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 :

Zeˊro=r0+r1+⋯+rn−1‾.

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 2n, 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

Infeˊrieursigned=signe(a−b)⊕V.

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 :

Infeˊrieurunsigned=cn‾

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éeComparaison signéeComparaison non signée
0111, 10007 < −8 est faux7 < 8 est vrai
1000, 0111−8 < 7 est vrai8 < 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 2n−1 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

gi=aibi,pi=ai+bi.

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

ci+1=gi+pici.

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 :

c1=g0+p0c0 c2=g1+p1g0+p1p0c0 c3=g2+p2g1+p2p1g0+p2p1p0c0 c4=g3+p3g2+p3p2g1+p3p2p1g0+p3p2p1p0c0.

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

G=g3+p3g2+p3p2g1+p3p2p1g0, P=p3p2p1p0.

Sa retenue sortante est G+Pc0. 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 si=pi⊕ci. 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.
3

Multiplie 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 :

ÉtapeBit de poids faible du multiplicateurMultiplicande décaléProduit en cours
110000 01100000 0110
200000 11000000 0110
310001 10000001 1110
400011 00000001 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 2k 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 8x+2x=10x. 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é :

PaireOpération sur l’accumulateur
10Soustraire le multiplicande
01Ajouter le multiplicande
00 ou 11Le 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

dividende=quotient×diviseur+reste.

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.

CalculQuotientReste
−7 divisé par 2−3−1
7 divisé par −2−31
−7 divisé par −23−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 2k−1 à 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.
4

Repré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

(−1)s×1,f×2e.

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
FormatBits de signeBits d’exposantBits de fractionBiaisPrécision
binary1615101511 bits
binary32182312724 bits
binary6411152102353 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é :

valeur=(−1)S(1+Fraction)2E−Biais.

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 0,112=1,12×2−1. 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

1,1000112=1+12+132+164=1,546875.

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 3,40×1038, avec une plus petite valeur normale positive de 2−126 et environ sept chiffres décimaux significatifs. binary64 atteint environ 1,80×10308, avec une plus petite valeur normale positive de 2−1022 et environ 15 à 16 chiffres significatifs. binary16 a un maximum de 65 504, une plus petite valeur normale positive de 2−14, une plus petite valeur sous-normale positive de 2−24 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 2e à 2e+1 exclu, les valeurs normales voisines sont espacées de 2e−23. Cet espacement est une ulp, une unité au dernier rang. Juste au-dessus de 1, il vaut 2−23, souvent appelé epsilon machine. À 224, 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’exposantChamp de fractionSignification
Que des zérosZéroZéro signé
Que des zérosNon nulNombre sous-normal
Que des unsZéroInfini signé
Que des unsNon nulNaN

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 :

valeur=(−1)S×0,f×21−Biais.

En binary32, 0x00000001 vaut 2−149 et 0x00400000 vaut 2−127. En binary64, la plus petite valeur positive est 2−1074. 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, 2−126/2=2−127 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.
5

Calcule 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) :

  1. Écris les opérandes sous les formes 1,0002×2−1 et −1,1102×2−2.
  2. Aligne le second pour obtenir −0,1112×2−1.
  3. Soustrais les valeurs absolues : 1,0002−0,1112=0,0012.
  4. Normalise pour obtenir 1,0002×2−4, 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 9,999+0,01610 à l’échelle 101. Le résultat intermédiaire exact est 10,01510 à cette échelle. Normalise pour obtenir 1,00151×102 et arrondis à 1,002×102. 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 :

Eresult=Ea+Eb−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 1,0002×1,1102=1,1102. Le OU exclusif des signes vaut 1, ce qui donne −1,1102×2−3=−0,21875.

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 a=1+2−23, b=1−2−23 et c = −1. Leur produit exact est 1−2−46. 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 −2−46.

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
DirectionRègle
roundTiesToEvenValeur la plus proche ; à mi-chemin, choix d’un dernier bit de significande égal à 0
roundTowardPositiveVers +∞
roundTowardNegativeVers −∞
roundTowardZeroVers zéro
roundTiesToAwayValeur 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, 1,00112 s’arrondit à 1,0102 et 1,01012 s’arrondit aussi à 1,0102. 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

1,00010012×23.

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 1,0012×23=9. 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 2−24 ; pour binary64, elle est 2−53. 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

∣a−b∣≤max⁡(toleˊrance absolue,toleˊrance relativemax⁡(∣a∣,∣b∣)).

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 1+2−23. Soustraire 1 donne environ 1,1920929×10−7 au lieu de 1,0×10−7, 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 253, 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

5 Leçons Interactives

1

Suis le fonctionnement d’un additionneur et évalue son résultat

12 étapes
Suis une addition et une soustraction dans un additionneur de 8 bits, puis distingue les signaux utilisés pour vérifier les plages non signée et signée.
  1. 1
    IntroductionD’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.

  2. 2
    ExplicationUne 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.

  3. 3
    ExempleCalcule les colonnes de poids faible

    Écris 58 sous la forme 0011 1010 et 27 sous la forme 0001 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.

  4. 4
    ExempleTermine 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.

  5. 5
    DéfiChoisis l’extension

    Un opérande signé de 4 bits 1011 doit ê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 donne 0000 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.

  6. 6
    ExempleRéutilise l’additionneur pour soustraire

    Calcule maintenant 58 − 27. Inverse 0001 1011 pour obtenir 1110 0100 et fixe la retenue initiale à 1. Additionne 0011 1010 + 1110 0100 + 1 pour obtenir 0001 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.

  7. 7
    Point 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.

  8. 8
    ExempleUne 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.

  9. 9
    DéfiLis les deux signaux

    Un additionneur de 8 bits additionne 1111 0110 et 0001 0100, ce qui produit 0000 1010 avec 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.

  10. 10
    LienLe programme décide de la réponse

    L’instruction RISC-V add renvoie 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.

  11. 11
    Dé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é.

  12. 12
    Ré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.

2

Construis une unité arithmétique et logique qui compare correctement

14 étapes
Sélectionne des résultats arithmétiques et logiques, corrige la comparaison signée inférieur à après un dépassement et raccourcis le chemin de retenue.

Enregistre cette unité pour suivre chaque Leçon Interactive pas à pas.

  1. 1
    IntroductionPlusieurs résultats, une sortie sélectionnée
  2. 2
    ExplicationRépète une tranche d’un bit
  3. 3
    ExempleDécode les commandes d’une conception
  4. 4
    DéfiConstruis NON-OU avec les mêmes portes
  5. 5
    LienDécale selon les distances sélectionnées
  6. 6
    ExplicationRéduis le résultat à la sortie zéro
  7. 7
    ExempleObserve un signe de différence trompeur
  8. 8
    DéfiInterprète deux fois les mêmes configurations
  9. 9
    ExplicationDécris une retenue avant son arrivée
  10. 10
    ExemplePrévois la retenue finale d’un bloc
  11. 11
    DéfiUne retenue générée rencontre un arrêt
  12. 12
    Point cléUtilise des portes pour raccourcir l’attente
  13. 13
    DéfiConserve une comparaison correcte avec un additionneur plus rapide
  14. 14
    RécapitulatifDistingue sélection, interprétation et vitesse
3

Suis un produit et un quotient dans les circuits

18 étapes
Suis une multiplication non signée, un recodage de Booth et une division avec restauration, puis applique les règles des nombres signés et les vérifications de largeur.

Enregistre cette unité pour suivre chaque Leçon Interactive pas à pas.

  1. 1
    IntroductionLe produit combine des rangées ; le quotient se construit par décisions
  2. 2
    ExempleChoisis les produits partiels pour 9 fois 6
  3. 3
    ExempleTermine les contributions sélectionnées
  4. 4
    Point cléConserve la retenue du multiplicateur compact
  5. 5
    DéfiVérifie un produit non signé sur une largeur réduite
  6. 6
    ExplicationConserve la valeur absolue signée dans des bits non signés
  7. 7
    ExplicationPrépare le registre de Booth
  8. 8
    ExempleEffectue les deux premières étapes de Booth
  9. 9
    ExempleTermine le produit signé
  10. 10
    DéfiVérifie la représentation signée après multiplication
  11. 11
    LienComprime les rangées au lieu de terminer chaque somme
  12. 12
    ExempleAbaisse les premiers bits du dividende
  13. 13
    ExempleComplète le quotient et le reste
  14. 14
    DéfiApplique la règle du reste signé
  15. 15
    ConseilUtilise l’emprunt pour la soustraction d’essai
  16. 16
    DéfiRelie un raccourci de division à la multiplication
  17. 17
    LienLis les résultats RISC-V exceptionnels
  18. 18
    RécapitulatifVérifie l’invariant et le format de destination
4

Décode les bits en virgule flottante avant de calculer

12 étapes
Code une valeur normale, relie l’espacement à la précision et classe les zéros, les nombres sous-normaux, les infinis et les NaN.

Enregistre cette unité pour suivre chaque Leçon Interactive pas à pas.

  1. 1
    IntroductionUne échelle et un nombre limité de chiffres
  2. 2
    ExempleNormalise la valeur absolue
  3. 3
    ExempleAjoute le biais et assemble les champs
  4. 4
    DéfiDécode une nouvelle valeur normale
  5. 5
    ExplicationLa plage de valeurs ne garantit pas le détail des entiers
  6. 6
    ExplicationClasse d’abord les exposants réservés
  7. 7
    ExempleDécode un nombre sous-normal sans 1 implicite
  8. 8
    Point cléUn très petit résultat exact ne nécessite pas d’indicateur de sous-dépassement
  9. 9
    DéfiDistingue l’infini d’un résultat invalide
  10. 10
    ConseilTeste NaN sans égalité
  11. 11
    DéfiRelie le codage au sous-dépassement graduel
  12. 12
    RécapitulatifInterprète les champs avant d’évaluer une valeur
5

Aligne, arrondis et explique la perte de précision

18 étapes
Suis les opérations en virgule flottante, utilise les informations des bits de garde, d’arrondi et collant, et prévois les erreurs d’absorption, d’annulation et de conversion.

Enregistre cette unité pour suivre chaque Leçon Interactive pas à pas.

  1. 1
    IntroductionConserve l’information jusqu’à la décision d’arrondi
  2. 2
    ExempleAligne une addition
  3. 3
    ExempleNormalise avant de choisir la valeur voisine
  4. 4
    ExplicationMultiplie avec une correction du biais
  5. 5
    DéfiCorrige un calcul d’exposant
  6. 6
    ExplicationUn bit conservé pair départage une valeur à mi-chemin
  7. 7
    ExempleSuis les bits de garde, d’arrondi et collant
  8. 8
    DéfiDistingue une valeur à mi-chemin d’une valeur proche
  9. 9
    LienLa direction d’arrondi modifie les résultats négatifs
  10. 10
    Point cléLa FMA conserve un produit jusqu’après l’addition
  11. 11
    ExplicationUne entrée décimale peut arriver déjà arrondie
  12. 12
    ExempleUn compteur atteint une barrière d’espacement
  13. 13
    DéfiPrévois l’effet d’un changement de regroupement
  14. 14
    Point cléUne soustraction exacte peut révéler une erreur antérieure
  15. 15
    ConseilChoisis une tolérance adaptée aux valeurs proches de zéro
  16. 16
    DéfiVérifie un aller-retour d’entier
  17. 17
    DéfiCombine alignement, bit collant et absorption
  18. 18
    RécapitulatifLocalise la perte d’information

Arithmétique des ordinateurs : QCM

60 Questions Pratiques en 6 séries

Série 1 : Sommes entières, soustraction et décisions de l’unité arithmétique et logique10 Questions Pratiques

Question 1 sur 10

Un additionneur complet reçoit les bits d’opérandes 1 et 0 avec une retenue entrante de 1. Quels bit de somme et retenue sortante produit-il ?
  1. Somme 1, retenue 0
  2. Somme 1, retenue 1
  3. Somme 0, retenue 1
  4. Somme 0, retenue 0
Afficher la réponseMasquer la réponse
Réponse : C
Le total des trois entrées vaut deux, soit 10 en binaire : le bit de somme vaut donc 0 et la retenue vaut 1. Un bit de somme de 1 résulterait de l’oubli de la retenue entrante et d’un OU exclusif limité aux deux bits d’opérandes ; un additionneur complet doit inclure les trois entrées.

Question 2 sur 10

Un soustracteur de 8 bits inverse le second opérande mais laisse par erreur la retenue entrante initiale à 0. Quel résultat signé produit-il pour 42 − 17 ?
  1. 24
  2. 25
  3. 26
  4. −25
Afficher la réponseMasquer la réponse
Réponse : A
L’inversion sans le 1 initial calcule a − b − 1 : ce circuit renvoie donc 42 − 17 − 1 = 24. Le résultat attendu 25 nécessite la retenue entrante supplémentaire qui complète le complément à deux de 17 ; l’inversion seule ne donne pas l’opposé.

Question 3 sur 10

Quels sont la retenue sortante et le dépassement signé pour l’addition 118 + 19 sur 8 bits ?
  1. Retenue 1, dépassement 0
  2. Retenue 0, dépassement 0
  3. Retenue 1, dépassement 1
  4. Retenue 0, dépassement 1
Afficher la réponseMasquer la réponse
Réponse : D
La somme vaut 137, soit moins que le maximum non signé de 255 : la retenue sortante vaut donc 0. Sa configuration stockée a un bit de signe égal à 1 malgré deux entrées signées positives, donc le dépassement signé vaut 1 ; utiliser uniquement la plage non signée conduirait à déclarer à tort que les deux interprétations sont représentables.

Question 4 sur 10

Quel composant de l’unité arithmétique et logique sélectionne un résultat parmi les sorties possibles des portes ET et OU et de l’additionneur ?
  1. La chaîne de retenue
  2. Le multiplexeur de sortie
  3. Le circuit d’extension de signe
  4. Le registre d’opérande
Afficher la réponseMasquer la réponse
Réponse : B
Le multiplexeur de sortie transmet un résultat possible selon les commandes d’opération. La chaîne de retenue aide à calculer la somme mais ne choisit pas entre les chemins arithmétique et logique, tandis que le registre d’opérande conserve une valeur au lieu de sélectionner un résultat de l’unité.

Question 5 sur 10

Quelle configuration de 8 bits conserve la valeur de l’opérande signé de 4 bits 1101 ?
  1. 0000 1101
  2. 1111 1101
  3. 1000 1101
  4. 0000 0011
Afficher la réponseMasquer la réponse
Réponse : B
L’entrée représente −3 : l’extension de signe copie donc son 1 de tête dans chaque bit de poids fort ajouté. Le résultat 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

Pour les entrées de 4 bits a = 0101 et b = 1010, quels résultats sur toute la largeur produisent slt signé et sltu non signé ?
  1. slt : 0001 ; sltu : 0000
  2. slt : 0001 ; sltu : 0001
  3. slt : 0000 ; sltu : 0000
  4. slt : 0000 ; sltu : 0001
Afficher la réponseMasquer la réponse
Réponse : D
Les valeurs signées sont 5 et −6 : 5 < −6 est faux et slt renvoie donc 0. Les valeurs non signées sont 5 et 10, donc sltu renvoie 1 ; appliquer une interprétation signée aux deux instructions masquerait pourquoi les mêmes bits produisent des comparaisons différentes.

Question 7 sur 10

Que renvoie l’addition saturée non signée sur 8 bits pour 220 + 70 ?
  1. 255
  2. 34
  3. 254
  4. 290
Afficher la réponseMasquer la réponse
Réponse : A
La somme exacte 290 dépasse le maximum non signé sur 8 bits : la saturation la ramène donc à 255. Ne conserver que les huit bits de poids faible donnerait 34, mais cela correspond à une arithmétique avec retour circulaire ; la saturation conserve une borne au lieu du reste modulo 256.

Question 8 sur 10

Un décaleur à barillet de 64 bits utilise des étages de décalage par puissances de deux. Quels étages sont sélectionnés pour un décalage de 37 ?
  1. 32, 4 et 2
  2. 16, 8, 4 et 1
  3. 32, 4 et 1
  4. 32, 8 et 1
Afficher la réponseMasquer la réponse
Réponse : C
Les distances sélectionnées doivent totaliser 37, et 32 + 4 + 1 convient. Choisir 32, 4 et 2 donne 38, soit un décalage de un de trop ; les distances des étages représentent la décomposition binaire de la distance demandée, et non les positions des bits de la valeur décalée.

Question 9 sur 10

Une routine sur 8 bits avec retour circulaire calcule (115 + 29) − 40, puis utilise le résultat signé final. Quel résultat obtient-elle et quels dépassements signés se produisent ?
  1. 104 ; les deux opérations dépassent la capacité signée
  2. 104 ; seule l’addition dépasse la capacité signée
  3. −152 ; seule la soustraction dépasse la capacité signée
  4. −112 ; aucune opération ne dépasse la capacité signée
Afficher la réponseMasquer la réponse
Réponse : A
La première somme, 144, est stockée comme −112 et dépasse la capacité signée. Soustraire 40 de −112 donne −152, qui revient à 104 par retour circulaire et dépasse aussi la capacité signée ; l’arithmétique modulaire retrouve la valeur finale représentable, même si tester uniquement l’addition initiale manquerait le second dépassement.

Question 10 sur 10

Une unité arithmétique et logique de 8 bits soustrait deux configurations identiques 1001 0110. Quels sont son résultat et sa sortie zéro ?
  1. Résultat 0000 0000, sortie zéro 0
  2. Résultat 1111 1111, sortie zéro 0
  3. Résultat 0000 0000, sortie zéro 1
  4. Résultat 0000 0001, sortie zéro 0
Afficher la réponseMasquer la réponse
Réponse : C
Soustraire une configuration de bits d’elle-même produit un résultat composé uniquement de zéros, et la réduction NON-OU met donc la sortie zéro à 1. Un résultat composé uniquement de 1 proviendrait de l’inversion du second opérande sans le +1 initial, ce qui calculerait une unité de moins que la différence voulue.
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

Avec la propagation par OU, quelles sont les valeurs de génération et de propagation pour les bits d’opérandes 1 et 1 ?
  1. Génération 1, propagation 0
  2. Génération 1, propagation 1
  3. Génération 0, propagation 1
  4. Génération 0, propagation 0
Afficher la réponseMasquer la réponse

Enregistre cette unité pour voir cette réponse.

Question 2 sur 10

Combien de bits le produit non signé complet d’un opérande de 7 bits et d’un opérande de 9 bits peut-il nécessiter ?
  1. 9 bits
  2. 15 bits
  3. 18 bits
  4. 16 bits
Afficher la réponseMasquer la réponse

Enregistre cette unité pour voir cette réponse.

Question 3 sur 10

Quels sont le produit complet sur 8 bits et le résultat de poids faible conservé sur 4 bits pour 11 × 3 en non signé ?
  1. Complet 0010 0001 ; poids faible 0001
  2. Complet 0001 0001 ; poids faible 0001
  3. Complet 0010 0001 ; poids faible 0010
  4. Complet 0001 1110 ; poids faible 1110
Afficher la réponseMasquer la réponse

Enregistre cette unité pour voir cette réponse.

Question 4 sur 10

Un bloc de 4 bits a un signal de génération de groupe à 0 et un signal de propagation de groupe à 1. Quelle retenue sortante obtient-on pour une retenue entrante de 0 et pour une retenue entrante de 1 ?
  1. 1 pour l’entrée 0 ; 1 pour l’entrée 1
  2. 0 pour l’entrée 0 ; 0 pour l’entrée 1
  3. 0 pour l’entrée 0 ; 1 pour l’entrée 1
  4. 1 pour l’entrée 0 ; 0 pour l’entrée 1
Afficher la réponseMasquer la réponse

Enregistre cette unité pour voir cette réponse.

Question 5 sur 10

Que fait un étage à sauvegarde de retenue avec trois mots de produits partiels ?
  1. Il produit un mot avec une chaîne de retenue complète
  2. Il produit deux mots après une chaîne de retenue complète
  3. Il produit trois mots sans chaîne de retenue complète
  4. Il produit deux mots sans chaîne de retenue complète
Afficher la réponseMasquer la réponse

Enregistre cette unité pour voir cette réponse.

Question 6 sur 10

Dans une vérification des bornes sur 32 bits, l’indice vaut −2 et la longueur vaut 20, dans la plage signée positive ou nulle. Quel résultat donne une comparaison non signée indice ≥ longueur ?
  1. Faux, donc l’indice est accepté
  2. Vrai, donc l’indice est rejeté
  3. Vrai, car −2 signé dépasse 20
  4. Faux, car −2 est ramené à zéro
Afficher la réponseMasquer la réponse

Enregistre cette unité pour voir cette réponse.

Question 7 sur 10

Une routine RV32 a besoin du produit complet d’un opérande non signé par un autre opérande non signé. Quels résultats doit-elle combiner ?
  1. mulh pour la moitié de poids fort et mul pour celle de poids faible
  2. mul pour la moitié de poids fort et mulhu pour celle de poids faible
  3. mulhu pour la moitié de poids fort et mul pour celle de poids faible
  4. mulhsu pour la moitié de poids fort et mulh pour celle de poids faible
Afficher la réponseMasquer la réponse

Enregistre cette unité pour voir cette réponse.

Question 8 sur 10

Un bloc d’anticipation de 4 bits avec propagation par OU additionne a = 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 ?
  1. G = 1, P = 1, retenue = 1
  2. G = 0, P = 1, retenue = 0
  3. G = 1, P = 0, retenue = 1
  4. G = 0, P = 1, retenue = 1
Afficher la réponseMasquer la réponse

Enregistre cette unité pour voir cette réponse.

Question 9 sur 10

Un multiplicateur de 4 bits reçoit les configurations 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 ?
  1. Poids fort signé 1111, non représentable ; poids fort non signé 0010, représentable
  2. Poids fort signé 1111, représentable ; poids fort non signé 0010, non représentable
  3. Poids fort signé 0000, représentable ; poids fort non signé 0010, non représentable
  4. Poids fort signé 1111, représentable ; poids fort non signé 0000, représentable
Afficher la réponseMasquer la réponse

Enregistre cette unité pour voir cette réponse.

Question 10 sur 10

Une soustraction signée avec dépassement de capacité a un bit de signe stocké égal à 0. Quel résultat de comparaison signée inférieur à l’unité arithmétique et logique doit-elle produire ?
  1. 0
  2. Le bit de retenue sortante
  3. La sortie zéro
  4. 1
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

Quelle grandeur fournit le signe d’un reste non nul dans une division signée avec troncature ?
  1. Le diviseur
  2. Le quotient
  3. L’opérande de plus petite valeur absolue
  4. Le dividende
Afficher la réponseMasquer la réponse

Enregistre cette unité pour voir cette réponse.

Question 2 sur 10

Quels quotient et reste la division signée RISC-V produit-elle pour 23 divisé par −6 ?
  1. Quotient −4, reste −1
  2. Quotient −3, reste 5
  3. Quotient −3, reste −5
  4. Quotient 3, reste 5
Afficher la réponseMasquer la réponse

Enregistre cette unité pour voir cette réponse.

Question 3 sur 10

Dans une étape de Booth, A = 0, le multiplicande vaut −7 et la paire de bits de poids faible est 10. Quelle valeur faut-il dans l’accumulateur avant le décalage ?
  1. −7
  2. 0
  3. +7
  4. −1
Afficher la réponseMasquer la réponse

Enregistre cette unité pour voir cette réponse.

Question 4 sur 10

L’addition dans la moitié de poids fort d’un multiplicateur non signé compact produit une retenue de 1. Où cette retenue doit-elle aller pendant le décalage combiné suivant à droite ?
  1. Dans la position de poids fort de la moitié haute
  2. Dans la position de poids faible du multiplicateur
  3. Dans l’entrée de retenue basse de l’étape suivante
  4. Entièrement hors du produit stocké
Afficher la réponseMasquer la réponse

Enregistre cette unité pour voir cette réponse.

Question 5 sur 10

Une routine RV32 calcule 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 ?
  1. q = −2³¹, r = 0 ; la reconstruction renvoie 2³¹ − 1
  2. q = 2³¹ − 1, r = −1 ; la reconstruction renvoie −2³¹
  3. q = −2³¹, r = 0 ; la reconstruction renvoie −2³¹
  4. q = 2³¹, r = 0 ; la reconstruction renvoie −2³¹
Afficher la réponseMasquer la réponse

Enregistre cette unité pour voir cette réponse.

Question 6 sur 10

Un diviseur avec restauration sur quatre bits a un reste partiel de 2 et un diviseur de 11 avant une soustraction d’essai. Quelle configuration d’essai et quelle action sont nécessaires ?
  1. Essai 0111 ; conserver et écrire 1
  2. Essai 1001 ; restaurer et écrire 0
  3. Essai 1001 ; conserver et écrire 1
  4. Essai 0111 ; restaurer et écrire 0
Afficher la réponseMasquer la réponse

Enregistre cette unité pour voir cette réponse.

Question 7 sur 10

Une implémentation de Booth sur 4 bits utilise un accumulateur de 5 bits pour le multiplicande −8 et le multiplicateur 1. Quelles sont la première mise à jour de l’accumulateur et le produit final sur 8 bits ?
  1. D’abord −8 (11000) ; produit 1111 1000
  2. D’abord +8 (01000) ; produit 1111 1000
  3. D’abord +8 (01000) ; produit 0000 1000
  4. D’abord −8 (11000) ; produit 0000 1000
Afficher la réponseMasquer la réponse

Enregistre cette unité pour voir cette réponse.

Question 8 sur 10

Une routine signée remplace la division avec troncature de −29 par 8 par un décalage à droite. Quel biais et quel résultat après décalage conservent le quotient ?
  1. Ajouter 7, puis décaler pour obtenir −3
  2. Ajouter 0, puis décaler pour obtenir −4
  3. Ajouter 3, puis décaler pour obtenir −4
  4. Ajouter 8, puis décaler pour obtenir −2
Afficher la réponseMasquer la réponse

Enregistre cette unité pour voir cette réponse.

Question 9 sur 10

Un multiplicateur en pipeline a une latence de quatre cycles et accepte une nouvelle multiplication à chaque cycle. Quand une seconde multiplication indépendante peut-elle commencer après le début de la première ?
  1. Quatre cycles plus tard
  2. Trois cycles plus tard
  3. Deux cycles plus tard
  4. Un cycle plus tard
Afficher la réponseMasquer la réponse

Enregistre cette unité pour voir cette réponse.

Question 10 sur 10

Quelle expression par décalages et additions est égale à 12x lorsque tous les résultats intermédiaires sont représentables et que le langage autorise les décalages ?
  1. (x << 3) + (x << 2)
  2. (x << 3) + (x << 1)
  3. (x << 4) + (x << 2)
  4. (x << 3) + x
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

Quel exposant réel est codé par un champ d’exposant binary32 normal de 123 ?
  1. −4
  2. 4
  3. −3
  4. 123
Afficher la réponseMasquer la réponse

Enregistre cette unité pour voir cette réponse.

Question 2 sur 10

Que représente une configuration binary32 dont l’exposant est composé uniquement de uns et la fraction est non nulle ?
  1. Un nombre sous-normal
  2. L’infini
  3. NaN
  4. Une valeur normale
Afficher la réponseMasquer la réponse

Enregistre cette unité pour voir cette réponse.

Question 3 sur 10

Une valeur binary32 normale a un signe égal à 1, un champ d’exposant égal à 125 et une fraction 101 suivie de zéros. Quelle est sa valeur ?
  1. −0,15625
  2. −0,40625
  3. −1,625
  4. −0,8125
Afficher la réponseMasquer la réponse

Enregistre cette unité pour voir cette réponse.

Question 4 sur 10

Quels signe, champ d’exposant et début de fraction binary32 codent −10,5 ?
  1. Signe 1 ; exposant 130 ; fraction 10101…
  2. Signe 1 ; exposant 124 ; fraction 0101…
  3. Signe 0 ; exposant 130 ; fraction 0101…
  4. Signe 1 ; exposant 130 ; fraction 0101…
Afficher la réponseMasquer la réponse

Enregistre cette unité pour voir cette réponse.

Question 5 sur 10

Quelle est la valeur de la configuration sous-normale positive binary32 0x00000008 ?
  1. 2⁻¹⁴⁹
  2. 2⁻¹⁴⁷
  3. 2⁻¹⁴⁶
  4. 2⁻¹²⁶
Afficher la réponseMasquer la réponse

Enregistre cette unité pour voir cette réponse.

Question 6 sur 10

Deux significandes normaux positifs à virgule flottante donnent par multiplication 11,01₂ avec un exposant réel initial de 4. Quel produit normalisé obtient-on avant l’arrondi ?
  1. 1,101₂ × 2⁵
  2. 1,101₂ × 2³
  3. 1,101₂ × 2⁴
  4. 1,010₂ × 2⁵
Afficher la réponseMasquer la réponse

Enregistre cette unité pour voir cette réponse.

Question 7 sur 10

Deux valeurs binary32 normales positives sont 2⁻⁸⁰ et 2⁻⁶⁰. Leur produit exact est représentable en binary32. Quelle est la classe du résultat et quel est l’état de l’indicateur de sous-dépassement avec le traitement par défaut ?
  1. Sous-normal ; indicateur activé
  2. Normal ; indicateur désactivé
  3. Zéro ; indicateur activé
  4. Sous-normal ; indicateur désactivé
Afficher la réponseMasquer la réponse

Enregistre cette unité pour voir cette réponse.

Question 8 sur 10

Un résultat binary32 est calculé par (−6,0)/(−0,0) avec le traitement par défaut, puis comparé à lui-même pour tester l’égalité. Quels sont la valeur, l’indicateur nouvellement activé et le résultat de l’égalité ?
  1. −∞ ; division par zéro ; vrai
  2. +∞ ; division par zéro ; vrai
  3. +∞ ; opération invalide ; faux
  4. NaN ; opération invalide ; faux
Afficher la réponseMasquer la réponse

Enregistre cette unité pour voir cette réponse.

Question 9 sur 10

Un format binary32 est remplacé par un format ayant le même champ d’exposant mais deux bits de fraction en moins. Pour les valeurs absolues allant de 2¹⁰ à 2¹¹ exclu, comment l’espacement change-t-il ?
  1. De 2⁻¹³ à 2⁻¹⁵
  2. De 2⁻¹⁰ à 2⁻⁸
  3. De 2⁻¹³ à 2⁻¹¹
  4. De 2⁻¹³ à 2⁻¹²
Afficher la réponseMasquer la réponse

Enregistre cette unité pour voir cette réponse.

Question 10 sur 10

Quelle catégorie d’instructions RISC-V écrit son résultat dans un registre entier alors qu’elle compare des entrées à virgule flottante ?
  1. Les additions à virgule flottante comme fadd.s
  2. Les comparaisons à virgule flottante comme flt.s
  3. Les multiplications à virgule flottante comme fmul.s
  4. Les multiplications-additions fusionnées comme fmadd.s
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

Une valeur exacte à mi-chemin avec des significandes de quatre bits se trouve entre 1,110₂ et 1,111₂. Que choisit l’arrondi au plus proche avec départage au pair ?
  1. 1,111₂
  2. 1,101₂
  3. 1,110₂
  4. 10,000₂
Afficher la réponseMasquer la réponse

Enregistre cette unité pour voir cette réponse.

Question 2 sur 10

Un résultat normalisé conserve le significande 1,011₂ avec les bits de garde, d’arrondi et collant 100. Quel est le significande arrondi au plus proche avec départage au pair ?
  1. 1,011₂
  2. 1,100₂
  3. 1,010₂
  4. 1,101₂
Afficher la réponseMasquer la réponse

Enregistre cette unité pour voir cette réponse.

Question 3 sur 10

Avec des significandes de quatre bits et l’arrondi au plus proche avec départage au pair, que vaut 2,75 + 0,375 ?
  1. 3,125
  2. 3,25
  3. 2,75
  4. 3,0
Afficher la réponseMasquer la réponse

Enregistre cette unité pour voir cette réponse.

Question 4 sur 10

Quelle fraction irréductible a une écriture binaire finie exacte : 7/16, 7/20, 7/12 ou 7/10 ?
  1. 7/16
  2. 7/20
  3. 7/12
  4. 7/10
Afficher la réponseMasquer la réponse

Enregistre cette unité pour voir cette réponse.

Question 5 sur 10

Un résultat normalisé à significande de quatre bits a pour bits exacts 1,111101₂ avec un exposant réel de 5. Avec l’arrondi au plus proche et le départage au pair, quel résultat normalisé est stocké ?
  1. 1,111₂ × 2⁵
  2. 1,000₂ × 2⁶
  3. 1,000₂ × 2⁵
  4. 1,111₂ × 2⁶
Afficher la réponseMasquer la réponse

Enregistre cette unité pour voir cette réponse.

Question 6 sur 10

En binary32 avec l’arrondi au plus proche et le départage au pair, un accumulateur stocké vaut 2²⁶. Une boucle ajoute exactement quatre fois la valeur stockée 3, en arrondissant après chaque addition. Quelle valeur finale obtient-on ?
  1. 2²⁶ + 8
  2. 2²⁶ + 12
  3. 2²⁶
  4. 2²⁶ + 16
Afficher la réponseMasquer la réponse

Enregistre cette unité pour voir cette réponse.

Question 7 sur 10

En binary32 avec l’arrondi au plus proche et le départage au pair, soit a = 1 + 2⁻¹², b = 1 − 2⁻¹², c = −1. Que renvoient le calcul séparé de a × b + c et la multiplication-addition fusionnée ?
  1. Les deux renvoient −2⁻²⁴
  2. Le calcul séparé renvoie 0 ; la FMA renvoie −2⁻²⁴
  3. Le calcul séparé renvoie −2⁻²⁴ ; la FMA renvoie 0
  4. Les deux renvoient 0
Afficher la réponseMasquer la réponse

Enregistre cette unité pour voir cette réponse.

Question 8 sur 10

Une valeur binary32 positive finie dépasse la capacité lorsqu’elle est multipliée par 2. Avec roundTowardNegative, quels résultat et indicateurs obtient-on avec le traitement par défaut ?
  1. Infini positif ; dépassement et résultat inexact
  2. Plus grande valeur positive finie ; sous-dépassement et résultat inexact
  3. Infini positif ; division par zéro et résultat inexact
  4. Plus grande valeur positive finie ; dépassement et résultat inexact
Afficher la réponseMasquer la réponse

Enregistre cette unité pour voir cette réponse.

Question 9 sur 10

En arithmétique binary32 avec l’arrondi au plus proche et le départage au pair, x = 1 + 2⁻²³ est stocké exactement. Un programme calcule (x − 1) × 2²³. Quel résultat obtient-on et la soustraction introduit-elle une erreur ?
  1. 1 ; la soustraction est exacte
  2. 0 ; la soustraction élimine 2⁻²³
  3. 1 ; la soustraction arrondit vers le haut
  4. 2 ; la soustraction donne 2⁻²²
Afficher la réponseMasquer la réponse

Enregistre cette unité pour voir cette réponse.

Question 10 sur 10

Une valeur exacte négative −2,3 est arrondie à un entier. Quels sont les résultats vers zéro et vers l’infini négatif ?
  1. Vers zéro −3 ; vers le négatif −2
  2. Vers zéro −2 ; vers le négatif −2
  3. Vers zéro −2 ; vers le négatif −3
  4. Vers zéro −3 ; vers le négatif −3
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

Un calcul en virgule flottante renvoie NaN. Quel type de test un programme doit-il utiliser pour le reconnaître ?
  1. Une égalité avec une constante NaN stockée
  2. Un test NaN spécifique comme isnan
  3. Un test d’égalité de la valeur avec elle-même
  4. Un test vérifiant que le bit de signe vaut 1
Afficher la réponseMasquer la réponse

Enregistre cette unité pour voir cette réponse.

Question 2 sur 10

Une unité arithmétique et logique de 8 bits soustrait b = 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 ?
  1. Signé 0 ; non signé 0 ; sortie zéro 0
  2. Signé 1 ; non signé 1 ; sortie zéro 0
  3. Signé 0 ; non signé 1 ; sortie zéro 1
  4. Signé 1 ; non signé 0 ; sortie zéro 0
Afficher la réponseMasquer la réponse

Enregistre cette unité pour voir cette réponse.

Question 3 sur 10

Un bloc de 4 bits avec propagation par OU additionne 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 ?
  1. La retenue reste à 1 ; la somme passe de 0000 à 1111
  2. La retenue passe de 1 à 0 ; la somme passe de 1111 à 0000
  3. La retenue passe de 1 à 0 ; la somme passe de 0000 à 1111
  4. La retenue reste à 0 ; la somme passe de 0000 à 1111
Afficher la réponseMasquer la réponse

Enregistre cette unité pour voir cette réponse.

Question 4 sur 10

Un programme multiplie les configurations non signées de 8 bits 0xFE et 0x02. Il prend l’octet de poids fort de leur produit signé et l’octet de poids faible de leur produit non signé. Quelle valeur de 16 bits est assemblée ?
  1. 0xFFFC au lieu de 0x01FC
  2. 0x01FC au lieu de 0xFFFC
  3. 0xFF02 au lieu de 0x01FC
  4. 0x00FC au lieu de 0x01FC
Afficher la réponseMasquer la réponse

Enregistre cette unité pour voir cette réponse.

Question 5 sur 10

Une routine RV32 calcule divu et remu pour le dividende 37 et le diviseur 0, puis vérifie si q × diviseur + reste vaut 37 en utilisant une arithmétique avec retour circulaire. Que montre ce test ?
  1. Il échoue car tous les bits du quotient valent un
  2. Il déclenche une trappe avant le test d’égalité
  3. Il réussit car le quotient vaut zéro
  4. Il réussit même si une division par zéro a eu lieu
Afficher la réponseMasquer la réponse

Enregistre cette unité pour voir cette réponse.

Question 6 sur 10

Dans l’intervalle normal binary32 allant de 64 à 128 exclu, quel est l’espacement entre deux valeurs voisines ?
  1. 2⁻¹⁶
  2. 2⁻¹⁷
  3. 2⁻²³
  4. 2⁻¹⁸
Afficher la réponseMasquer la réponse

Enregistre cette unité pour voir cette réponse.

Question 7 sur 10

En arithmétique binary32 avec l’arrondi au plus proche et le départage au pair, a = 1 + 2⁻²², b = 1 − 2⁻²² et c = −1 sont des entrées exactes. Que renvoient la multiplication et l’addition séparées et la FMA ?
  1. Calcul séparé : 0 ; FMA : −2⁻⁴⁴
  2. Calcul séparé : −2⁻⁴⁴ ; FMA : −2⁻⁴⁴
  3. Calcul séparé : 0 ; FMA : +2⁻⁴⁴
  4. Calcul séparé : −2⁻²² ; FMA : −2⁻⁴⁴
Afficher la réponseMasquer la réponse

Enregistre cette unité pour voir cette réponse.

Question 8 sur 10

Un modèle à significande de quatre bits arrondit chaque opération au plus proche avec départage au pair. Il calcule (16 + 1,25) − 16. Quel résultat est renvoyé ?
  1. 0
  2. 1,25
  3. 2
  4. 1
Afficher la réponseMasquer la réponse

Enregistre cette unité pour voir cette réponse.

Question 9 sur 10

Un entier large 67 108 867 est converti en binary32 puis reconverti en entier large avec l’arrondi au plus proche et le départage au pair. Le programme soustrait ensuite l’entier d’origine. Quelle différence obtient-il ?
  1. +5
  2. −3
  3. 0
  4. −1
Afficher la réponseMasquer la réponse

Enregistre cette unité pour voir cette réponse.

Question 10 sur 10

Après une addition non signée RV32, la somme stockée est inférieure à la première entrée selon l’ordre non signé. Quelle conclusion en découle ?
  1. L’addition a nécessairement dépassé la capacité signée
  2. L’addition n’a produit ni retenue ni dépassement
  3. La première entrée était nécessairement négative
  4. L’addition a dépassé le maximum non signé et subi un retour circulaire
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

78 Mots-Clés, chacun avec sa définition

A

Absorption
L’absorption se produit lorsque l’ajout d’une petite valeur laisse inchangé un opérande plus grand en virgule flottante parce que l’arrondi élimine sa contribution.
Un compteur binary32 à 2²⁴ peut cesser d’augmenter lorsque le programme ajoute 1 à répétition.
Accumulateur
Un accumulateur conserve un résultat arithmétique en cours ; l’algorithme de Booth utilise un accumulateur de n + 1 bits pour des opérandes de n bits.
Le bit supplémentaire de l’accumulateur permet de soustraire le multiplicande le plus négatif sans dépassement de capacité.
Additionneur à propagation de retenue
Un additionneur à propagation de retenue enchaîne des additionneurs complets de sorte que chaque retenue sortante alimente la retenue entrante du bit de poids immédiatement supérieur.
Une retenue créée au bit 0 peut devoir traverser de nombreuses tranches avant que le bit de poids fort du résultat se stabilise.
Additionneur à sauvegarde de retenue
Un additionneur à sauvegarde de retenue comprime trois mots d’entrée en un mot de somme et un mot de retenue sans propager les retenues sur toute la largeur.
Plusieurs niveaux de sauvegarde de retenue réduisent les rangées de produits partiels avant une dernière addition à propagation de retenue.
Additionneur à sélection de retenue
Un additionneur à sélection de retenue calcule un bloc pour les deux retenues entrantes possibles et sélectionne un résultat précalculé lorsque la retenue arrive.
Dupliquer le calcul du bloc de poids fort utilise davantage de surface de circuit pour réduire l’attente du bloc de poids faible.
Additionneur complet
Un additionneur complet combine deux bits d’opérandes et une retenue entrante, produisant un bit de somme et une retenue sortante pour la position suivante.
Avec trois entrées à 1, l’additionneur complet produit une somme de 1 et une retenue de 1, ce qui représente la valeur binaire 11.
Alignement des significandes
L’alignement des significandes décale à droite le significande ayant le plus petit exposant afin que les opérandes à virgule flottante partagent le plus grand exposant avant l’addition ou la soustraction.
Aligner les exposants 6 et 2 décale le second significande de quatre positions à droite.
Annulation
L’annulation supprime les chiffres de tête communs lors de la soustraction de valeurs presque égales, ce qui rend grandes les erreurs antérieures des opérandes par rapport à la différence.
Une soustraction exacte peut tout de même révéler un résultat de faible précision relative si ses deux entrées avaient déjà été arrondies.
Anticipation de retenue
L’anticipation de retenue calcule les retenues à partir d’expressions de génération et de propagation, ce qui réduit la dépendance séquentielle des retenues d’un additionneur à propagation.
Une unité d’anticipation peut calculer la retenue sortante d’un bloc avant que chaque retenue interne se soit propagée.
Arbre de Wallace
Un arbre de Wallace réduit les rangées de produits partiels par couches de compression à sauvegarde de retenue avant qu’une dernière addition produise le produit.
La réduction parallèle des rangées raccourcit le chemin par rapport à l’addition successive de produits partiels complets.
Arithmétique modulaire
L’arithmétique modulaire conserve le reste de la division par un module fixe ; l’arithmétique avec retour circulaire sur n bits utilise un module de 2ⁿ.
Sur 8 bits non signés, 250 + 20 renvoie 14 car 270 et 14 diffèrent d’un module complet de 256.
Arithmétique saturée
L’arithmétique saturée ramène un résultat hors plage à la plus grande ou à la plus petite valeur prise en charge par son format de destination.
L’addition saturée non signée sur 8 bits 240 + 30 renvoie 255, ce qui empêche un pixel clair de revenir à une valeur sombre par retour circulaire.
Arrondi au plus proche avec départage au pair
L’arrondi au plus proche avec départage au pair choisit la valeur représentable la plus proche et, à mi-chemin exact, celle dont le significande conservé se termine par 0.
À mi-chemin entre deux entiers, 6,5 s’arrondit à 6 et 7,5 s’arrondit à 8 selon cette règle.
Arrondi correct
Un arrondi correct renvoie le résultat mathématique exact de l’opération arrondi selon le format de destination et la direction d’arrondi sélectionnée.
Les opérations arithmétiques de base conformes donnent le même résultat numérique pour des entrées, un format de destination et une direction d’arrondi identiques.
Arrondi dirigé
L’arrondi dirigé sélectionne une valeur représentable voisine dans une direction indiquée : vers l’infini positif, l’infini négatif ou zéro.
Pour un résultat négatif inexact, l’arrondi vers zéro et l’arrondi vers le négatif peuvent choisir des valeurs voisines différentes.

B

bfloat16
bfloat16 est un format à virgule flottante de 16 bits avec un bit de signe, huit bits d’exposant et sept bits de fraction, qui privilégie la plage de valeurs plutôt que la précision.
La largeur de son exposant correspond à celle de binary32, tandis que sa fraction plus courte conserve beaucoup moins de détails.
Biais d’exposant
Un biais d’exposant est un décalage fixe ajouté à l’exposant réel d’un nombre normal avant son stockage sous forme de champ non signé.
Un exposant réel binary32 de 5 est stocké sous la forme 132, car le biais du format est 127.
Bit collant
Le bit collant est le OU de tous les bits éliminés après les bits de garde et d’arrondi ; il indique si cette partie contient un bit non nul.
Un bit de garde à 1, un bit d’arrondi à 0 et un bit collant à 1 indiquent une valeur supérieure à la moitié : la traiter comme un cas à mi-chemin serait incorrect.
Bit d’arrondi
Le bit d’arrondi est le deuxième bit supplémentaire après le significande conservé ; il apporte une information sur la partie éliminée.
Un bit de garde à 1 et un bit d’arrondi à 1 indiquent une valeur supérieure à la moitié, même avant l’examen du bit collant.
Bit de garde
Le bit de garde est le premier bit supplémentaire après le significande conservé ; il aide à distinguer les valeurs inférieures, égales ou supérieures à la moitié.
Un bit de garde à 0 place la partie éliminée sous une demi-ulp après normalisation.
Bit implicite
Le bit implicite est le 1 de tête d’un significande binaire normal que le format fournit sans le stocker.
binary32 obtient 24 bits de précision normale à partir d’un champ de fraction de 23 bits et de son 1 de tête implicite.
Bnegate
Bnegate est une commande commune dans une unité arithmétique et logique à tranches qui inverse le second opérande et fixe la retenue entrante initiale pour la soustraction.
Activer Bnegate tout en sélectionnant l’additionneur transforme a + b en a + NON(b) + 1.

C

Champ de fraction
Le champ de fraction stocke les bits du significande après sa virgule binaire, en laissant le bit de tête implicite pour les valeurs normales.
Un significande normal de 1,01₂ stocke une fraction commençant par 01, suivie de zéros pour remplir le champ.
Comparaison non signée
Une comparaison non signée ordonne les configurations comme des valeurs binaires positives ou nulles : un bit de tête à l’état haut apporte donc un poids positif.
La configuration 1111 est supérieure à 0001 en non signé, bien que leurs valeurs signées soient −1 et 1.

D

Décalage arithmétique à droite
Un décalage arithmétique à droite déplace les bits vers les positions de poids faible tout en copiant le bit de signe d’origine dans les nouvelles positions de poids fort.
Décaler −10 signé d’une position à droite donne −5 ; décaler −9 de la même façon donne aussi −5.
Décaleur à barillet
Un décaleur à barillet combine des étages de décalage par puissances de deux pour décaler un mot d’une distance choisie à travers un nombre fixe de niveaux logiques.
Un décaleur à barillet de 32 bits sélectionne les étages de 16 et 4 positions pour produire un décalage de 20.
Dépassement de capacité en arithmétique non signée
Un dépassement de capacité en arithmétique non signée se produit lorsque le résultat exact se trouve hors de la plage allant de zéro à la plus grande valeur représentable sur la largeur de destination.
Une somme non signée sur 8 bits de 230 et 40 stocke 14, tandis que la retenue sortante indique que 270 n’était pas représentable.
Dépassement de capacité en arithmétique signée
Un dépassement de capacité en arithmétique signée se produit lorsque le résultat exact se trouve hors de la plage en complément à deux du format de destination, indépendamment de la retenue sortante.
Une somme positive sur 8 bits qui devient une configuration stockée négative peut indiquer un dépassement signé.
Dividende
Un dividende est la valeur divisée, égale au quotient multiplié par le diviseur plus le reste.
Dans −17 divisé par 5 avec troncature, le dividende est −17, le quotient −3 et le reste −2.
Diviseur
Un diviseur est la valeur par laquelle un dividende est divisé ; pour une division entière ordinaire, il doit être non nul.
Diviser 29 par 6 laisse un reste inférieur au diviseur positif 6.
Division avec restauration
La division avec restauration essaie de soustraire le diviseur et annule cette soustraction si l’essai échoue, produisant un bit de quotient par étape.
Si un essai nécessite un emprunt, le circuit ajoute à nouveau le diviseur et enregistre le bit de quotient 0.
Division sans restauration
La division sans restauration conserve un reste partiel négatif pour l’étape suivante et le corrige par l’addition suivante ou une addition finale du diviseur.
Un reste partiel final négatif doit être augmenté du diviseur pour obtenir le reste final.
Division SRT
La division SRT sélectionne les chiffres du quotient à partir des bits de poids fort du diviseur et du reste partiel, ce qui permet de produire plusieurs bits de quotient par étape.
Une entrée incorrecte dans la table de sélection peut fausser un quotient malgré des circuits arithmétiques par ailleurs corrects.

E

Emprunt
Un emprunt indique qu’une soustraction non signée nécessite une unité de poids supérieur parce que le premier opérande est inférieur au second.
Soustraire 12 de 5 en non signé nécessite un emprunt, même si le circuit renvoie toujours une configuration de largeur fixe.
Epsilon machine
L’epsilon machine désigne couramment l’écart entre 1 et la valeur représentable immédiatement supérieure, égal à 2⁻²³ pour binary32.
L’écart juste au-dessus de 1 est le double de la borne relative habituelle d’arrondi au plus proche en binary32, égale à 2⁻²⁴.
Erreur de représentation
Une erreur de représentation est la différence entre une valeur voulue et son approximation stockée lorsque le format ne peut pas la représenter exactement.
La valeur décimale 0,1 a une écriture binaire périodique et doit être approchée en binary32.
Exception de résultat inexact
L’exception de résultat inexact indique qu’un résultat à virgule flottante fourni diffère du résultat mathématique exact à cause de l’arrondi.
Une valeur arrondie peut activer l’indicateur de résultat inexact pendant un calcul ordinaire sans produire de dépassement ni d’opération invalide.
Exception de sous-dépassement
L’exception de sous-dépassement exige, avec le traitement par défaut, un résultat à la fois très petit et inexact ; un résultat sous-normal exact ne la déclenche donc pas.
Diviser la plus petite valeur normale binary32 par 2 produit un résultat sous-normal exact sans sous-dépassement.
Extension de signe
L’extension de signe élargit une configuration en complément à deux en copiant son bit de signe dans les nouvelles positions de poids fort, ce qui conserve sa valeur.
Étendre 1010 signé en 1111 1010 conserve −6 ; insérer des zéros produirait 10 positif.
Extension par des zéros
L’extension par des zéros élargit une configuration non signée en insérant des zéros dans ses nouvelles positions de poids fort sans changer sa valeur numérique.
Un octet non signé contenant 250 devient 0000 0000 1111 1010 lorsqu’il est étendu à 16 bits.

I

Indicateur de condition
Un indicateur de condition est un bit d’état du processeur qui enregistre une propriété d’une opération terminée afin qu’une autre instruction puisse la tester ensuite.
Un branchement peut examiner l’indicateur de dépassement de x86 après une addition pour détecter un résultat signé hors plage.
Infini
Un infini est une valeur spéciale signée à virgule flottante codée avec un exposant composé uniquement de uns et une fraction nulle.
L’infini positif plus une valeur finie reste l’infini positif, tandis que l’infini moins lui-même produit NaN.

L

Latence de multiplication
La latence de multiplication est le temps écoulé entre le début d’une multiplication et la disponibilité de son résultat pour une opération dépendante.
Un multiplicateur en pipeline peut accepter un nouveau produit à chaque cycle même lorsque la latence est de plusieurs cycles.

M

Mise à un si inférieur
La mise à un si inférieur produit l’entier 1 sur toute la largeur si la comparaison indiquée entre opérandes est vraie, et l’entier 0 sinon.
L’instruction RISC-V 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
La moitié de poids fort du produit contient les n bits les plus significatifs d’un produit complet de 2n bits de deux opérandes de n bits.
Une moitié de poids fort non nulle montre qu’un produit non signé perd de l’information lorsqu’il est stocké sur n bits seulement.
Multiplexeur
Un multiplexeur sélectionne l’un de plusieurs signaux d’entrée possibles et le transmet à une sortie selon des bits de commande.
Un multiplexeur de sortie d’une unité arithmétique et logique peut sélectionner un résultat ET pendant que l’additionneur calcule simultanément une somme.
Multiplicande
Un multiplicande est l’opérande dont les copies décalées forment les produits partiels sélectionnés par les bits du multiplicateur.
Dans la multiplication de 9 par 5 par décalages et additions, des copies décalées de 9 contribuent aux bits 0 et 2 du multiplicateur.
Multiplicateur
Un multiplicateur est l’opérande dont les bits sélectionnent les contributions décalées du multiplicande dans un algorithme de multiplication binaire.
La configuration de 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
La multiplication par décalages et additions examine les bits du multiplicateur séquentiellement et accumule les valeurs décalées correspondantes du multiplicande.
Un multiplicateur séquentiel de six bits effectue six étapes de traitement de bit même lorsque la plupart des bits du multiplicateur sont nuls.
Multiplication-addition fusionnée (FMA)
Une multiplication-addition fusionnée évalue un produit plus un terme avec un seul arrondi final, en conservant la précision intermédiaire du produit.
La FMA peut conserver une petite différence effacée lorsqu’un produit est arrondi avant l’ajout d’un terme de signe opposé.

N

NaN
Un NaN est une valeur spéciale non ordonnée à virgule flottante qui représente un résultat numérique indéfini ; elle est codée avec une fraction non nulle et un exposant composé uniquement de uns.
Zéro divisé par zéro produit NaN, et le test d’égalité de ce résultat avec lui-même renvoie faux.
Nombre sous-normal
Un nombre sous-normal est une valeur non nulle à virgule flottante avec un champ d’exposant nul, un 0 de tête dans le significande et l’échelle normale minimale.
La configuration binary32 0x00000002 représente deux fois le plus petit nombre sous-normal positif.
Non-associativité
La non-associativité signifie que modifier le regroupement d’une opération peut changer son résultat ; les arrondis intermédiaires la provoquent dans l’addition en virgule flottante.
Les derniers bits d’une somme parallèle peuvent changer lorsqu’un nombre différent de threads modifie le regroupement de la réduction.
Normalisation
La normalisation déplace un significande non nul sous la forme requise pour son chiffre de tête et modifie l’exposant afin de conserver sa valeur.
Une somme de significande 10,1₂ est décalée une fois à droite tandis que son exposant augmente de un.

P

Précision
La précision est le nombre de chiffres significatifs disponibles dans un format numérique, qui limite le niveau de détail à une échelle donnée.
Augmenter l’exposant peut accroître l’espacement binary32 même si sa précision de 24 bits reste fixe.
Produit partiel
Un produit partiel est une contribution décalée à un résultat de multiplication, sélectionnée par un bit du multiplicateur ou un chiffre recodé.
Pour une multiplication binaire non signée, chaque produit partiel ordinaire est soit un multiplicande décalé, soit zéro.

Q

Quotient
Un quotient est le résultat de la division avant prise en compte du reste ; la division entière signée avec troncature l’arrondit vers zéro.
Pour −19 divisé par 4, la troncature donne le quotient −4, tandis que l’arrondi à l’entier inférieur donnerait −5.

R

Recodage de Booth
Le recodage de Booth remplace les suites binaires du multiplicateur par des contributions signées, ce qui permet de multiplier par additions et soustractions.
Un multiplicateur contenant une longue suite de 1 peut être représenté par une puissance de deux moins une autre puissance de deux.
Recodage de Booth en base 4
Le recodage de Booth en base 4 traite deux bits du multiplicateur par étape avec des chiffres signés de −2 à +2 afin de réduire le nombre de produits partiels.
Un multiplicateur en base 4 nécessite moins de rangées de produits partiels qu’une conception créant une rangée par bit du multiplicateur.
Registre à virgule flottante
Un registre à virgule flottante contient un opérande ou un résultat pour les instructions à virgule flottante ; RISC-V F et D utilisent les registres f0 à f31.
Une comparaison à virgule flottante écrit son résultat égal à 0 ou 1 dans un registre entier plutôt que dans ce banc.
Reste
Un reste est la valeur obtenue après soustraction du produit du quotient par le diviseur au dividende, selon la convention de division choisie.
L’instruction RISC-V 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
Un signal de génération de retenue indique qu’une position de bit produit une retenue quelle que soit sa retenue entrante, car les deux bits d’opérandes valent 1.
Lorsque le signal de génération vaut 1, la retenue suivante vaut 1 même si aucune position de poids plus faible n’a fourni de retenue entrante.
Signal de génération de retenue de groupe
Un signal de génération de retenue de groupe indique qu’un bloc de bits produit une retenue sortante indépendamment de la retenue qui entre dans le bloc.
Un bit de poids fort qui génère une retenue fait générer le bloc, même si son bit de poids le plus faible arrête les retenues entrantes.
Signal de propagation de retenue
Un signal de propagation de retenue indique si une retenue entrante peut traverser une position de bit ; cette conception utilise le OU des opérandes.
Avec les entrées 1 et 0, la propagation vaut 1 et la génération vaut 0 : la retenue entrante détermine donc la retenue sortante.
Signal de propagation de retenue de groupe
Un signal de propagation de retenue de groupe indique que chaque position d’un bloc peut transmettre une retenue entrante jusqu’à la sortie du bloc.
Les quatre bits de propagation par OU doivent tous valoir 1 pour que le signal de propagation de groupe d’un bloc de quatre bits vaille 1.
Signe corrigé du dépassement de capacité
Le signe corrigé du dépassement de capacité est le signe du résultat de la soustraction combiné par OU exclusif avec le dépassement signé ; il donne la décision correcte de comparaison signée inférieur à.
Une différence exacte positive qui a subi un retour circulaire peut sembler négative jusqu’à ce que le bit de dépassement corrige la comparaison.
Significande
Un significande contient les chiffres binaires significatifs d’une valeur à virgule flottante, y compris le bit de tête implicite lorsqu’elle est normale.
La valeur normale 1,101₂ × 2³ a pour significande 1,101₂ et pour exposant réel 3.
Sortie zéro
La sortie zéro est un signal d’état d’une unité arithmétique et logique qui vaut 1 uniquement lorsque tous les bits du résultat sont nuls ; elle est généralement formée par une réduction NON-OU.
Soustraire des configurations d’opérandes égales active la sortie zéro, même lorsque ces configurations représentent des valeurs signées négatives.
Sous-dépassement graduel
Le sous-dépassement graduel représente les très petites valeurs par des nombres sous-normaux dont la précision significative diminue, au lieu de les remplacer immédiatement par zéro.
La moitié exacte de la plus petite valeur normale binary32 subsiste comme nombre sous-normal non nul.
Soustraction en complément à deux
La soustraction en complément à deux ajoute au premier opérande le second opérande inversé et une retenue initiale de 1.
Le même additionneur de 8 bits peut calculer 19 + 6 ou 19 − 6 en modifiant ses commandes d’inversion et de retenue.

T

Tolérance absolue
Une tolérance absolue fixe une marge d’erreur indépendante de la valeur absolue, utile lorsque des valeurs finies approchées sont proches de zéro.
Un seuil absolu évite qu’une comparaison proche de zéro dépende uniquement d’une marge relative qui tend vers zéro.
Tolérance relative
Une tolérance relative fixe une erreur de comparaison acceptable proportionnelle aux valeurs absolues des valeurs finies comparées.
Une tolérance relative fixe permet une différence absolue plus grande pour des valeurs proches d’un million que pour des valeurs proches de un.
Tranche de bit
Une tranche de bit est la partie d’un circuit de chemin de données répété qui traite une position de bit des opérandes et ses signaux locaux.
La tranche de poids fort fournit l’information de dépassement, tandis que chaque tranche intermédiaire transmet une retenue.
Trappe
Une trappe transfère le contrôle à un code de traitement des exceptions lorsqu’une instruction déclenche une condition nécessitant un traitement particulier.
Une addition MIPS avec trappe transfère le contrôle lorsque son résultat signé dépasse la plage du registre.

U

Unité arithmétique et logique
Une unité arithmétique et logique est un circuit combinatoire du chemin de données qui sélectionne des résultats arithmétiques ou logiques à partir d’opérandes et d’entrées de commande.
Modifier les commandes d’opération permet à la même paire de sorties de registres d’alimenter une addition ou un ET bit à bit.
Unité au dernier rang (ulp)
Une unité au dernier rang, ou ulp, est l’espacement associé à la position de poids le plus faible conservée à une échelle donnée.
Dans l’intervalle binary32 de 16 à 32, les valeurs normales voisines sont espacées de 2⁻¹⁹.

V

Vérification des bornes
Une vérification des bornes teste si un indice appartient à la plage valide d’un tableau avant que cet indice soit utilisé pour accéder à un élément.
Une comparaison non signée avec une longueur représentable dans la plage signée positive ou nulle rejette les indices négatifs comme les indices trop grands.

Z

Zéro signé
Un zéro signé est un zéro à virgule flottante avec un bit de signe positif ou négatif ; les deux zéros sont égaux à la comparaison mais conservent certains effets du signe.
Le nombre positif 1 divisé par un zéro négatif renvoie l’infini négatif avec le traitement par défaut en virgule flottante.

À propos de cette unité

Par StudeliSignaler une erreur

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.

Commencer