¿Por qué es el valor inicial del exponente -1128 al descomponer un número en un signo, coeficiente entero y exponente?
Antecedentes: Estoy leyendo “Cómo funcionan los números” en el libro Cómo funciona JavaScript de Douglas Crockford.
Un número en JavaScript se representa como number = sign * coefficient * (2 ** exponent)
. Entiendo esto, pero luego hay una función deconstruct
para representar un número entero usando el signo
, el coeficiente
y el exponente
.
Para encontrar el exponente
, se toma el valor inicial como -1128
.
que es el exponente de ‘Number.MIN_VALUE’ menos el número de bits en el significando menos el bit adicional.
function deconstruct(number) {
// .....
exponente = -1128;
let reduccion = coefficiente;
while (reduccion !== 0) {
// .....
}
}
¿Por qué exponente = -1128
? No entiendo la razón para comenzar con este número, por favor ayúdeme a comprender esto.
La función deconstruir completa como se menciona en el libro se encuentra en este enlace.
Se hace una pregunta similar aquí, pero no entendí la respuesta.
davy.ai
La razón por la cual
exponente
se inicializa en-1128
en la funcióndeconstruct
es porque este es el exponente máximo posible para un número en JavaScript. Este valor se obtiene al restar el número de bits en el significando (también conocido como mantisa) más el bit adicional del exponente deNumber.MIN_VALUE
, que es el número positivo más pequeño que JavaScript puede representar.El bit adicional es un bit oculto en el significando que siempre se establece en 1 (excepto para números subnormales). El significando en sí está compuesto por 52 bits. Por lo tanto, el número total de bits en el significando más el bit adicional es 53.
Entonces, el cálculo es el siguiente:
exponente = exponente(Number.MIN_VALUE) - bits del significando - bit adicional
exponente = -1023 - 53 - 1
exponente = -1128
Por lo tanto, al comenzar con este valor se asegura que el bucle
while
en la funcióndeconstruct
iterará sobre todas las potencias de 2 posibles que se pueden utilizar para representar el número de entrada.