Article de reference

Arithmétique à virgule fixe

En informatique , la représentation en virgule fixe est une méthode de représentation des nombres fractionnaires (non entiers) qui consiste à stocker un nombre fixe de chiffres ...

informatique , la représentation en virgule fixe est une méthode de représentation des nombres fractionnaires (non entiers) qui consiste à stocker un nombre fixe de chiffres de leur partie décimale. Les montants en dollars , par exemple, sont souvent stockés avec exactement deux chiffres après la virgule, représentant les centimes (1/100 de dollar). Plus généralement, ce terme peut désigner la représentation de valeurs fractionnaires comme des multiples entiers d'une petite unité fixe, par exemple, une durée en heures fractionnaire comme un multiple entier d'intervalles de dix minutes. La représentation en virgule fixe est souvent opposée à la représentation en virgule flottante, plus complexe et plus gourmande en ressources de calcul .

En représentation à virgule fixe, la fraction est souvent exprimée dans la même base numérique que la partie entière, mais en utilisant les puissances négatives de la base b . Les variantes les plus courantes sont le système décimal (base 10) et le système binaire (base 2). Ce dernier est également connu sous le nom de conversion binaire . Ainsi, si n chiffres de la fraction sont stockés, la valeur sera toujours un multiple entier de b n . La représentation à virgule fixe peut également être utilisée pour omettre les chiffres de poids faible des valeurs entières, par exemple, lors de la représentation de grandes valeurs en dollars comme des multiples de 1 000 $ (1 000 $).

Lorsqu'on affiche des nombres décimaux à virgule fixe pour la lecture humaine, les chiffres de la fraction sont généralement séparés de ceux de la partie entière par un séparateur décimal (généralement « . » en français, mais « », ou un autre symbole dans de nombreuses autres langues). En interne, cependant, il n'y a pas de séparation, et la distinction entre les deux groupes de chiffres est définie uniquement par les programmes qui traitent ces nombres.

La représentation en virgule fixe était la norme dans les calculatrices mécaniques . La plupart des processeurs modernes étant dotés d'une unité de calcul en virgule flottante (FPU) rapide, les représentations en virgule fixe dans les implémentations sur processeur ne sont plus utilisées que dans des situations particulières, comme dans les microprocesseurs et microcontrôleurs embarqués à bas coût ; dans les applications exigeant une vitesse élevée, une faible consommation d'énergie ou une surface de puce réduite , telles que le traitement d'images , de vidéos et de signaux numériques ; ou lorsque leur utilisation est plus naturelle pour le problème. On peut citer comme exemples la comptabilisation de montants en dollars, où les fractions de centimes doivent être arrondies à l'entier le plus proche selon des règles strictes ; et l'évaluation de fonctions par consultation de tables , ou toute application nécessitant la représentation de nombres rationnels sans erreurs d'arrondi (ce que permet la virgule fixe, contrairement à la virgule flottante). La représentation en virgule fixe reste la norme pour les implémentations sur FPGA ( Field-Programmable Gate Array ), car la prise en charge de la virgule flottante dans un FPGA requiert beaucoup plus de ressources que la prise en charge de la virgule fixe.

Exemple deentier multiplié implicitement par un facteur d'échelle fixe. Par exemple, la valeur 1,23 peut être stockée dans une variable sous la forme de l'entier 123, avec un facteur d'échelle implicite de 1/100. Cette représentation permet aux unités arithmétiques et logiques standard d'effectuer des calculs sur les nombres rationnels .

Les valeurs négatives sont généralement représentées en binaire à virgule fixe sous forme d'entier signé en complément à deux, avec un facteur d'échelle implicite, comme indiqué ci-dessus. Le signe de la valeur est toujours indiqué par le bit de poids fort (1 = négatif, 0 = positif), même si le nombre de bits de fraction est supérieur ou égal au nombre total de bits. Par exemple, l'entier binaire signé 8 bits ( signe-magnitude , auquel cas le signe n'est jamais inclus dans le nombre de bits de fraction implicites. Cette variante est plus couramment utilisée en arithmétique décimale à virgule fixe. Ainsi, l'entier décimal signé à 5 chiffres (instruction donnée , auront le même facteur d'échelle. Ce paramètre est généralement choisi par le programmeur en fonction de la précision requise et de la plage de valeurs à stocker.

