Qu'est-ce que Virgule fixe ?

Représentation des nombres fractionnaires avec une position de virgule fixée, sur la même suite de bits qu'un entier. Calculable avec des circuits arithmétiques entiers, compacts et peu gourmands, mais la plage représentable est étroite. On la note parfois par le nombre de bits fractionnaires, comme Q15.

Nom japonais: 固定小数点

« Virgule fixe » apparaît dans 6 questions d'entraînement réparties sur 1 thèmes, dont Arithmétique des ordinateurs.

Domaine: Arithmétique des ordinateurs

Comment un nombre en virgule fixe est stocké

Un nombre en virgule fixe est un entier ordinaire que le programmeur convient de diviser par une puissance de deux fixée. Sur 8 bits avec 4 bits fractionnaires, le motif 0011 1000 se lit comme l'entier 56, et sa division par 2⁴ = 16 donne 3,5 : les bits de poids fort forment la partie entière et le premier bit fractionnaire vaut 0,5. La notation Q désigne le format : Q15 est un nombre signé sur 16 bits avec 15 bits fractionnaires, couvrant de −1 jusqu'à juste en dessous de +1 avec un pas de 2⁻¹⁵, soit environ 3,05 × 10⁻⁵. La notation Qm.n indique explicitement le nombre de bits entiers et fractionnaires.

Règles de calcul

Deux nombres dans le même format s'additionnent avec un additionneur entier ordinaire, puisque leurs virgules binaires sont déjà alignées. La multiplication double le nombre de bits fractionnaires : deux valeurs Q15 donnent un produit sur 32 bits avec 30 bits fractionnaires, que l'on décale de 15 bits vers la droite pour revenir en Q15, avec arrondi si nécessaire. Le dépassement de capacité est le principal danger. Le matériel entier ordinaire reboucle, transformant un grand résultat positif en nombre négatif ; les DSP offrent donc une arithmétique saturante qui écrête à la plus grande valeur représentable. En Q15, même −1 × −1 déborde, car +1 n'est pas représentable.

Pourquoi le matériel l'utilise

Comme son contenu n'est qu'un entier, la virgule fixe ne nécessite ni alignement des exposants, ni normalisation, ni traitement des valeurs spéciales, autant d'opérations qui rendent les unités de calcul flottant plus grandes et plus gourmandes. Les multiplieurs et additionneurs entiers sont petits et rapides, ce qui convient aux microcontrôleurs bon marché sans unité flottante, aux DSP de traitement du signal et aux chemins de données sur mesure sur FPGA et ASIC, où le concepteur peut choisir exactement le nombre de bits dont l'algorithme a besoin. La contrepartie est l'effort de conception : chaque valeur intermédiaire doit être mise à l'échelle pour ne ni déborder ni perdre trop de précision.

Virgule fixe ou virgule flottante

Les valeurs en virgule fixe sont régulièrement espacées : la précision absolue est la même partout, mais la plage est étroite. La virgule flottante stocke une mantisse et un exposant, si bien que l'écart entre valeurs double chaque fois que l'exposant augmente : en simple précision, l'écart entre deux voisins est d'environ 1,2 × 10⁻⁷ près de 1, mais de 8 près de 100 millions. La virgule flottante conserve donc une précision relative à peu près constante sur une plage immense. Les deux formats ont des erreurs d'arrondi ; la différence est que la virgule fixe sacrifie la plage au profit d'un matériel simple et d'une résolution uniforme et prévisible.

S'entraîner : questions sur Virgule fixe

En virgule fixe non signée sur 8 bits dont les 4 bits de poids faible forment la partie fractionnaire, quelle valeur représente la suite de bits 0011 1000 ?

  1. A56
  2. B3.8
  3. C3.5
Afficher la réponse et l'explication

Réponse : C. 3.5

