Números en Punto Flotante
Estudiaremos números de punto flotante de acuerdo a la norma IEEE 754. El estándar que se impuso a las diferentes formas que se intentaron históricamente. En forma externa, un número flotante normalizado, se interpreta:
(-1)S *1.M2*2Ee
La mantisa siempre comienza en 1, y M representa un fraccionario puro sin signo. Ee es el exponente representado en forma externa. En forma interna, ocupando 32 bits, se tiene el número punto flotante precisión simple (en C es el tipo float): Donde S = 0 representa números positivos, S=1 representa números negativos.

Después del signo, se coloca primero el exponente, para poder comparar números. Ya que a mayor exponente, mayor es el número. También se tiene el tipo double, el que en forma interna, se representa:

Ocupa dos palabras consecutivas, o se requieren dos registros. El exponente Ei, en forma interna, se representa como número polarizado con signo. Para 8 bits: -127 <= Ee <= +127 con Ei = Ee + 127
Para 11 bits: -1023 <= Ee <= +1023 con Ei = Ee + 1023 Esta notación también favorece la comparación. Los exponentes quedan ordenados de más negativos a más positivos, en forma ascendente. (el exponente menor es la secuencia de puros ceros). La norma IEEE 754 contempla: números normales, sub-normales, representaciones para el cero y el infinito, y para números inválidos (NaN, not a number). Con –127 = Ee y M2 !=0 Ei=0 se tiene N = (-1)S *0.M2*2-126 Números sub-normales. Con –127 = Ee y M2 ==0 Ei=0 se tiene N = (-1)S *0.0 Cero(con signo). Con –127 < Ee <=127 se tiene N = (-1)S *1.M2*2Ee Números normales. Con Ee =-128 y M2 ==0 Ei= -1 se tiene N = (-1)S * ∞ Infinito(con signo). Con Ee =-128 y M2 !=0 Ei= -1 se tiene N = NaN Número inválido.
Algunas operaciones aritméticas en punto flotante.
Suma: Se describe la operación para sumar dos números en punto flotante. Primero se desplaza la mantisa del número menor hacia la derecha hasta que su exponente sea igual al del número mayor. Esto puede hacer que se pierdan cifras de representación. Luego se suman las mantisas. El resultado puede no quedar normalizado. Se normaliza el número variando el exponente, y debe verificarse que no ocurra rebalse o vaciamiento de éste.
Después de la normalización, puede ser necesario redondear la mantisa al número de bits de la representación. Podría ser que al redondear, el número se desnormalice, en ese caso debe repetirse el paso de normalización.
Lo usual es dedicar hardware especial para implementar el algoritmo anterior. En caso de no tenerlo, la solución es implementar una biblioteca, en base a las operaciones de la unidad aritmética entera, que realice el algoritmo anterior. En este caso, obviamente la realización de una simple suma de flotantes requiere la ejecución de varias instrucciones, alargando el tiempo de ejecución de los programas que empleen números reales.
Multiplicación: La operación de multiplicación en punto flotante, puede describirse según: Primero se suman los exponentes. En esto debe considerarse que los exponentes están polarizados; por lo tanto debe restarse la polarización para obtener el exponente correcto. En decimal: si un exponente es 5(polarizado en 127 es 5 + 127= 132) y el otro exponente es -7(polarizado en 127 es -7 + 127= 120), la suma de los exponentes resulta 132+120 = 252, que no es el exponente correcto. Debe realizarse: 252-127 = 125 (que equivale a -2). Luego se multiplican las mantisas.
Se normaliza el resultado, corriéndolo a la derecha e incrementando el exponente. Verificando si se produce rebalse.
Redondear la mantisa, verificando que el resultado esté normalizado; en caso de no estarlo repetir el proceso de normalización. Finalmente debe colocarse el signo.
La aritmética de punto flotante tiene un alto grado de elaboración, una de las refinaciones es el redondeo, esto cobra especial importancia en este sistema numérico que en sí es una aproximación del número real. Se emplean bits adicionales denominados de guarda y redondeo en los cálculos intermedios.
El algoritmo de división, es bastante más complejo, y produce una operación más lenta. Para acelerarla en algunos diseños se genera el recíproco; en otros se intenta obtener varios bits de la división en un solo paso. Un pequeño error en la implementación de este algoritmo causó una pérdida millonaria a la empresa Intel, en el diseño del procesador PENTIUM.
La norma IEEE 754, tiene símbolos especiales para representar más y menos infinito, y lo que denomina NAN (not a number) que ocurre en la división de cero por cero, o en una resta de infinito menos infinito. También se tratan números no normalizados que permiten extender el rango de representación.
Las operaciones en punto flotante requieren de algoritmos especiales y de un hardware dedicado (tradicionalmente como un coprocesador, con registros independientes, que puede comunicar los resultados a la memoria).