Le facteur d'échelle d'une variable ou d'une formule peut ne pas apparaître explicitement dans le programme. Les bonnes pratiques de programmation exigent alors qu'il soit fourni dans la documentation , au moins sous forme de commentaire dans le code source .

Choix des facteurs d'échelle

Pour une plus grande efficacité, les facteurs d'échelle sont souvent choisis comme des puissances (positives ou négatives) de la base b utilisée pour représenter les entiers en interne. Cependant, le facteur d'échelle optimal est souvent déterminé par l'application. Ainsi, on utilise fréquemment des facteurs d'échelle qui sont des puissances de 10 (par exemple, 1/100 pour les valeurs en dollars) par commodité, même lorsque les entiers sont représentés en interne en binaire. Les facteurs d'échelle décimaux s'accordent également bien avec le système métrique (SI) , car le choix du facteur d'échelle à virgule fixe est souvent équivalent au choix d'une unité de mesure (comme le centimètre ou le micron par rapport au mètre ).

Cependant, d'autres facteurs d'échelle peuvent être utilisés occasionnellement, par exemple, une fraction d'heures peut être représentée par un nombre entier de secondes ; c'est-à-dire par un nombre à virgule fixe avec un facteur d'échelle de 1/3600.

Même avec un arrondi très précis, les valeurs à virgule fixe représentées par un facteur d'échelle S peuvent présenter une erreur allant jusqu'à ±0,5 Paramètres de certains formats binaires signés à virgule fixe 16 bitsfSδV minV max−31/2 −3 = 84Julia implémente les deux versions.

Valeurs exactes

Toute fraction binaire de la forme a / 2m , comme 1/16 ou 17/32, peut être représentée exactement en notation à virgule fixe, avec un facteur d'échelle de puissance de deux 1/2n pour tout nm . Cependant, la plupart des fractions décimales, comme 0,1 ou 0,123, sont des fractions périodiques infinies en base 2 et ne peuvent donc pas être représentées de cette manière.

De même, toute fraction décimale a /10 m , telle que 1/100 ou 37/1000, peut être représentée exactement en virgule fixe avec un facteur d'échelle de puissance de dix 1/10 n avec tout nm . Ce format décimal peut également représenter toute fraction binaire a /2 m , telle que 1/8 (0,125) ou 17/32 (0,53125).

Plus généralement, un nombre rationnel a / b , avec a et b premiers entre eux et b positif, ne peut être représenté exactement en virgule fixe binaire que si b est une puissance de 2 ; et en virgule fixe décimale que si b n'a pas de facteurs premiers autres que 2 ou 5.

Comparaison avec les nombres à virgule flottante

Les calculs en virgule fixe peuvent être plus rapides ou nécessiter moins de matériel que ceux en virgule flottante. Si l'intervalle des valeurs à représenter est connu à l'avance et suffisamment limité, la virgule fixe permet une meilleure utilisation des bits disponibles. Par exemple, si 32 bits sont disponibles pour représenter un nombre décimal compris entre 0 et 1, une représentation en virgule fixe peut présenter une erreur inférieure à norme IEEE 754 peut présenter une erreur allant jusqu'àAvec une marge dynamique de dB , un nombre à virgule fixe de 32 bits présente un rapport signal/bruit plus élevé qu'un nombre à virgule flottante.norme IEEE pour les calculs en virgule flottante ; à cette époque, les calculs en virgule flottante effectués avec les mêmes données pouvaient donner des résultats différents selon le fabricant, et souvent selon le modèle d'ordinateur.

De nombreux processeurs embarqués sont dépourvus d'unité de calcul en virgule flottante (FPU), car les unités arithmétiques entières nécessitent beaucoup moins de portes logiques et occupent une surface de puce bien plus réduite qu'une FPU ; de plus, l'émulation logicielle du calcul en virgule flottante sur des dispositifs à faible vitesse serait trop lente pour la plupart des applications. Les processeurs des premiers ordinateurs personnels et consoles de jeux , comme l' Intel 386 et 486SX , en étaient également dépourvus.

