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

122
Views
¿Optimización de nodo que causa un resultado incorrecto?

Hemos encontrado un problema que ocurre al azar y trato de entender qué está pasando aquí. No hay necesidad de entender lo que eventualmente hace el código. el código es exactamente el mismo, excepto que tratamos de "verificar" un valor específico"

Foo y Bar (el violín está aquí) son exactamente las mismas funciones.

Las diferencias están aquí:

ingrese la descripción de la imagen aquí

(esencialmente, estamos tratando de "verificar" el lsbValue )

Lo hemos probado a través de este código (la misma función se ejecuta tanto en Foo como en Bar )

 function testGalois(fn) { const x = new Uint32Array([2425393296, 2425393296, 2425393296, 2425393296]); const y = new Uint32Array([3692772234, 3144594163, 3014792419, 2386452453]); const expected = [2793996538, 14267392, 3369100906, 2506634262]; for (let i = 0; i < 100; i++) { const result = Array.from(fn(x, y)); if (JSON.stringify(result) != JSON.stringify(expected)) { console.error('Failed on iteration', i, 'expected', expected, 'result', result) return; } } console.log('Pass!'); }

Foo está funcionando sin problemas cada vez .

Sin embargo, Bar falla en una iteración aleatoria:

Prueba Foo
¡Pasar!
barra de prueba
Error en la iteración 64 resultado esperado [ 2793996538, 14267392, 3369100906, 2506634262 ] [ 4021467969, 3143765947, 1936448977, 785616812 ]

Ejecutémoslo de nuevo, ahora el error en una iteración diferente:

Prueba Foo
¡Pasar!
barra de prueba
Error en la iteración 62 resultado esperado [ 2793996538, 14267392, 3369100906, 2506634262 ] [ 4021467969, 3143765947, 1936448977, 785616812 ]

Tenga en cuenta que solo buscamos el valor real de

 let lsbValue = !!(Vi[3] & 1 ) ; //fails at some iteration.

De mis pruebas en Bar :

 const lsbValue = !!(Vi[3] & 1 ) ; //fails const lsbValue = Boolean(Vi[3] & 1 ) //fails const lsbValue = (Vi[3] & 1 )>0 //works

¡Pero luego pensé que tal vez hay algún tipo de recurso compartido que se usa aquí cuando se trata de Boolean o !! lo que me llevó a crear un new Boolean(X) en cada iteración en lugar de Boolean(X) :

 const lsbValue = new Boolean((Vi[3] & 1 )).valueOf() ; //works !

Pregunta

¡Huele a que se está usando una ubicación inicial compartida cuando se usa !! o Boolean . (aunque se que !! es un operador.)

Pero luego, la creación de una nueva instancia por iteración funcionó:
const lsbValue = new Boolean((Vi[3] & 1 )).valueOf() ;

¿Por qué arrojan resultados diferentes o incorrectos?

patio de recreo

nótese bien
Esto no sucede en Chrome. sucede solo en el nodo.

over 4 years ago · Santiago Trujillo
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!