Enteros sin firmar 32 bits en JavaScript
-
13-12-2019 - |
Pregunta
¿Cómo puedo emular números enteros sin definición de 32 bits sin ninguna dependencia externa en JavaScript?Los trucos con x >>> 0
o x | 0
no funcionan (para la multiplicación, parecen funcionar para la adición / resta), y los dobles pierden la precisión durante la multiplicación.
Por ejemplo, intente multiplicar 2654435769 * 340573321 (mod 2 ^ 32).El resultado debe ser 1.
Esta respuesta tiene multiplicación.¿Qué pasa con la adición / resta / división?
Aquí hay un enlace a Wolfram Alpha, presentando la ecuación anterior.
Solución
Un INT sin firmar de 32 bits dentro de Javascript's flotador de 64 bits -- No debe haber pérdida de precisión al realizar la adición, la resta o la división.Solo máscara con 0xffffffff
para permanecer dentro de un entero de 32 bits.La multiplicación va más allá de lo que se ajusta, pero ya tienes una solución para eso.