¿Hay alguna forma de multiplicar correctamente dos enteros de 32 bits en Javascript?¿Hay alguna manera de multiplicar correctamente dos enteros de 32 bits en Javascript?
Cuando intento esto desde C utilizando long long
me sale esto:
printf("0x%llx * %d = %llx\n", 0x4d98ee96ULL, 1812433253,
0x4d98ee96ULL * 1812433253);
==> 0x4d98ee96 * 1812433253 = 20becd7b431e672e
Pero a partir de Javascript el resultado es diferente:
x = 0x4d98ee97 * 1812433253;
print("0x4d98ee97 * 1812433253 = " + x.toString(16));
==> 0x4d98ee97 * 1812433253 = 20becd7baf25f000
Los ceros a la derecha me llevan a sospechar que Javascript tiene una extraña resolución entera limitada en algún lugar entre 32 y 64 bits.
¿Hay alguna manera de obtener una respuesta correcta? (Estoy usando Mozilla js-1.8.5 en x86_64 Fedora 15 en caso de que importe)
FYI: es realmente alrededor [53 bits] (http://groups.google.com/group/twitter-api-announce/browse_thread/thread/6a16efa375532182?pli=1). – Thai
puede usar [Math.imul] (https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Math/imul) –