Empresas
Empregos
  • Sobre nós
  • Soluções
    • Publicação de vagas
      Publique sua vaga e receba candidatos qualificados em 48h.
    • Avaliações de candidatos
      Mais de 500 testes técnicos e psicológicos, mais anti-fraude.
    • Headhunting
      Busca executiva personalizada do início ao fim.
    • Folha de Pagamento + EOR
      Dispersão de folha e EOR em mais de 15 países da LATAM.
  • Preços
  • Empregos

0

309
Visualizações
¿Por qué el valor inicial del exponente es -1128 al deconstruir el número en un signo, un coeficiente entero y un 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 sign , el coefficient y el exponent .

Para encontrar el exponent , el valor inicial se toma como -1128

que es el exponente de 'Number.MIN_VALUE' menos el número de bits en la mantisa menos el bit de bonificación.

 function deconstruct(number) { // ..... exponent = -1128; let reduction = coefficient; while (reduction !== 0) { // ..... }

¿Por qué exponent = -1128 ? No entendí la razón para comenzar con este número, por favor ayúdenme a entender esto.

La función de deconstrucción completa como se menciona en el libro.

Aquí se hace una pregunta similar, pero no entendí la respuesta.

about 4 years ago · Juan Pablo Isaza
1 Respostas
Responde à pergunta

0

Creo que Crockford eligió este valor para que el coefficient resultante sea siempre un número entero de 53 bits.

La función de deconstruct determina el exponente dividiendo repetidamente por dos y contando cuánto tarda en llegar a 0 . Para el número 1 , que tiene un exponente de 0 (para un coeficiente de 1.0 ), se requieren 1075 pasos, por lo que si comenzamos en -1075 y contamos llegaríamos al exponente de 0 . Sin embargo, para obtener el coeficiente largo, queremos llegar a un exponente de -53 , por lo que ya tenemos que empezar en -1128 .

Otra forma de decirlo: Number.MIN_VALUE , que es 1 * 2**-1074 , debe multiplicarse por 2 1074 veces para llegar a 1, luego algunas veces más para obtener el coeficiente largo.

Tenga en cuenta que aquí se pueden cometer varios errores de uno en uno:

  • para obtener el valor 1 (un entero de 1 bit) como un entero de 53 bits, necesitamos un exponente de -52 no -53
  • el ciclo para calcular el exponente se excede en 1 cuando llega a 0
  • de los 53 bits significativos, solo 52 bits se almacenan en el significado, hay un 1 bit implícito oculto (para números normales)

¡Y Crockford realmente hizo uno de ellos! Si revisa las matemáticas, 1074 (exponente de MIN_VALUE ) + 52 (dígitos binarios significativos) + 1 ("bit de bonificación", a lo que se refiera) equivale a 1127, no 1128. Llamar a la función de deconstruct devolverá un .coefficient con 54 dígitos binarios, que es demasiado.

Dicho esto, creo que incluso el objetivo es cuestionable. Tener el coeficiente, que en realidad es un número fraccionario que comienza con 1.… , representado como un número entero puede excusarse como recurso didáctico para el libro. Pero no tiene ningún sentido representar números subnormales (cuyos coeficientes son números fraccionarios 0.… ) como números mayores que 2 52 , sin apenas dígitos significativos.

about 4 years ago · Juan Pablo Isaza Relatório
Responde à pergunta
Encontrar trabalhos remotos

Descubra a nova forma de encontrar um emprego!

melhores empregos
Principais categorias de trabalho
Empresas
Postar vaga Preços Comercial
Jurídico
Termos e Condições Política de privacidade
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomende algumas ofertas para mim
Preciso de ajuda