--- title: Math.imul() slug: Web/JavaScript/Reference/Global_Objects/Math/imul tags: - JavaScript - Math - Method - Reference translation_of: Web/JavaScript/Reference/Global_Objects/Math/imul ---
Die Math.imul()
Funktion führt eine C ähnliche 32-Bit Multiplikation der zwei Parameter durch.
Math.imul(a, b)
a
b
Das Resultat der C-ähnlichen 32-Bit Multiplikation der übergebenen Parameter.
Math.imul()
erlaubt es schnelle 32-Bit Ganzzahlmultiplikationen mit C ähnlicher Semantik durchzuführen. Diese Funktion ist nützlich für Projekte wie Emscripten. Weil imul()
eine statische Methode von Math
ist, muss man immer Math.imul()
benutzen und nicht als Methode eines Math
Objektes, das man erzeugt (Math
ist kein Konstruktor). Wenn normale JavaScript Gleitkommazahlen in imul
eingesetzt werden, wird die Performance beeinträchtigt. Das ist wegen der Umwandlung von Gleitkommazahlen zu ganzen Zahlen für die Multiplikation und die anschließende Rückkonvertierung des Ergebnisses in eine Gleitkommazahl. Der Grund warum imul
existiert, ist, dass esin (nur) einem Fall schneller ist: AsmJS. AsmJS erlaubt JIST-Optimierungen für einfache Implementierung von ganzen Zahlen in JavaScript. Multiplizieren von zwei Zahlen mit imul
, die intern als Integer dargestellt sind (was nur mit AsmJS funktioniert) ist der einzige Grund, wo Math.imul
die Performance im Browsern steigern kann.
Math.imul()
Math.imul(2, 4); // 8 Math.imul(-1, 8); // -8 Math.imul(-2, -2); // 4 Math.imul(0xffffffff, 5); // -5 Math.imul(0xfffffffe, 5); // -10
Diese Funktionalität kann durch folgende Funktion emuliert werden:
Math.imul = Math.imul || function(a, b) { var aHi = (a >>> 16) & 0xffff; var aLo = a & 0xffff; var bHi = (b >>> 16) & 0xffff; var bLo = b & 0xffff; // the shift by 0 fixes the sign on the high part // the final |0 converts the unsigned value into a signed value return ((aLo * bLo) + (((aHi * bLo + aLo * bHi) << 16) >>> 0) | 0); };
Specification | Status | Comment |
---|---|---|
{{SpecName('ES6', '#sec-math.imul', 'Math.imul')}} | {{Spec2('ES6')}} | Initial definition. |
{{SpecName('ESDraft', '#sec-math.imul', 'Math.imul')}} | {{Spec2('ESDraft')}} |
The compatibility table in this page is generated from structured data. If you'd like to contribute to the data, please check out https://github.com/mdn/browser-compat-data and send us a pull request.
{{Compat("javascript.builtins.Math.imul")}}