La résolution absolue (différence entre deux valeurs successives) d'un format à virgule fixe est constante sur toute sa plage, c'est-à-dire que son facteur d'échelle est S. En revanche, la résolution relative d'un format à virgule flottante est approximativement constante sur toute sa plage, variant dans les limites d'un facteur de la base b ; tandis que sa résolution absolue varie de plusieurs ordres de grandeur, comme les valeurs elles-mêmes.

Dans de nombreux cas, les erreurs d'arrondi et de troncature des calculs en virgule fixe sont plus faciles à analyser que celles des calculs équivalents en virgule flottante. L'application de techniques de linéarisation à la troncature, telles que le tramage et/ou la mise en forme du bruit, est plus simple en arithmétique à virgule fixe. En revanche, l'utilisation de la virgule fixe exige une plus grande rigueur de la part du programmeur. Éviter les dépassements de capacité nécessite des estimations beaucoup plus précises des plages de valeurs des variables et de toutes les valeurs intermédiaires du calcul, et souvent également du code supplémentaire pour ajuster leurs facteurs d'échelle. La programmation en virgule fixe requiert généralement l'utilisation de types entiers de largeurs différentes . Les applications en virgule fixe peuvent utiliser la virgule flottante par blocs , un environnement en virgule fixe où chaque tableau (bloc) de données à virgule fixe est mis à l'échelle avec un exposant commun dans un seul mot.

Applications

GnuCash , écrite en C, est passée de la virgule flottante à la virgule fixe à partir de la version 1.6, pour cette raison.

