Saltar a contenido

Números con decimales

Números con decimales

No siempre es posible limitarse al uso de números enteros. En muchos cálculos necesitaremos utilizar números con decimales, también llamados números reales. En el mundo de los ordenadores, a este tipo de números se les llama flotantes, porque dado un valor, por ejemplo 123.45, moviendo el punto decimal a izquierda o derecha es como si lo dividiésemos o multiplicásemos por diez:

1.2345
12.345
123.45

Nótese que en la escritura de programas se usa siempre el punto decimal para separar la parte entera de la fraccionaria, al estilo anglosajón y de muchos países de Asia y Centroamérica. En Europa es más frecuente el uso de la coma, aunque al escribir programas, tendremos que usar el punto. Véase artículo en la Wikipedia, sobre el uso que se hace de los separadores.

Al igual que sucede con los números negativos, en la aritmética binaria no existen los decimales, y necesitamos de algún “truco” para representarlos. La idea es que todo número con decimales se puede representar mediante enteros:

123.45 = 12345 / 100

Esto se puede escribir en formato exponencial:

      123.45 = 12345 × 10-2

Recordemos que un exponente positivo de 2 multiplicaría por 100 (diez elevado a dos) y uno negativo divide entre cien. Por lo tanto, todo número real lo representaremos mediante tres números enteros:

      número = mantisa × base exponente

Y si asumimos que la base siempre es la misma, en la memoria del ordenador solo necesitamos almacenar dos valores enteros: la mantisa y el exponente. En el texto de un programa, el ejemplo anterior podría escribirse como

x = 12345 E-2

lo que significa 12345 multiplicado por diez elevado a -2. Esta forma de escribir literales numéricos se conoce como notación exponencial. También podemos escribirlo en notación decimal, es decir, 123.45. Las dos siguientes instrucciones de un programa son similares:

x = 12345E-2
x = 123.45

En general, un exponente positivo indica el número de posiciones a mover el punto decimal hacia la derecha, y uno negativo, hacia la izquierda. Es decir:

  • 123.45E0 equivale a 123.45
  • 123.45E1 equivale a 1234.5
  • 123.45E2 equivale a 12345
  • 123.45E4 equivale a 1234500
  • 123.45E-2 equivale a 1.2345
  • 123.45E-4 equivale a 0.012345

Dado que necesitamos espacio para almacenar dos enteros, mantisa y exponente, lo habitual es utilizar variables de 32 o 64 bits, suficiente para dar cabida a tanta información. Cuanto mayor sea el tamaño de la variable, más dígitos decimales podremos almacenar. El exceso se redondeará, perdiendo precisión. Considérese por ejemplo el número PI, que tiene un número ilimitado de decimales:

3.141592653589793238462643383279502884197169399375105820974944592307816406286208998628034825342117

Es imposible almacenar todos los dígitos, por lo que tendremos que limitarnos al espacio disponible en memoria. Se dice que una variable de 64 bits tiene doble precisión que una de 32 bits, porque garantiza el doble de dígitos (más o menos) antes de llegar al redondeo automático.

¿Cuantos bits se reservan para la mantisa y cuantos para el exponente? La representación binaria depende del fabricante de chips, pero lo habitual es seguir el estándar IEE-754.