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

119
Visualizações
¿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 à 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