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

239
Visualizações
Coerción BigInt y Number por operadores de comparación numérica

¿La comparación numérica, entre BigInt y Number, forzará un argumento a BigInt, o forzará un argumento a Number?

Por ejemplo, en lo siguiente, ¿ 3n está forzado a 3 o 1 está forzado a 1n ?

 console.log(3n > 1) // true

Ambos operandos parecen convertirse en un "valor matemático" en 4.k de la operación abstracta IsLessThan ; un proceso que se designa ℝ en la especificación .

No tengo idea de lo que esto significa, sin embargo.

Observo que:

 console.log(19_999_999_999_999_998 > 19_999_999_999_999_999n) // true

Quizás el "valor matemático", ℝ, de 19,999,999,999,999,998, es el descriptor del valor 20,000,000,000,000,000, ¿cuál es la representación IEEE754 más cercana posible?

Todavía no entiendo si se puede decir que se produce coerción, dado que un Número puede tener un componente fraccionario y un BigInt no.

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

0

¿La comparación numérica entre BigInt y Number forzará un argumento a BigInt, o forzará un argumento a Number?

Ninguno de los dos. A medida que lee en la especificación, se comparan sus valores matemáticos.

Considere 2n < 2.4 . Si ambos se convirtieron a BigInt, obtendría una excepción (" no se puede convertir un número no entero a BigInt ") o obtendría un resultado false porque 2n no es más pequeño que 2n . Pero no, el resultado true porque "ℝ( 2n ) < ℝ( 2.4 )" es "2 < 2.4", lo cual es verdadero.

Considere 9007199254740993n > 9007199254740992 . Si ambos se convirtieron a valores numéricos, obtendría un resultado false porque 9007199254740993 es mayor que Number.MAX_SAFE_INTEGER y pierde precisión, convirtiéndose en el valor 9007199254740992 , que no es mayor que 9007199254740992 . Pero no, el resultado true porque "ℝ( 9007199254740993n ) > ℝ( 9007199254740992 )" es "9007199254740993 > 9007199254740992", lo cual es verdadero.

¿Quizás el "valor matemático", ℝ, es la representación IEEE754 más cercana posible?

No, ese es el valor numérico de x , también indicado como 𝔽( x ) , que se convierte de un valor matemático (los números reales ) o un valor matemático extendido (los números reales más dos infinitos) a un valor concreto (números reales más dos infinitos) concreto (IEEE 754 flotante de precisión doble). punto) Valor numérico . Los valores matemáticos son abstractos y hay muchos números reales que no se pueden representar con precisión como BigInt o Number.

about 4 years ago · Juan Pablo Isaza Relatório

0

Debido a que forzar valores numéricos y valores BigInt puede provocar una pérdida de precisión, se recomienda lo siguiente:

Solo use un valor BigInt cuando se esperen razonablemente valores superiores a 2^53. No fuerce entre valores BigInt y valores numéricos.

El BigInt se convierte en un Number (lo que puede conducir a la pérdida de precisión).

https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/BigInt

ACTUALIZAR:

Para 3n > 1

 Bytecode length: 11 Parameter count 6 Register count 2 Frame size 16 OSR nesting level: 0 Bytecode Age: 0 16 S> 0x28001122e @ 0 : 13 00 LdaConstant [0] 0x280011230 @ 2 : c2 Star1 0x280011231 @ 3 : 0d 01 LdaSmi [1] 20 E> 0x280011233 @ 5 : 6d f9 00 TestGreaterThan r1, [0] 0x280011236 @ 8 : c3 Star0 0x280011237 @ 9 : 0e LdaUndefined 24 S> 0x280011238 @ 10 : a8 Return Constant pool (size = 1) 0x2800111c9: [FixedArray] in OldSpace - map: 0x0a554d7412c1 <Map> - length: 1 0: 0x0002800111e1 <BigInt 3> Handler Table (size = 0) Source Position Table (size = 8) 0x000280011241 <ByteArray[8]>

Para TestGreaterThan , parece que compara dos matrices fijas (BigInt & Int)

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