Ciencia de datos

Los valores numéricos en los ordenadores: Entendiendo enteros, flotantes y más

Los valores numéricos están en el corazón de los ordenadores. Desde los cálculos más simples hasta los modelos más complejos de inteligencia artificial, todo depende de la representación y manipulación de datos numéricos. Sin embargo, lo que a simple vista parece una cuestión trivial es, en realidad, el resultado de décadas de evolución y estandarización.

¿Por qué los números en los ordenadores no se almacenan de la misma forma que los escribimos en papel? ¿Por qué existen distintos formatos como enteros, flotantes y números de precisión arbitraria? ¿Y cómo afectan estas elecciones al rendimiento tanto de las aplicaciones de ciencia de datos como otras?

En esta entrada, analizaremos el viaje de los valores numéricos en la historia de los ordenadores: desde los primeros sistemas numéricos hasta los estándares modernos como IEEE 754. Descubriremos por qué los valores de doble precisión tienen 64 bits en lugar de 128, cómo los errores de redondeo pueden afectar cálculos científicos y qué alternativas existen para manejar números en distintos contextos.

Si alguna vez te has preguntado por qué los ordenadores manejan los números de cierta manera y cómo esto impacta en el desarrollo de software y la ciencia de datos, este publicación te ayudará a comprender los principales motivos.

La evolución de los números enteros

Los números enteros fueron una de las primeras formas de datos utilizadas en los ordenarores. En los primeros días de la informática, los sistemas operaban en binario puro, y los enteros eran simplemente secuencias de bits interpretadas como valores numéricos.

  • Enteros con signo y sin signo: Originalmente, los enteros solo podían representar valores positivos. Con el tiempo, se introdujeron mecanismos como el complemento a dos para permitir la representación de números negativos.
  • Precisión fija y precisión arbitraria: Los primeros sistemas usaban enteros de 8, 16 o 32 bits, pero con la evolución de la computación, surgieron librerías y tipos que permiten manejar números de precisión arbitraria.
  • El impacto en la eficiencia: A nivel de hardware, las operaciones con enteros son más rápidas y eficientes en comparación con los números de coma flotante, lo que los hace esenciales en muchas aplicaciones de sistemas embebidos y bases de datos.

Hoy en día, la representación de enteros ha avanzado hasta permitir operaciones con números extremadamente grandes sin pérdida de precisión, lo que resulta crucial en áreas como la criptografía y la computación simbólica.

Los números de coma flotante y el estándar IEEE 754

La introducción de los números de coma flotante fue un hito en la informática, ya que permitió representar valores fraccionarios y extremadamente grandes o pequeños con un formato compacto. Sin embargo, esta representación trajo consigo algunos desafíos, como la pérdida de precisión debido a los errores de redondeo.

  • ¿Por qué 32 y 64 bits? En 1985, el IEEE definió el estándar para aritmética en punto flotante 754, estableciendo formatos de 32 bits (precisión simple) y 64 bits (doble precisión) como norma para la mayoría de los sistemas.
  • Errores de redondeo y su impacto: Como los números de coma flotante usan una aproximación, operaciones como la suma o la multiplicación pueden generar pequeñas imprecisiones que se acumulan en cálculos científicos o financieros.
  • Opciones modernas: Algunas aplicaciones requieren precisión más alta y utilizan formatos como la precisión cuádruple (128 bits), óctuple (256 bits) o números racionales.

Por ejemplo, en Python se puede usar la biblioteca decimal para trabajar con valores en cualquier precisión. En el siguiente ejemplo se puede ver como usar fijar una precisión de 50 decimales:

import decimal

# Ajustar la precisión
decimal.getcontext().prec = 50  

x = decimal.Decimal(1) / decimal.Decimal(3)

print(x)
0.33333333333333333333333333333333333333333333333333

Algo que pueden reducir los errores de redondeo usando una precisión controlada.

Diferencias entre valores flotantes y decimales

A menudo se confunden los números de coma flotante (float) con los números decimales (decimal), pero existen diferencias fundamentales entre ellos:

  • Flotantes (float): Utilizan el estándar IEEE 754, lo que implica una representación binaria aproximada que puede introducir errores de redondeo.
  • Decimales (decimal.Decimal): Usan una representación exacta en base 10, lo que los hace ideales para cálculos financieros y otras aplicaciones donde la precisión decimal es crítica.

