Não assinado de 32 bits inteiros em Javascript
-
13-12-2019 - |
Pergunta
Como posso emular 32bit unsiged inteiros sem dependências externas em Javascript?Truques com x >>> 0
ou x | 0
não trabalho (para multiplicação, eles parecem trabalhar para a adição / subtração), e dobra a perder precisão durante a multiplicação.
Por exemplo, tente multiplicar 2654435769 * 340573321 mod (2^32).O resultado deve ser de 1.
Esta resposta tem de multiplicação.O que sobre a adição / subtração / divisão?
Aqui está um link para o wolfram alpha, apresentando a equação acima.
Solução
Uma versão de 32-bit unsigned int se encaixa dentro de Javascript 64-bit float -- não deve haver nenhuma perda de precisão ao executar a adição, a subtração ou divisão.Apenas a máscara com 0xffffffff
ficar dentro de um inteiro de 32 bits.Multiplicação vai além do que se encaixa, mas você já tem uma solução para isso.