¿Por qué se llaman "float" los números decimales?

Los tipos de datos tienen nombres un poco peculiares, cómo string o boolean, pero el que siempre me ha resultado más curioso es el nombre para los números decimales: float.

¿Por qué los decimales en programación se le llaman float?

Niña flotando
Fuente de la imagen: Wikipedia

Puede que en la educación secundaria te enseñaran la notación científica, que es una manera sencilla de representar tanto a los números grandes como a los pequeños.

Por ejemplo, si queremos representar la velocidad de la luz, podríamos escribir 300.000.000 m/s (sí, es una aproximación, no te enfades por esto). Con tantos ceros cuesta leer el número y no es muy rápido de comparar con otros de dimensiones parecidas.

Nos sucede lo mismo con números pequeños, como por ejemplo el número de segundos que tardaría la luz en recorrer un metro, que es más o menos 0,000000003 s.

La notación científica nos permite representar los mismos valores pero con menos ceros, ya estén a la derecha o a la izquierda, y en vez de eso ver un número que nos indique cuantos ceros tiene:

  • Velocidad de la luz: 3·108 m/s
  • Segundos que tarda la luz en recorrer un metro: 3·10-9 s

De esta manera, es mucho más sencillo comparar números o entender su magnitud.

La notación científica en bits

Se le llama coma flotante al método que se usa para representar la notación científica con bits. El nombre hace referencia a la idea de que la coma está flotando y se la hace desplazar hacia la derecha o la izquierda tantas veces como indique el exponente.

¿Cómo se representa un número de coma flotante?

Tranqui, no necesitas saber binario para entenderlo.

Los números en el ordenador se almacenan por grupos de dígitos. Por ejemplo, si nuestro ordenador almacena los números por grupos de 8 dígitos, el número cero se representaría así:

00000000

Y el número uno así:

00000001

Teniendo en cuenta que los números se almacenan en binario (base 2), el número trece debería representarse así:

00001101

PERO para hacer más entendible la explicación, nos olvidamos de los números binarios y trabajaremos solo con los números "normales" que todos conocemos, es decir, en base 10. Por lo tanto, el número trece lo representaremos así:

00000013

Hasta ahora estamos representando solo a los números sin decimales, es decir, los integer. Y aquí viene el primer problema.

En el ordenador solo podemos almacenar números, y no símbolos como el de la coma. Por ello, para poder separar los números enteros de la parte fraccionaria, necesitamos tener alguna convención.

Una manera sería acordar que una parte de los dígitos sea la parte entera y la otra decimal.

Por ejemplo, si tenemos ocho dígitos, podríamos usar los cuatro primeros dígitos como parte entera y los otros cuatro como parte fraccionaria.

Entonces, para representar el número 143,276 lo haríamos así:

01432760

Sin embargo, esta forma de representar los números nos obliga a tener un rango muy pequeño de números representables, y también nos limita mucho los decimales que se pueden usar.

Una solución sería representar los números con notación científica.

Para ello, necesitamos otra convención. En este caso, usaremos una parte de los dígitos para representar el exponente, y la otra para el número multiplicado.

Por ejemplo, queremos representar el número 472,3. Lo primero sería pasarlo a notación científica:

472,3 = 4,723·102

Si lo queremos representar en ocho dígitos, podemos coger los dos primeros para el exponente y los otros seis para el número multiplicado:

02472300

Pero claro, si queremos representar el número 0,005 necesitamos que el exponente sea negativo, y hemos dicho que no podemos representar símbolos como la coma (,) o el símbolo menos/negativo (-).

Para solucionar eso, lo que se hace es que para obtener el exponente hacemos una pequeña operación: le restamos el valor almacenado a un número en concreto.

Si queremos conseguir tanto números negativos como positivos con dos dígitos, podemos escoger el número 50 y restarle el valor de los dos dígitos.

Por lo tanto, si queremos almacenar el número 23 como exponente de la notación científica, entonces tendremos que escribir 27 en los dos primeros dígitos, ya que:

50 - 27 = 23

 Si necesitamos que el exponente sea cero, entonces almacenamos el número 50, ya que:

50 - 50 = 0

Y para los números negativos, necesitamos números mayores a 50. Por ejemplo, para conseguir el -15 como exponente en la notación científica necesitamos escribir el 65:

50 - 65 = -15

Volviendo a los ejemplos anteriores, si queremos representar el número 472,3 (4,723·102 en notación científica) necesitamos representar al número 2 como exponente, por lo tanto:

48472300

(ya que 50 - 48 = 2) 

Y para representar el 0,005 (5·10-3 en notación científica):

53500000

(ya que 50 - 53 = -3) 

¿Y los números negativos donde quedan?

Una vez llegados hasta aquí, puede que te hayas percatado de que estamos representando solo a los números positivos.

Para poder representar el signo, lo que se hace es reservar el primer dígito para ello, de manera que si el número empieza con un 0 se considera positivo, pero si empieza con 1 se considera negativo.

Comentarios

Entradas populares de este blog

¿Terminal o Shell? Qué son y en qué se diferencian

Café con Bits 7 ☕ Motivación: hacer un videojuego

Zoom: el algoritmo de los puntos de fuga