Business
Jobs
  • About Us
  • Solutions
    • Job Postings
      Post your job and receive qualified candidates in 48h.
    • Candidate Assessments
      500+ technical and psychological tests, plus anti-fraud.
    • Headhunting
      Tailor-made executive search from start to finish.
    • Payroll + EOR
      Payroll dispersal and EOR across 15+ LATAM countries.
  • Pricing
  • Jobs

0

308
Views
¿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 answers
Answer question

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 Report
Answer question
Find remote jobs

Discover the new way to find a job!

Top jobs
Top job categories
Business
Post vacancy Pricing Sales
Legal
Terms and conditions Privacy policy
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Show me some job opportunities
There's an error!