Функція Math.imul() повертає результат C-подібного 32-бітного множення двох аргументів.

Синтаксис

var product = Math.imul(a, b);

Аргументи

a
Перше число.
b
Друге число.

Результат

Результат C-подібного 32-бітного множення даних аргументів.

Опис

Math.imul() дає можливість виконувати 32-бітне цілочисельне множення з C-подібною семантикою. Ця особливість дуже корисна для проектів на зразок Emscripten.

У зв'язку з тим, що imul() - це статичний метод Math, слід завжди викликати його як Math.imul(), аніж як метод створеного вами об'єкту Math (оскільки Math не являється конструктором).

Якщо ви використаєте звичайні числа із рухомою комою в imul, ви отримаєте значну деградацію продуктивності. Причина криється у доволі коштовній з точки зору ресурсів конвертації числа із рухомою комою у ціле для виконання множення, і зворотній конвертації результату. imul() існує у зв'язку із тим, що він швидший у єдиному (поки що) випадку: застосування у AsmJS. AsmJS дозволяє JIST-оптимізаторам простіше реалізовувати цілі числа всередині у JavaScript. Множення двох чисел, що уже зберігаються як цілі (що, поки що, можливо лише з AsmJS) за допомогою imul - це єдина потенційна можливість для Math.imul покращити продуктивність у сучасних браузерах.

Приклади

Застосування 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

Поліфіл

Цей метод може бути реалізований за допомогою наступної функції:

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;
  // зсув на 0 фіксує знак старшої частини
  // |0 наприкінці перетворює беззнакове значення у число із знаком
  return ((aLo * bLo) + (((aHi * bLo + aLo * bHi) << 16) >>> 0) | 0);
};

Специфікації

Специфікація Статус документу Примітка
ECMAScript 2015 (6th Edition, ECMA-262)
The definition of 'Math.imul' in that specification.
Standard Первинне визначення.
ECMAScript Latest Draft (ECMA-262)
The definition of 'Math.imul' in that specification.
Draft  

Підтримка у браузерах

FeatureChromeEdgeFirefoxInternet ExplorerOperaSafari
Basic support28 Yes20 No167
FeatureAndroid webviewChrome for AndroidEdge mobileFirefox for AndroidOpera AndroidiOS SafariSamsung Internet
Basic support Yes Yes Yes20 Yes7 Yes

Мітки документа й учасники

Зробили внесок у цю сторінку: AdriandeCita
Востаннє оновлена: AdriandeCita,