Representación de números

Representación de números#

Números binarios#

El Instituto de Ingenieros Eléctricos y Electrónicos (IEEE) publicó un informe titulado Estándar 754-1985 de aritmética de punto flotante binario. Este trabajo establece normas para números con punto flotante en formato binario y decimal, formatos para el intercambio de datos y algoritmos para el redondeo de operaciones aritméticas asi como el manejo de excepciones.

Para representar un número real se utiliza un formato de 64 bits (dígitos binarios). El primer bit es un indicador de signo, denominado s. A este le siguen un exponente de 11 bits, \(c\) llamado característica, y una fracción binaria de 52 bits, \(f\) llamada mantisa.

Dado que 52 dígitos binarios equivalen a entre 16 y 17 dígitos decimales, podemos asumir que un número representado en este sistema posee una precisión de al menos 16 dígitos decimales. El exponente de 11 bits permite un rango de 0 hasta \(2^{11} - 1 = 2047\). Para garantizar que los números de pequeña magnitud puedan representarse, se resta 1023 a la característica; de este modo, el rango real del exponente va de -1023 a 1024.

Con el fin de ahorrar espacio de almacenamiento y ofrecer una representación única para cada número de punto flotante, se aplica una normalización. El uso de este sistema da lugar a un número de punto flotante con la forma

\[ (-1)^{s}2^{c-1023}(1+f). \]

Ejemplo 1. Considere el número binario

\[ 0~10000000011~1011100100010000000000000000000000000000000000000000 \]

El bit más significativo es \(s = 0\), lo que indica que el número es positivo. Los siguientes 11 bits, \(10000000011\), constituyen la característica y equivalen al número decimal

\[ c = 1 \cdot 2^{10} + 0 \cdot 2^{9} + \cdots + 0 \cdot 2^{2} + 1 \cdot 2^{1} + 1 \cdot 2^{0} = 1024 + 2 + 1 = 1027. \]

La parte exponencial del número es \(2^{1027−1023} = 2^{4}\). Los 52 bits finales especifican que la mantisa es

\[ f = 1\cdot \left( \frac{1}{2} \right)^{1} + 1\cdot \left( \frac{1}{2} \right)^{3} + 1 \cdot \left( \frac{1}{2} \right)^{4} + 1\cdot \left( \frac{1}{2} \right)^{5} + 1\cdot \left( \frac{1}{2} \right)^{8} + 1\cdot \left( \frac{1}{2} \right)^{12}. \]

Por consiguiente, este número de máquina representa con precisión el número decimal

\[\begin{split} \begin{aligned} (-1)^{s}2^{c-1023}(1+f) &= (-1)^{0}\cdot 2^{1027-1023} \left( 1 + \left(\frac{1}{2} + \frac{1}{8} + \frac{1}{16} + \frac{1}{32} + \frac{1}{256} + \frac{1}{4096} \right) \right), \\ &= 27.56640625. \end{aligned} \end{split}\]

Números decimales#

Supongamos que los números se representan en formato decimal normalizado de coma flotante

\[ \pm0.d_{1}d_{2}\dots d_{k} \times 10^{n}, \quad 1 \leq d_{1} \leq 9, \quad \text{y} \quad 0 \leq d_{i} \leq 9, \]

para cada \(i = 2,\dots, k\). Los números de esta forma se denominan números decimales de \(k\) dígitos.

Cualquier número real positivo dentro del rango numérico de la máquina puede normalizarse a la forma

\[ y = 0.d_{1}d_{2}\dots d_{k}d_{k+1}d_{k+2}\dots \times 10^{n}. \]

La representación en punto flotante de \(y\), denotada como \(fl(y)\), se obtiene truncando la mantisa de \(y\) en \(k\) dígitos decimales. Existen dos formas comunes de realizar este truncamiento. Un método, denominado truncamiento (o chopping), consiste simplemente en eliminar los dígitos \(d_{k+1}d_{k+2}\dots\). Esto produce la representación en punto flotante

\[ fl(y) = 0.d_{1}d_{2}\dots d_{k} \times 10^{n}. \]

El otro método, denominado redondeo, suma \(5 \times 10^{n−(k+1)}\) a \(y\) y luego trunca el resultado para obtener un número de la forma

\[ fl(y) = 0.\delta_{1}\delta_{2}\dots \delta_{k} \times 10^{n}. \]

Para el redondeo, cuando \(d_{k+1} \geq 5\), sumamos \(1\) a \(d_{k}\) para obtener \(fl(y)\); es decir, redondeamos hacia arriba. Cuando \(d_{k+1} < 5\), simplemente descartamos todos los dígitos excepto los \(k\) primeros; así, redondeamos hacia abajo.