Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

118
Vistas
¿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
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda