¿Por qué [math] 2 ^ {- 149} [/ math] es el espacio normalizado más pequeño en el formato de precisión simple IEEE 754?

Veamos IEEE 754-1985 y hagamos un recorrido rápido por el formato de precisión simple. Para números válidos, distintos de cero, en el formato, tenemos

– un bit de signo único [matemática] S [/ matemática];
– un exponente de 8 bits [matemática] E [/ matemática];
– una mantisa de 23 bits [matemática] M [/ matemática]

que representa el número [matemáticas] 2 ^ {E-127} \ cdot (1 + M / 2 ^ {23}) [/ matemáticas] con el signo correspondiente. Los valores [matemática] E = 0 [/ matemática] (todos los bits 0) y [matemática] E = 255 [/ matemática] (todos los bits 1) están reservados; el primero se usa para números cero y ‘desnormalizados’, el último para las formas ‘no numéricas’ como infinitos y NaN. El formato es un poco asimétrico; mientras que el número positivo más pequeño representable como un número normalizado es [matemática] 2 ^ {- 126} [/ matemática], el mayor es un poco menor que [matemática] 2 ^ {128} [/ matemática], sin embargo, esto se hizo intencionalmente para permitir comparaciones de números de coma flotante utilizando fundamentalmente la misma circuitería que la aritmética de enteros complementarios de 2.

Consideraremos los números desnormalizados, ya que esto será útil en un momento. Si [matemática] E = 0 [/ matemática], entonces, en lugar del 1 ‘inicial’ implícito en la fórmula anterior, un número desnormalizado representa [matemática] 2 ^ {- 126} \ cdot (M / {2 ^ {23} })[/matemáticas]. De ello se deduce que el número desnormalizado positivo más pequeño es [math] 2 ^ {- 149} [/ math]. Los números desnormalizados pueden ocurrir como la diferencia entre números normalizados muy pequeños; Parece que estamos en algo aquí. (Es importante tener en cuenta que el exponente es -126, no es [matemática] E-127 [/ matemática] en este caso. Nuevamente, esta fue una elección de diseño, por lo que estos números serían las diferencias entre los números normalizados más pequeños).

¿Cuál es el número normalizado positivo más pequeño? Evidentemente, es dado por [matemáticas] E = 1, M = 0 [/ matemáticas] y es [matemáticas] 2 ^ {- 126} [/ matemáticas]. ¿Cuál es el próximo al más pequeño? [matemáticas] E = 1, M = 1 [/ matemáticas], que es [matemáticas] 2 ^ {- 126} \ cdot (1 + 2 ^ {- 23}) [/ matemáticas]. La diferencia es [matemática] 2 ^ {- 149} [/ matemática], la brecha más pequeña entre los números normalizados (que, convenientemente, se puede representar en forma denormal).