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

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

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 Report

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 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!