Por ejemplo, a continuación se muestra un código mediante el cual se puede comparar el funcionamiento de los valores flotantes y decimales en Python:

import decimal

# Resultado inesperado debido a la representación binaria
print(0.1 + 0.2) 

# Resultado exacto
print(decimal.Decimal('0.1') + decimal.Decimal('0.2'))  
0.30000000000000004
0.3

El uso de decimal.Decimal es recomendable en contextos donde la precisión es más importante que la velocidad de cálculo.

Números complejos y otras representaciones

Los números complejos, fundamentales en matemáticas avanzadas y física, también tienen su representación en los ordenadores. En Python, por ejemplo, los números complejos son compatibles de forma nativa:

z = complex(3, 4)

# Número complejo
print(z)

# Parte real e imaginaria
print(z.real, z.imag)
(3+4j)
3.0 4.0

Ademas de los número complejos, otros formatos que pueden ser de interés son:

  • Fracciones: Representan números exactos sin conversión a coma flotante.
  • BigInt y BigFloat: Tipos numéricos que permiten manejar valores con precisión arbitraria.
  • Representación en hardware: Algunos procesadores modernos incluyen instrucciones específicas para cálculos con números complejos y decimales, optimizando su rendimiento en simulaciones científicas.

El impacto de la precisión numérica en la ciencia de datos y Machine Learning

En ciencia de datos y machine learning, la elección del tipo numérico es crítica. Algunas consideraciones clave incluyen:

  • Eficiencia computacional: Los cálculos en float32 son más rápidos y ocupan menos memoria que en float64, lo que es relevante en entrenamiento de modelos de IA.
  • Precisión vs. rendimiento: Usar float16 (media precisión) puede ser útil en dispositivos con memoria limitada, pero puede generar errores de redondeo en cálculos sensibles.
  • Hardware especializado: GPUs y TPUs modernas optimizan cálculos con bfloat16, un formato diseñado para mejorar la eficiencia sin sacrificar precisión.

Conclusiones

Desde los primeros enteros de 8 bits hasta las complejas estructuras de precisión arbitraria, la evolución de los números en la computación ha sido clave en el desarrollo tecnológico. Hoy en día, seguimos viendo innovaciones, como formatos numéricos optimizados para inteligencia artificial y hardware especializado en cálculos científicos.

A medida que la computación sigue avanzando, es probable que aparezcan nuevos estándares y representaciones optimizadas para necesidades específicas. Comprender cómo funcionan los números en los ordenadores no solo ayuda a escribir mejor código, sino que también es esencial para tomar decisiones informadas en áreas como el análisis de datos, la criptografía y la inteligencia artificial.

Nota: La imagen de este artículo fue generada utilizando un modelo de inteligencia artificial.

¿Te ha parecido de utilidad el contenido?

Daniel Rodríguez

Share
Published by
Daniel Rodríguez

Recent Posts

Data Lake y Data Warehouse: diferencias, usos y cómo se complementan en la era del dato

En la era del dato, las organizaciones se enfrentan al reto de gestionar volúmenes masivos…

2 días ago

Documentar tu API de Express con TypeScript usando OpenAPI (Swagger)

En la serie Creación de una API REST con Express y TypeScript construimos una API…

4 días ago

Curiosidad: El sesgo de supervivencia, o por qué prestar atención sólo a los que “llegaron” puede engañarte

Durante la Segunda Guerra Mundial, la Fuerza Aérea de Estados Unidos quería reforzar sus aviones…

1 semana ago

Cómo abrir una ventana de Chrome con tamaño y posición específicos desde la línea de comandos en Windows

En muchas situaciones —ya sea para grabar un tutorial, tomar capturas de pantalla profesionales, probar…

2 semanas ago

La Paradoja del Cumpleaños, o por qué no es tan raro compartir fecha de nacimiento

Imagínate en una sala con un grupo de personas, por ejemplo, en una oficina, un…

2 semanas ago

Programador de tareas de Windows: Guía definitiva para automatizar tu trabajo (BAT, PowerShell y Python)

En el trabajo diario con ordenadores, es común encontrarse con tareas repetitivas: realizar copias de…

3 semanas ago

This website uses cookies.