martes, 24 de febrero de 2009

SISTEMAS NUMÉRICOS: COMA FIJA Y COMA FLOTANTE


Esta primera entrada va dedicada al primer artículo que se nos ha pedido publicar en el blog: los sistemas numéricos con los que trabaja un ordenador, en especial los sistemas de coma fija y coma flotante. Así pues el artículo que he redactado para explicar dicho tema es el siguiente:

"Un sistema numérico es un conjunto de símbolos y reglas que se utilizan para representar datos numéricos o cantidades. Se caracterizan por su base que indica el número de símbolos distintos que utiliza y que además es el coeficiente que determina cuál es el valor de cada símbolo dependiendo de la posición que ocupe. Estas cantidades se caracterizan por tener dígitos enteros y fraccionarios.

El sistema que manejamos cotidianamente es el decimal, el cual está formado por 10 símbolos {0, 1, 2, 3, 4, 5, 6, 7, 8, 9} por lo que la base del sistema es 10. Ahora bien, el sistema que utiliza internamente el hardware de las computadoras actuales se basa en la representación de cantidades utilizando los dígitos 1 y 0. Por tanto su base es 2 (número de dígitos del sistema), dando lugar al sistema binario. Cada dígito de un número en este sistema se denomina bit.


La forma de representar datos e instrucciones constituye uno de los atributos más importantes de la arquitectura de un computador, por lo que su definición es uno de los aspectos más importantes en el diseño de todo nuevo computador. Las características de una máquina vendrán fijadas tanto por los tipos de datos que soporta, como por las operaciones que se puedan hacer sobre ellos, estando ambos aspectos íntimamente ligados a las representaciones seleccionadas.


Los modos de representación vienen fijados por los elementos a representar, por la forma de representación y por las características de representación. Con esto se puede obtener la siguiente clasificación: representaciones alfanuméricas, numéricas, gráficas, redundantes y sistemas con etiqueta.


Entre las representaciones numéricas nos encontramos con los sistemas de coma fija y coma flotante (también denominados punto fijo y punto flotante), que son representaciones utilizadas por las computadoras para procesar cálculos numéricos con formatos grandes. Consisten en una cadena de bits que guardan relación con la notación científica, y pueden representar números enteros y números reales tanto negativos como positivos.


Sistema de coma fija

Estos sistemas consisten en destinar una cantidad fija de dígitos para la parte entera y otra para la parte fraccionaria. La cantidad de dígitos destinados a la parte fraccionaria indica en definitiva la posición de la coma dentro del número. Esta posición, que es siempre fija, la podemos indicar con un factor de escala implícito que ubica la coma en el lugar requerido. Es decir, podemos representar un número fraccionario como un número entero multiplicado por un factor de escala. En general, el factor de escala puede ser arbitrario e indica cuál es la longitud del intervalo que separa dos representaciones consecutivas, por ejemplo: dn-1dn-2...d0,d-1d-2...d-m=dn+m-1...d0 · b-m.


Cabe aclarar que esta longitud es siempre fija para cualquier par de representaciones consecutivas en todo el rango de representación. En este sistema, el programador debe modificar el factor de escala cuando alguna operación produce un resultado fuera del rango de representación. Por ejemplo: si la suma de dos números en punto fijo produce acarreo, se debe modificar el factor de escala si no se quiere perder significación en el resultado. Esto implica, modificar el factor de escala de todos los números en punto fijo que utiliza el programa con la consecuente pérdida de precisión. Estos sistemas de representación ofrecen un rango y una precisión limitados.

Con este sistema se representan los enteros desde el -(2n-1-1) hasta el (2n-1-1), siendo n el número de bits. Por tanto, el rango de representación es [-2n-1+1, 2n-1-1] y la resolución es de “1”. El “cero” presenta las dos representaciones 000…00 y 100…00, lo que a veces genera dificultades.

Este sistema presenta una cierta dificultad al operar con sumas y restas. El computador debe analizar el signo de los operadores, para decidir la operación que tiene que hacer. Así, si la operación es una suma, pero uno de los operadores es negativo, se ha de cambiar por una resta. Por el contrario, las operaciones de multiplicar y dividir se tratan sin dificultad, operándose, por un lado, con las magnitudes, y por otro, con los signos.


Sistema de coma flotante