Les 4 bits de poids fort 0011 forment la partie entière, soit 3, et les 4 bits de poids faible 1000 la partie fractionnaire ; le premier bit ayant le poids 2⁻¹ = 0,5, celle-ci vaut 0,5. Au total, 3 + 0,5 = 3,5. Autrement dit, c'est la valeur 56 obtenue en lisant la suite comme un entier, divisée par 2⁴ = 16 pour les 4 bits fractionnaires (56 ÷ 16 = 3,5). 56 correspond à une lecture entière ignorant la virgule, et 3.8 à la lecture erronée du binaire 1000 comme le décimal « .8 ».

Quelle est la principale raison pour laquelle les petits microcontrôleurs et DSP utilisent souvent l'arithmétique en virgule fixe plutôt qu'en virgule flottante ?

  1. ALe calcul se fait avec des circuits entiers, plus petits et moins gourmands en énergie
  2. BLa virgule fixe représente toujours une plage plus large que la virgule flottante
  3. CLa virgule fixe ne produit aucune erreur d'arrondi
Afficher la réponse et l'explication

Réponse : A. Le calcul se fait avec des circuits entiers, plus petits et moins gourmands en énergie

En virgule fixe, seule la position de la virgule est convenue et le contenu est un entier : additions et multiplications se font avec des circuits entiers. Les circuits d'alignement des exposants et de normalisation d'un opérateur flottant sont inutiles, ce qui réduit la surface de puce et la consommation ; elle est donc prisée dans les microcontrôleurs bon marché et les DSP de traitement du signal. En contrepartie, la plage représentable est étroite et la conception doit surveiller les débordements et le manque de précision. La plage est plus large en virgule flottante, et la virgule fixe produit aussi des erreurs d'arrondi.

Questions fréquentes

Que signifie Q15 en arithmétique à virgule fixe ?

Q15 est un format signé en virgule fixe sur 16 bits, avec 15 bits fractionnaires et un bit de signe. Il représente les valeurs de −1 à 1 − 2⁻¹⁵ par pas d'environ 3,05 × 10⁻⁵.

Comment convertir une valeur en virgule fixe en décimal ?

On lit le motif binaire comme un entier, puis on le divise par 2 élevé au nombre de bits fractionnaires. Par exemple, 0011 1000 avec 4 bits fractionnaires vaut 56 ÷ 16 = 3,5.

Quelle est la différence entre virgule fixe et virgule flottante ?

La virgule fixe place la virgule binaire à une position fixe convenue, ce qui donne un espacement uniforme et un matériel entier simple, mais une plage étroite. La virgule flottante ajoute un exposant, offrant une large plage avec une précision relative à peu près constante, au prix d'un matériel plus complexe.

« Virgule fixe » dans les explications

Questions mentionnant « Virgule fixe » (6)

  1. En virgule fixe non signée sur 8 bits dont les 4 bits de poids faible forment la partie fractionnaire, quelle valeur représente la suite de bits 0011 1000 ?
  2. Quelle est la principale raison pour laquelle les petits microcontrôleurs et DSP utilisent souvent l'arithmétique en virgule fixe plutôt qu'en virgule flottante ?
  3. Quelle combinaison du pas (résolution) et de la plage du format Q15 (virgule fixe signée sur 16 bits, 15 bits fractionnaires) est correcte ?
  4. Lorsque deux nombres en virgule fixe à 8 bits fractionnaires sont multipliés par un multiplieur entier, comment le résultat doit-il être traité ?
  5. Quelle combinaison donne correctement les trois parties d'un nombre à virgule flottante IEEE 754 ?
  6. Quelle description de l'écart entre valeurs représentables voisines en virgule flottante est correcte ?

Termes associés

Mantisse Exposant IEEE 754 Absorption (perte de chiffres) Additionneur à retenue anticipée Additionneur à retenue conservée (carry-save) Algorithme de Booth Arbre de Wallace Arithmétique saturée Arrondi au plus proche pair

Retour au glossaire