🧮 Computational Mathematics

Inicio · Parte 01 — Aritmética computacional y representación numérica

021 — Bits, bytes y sistemas de numeración

basico-computacional clase 1 de 20 4 horas demostración bits_and_bytes

Con n bits se codifican exactamente 2ⁿ valores distintos; el ancho de palabra fija el rango, no la precisión.

Fórmulas

valores representables con n bits = 2ⁿ
bits necesarios para k valores = ⌈log₂ k⌉

Desarrollo

Un bit distingue dos estados. Dos bits distinguen cuatro, porque cada estado del primero se combina con cada estado del segundo. La regla del producto —que la clase 087 formalizará como combinatoria— da directamente 2ⁿ para n bits, y esa cuenta es la base de todo dimensionamiento en computación.

La relación inversa importa igual: para representar k valores distintos hacen falta ⌈log₂ k⌉ bits. Un millón de valores necesita 20 bits; mil millones, 30. El logaritmo convierte una multiplicación de posibilidades en una suma de bits, y por eso la información se mide en bits (clase 262): es la unidad natural en la que las posibilidades se suman.

Los anchos habituales no son arbitrarios: 8, 16, 32 y 64 bits corresponden a las unidades que el hardware manipula de una vez. Elegir el ancho es elegir un compromiso entre rango y memoria. En deep learning esa elección es un tema activo: pasar de float32 a bfloat16 reduce a la mitad la memoria de activaciones y permite lotes mayores, a costa de precisión.

Conviene separar desde ya dos cosas que el ancho de palabra confunde: cuántos valores distintos caben (rango) y cuán juntos están (precisión). Un int32 y un float32 ocupan lo mismo y representan cosas radicalmente distintas: el entero cubre un rango pequeño con espaciado uniforme de 1; el flotante cubre un rango enorme con espaciado variable.

Ejemplo trabajado

Cuántos bits hacen falta y cuántos valores caben.

ancho    valores representables
1 bit                       2
1 byte                    256
16 bits                65 536
32 bits         4 294 967 296
64 bits    1.8446744e19

Para 1000 valores:      ⌈log₂ 1000⌉  = 10 bits   (2¹⁰ = 1024 ≥ 1000)
Para 1 000 000 valores: ⌈log₂ 10⁶⌉   = 20 bits   (2²⁰ = 1 048 576)

Observa el salto: duplicar los bits no duplica los valores, los eleva al cuadrado. De 32 a 64 bits no hay «el doble de números»: hay 4·10⁹ veces más.

Qué calcula el laboratorio

Cuántos valores distintos codifica cada ancho de palabra.

python classes/part-01-aritmetica-computacional-y-representacion-numerica/021-bits-bytes-y-sistemas-de-numeracion/lab.py
compmath run 021

Salidas del laboratorio (7)

Muestra de la ejecución real

{
  "valores_por_bit": 2,
  "valores_en_1_byte": 256,
  "valores_en_16_bits": 65536,
  "valores_en_32_bits": 4294967296,
  "valores_en_64_bits": 18446744073709551616,
  "bits_para_1000_valores": 10
}

Errores comunes

Dónde se usa

Diseño de esquemas de base de datos, formatos binarios, cuantización de modelos y dimensionamiento de índices. La elección float32 frente a bfloat16 en entrenamiento es exactamente esta decisión.

Idea rectora de la parte

Un float es un racional binario de precisión finita, no un número real.

Error a evitar

Comparar floats con `==` en lugar de una tolerancia razonada.

Conexión con IA

float32, bfloat16 y la cuantización a int8 son decisiones de representación. Los NaN en un entrenamiento casi siempre nacen aquí, no en la arquitectura.

Bibliografía de la clase

Archivos de la clase