Coma fixa

De Viquipèdia
Dreceres ràpides: navegació, cerca

La coma fixa és la representació de nombres reals mitjançant un sistema numèric posicional. La posició de la coma indica la potència de la base per la qual s'ha de multiplicar el dígit corresponent.

Aquest sistema consisteix a destinar una quantitat fixa de dígits per la part sencera i una altra per la part fraccionària. La quantitat de dígits destinats a la part fraccionària indica la posició de la coma dins del nombre. Aquesta posició, que és sempre fixa, es pot indicar con un factor de escala implícit que ubica la coma al lloc requerit, per tant es pot representar un nombre fraccionari com un nombre enter multiplicat per un factor d'escala. En general, el factor escala pot ser arbitrari i indica quina és la longitud de l'interval que separa dos representacions consecutives, per exemple: dn-1 dn-2 ... d - m = den + m - 1 ... d0 * b - m.

La longitud sempre és fixa per qualsevol parella de representacions consecutives en tot el rang de representació.

Aquest sistema implica que s'ha de modificar el factor d'escala quan alguna operació produeix un resultat fora del rang de representació. Per exemple: si la suma de dos nombres produeix carry, s'ha de modificar el factor d'escala si no es vol perdre precisió en el resultat. Això implica modificar el factor d'escala de tots els nombres en coma fixa amb la consegüent pèrdua de precisió. Aquests sistemes de representació ofereixen un rang i una precisió limitats.

Amb aquest sistema es representen els enters des del -(2^{n-1}-1) fins al (2^{n-1}-1), on n és el nombre de bits. Per tant el rang de representació és [-2^{n-1}+1, 2^{n-1}-1] i la resolució és d'"1″. El “zero" presenta les dues representacions 000…00 i 100…00, el qual a vegades genera dificultats.

Aquest sistema presenta una certa dificultat al operar amb sumes i restes. El computador ha d'analitzar el signe dels operadors per a decidir l'operació que ha de fer. Així, si l'operació és una suma, però un dels operadors és negatiu, s'ha de canviar per una resta. En canvi, les operacions de multiplicació i divisió es tracten sense dificultat, operant, per una banda, les magnituds, i per una altra, els signes.

Història[modifica | modifica el codi]

En els inicis de la informàtica, les computadores només disponien d'unitats aritmetico-lògiques basades en aritmètica sencera. Degut al seu elevat cost i potència de càlcul, es van destinar inicialment en àmbits científics, militars o grans empreses on es requeria la resolució de problemes on intervenien nombres decimals. D'aquí surt la necessitat de trobar una codificació que permetés realitzar operacions amb nombres decimals i sorgeixen noves idees com la codificació de nombres decimals en coma fixa i en coma flotant.

Representació[modifica | modifica el codi]

El factor d'escala és generalment una potència de 10 o una potència de 2. També es poden utilitzar altres factors d'escala: per exemple, un valor d'hora en hora es pot representar com una coma fixa amb un factor d'escala 1/3600 per obtenir valors amb una presició de segons.

El valor màxim d'una coma fixa és el mateix que el que es pot representar del tipus enter, multiplicat per el factor d'escala, i el mateix per el valor mínim.

Notació[modifica | modifica el codi]

Hi ha diverses notacions per representar longitud de la paraula i la coma de la base d'un nombre binari de punt fix. En la següent llista,f representa el nombre de bits fraccionaris,mel ​​nombre de bits de mòdul o sencer, s el nombre de bits de signe, i b, el nombre total de bits.

  • Qf: La "Q" com a prefix. Per exemple, Q15 representa un nombre amb 15 bits fraccionaris. Aquesta notació és ambigua, ja que no especifica la longitud de la paraula, però se sol suposar que la longitud de la paraula és de 16 o 32 bits depenent del processador[1]
  • Qm.f: La forma inequívoca de la notació "Q". Atès que la paraula sencera és un complement de 2 punts, un bit de signe és implícit. Per exemple, Q1.30 descriu un nombre enter amb el bit 1 i 30 bits fraccionaris emmagatzemada com un complement a 2 de 32 bits.[1][2]
  • fxm.b: El prefix "fx" funciona de forma similar a l'anterior, però utilitza la longitud de la paraula com a segon terma en el parell de punts. Per exemple, fx1.16 descriu una sèrie de bits de magnitud 1 i 15 bits fraccionaris en una paraula de 16 bits. .[3]
  • s:m:f: No obstant això, altres anotacions inclouen un bit de signe, com aquest que s'usa en la PS2.[4] També difereix de l'ús convencional mitjançant l'ús de dos punts en lloc d'un punt com el separador. Per exemple, en aquesta notació, 0:8:0 representa un nombre enter sense signe de 8 bits.

Exemples[modifica | modifica el codi]

  • 01001,011 = 0*2^{4} + 1*2^{3} + 0*2^{2} + 0*2^{1} + 1*2^{1} + 0*2^{-1} + 1*2^{-2} + 1*2^{-3}= 9,37510
  • 10101,110 = 1*2^{4} + 0*2^{3} + 1*2^{2} + 0*2^{1} + 1*2^{1} + 1*2^{-1} + 1*2^{-2} + 0*2^{-3} = 21,7510

La representació anterior rep el nom de com fixa, ja que amb 8 bits se n'han reservat 5 per la part sencera i 3 per la fraccionaria.


S'anomena coma fixa, ja que la coma està fixada en una posició i serveix per separar la part entera de la decimal. Quan utilitzem la coma fixa estem limitant la quantitat de nombres a representar. Per exemple, als casos anteriors de 8 bits no podrem representar nombres més grans de 25 (2^{4}) ni nombres més petits que 0.125 (2^{-3}).

Binari contra decimal[modifica | modifica el codi]

Les dos representacions més comunes de coma fixa són el format decimal i el binari. El format decimal fix usa un factor d'escala que és una potència de deu, mentre que per el binari és una potència de dos.

El més utilitzat és el binari, ja que el reajustament d'operacions es poden dur a terme de forma ràpida gràcies algunes implementacions per hardware. Els nombres binaris de coma fixe permeten representar de forma precisa potències fraccionàries en base dos, mentre que els nombres binaris de coma flotant, no poden ser representar exactament usant potències fraccionàries de base deu. Si es vol representar de forma precisa potències fraccionàries de deu s'ha d'usar un format decimal. Per exemple, una desena part (0,1) i una centèsima (0,01) només poden ser representats aproximadament amb coma fixe o flotant, mentre que es pot representar exactament amb coma fixe decimals o de coma flotant decimal. Aquestes representacions es poden codificar de moltes maneres, com ara BCD.

Referències[modifica | modifica el codi]

  1. 1,0 1,1 Texas Instruments, TMS320C64x DSP Library Programmer's Reference, Appendix A.2
  2. MathWorks Fixed-Point Toolbox Documentation Glossary
  3. Visual Solutions
  4. PS2 GS User's Guide, Chapter 7.1 "Explanatory Notes"

Vegeu també[modifica | modifica el codi]

Enllaços externs[modifica | modifica el codi]