Empleando el escalado adecuado se puede conseguir que cualquier cantidad quede dentro del rango de representación de cualquier sistema de coma fija. Pero ello conlleva una serie de dificultades de cálculo nada despreciables, como:


Los productos y divisiones entre cantidades escaladas producen cambios de escala.

Si no se conocen a priori las magnitudes de los resultados y de los números intermedios, es muy difícil realizar un escalado correcto que prevenga los desbordamientos y que no desaproveche el rango de representación.

Es una labor muy tediosa y propensa a equivocaciones.


Por tanto, parece mucho más lógico que sea el propio computador el que se encargue de esta tarea de escalado, haciéndolo de forma dinámica y óptima. Para ello surgen los sistemas de coma flotante, cuya propiedad fundamental es concatenar con cada número un factor de escala.


Un número en coma flotante, está compuesto por cuatro componentes: el signo, la mantisa m, la base b y un exponente e. Un número x en coma flotante tiene entonces la forma x = ±m · be.


La base, en general, está implícita en la representación lo que da lugar al siguiente formato:



Si n es el número de bits, se cumple que n = m + e.


Es importante destacar que, tanto el exponente como la mantisa poseen signo. El signo de la mantisa nos permite representar números negativos o positivos, y el signo del exponente nos permite representar números pequeños o grandes según sea negativo o positivo el exponente.


Existen infinitas formas de representación de un único número real. Para no crear confusión en el modo de interpretación de los números en coma flotante almacenados se utilizan normalizaciones. Éstas buscan que el dígito más significativo de la mantisa, el siguiente al bit de signo, sea distinto de cero. Existen dos tipos: normalización por mantisa entera y normalización por mantisa fraccionaria.



Nosotros consideraremos que una mantisa está normalizada si su valor se encuentra en el intervalo [1/b, 1). En el caso de base 10 el intervalo es [0.1, 1) y para la base 2 el intervalo es [0.5, 1).


Dados X e Y números representados en coma flotante con sus mantisas normalizadas, X > Y, si su exponente es mayor que el exponente de Y. En caso contrario, hay que comparar las mantisas.


Cuando exigimos una mantisa normalizada en el intervalo antes mencionado, no podemos representar el cero, por lo que se toma la convención de representarlo con el exponente negativo menor en exceso (esto es el exponente 0) y la mantisa en cero. Así la detección de un cero consiste en ver si la representación posee todos sus dígitos en cero.


El rango de los números en coma flotante está compuesto por los intervalos [-max, -min] y [min, max] con:


max= “mantisa mas grande” · base “exponente mas grande” y

min= “mantisa mas pequeña” · base “exponente mas pequeño”


Este método de representación, hace que las representaciones que corresponden a números pequeños sean más densas y las que corresponden a números más grandes sean más ralas, dentro del rango de representación.


Dado un número x= ± m · be en coma flotante, se dice que el rango de representación crece cuando la base b crece o cuando la cantidad de dígitos asignados al exponente e crece. Si se mantiene fija la cantidad de dígitos asignados a la representación, entonces, en los dos casos se pierde precisión.


Si se asignan más dígitos a la mantisa, se logra mayor precisión.


Coma flotante del estándar IEEE 754

Para terminar con este tema hablaremos del estándar IEEE 754, un estándar de aritmética en coma flotante que cubre tanto la representación de los operandos como la forma de realizar las operaciones. Es el estándar utilizado por la mayoría de los computadores actuales y considera dos formatos básicos, el de simple y el de doble precisión:



Emplea mantisa fraccionaria, normalizada y en representación de signo-magnitud, sin almacenar el primer bit, que es implícito e igual a “1”. La base es 2 y el exponente se representa en exceso.


Adicionalmente considera varios casos especiales:


a) E = 255 y M ≠ 0, se emplea para indicar que el resultado no tiene sentido (ej.: 0/0).

b) E = 255 y M = 0 indica, de acuerdo al bit s, valor infinito positivo o negativo.

c) E = 0 y M = 0, se emplea para representar el “cero”.

d) E = 0 y M ≠ 0, se emplea para representar números pequeños en forma desnormalizada. "


Las fuentes de información empleadas para elaborar el artículo han sido las siguientes:

http://www.monografias.com/trabajos32/sistemas-numericos/sistemas-numericos2.shtml


arqui.unsl.googlepages.com/sistemasnumericos07.doc

"Fundamentos de computadores", Pedro de Miguel Anasagasti

No hay comentarios:

Publicar un comentario