4 · Números: int, float y aritmética
Los dos tipos numéricos que usarás todo el tiempo — y la trampa de precisión flotante en la que cae todo ingeniero de ML al menos una vez.
`7 / 2` es `3.5` en Python 3 — siempre. Usa `//` cuando quieras un cociente entero.
Sin esto:
Sin entender `/` vs `//`, una división incorrecta corrompe silenciosamente un índice, un conteo o un cálculo de pérdida.
Python tiene dos tipos numéricos del día a día: int (enteros, sin límite de tamaño) y float (decimales IEEE 754 de 64 bits). La mayor parte de la aritmética funciona como esperarías — pero la división tiene una trampa que conviene conocer antes de escribir tu primer ciclo de entrenamiento.
Python (in browser)
Fíjate que `/` siempre devuelve un float, incluso cuando el resultado es entero — `4 / 2` es `2.0`, no `2`.
Python runs entirely in your browser via Pyodide (~6 MB on first Run, cached after).
Los floats intercambian rango por precisión. No pueden representar todos los decimales exactamente — lo que lleva al gotcha de Python más buscado en Google de todos los tiempos:
Python (in browser)
0.1 + 0.2 = 0.30000000000000004. IEEE 754 almacena fracciones en binario — 0.1 no tiene representación binaria exacta.
Python runs entirely in your browser via Pyodide (~6 MB on first Run, cached after).
`int()` trunca hacia cero — no redondea. Usa `round()` cuando necesites redondeo estándar.
La apertura de MML ancla qué es un 'valor' matemáticamente. Si la distinción entre reales y enteros te parece borrosa, léela antes de continuar.
¿Cuál es el valor de `7 // 2` en Python 3?
- `/` siempre devuelve float; `//` da el entero piso. Confúndelos y un índice de arreglo se convierte en `3.5` — un crash.
- Los errores de representación flotante son reales. Usa `math.isclose` para comparaciones de igualdad en decimales.
- `int()` trunca; `round()` redondea; `float()` promueve. Sabe cuál necesitas antes de hacer la conversión.
Los valores de pérdida son floats — comparar `loss == 0.0` en lugar de `loss < 1e-6` nunca activará el early stopping silenciosamente. Las tasas de aprendizaje como `0.001` deben declararse como floats; `learning_rate = 1/1000` está bien en Python 3 pero `1//1000` es `0`. Los índices de batch (`i // batch_size`) usan `//` para mantenerse como enteros.
Si lo quitas: La confusión de tipos entre `int` y `float` produce resultados incorrectos silenciosos — un desfase de uno en el tamaño de batch o una tasa de aprendizaje en cero que entrena sin converger.