2012-07-28 10 views
9

Wie kann ich 32bit unsiged Ganzzahlen ohne externe Abhängigkeiten in Javascript emulieren? Tricks mit x >>> 0 oder x | 0 funktionieren nicht (für die Multiplikation scheinen sie für Addition/Subtraktion zu arbeiten), und Doppelgänger verlieren ihre Präzision während der Multiplikation.Unsignierte 32-Bit-Ganzzahlen in Javascript

Versuchen Sie zum Beispiel, 2654435769 * 340573321 zu multiplizieren (mod 2^32). Das Ergebnis sollte 1 sein.

This answer hat Multiplikation. Was ist mit Addition/Subtraktion/Division?

Here's a link zu Wolfram Alpha, die obige Gleichung darstellend.

+0

Aber das Ergebnis von '2654435769 * 340573321' passt nicht in 32-Bit ... –

+0

@ Šime Vidas: Aber mod 2^32 es tut; das ist es, was er mit den Berechnungen macht, wenn ich es richtig verstehe. – pimvdb

+0

@pimvdb: Ja, so funktionieren 32bit vorzeichenlose Ganzzahlen - alle Operationen werden modulo 2^32 ausgeführt. – user1367401

Antwort

3

Ein 32-Bit-Zeichen ohne Vorzeichen passt in Javascript 64-bit float - es sollte kein Genauigkeitsverlust bei Addition, Subtraktion oder Division auftreten. Maskieren Sie einfach mit 0xffffffff, um innerhalb einer 32-Bit-Ganzzahl zu bleiben. Multiplikation geht über das hinaus, was passt, aber Sie haben bereits eine Lösung dafür.

+0

Allerdings die Präzision möglicherweise nicht hoch genug nach der Multiplikation, weil zu 32-Bit-Ganzzahlen multipliziert eine 64-Bit-Ganzzahl erhalten kann, während die 64-Bit-Gleitzahl nur 53 signifikante Bits darstellen kann. Gibt es einen besseren Weg? –

Verwandte Themen