Le calcul binaire à virgule fixe (ou mise à l'échelle binaire) a été largement utilisé de la fin des années 1960 aux années 1980 pour le calcul en temps réel à forte intensité mathématique, notamment pour la simulation de vol et les algorithmes de contrôle des centrales nucléaires . Il est encore utilisé dans de nombreuses applications de traitement numérique du signal et dans les microprocesseurs sur mesure. Les calculs impliquant des angles font appel à la mesure angulaire binaire .

Le système à virgule fixe binaire est utilisé dans les coprocesseurs CORDIC de la série STM32G4 et dans les algorithmes de transformation en cosinus discret utilisés pour compresser les images JPEG .

Les instruments électroniques, tels que les compteurs électriques et les horloges numériques, utilisent souvent des polynômes pour compenser les erreurs introduites, par exemple celles dues à la température ou à la tension d'alimentation. Les coefficients sont obtenus par régression polynomiale . Les polynômes binaires à virgule fixe offrent une précision supérieure à celle des polynômes à virgule flottante et sont implémentés rapidement sur des processeurs peu coûteux. La précision, essentielle pour les instruments, est comparable à celle des calculs à virgule flottante équivalents, à condition que les polynômes à virgule fixe soient évalués par la méthode de Horner (par exemple, de dépassement de capacité — c'est-à-dire tant que l'entier résultant peut être stocké dans la variable du programme de réception . Si un dépassement de capacité se produit, il se produit comme pour les entiers ordinaires de même signe. Dans le cas des entiers non signés et des entiers signés par complément à deux, le comportement en cas de dépassement de capacité est bien connu et relève d'un groupe fini .

Si les opérandes ont des facteurs d'échelle différents, ils doivent être convertis en un facteur d'échelle commun avant l'opération.

Multiplication

Pour multiplier deux nombres à virgule fixe, il suffit de multiplier les deux entiers sous-jacents et de supposer que le facteur d'échelle du résultat est le produit de leurs facteurs d'échelle.

(p/q) * (r/s) = pr/qs

Le résultat sera exact, sans arrondi, à condition qu'il ne dépasse pas la capacité de la variable de réception. (Plus précisément, lors d'une multiplication d'entiers, le produit ne peut excéder le double de la largeur des deux facteurs.)

Par exemple, multiplier les nombres 123 (mis à l'échelle par 1/1000, soit 0,123) et 25 (mis à l'échelle par 1/10, soit 2,5) donne l'entier 123 × 25 = 3075, mis à l'échelle par (1/1000) × (1/10) = 1/10000, soit 3075/10000 = 0,3075. Autre exemple : multiplier le premier nombre par 155 (mis à l'échelle implicitement par 1/32, soit 155/32 = 4,84375) donne l'entier 123 × 155 = 19065, avec un facteur d'échelle implicite de (1/1000) × (1/32) = 1/32000, soit 19065/32000 = 0,59578125.

En binaire, on utilise généralement un facteur d'échelle qui est une puissance de deux. Après la multiplication, ce facteur peut être éliminé par un décalage vers la droite. Ce décalage est simple et rapide sur la plupart des ordinateurs.

Lorsqu'un décalage à droite ou une instruction de division entière classique (telle que la division entière en C et idiv en x86) est utilisée, le résultat est équivalent à une division entière (floor(x/y)). Une méthode d'arrondi permet de réduire l'erreur introduite. Trois variantes sont possibles selon le choix de la méthode de départage :

  • L'arrondi au demi-supérieur est possible en ajoutant un « coefficient d'arrondi » égal à la moitié du facteur d'échelle avant le décalage. Démonstration : arrondi supérieur(x/y) = partie entière de (x/y + 0,5) = partie entière de (x + y/2)/y. Si y = 2ⁿ, cela équivaut à (x + 2^(n−1)) >> n (où >> représente un décalage à droite).
  • Arrondir à la moitié inférieure est, par analogie, plancher((x - y/2)/y) ou (x - 2^(n-1)) >> n.
  • L'arrondi à la moitié supérieure implique essentiellement une décision supplémentaire par rapport à l'arrondi à la moitié supérieure. Il est légèrement plus complexe, mais ne nécessite toujours aucune branchement sur le processeur.

Ces méthodes d'arrondi sont utilisables pour toute mise à l'échelle par division entière. Elles s'appliquent notamment à la discussion sur le redimensionnement.

Division

La division de nombres à virgule fixe peut être vue comme la division de deux fractions ayant potentiellement des dénominateurs différents (facteurs d'échelle). Avec p / q et r / s (où pqrs sont des entiers), l'approche naïve consiste à réarranger la fraction pour former un nouveau facteur d'échelle (s/q) :décalages arithmétiques .

Si S ne divise pas R (en particulier, si le nouveau facteur d'échelle S est supérieur au R d'origine ), le nouvel entier peut devoir être arrondi .

En particulier, si r et s sont des variables à virgule fixe avec des facteurs d'échelle implicites R et S , l'opération rr × s nécessite de multiplier les entiers respectifs et de diviser explicitement le résultat par S. Le résultat peut devoir être arrondi et un dépassement de capacité peut se produire.

Par exemple, si le facteur d'échelle courant est de 1/100, multiplier 1,23 par 0,25 revient à multiplier 123 par 25 pour obtenir 3075, avec un facteur d'échelle intermédiaire de 1/10000. Afin de revenir au facteur d'échelle initial de 1/100, l'entier 3075 doit ensuite être multiplié par 1/100, c'est-à-dire divisé par 100, pour obtenir soit 31 (0,31), soit 30 (0,30), selon la méthode d'arrondi utilisée.

De même, l'opération rr / s nécessitera de diviser les entiers et de multiplier explicitement le quotient par S. Des arrondis et/ou des dépassements de capacité peuvent également se produire ici.

Conversion vers et depuis les nombres à virgule flottante

Pour convertir un nombre à virgule flottante en nombre à virgule fixe, on peut le multiplier par le facteur d'échelle S , puis arrondir le résultat à l'entier le plus proche. Il faut veiller à ce que le résultat tienne dans la variable ou le registre de destination. Selon le facteur d'échelle, la capacité de stockage et la plage de nombres d'entrée, la conversion peut ne nécessiter aucun arrondi.

Pour convertir un nombre à virgule fixe en nombre à virgule flottante, on peut convertir l'entier en nombre à virgule flottante, puis le diviser par le facteur d'échelle S. Cette conversion peut nécessiter un arrondi si la valeur absolue de l'entier est supérieure à 2<sup> 24</sup> (pour la virgule flottante binaire simple précision IEEE) ou à 2 <sup>53</sup> (pour la double précision). Un dépassement de capacité peut se produire si | S | est respectivement très grand ou très petit.

Support matériel

de décalage de bits rapides permettant de multiplier ou de diviser un entier par n'importe quelle puissance de 2 ; il s'agit notamment de l' instruction de décalage arithmétique . Ces instructions permettent de modifier rapidement les facteurs d'échelle qui sont des puissances de 2, tout en préservant le signe du nombre.

Les premiers ordinateurs, comme l' IBM 1620 et le Burroughs B3500, utilisaient une représentation décimale codée binaire (BCD) pour les entiers, c'est-à-dire en base 10, où chaque chiffre décimal était codé indépendamment sur 4 bits. Certains processeurs, tels que les microcontrôleurs, peuvent encore l'utiliser. Sur ces machines, la conversion des facteurs d'échelle décimaux peut être effectuée par décalage de bits et/ou par manipulation d'adresses mémoire.

Certaines architectures DSP offrent une prise en charge native de formats à virgule fixe spécifiques, par exemple les nombres signés de n bits avec n − 1 bits de fraction (dont les valeurs peuvent varier de −1 à presque +1). Cette prise en charge peut inclure une instruction de multiplication avec renormalisation, c'est-à-dire la conversion du produit de 2n 2 à n − 1 bits de fraction. Si le processeur ne propose pas cette fonctionnalité, le programmeur doit stocker le produit dans un registre ou une variable temporaire de taille suffisante et implémenter explicitement la renormalisation.indicateur de dépassement de capacité matériel et/ou générer une exception en cas de dépassement. D'autres peuvent, en revanche, implémenter une arithmétique de saturation : si le résultat d'une addition ou d'une soustraction provoque un dépassement de capacité, ils stockent la valeur de plus grande magnitude pouvant tenir dans la zone de réception et ayant le signe approprié.PL/I , COBOL , Ada , JOVIAL et Coral 66 , offrent une prise en charge explicite des nombres à virgule fixe. Ils proposent des types de données à virgule fixe , avec un facteur d'échelle binaire ou décimal. Le compilateur génère automatiquement le code nécessaire aux conversions d'échelle appropriées lors des opérations sur ces types de données, lors de la lecture ou de l'écriture de variables, ou lors de la conversion des valeurs vers d'autres types de données, tels que les nombres à virgule flottante.

La plupart de ces langages ont été conçus entre 1955 et 1990. Les langages plus modernes n'offrent généralement ni types de données à virgule fixe ni prise en charge des conversions d'échelle. C'est également le cas de plusieurs langages anciens encore très populaires, comme FORTRAN , C et C++ . La large disponibilité de processeurs à virgule flottante rapides, au comportement strictement standardisé, a considérablement réduit la demande de prise en charge de la virgule fixe binaire. De même, la prise en charge de la virgule flottante décimale dans certains langages de programmation, comme C# et Python , a largement supprimé le besoin de prise en charge de la virgule fixe décimale. Dans les rares cas nécessitant des opérations à virgule fixe, celles-ci peuvent être implémentées par le programmeur, avec une conversion d'échelle explicite, dans n'importe quel langage de programmation prenant en charge les types entiers explicites.

En revanche, toutes les bases de données relationnelles et la notation SQL prennent en charge l'arithmétique décimale à virgule fixe et le stockage des nombres. PostgreSQL possède une fonctionnalité particulière.numériquetype pour le stockage précis de nombres jusqu'à 1000 chiffres.

De plus, en 2008, l' Organisation internationale de normalisation (ISO) a publié un projet de rapport technique visant à étendre le langage de programmation C avec des types de données à virgule fixe, afin de faciliter l'exécution de programmes sur des processeurs DSP embarqués. Deux principaux types de données sont proposés : `_Fract` (partie fractionnaire avec une précision minimale de 7 bits) et `_Accum` (`_Fract` avec au moins 4 bits de partie entière). La collection de compilateurs GNU (GCC) prend en charge ce projet.

Exemples détaillés

multiplication décimale à virgule fixe

Supposons qu'il existe la multiplication suivante avec deux nombres à virgule fixe et à 3 décimales.

Notez que, puisqu'il y a 3 décimales, nous affichons les zéros à la fin. Pour reformuler cela comme une multiplication d'entiers, nous devons d'abord multiplier par

Cela fonctionne de manière équivalente si l'on choisit une base différente, notamment la base 2 pour le calcul, car un décalage de bits équivaut à une multiplication ou une division par 2. Trois chiffres décimaux correspondent à environ 10 chiffres binaires ; il faut donc arrondir 0,05 à 10 bits après la virgule binaire. L'approximation la plus proche est alors 0,0000110011.

Ainsi, notre multiplication devient

Cela donne 11,023 avec trois chiffres après la virgule.

Multiplication binaire à virgule fixe

Considérons le calcul du produit de 1,2 et 5,6 en binaire à virgule fixe sur 16 bits fractionnaires. Pour représenter ces deux nombres, on les multiplie par 2 <sup>16</sup> , ce qui donne un registre .

Si le résultat doit être stocké au même format que les données, avec 16 bits fractionnaires, cet entier doit être divisé par 2 <sup>16</sup> , ce qui donne approximativement notation Q a été définie par Texas Instruments . On écrit Q pour spécifier une valeur binaire signée à virgule fixe avec f bits de fraction ; par exemple, Q spécifie un entier signé en complément à deux avec un facteur d'échelle de 1/ 2¹⁵ . Le code précise en outre que le nombre possède m bits dans sa partie entière, sans compter le bit de signe. Ainsi, Q décrit un format binaire à virgule fixe avec 1 bit entier et 30 bits fractionnaires, qui peut être stocké sous la forme d'un entier 32 bits en complément à deux avec un facteur d'échelle de 1/ 2³⁰ . QfARM , sauf qu'ils comptent le bit de signe dans la valeur de m ; le même format ci-dessus serait donc spécifié comme COBOL prenait initialement en charge les nombres décimaux à précision fixe de taille arbitraire et à échelle décimale variable, dont le format était spécifié « graphiquement » à l’aide de la directive PIC . Par exemple, PL/I pour spécifier un type de données binaire signé à virgule fixe de p bits au total (sans compter le signe) et de f bits pour la partie fractionnaire ; il s’agit donc d’un entier signé de p + 1 bits avec un facteur d’échelle de 1/2 f . Ce dernier peut être positif ou négatif. On peut spécifier COMPLEX au lieu de REAL et DECIMAL au lieu de BINARY pour la base 10.REAL FIXED BINARY (p,f)langage Ada , un type de données numériques peut être spécifié, par exemple, par `ada.numeric(x) `. Les bornes décimales sont converties à la puissance de deux supérieure, ce qui correspond à une représentation à virgule fixe d'un entier binaire signé en complément à deux, avec au moins 8 bits de fraction (correspondant à un facteur d'échelle de 1/256) et 7 bits de signe et de magnitude (garantissant une plage réelle de −64,00 à presque +64,00) : un total minimal de 15 bits. Sur un ordinateur 16 bits, le bit restant est affecté à la partie fractionnaire. Les contraintes de plage asymétriques sont également autorisées , bien que l'implémentation sous-jacente reste symétrique par rapport à 0 Les versions plus récentes d'Ada permettent de spécifier un facteur d'échelle exact (y compris les puissances de deux) à l'aide de la spécification d'aspect, ou, si le facteur est une puissance de 10, par le biais d'une virgule fixe décimale.VisSim désignait autrefois une valeur binaire à virgule fixe avec b bits au total et m bits dans la partie entière ; c'est-à-dire un entier de b bits avec un facteur d'échelle de 1/2 bm . Cela signifierait donc un nombre de 16 bits avec 1 bit dans la partie entière et 15 dans la partie fractionnaire. fxm.bdu PS2 GS ( « Graphics Synthesizer » ) utilise la notation , où s spécifie la présence (0 ou 1) du bit de signe. Par exemple, 0:5:3 représente un entier non signé de 8 bits avec un facteur d'échelle de 1/2 3 .s:m:fLabVIEW utilise la notation FXP pour spécifier les paramètres des nombres à virgule fixe. Le symbole s peut être '+' ou '±', indiquant respectivement un nombre non signé ou un nombre signé en complément à deux. Le symbole b représente le nombre total de bits, et le symbole m le nombre de bits de la partie entière.<s,b,m>

Exemples d'applications logicielles

  • Le format de police TrueType, très répandu , utilise un système binaire signé à virgule fixe 32 bits avec 26 bits à gauche de la virgule pour certaines valeurs numériques de ses instructions. Ce format a été choisi pour offrir la précision minimale requise pour l'info-bulle et pour des raisons de performance.
  • À l'exception de la Nintendo 64 , tous les jeux 3D de la cinquième génération de consoles de jeux vidéo , notamment la 3DO , la PlayStation , la Sega Saturn et l'Atari Jaguar utilisent l'arithmétique à virgule fixe, ces systèmes étant dépourvus d'unités matérielles de calcul à virgule flottante. Le coprocesseur de transformation de la PlayStation prend en charge le format à virgule fixe 16 bits avec 12 bits de partie fractionnaire, tandis que les coprocesseurs VDP de la Sega Saturn utilisaient un format à virgule fixe 32 bits, réservant les 16 bits de poids faible à la partie fractionnaire.
  • Le logiciel de composition TeX , largement utilisé par les scientifiques et les mathématiciens, utilise des nombres binaires signés à virgule fixe sur 32 bits avec 16 bits de fraction pour tous les calculs de position. Les valeurs sont interprétées comme des fractions du point typographique . Les fichiers de métriques de polices TeX utilisent des nombres signés à virgule fixe sur 32 bits, avec 12 bits de fraction.
  • Tremor , MAD sont des bibliothèques logicielles qui décodent respectivement les formats audio Ogg Vorbis , GSM Full Rate et MP3 . Ces codecs utilisent l'arithmétique à virgule fixe car de nombreux périphériques de décodage audio ne possèdent pas d'unité de calcul en virgule flottante (FPU).
  • Le compresseur audio sans perte WavPack utilise l'arithmétique à virgule fixe. Ce choix se justifiait notamment par la crainte que des règles d'arrondi à virgule flottante différentes sur différents matériels puissent altérer la nature sans perte de la compression.
  • La bibliothèque Nest Labs Utilities, fournit un ensemble limité de macros et de fonctions pour les nombres à virgule fixe, en particulier lorsqu'il s'agit de traiter ces nombres dans le contexte de l'échantillonnage des capteurs et des sorties des capteurs.
  • La spécification OpenGL ES 1.x inclut un profil à virgule fixe, car il s'agit d'une API destinée aux systèmes embarqués, qui ne disposent pas toujours d'une unité de calcul en virgule flottante.
  • Les programmes dc et bc sont des calculatrices à précision arbitraire , mais ne conservent qu'un nombre fixe (spécifié par l'utilisateur) de chiffres fractionnaires.
  • Fractint représente les nombres comme des nombres à virgule fixe Q2.29 , pour accélérer le dessin sur les anciens PC avec des processeurs 386 ou 486SX , qui n'avaient pas d'unité de calcul en virgule flottante.
  • Doom était le dernier jeu de tir à la première personne d' id Software à utiliser une représentation en virgule fixe 16.16 pour tous ses calculs non entiers, y compris le système de carte, la géométrie, le rendu et les mouvements du joueur. Cette représentation est encore utilisée dans les versions modernes de Doom .
  • Le langage de programmation Q# pour les ordinateurs quantiques Azure , qui implémentent des portes logiques quantiques , contient une bibliothèque numérique standard pour effectuer des calculs arithmétiques à virgule fixe sur les registres de qubits .

Plus d articles de Worldlex Wiki

Revenez a l index pour explorer davantage de pages sur l histoire, la science, la culture, la geographie et la societe en francais.

Explorer l index