Есть ли способ правильно умножить два 32-битных целых числа в Javascript?

Есть ли способ правильно умножить два 32-битных целых числа в Javascript?

Когда я пробую это из C, используя long long , я получаю следующее:

printf("0x%llx * %d = %llx\n", 0x4d98ee96ULL, 1812433253,
      0x4d98ee96ULL * 1812433253);
==> 0x4d98ee96 * 1812433253 = 20becd7b431e672e

Но из Javascript результат другой:

x = 0x4d98ee97 * 1812433253;
print("0x4d98ee97 * 1812433253 = " + x.toString(16));
==> 0x4d98ee97 * 1812433253 = 20becd7baf25f000

Завершающие нули заставляют меня подозревать, что Javascript как ни странно ограниченное целочисленное разрешение где-то между 32 и 64 битами.

Есть ли способ получить правильный ответ? (Я использую Mozilla js-1.8.5 на x86_64 Fedora 15, если это имеет значение.)

6
задан Matteo Italia 3 June 2011 в 21:41
поделиться