19 febrero, 2009

Comentario dirigido a Mª Carmen acerca de Representación numérica en coma fija y coma flotante

Extracto del estudio realizado por Ramón Mollá Vallá en su tésis sobre Aplicaciones de la Aritmética en Coma Fija a la Representación de primitivas gráficas de bajo nivel. Valencia, 2001.
Antecedentes de la Representación Numérica en Máquinas Computacionales.
En sus inicios, los computadores disponían de Unidades Aritmético-Lógicas (ALU) basadas en Aritmética Entera. Por coste de fabricación y potencia de cálculo, estas exclusivas máquinas digitales se destinaron a entornos militares, científicos o grandes empresas. Áreas en las que se resolvían problemas que, además, requerían trabajar con números decimales (balística, investigación, gestión empresarial,...). Números decimales que obligan a un tratamiento que no podía ofrecer la Aritmética Entera, pues se corresponden con datos del conjunto de los números reales.

Para solucionar este inconveniente se plantearon códigos numéricos capaces de representar datos decimales. De las soluciones planteadas, dos han sido las más aceptadas:
a. situar en una posición fija de un número entero el punto decimal y no modificar dicha posición durante toda la ejecución del programa (Coma Fija).
b. implementar un formato que permitiera una mayor versatilidad, facilitando el libre posicionamiento del punto en cualquier lugar (Coma Flotante).

Esta última solución debía implementarse mediante software, pues excedía de la capacidad tecnológica del hardware de la época. Los computadores no disponían de mucha potencia de cálculo y tampoco las aplicaciones a las que iban destinados requerían de mucha precisión; por lo que se optó por una representación numérica en coma fija. Sin embargo, pronto, las exigencias de cálculo y el desarrollo tecnológico permitió la implantación de la representación en coma flotante, acercando las herramientas digitales de cálculo a campos de la investigación matemática, astronómica, … donde se trabaja con números de muy variado peso. Aspecto que la Aritmética binaria basada en coma fija abordaba de mala manera por su carente versatilidad en el rango de representación, sobretodo si la cantidad de bits empleados es reducida y sin normalización en lenguajes de alto nivel que faciliten su manipulación. Así que, el propósito era diseñar unidades ALU que manejasen coma flotante posibilitando el aumento en uno o dos órdenes de magnitud la potencia de cálculo. Y, con ello, aparecieron los estándares de normalización (IEEE 754). No obstante este formato numérico también presenta sus inconvenientes.

Situación actual.
La evolución de la informática aumenta la posibilidad de incorporar computadores en campos de muy diversa índole, facilitando labores de resolución en problemas de características:

a. datos de entrada y resultados de salida expresados con un número muy limitado de bits (sensores industriales ADC 8/12 bits, microcontroladores de electrodomésticos, material médico, …). El error de entrada es por tanto elevado y su precisión no muy grande.
b. espacio numérico de trabajo del algoritmo bastante estrecho en comparación con el rango que puede abarcar una representación en coma flotante típica (temperatura entre 0ºC-100ºC, temporizaciones con contadores de 16 bits y relojes de baja frecuencia, niveles de líquidos, etc.).
c. operaciones a realizar para obtener un resultado a partir de los datos de entrada no muy elevado (típicamente MAC o alguna convolución sencilla para realizar filtrados).
d. precisión y resolución no son factores críticos del problema a resolver (centímetros, grados centígrados, milibares,...).
e. velocidad de cálculo como factor crítico a maximizar (sistemas de respuesta en tiempo real, control de procesos críticos, gráficos en tiempo real, impresoras de alta velocidad o sistemas CAD).

Como ejemplos de esta serie de problemas, se podría enumerar el control de procesos, el cálculo de imágenes sintéticas o el tratamiento digital de imagen, el proceso digital de la señal, síntesis digital de sonidos, control industrial, control numérico de herramientas, telefonía móvil, etc. El hecho de trabajar en un formato numérico de coma flotante tiene como principales ventajas:

a. homogeneizar y normalizar los cálculos necesarios para operar con decimales.
b. ofrecer flexibilidad para representar números de muy diversas magnitudes.
c. estar soportado por casi todos los lenguajes de programación conocidos

En el mundo de los procesadores digitales de señal (DSPs) los requisitos de cálculo son muy exigentes. Muchas de sus aplicaciones embebidas utilizadas en volúmenes altos de producción, emplean una Aritmética basada en coma fija debido a que, en industria, la prioridad apunta a costes de producción bajos. Si la precisión ha de ser elevada y el rango dinámico de trabajo amplio, se hace obligatorio aplicar la Aritmética en coma flotante. Los procesadores más rápidos y más baratos utilizan Aritmética en coma fija, donde los números son tratados o bien como enteros en su sentido tradicional o bien como fracciones comprendidas en el intervalo [1.0,+1.0].

Habitualmente los DSPs basados en coma flotante, son más caros que los basados en coma fija, pero también más sencillos de programar, amén de emplear operandos de 32 bits, mientras que los DSPs basados en coma fija utilizan típicamente 16 bits; aunque existen combinaciones particulares de 24 bits en la familia Motorola DSP5600x o de 20 bits en la Zoran ZR3800x. Por otro lado, los usuarios que utilizan lenguajes de alto nivel encuentran más sencillos de manejar DSPs basados en coma flotante que aquellos en coma fija, por:

a. muchos lenguajes de alto nivel no tienen soporte nativo para la aritmética en coma fija.
b. instrucciones menos restrictivas y más regulares.
c. espacios de trabajo más grandes para lo que acomoda con mayor facilidad el código producido por los compiladores.
d. completas herramientas de depuración, permitiendo la simulación fuera de línea incluso antes de que el hardware esté disponible.

Actualmente sólo existe soporte para la representación numérica en coma fija en alguna versión de lenguajes de programación de alto nivel desarrollados para DSPs, una reducida implementación sobre el lenguaje ADA o algún paquete diseñado en Internet a propósito que implementa la aritmética en coma fija para rt-linux.










Después de realizarle una pequeña intervención quirúrgica a mi celular Sony Ericsson K610i,
la frustración en mi búsqueda sobre el microprocesador que tan maravillas hace en este dispositivo es bien patente. Sin embargo, continuaré en mi empeño por saber quién fabricó el cerebro de mi teléfono móvil.