Cargando aplicación...
Preparando tu experiencia meskeIA
Convierte entre decimal y punto flotante. Visualiza signo, exponente y mantisa en binario.
01000000 01001001 00001111 11010000| Precisión | Total bits | Signo | Exponente | Mantisa | Sesgo | Rango aprox. |
|---|---|---|---|---|---|---|
| Simple (float) | 32 | 1 | 8 | 23 | 127 | ±3.4 × 10³⁸ |
| Doble (double) | 64 | 1 | 11 | 52 | 1023 | ±1.8 × 10³⁰⁸ |
Conceptos fundamentales de representación en punto flotante
| Criterio | Half (16-bit) | Single (32-bit) | Double (64-bit) |
|---|---|---|---|
| Bits totales | 16 | 32 | 64 |
| Bits exponente | 5 | 8 | 11 |
| Bits mantisa | 10 | 23 | 52 |
| Sesgo | 15 | 127 | 1023 |
| Rango máximo | ±65.504 | ±3,4×10³⁸ | ±1,8×10³⁰⁸ |
| Precisión decimal | ~3-4 dígitos | ~7 dígitos | ~15-16 dígitos |
| Velocidad | Muy rápido (GPU) | Rápido | Moderado |
| Uso típico | ML/IA, shaders | C float, gráficos | C double, JS Number |
Física y gráficos 3D usan float (32-bit). Millones de operaciones por frame. Precisión suficiente para coordenadas de pantalla.
Unity: Transform.position es floatRedes neuronales usan half (16-bit/bfloat16) en GPU. Reduce VRAM a la mitad. Inferencia en móvil usa float8/int8.
PyTorch: model.half()NUNCA usar float para dinero. 0,1 + 0,2 = 0,30000000000000004. 0,1 € × 1.000.000 transacciones = error de 4.000 €.
Usar BigDecimal o decimalSimulaciones físicas usan double (64-bit). NASA, CERN, meteorología. La diferencia entre float y double puede ser la diferencia entre aterrizar en Marte o no.
Siempre double en cienciaMicrocontroladores sin FPU usan fixed-point. Arduino evita float cuando es posible. STM32 con FPU usa float. Coste energético importante.
Fixed-point sin FPUNumber siempre es double (64-bit). TypedArrays: Float32Array para WebGL. BigInt para enteros grandes exactos.
Number = IEEE 754 double0,1 en binario es 0,0001100110011... (periódico infinito). Al truncarse a 23 bits de mantisa, acumula error. Solución: redondear al comparar (Math.abs(a-b) < 1e-10) o usar aritmética de precisión arbitraria.
Float: gráficos, física de juegos, ML donde la velocidad y memoria importan. Double: finanzas, cálculo científico, por defecto en lenguajes (JS, Python). Regla práctica: si dudas, usa double.
Not a Number: resultado de 0/0, sqrt(-1), operaciones con infinito indeterminadas. NaN ≠ NaN (es la única cosa en programación que no es igual a sí misma). Verificar con Number.isNaN(x) en JavaScript.
Números muy cercanos al cero (menores que 2^-126 en float). Permiten representar gradualmente el underflow en lugar de pasar directamente a cero. Más lentos en hardware por emulación software. Rango: 1,4×10⁻⁴⁵ hasta 1,2×10⁻³⁸ en float.
Float tiene 23 bits de mantisa = 2²⁴ = 16.777.217 enteros exactos. A partir de ese valor, solo puede representar números pares. Por eso JS usa Number.MAX_SAFE_INTEGER = 2⁵³-1 (53 bits de mantisa en double).
(a+b)+c ≠ a+(b+c) en punto flotante. Sumar números muy grandes y muy pequeños pierde los dígitos pequeños. El algoritmo de Kahan compensa este error en sumas de muchos números.
Son iguales en comparación (0 === -0 en JS), pero distintos en representación binaria (bit de signo diferente). 1/+0 = +Infinity, 1/-0 = -Infinity. En JavaScript: Object.is(-0, 0) devuelve false.
C: union { float f; uint32_t i; }. Python: struct.pack('f', 3.14). JavaScript: usar Float32Array + Uint32Array compartiendo el mismo ArrayBuffer. Útil para debugging y optimización de bajo nivel.
3,14 > 0 → bit de signo = 0. Si fuera negativo, sería 1.
3 en binario = 11₂ (3 = 2 + 1)
0,14 × 2 = 0,28 (0) → 0,28 × 2 = 0,56 (0) → 0,56 × 2 = 1,12 (1) → ... Resultado parcial: 0,001000111101...₂
11,001000111101...₂ = 1,1001000111101...₂ × 2¹
Exponente real = 1, sesgo = 127 → 1 + 127 = 128 = 10000000₂
Parte fraccionaria de 1,1001000111101... = 10010001111010111000011₂
0 | 10000000 | 10010001111010111000011 = 0x4048F5C3
Math.abs(a - b) < Number.EPSILON en vez de a === b para floats
En caso de duda, usa double (64-bit). La diferencia de rendimiento es mínima en CPUs modernas
Usa enteros de centavos o librerías especializadas (decimal.js, big.js). 0,1 + 0,2 ≠ 0,3
Float32Array consume la mitad de memoria que Float64Array en GPU. Importante para rendimiento gráfico
Suma primero los números de magnitud similar. Evita (grandísimo + pequeñísimo) que pierde los dígitos pequeños
isNaN(x) en JS convierte a número antes. Usa Number.isNaN(x) para verificación exacta
Estándar internacional para representar números reales en computadores. Divide el número en tres partes: signo, exponente y mantisa (fracción).
(-1)^signo × 1.mantisa × 2^exponenteEn números normalizados, siempre hay un "1" implícito antes del punto decimal. Esto ahorra 1 bit de almacenamiento.
1.01011... (el 1 inicial es implícito)El exponente se almacena con un sesgo para evitar números negativos. Se suma el sesgo al exponente real antes de almacenarlo.
Simple: sesgo = 127
Doble: sesgo = 1023Cero: Exp=0, Mantisa=0
Infinito: Exp=máx, Mantisa=0
NaN: Exp=máx, Mantisa≠0
Denormalizado: Exp=0, Mantisa≠0
No todos los decimales pueden representarse exactamente. Por ejemplo, 0.1 en binario es periódico infinito.
0.1₁₀ = 0.0001100110011...₂ (infinito)float (C/Java): precisión simple (32 bits)
double (C/Java): precisión doble (64 bits)
Number (JavaScript): siempre doble