--- title: Math.imul() slug: Web/JavaScript/Reference/Global_Objects/Math/imul tags: - JavaScript - Math - imul - Довідка - метод translation_of: Web/JavaScript/Reference/Global_Objects/Math/imul ---
Функція Math.imul()
повертає результат C-подібного 32-бітного множення двох аргументів.
Джерело цих інтерактивних прикладів зберігається у репозиторії на GitHub. Якщо ви маєте бажання зробити свій внесок у проект інтерактивних прикладів - будь ласка, зклонуйте репозиторій https://github.com/mdn/interactive-examples та пришліть нам pull request.
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); };
Специфікація | Статус документу | Примітка |
---|---|---|
{{SpecName('ES6', '#sec-math.imul', 'Math.imul')}} | {{Spec2('ES6')}} | Первинне визначення. |
{{SpecName('ESDraft', '#sec-math.imul', 'Math.imul')}} | {{Spec2('ESDraft')}} |
Таблиця сумісності на цій сторінці сформована автоматично із структурованих даних. Якщо ви маєте бажання зробити свій внесок до цих даних - будь-ласка, ось репозиторій https://github.com/mdn/browser-compat-data, надішліть нам свій pull request.
{{Compat("javascript.builtins.Math.imul")}}