Переклад цієї статті ще триває.

Функція 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;
  // 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);
};

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

Специфікація Статус документу Примітка
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,