Math.imul()

概要

このメソッドは 2 つの引数をとり、C 言語の様な 32 ビット乗算の結果を返します。

構文

Math.imul(a, b)

引数

a
最初の数字
b
2 番目の数字

説明

Math.imul は、 C 言語の様なセマンティクスを持つ、高速な 32 ビット整数乗算を可能にします。この機能は Emscripten のようなプロジェクトに有用です。

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

Polyfill

次の関数を用いる事により、imul をサポートしていない環境でもこれをエミュレートする事が出来ます。

// Math.imul の代替関数
function imul(a, b) {
  var ah  = (a >>> 16) & 0xffff;
  var al = a & 0xffff;
  var bh  = (b >>> 16) & 0xffff;
  var bl = 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 ((al * bl) + (((ah * bl + al * bh) << 16) >>> 0)|0);
}

仕様

仕様書 策定状況 コメント
ECMAScript 2015 (6th Edition, ECMA-262)
Math.imul の定義
標準 最初の定義。
ECMAScript Latest Draft (ECMA-262)
Math.imul の定義
ドラフト

ブラウザ実装状況

Update compatibility data on GitHub
デスクトップモバイルサーバー
ChromeEdgeFirefoxInternet ExplorerOperaSafariAndroid webviewAndroid 版 ChromeAndroid 版 FirefoxAndroid 版 OperaiOSのSafariSamsung InternetNode.js
imulChrome 完全対応 28Edge 完全対応 12Firefox 完全対応 20IE 未対応 なしOpera 完全対応 16Safari 完全対応 7WebView Android 完全対応 ありChrome Android 完全対応 ありFirefox Android 完全対応 20Opera Android 完全対応 ありSafari iOS 完全対応 7Samsung Internet Android 完全対応 ありnodejs 完全対応 0.12

凡例

完全対応  
完全対応
未対応  
未対応