From 218934fa2ed1c702a6d3923d2aa2cc6b43c48684 Mon Sep 17 00:00:00 2001 From: Peter Bengtsson Date: Tue, 8 Dec 2020 14:43:23 -0500 Subject: initial commit --- .../reference/global_objects/math/imul/index.html | 97 ++++++++++++++++++++++ 1 file changed, 97 insertions(+) create mode 100644 files/uk/web/javascript/reference/global_objects/math/imul/index.html (limited to 'files/uk/web/javascript/reference/global_objects/math/imul/index.html') diff --git a/files/uk/web/javascript/reference/global_objects/math/imul/index.html b/files/uk/web/javascript/reference/global_objects/math/imul/index.html new file mode 100644 index 0000000000..21f5d59a3e --- /dev/null +++ b/files/uk/web/javascript/reference/global_objects/math/imul/index.html @@ -0,0 +1,97 @@ +--- +title: Math.imul() +slug: Web/JavaScript/Reference/Global_Objects/Math/imul +tags: + - JavaScript + - Math + - imul + - Довідка + - метод +translation_of: Web/JavaScript/Reference/Global_Objects/Math/imul +--- +
{{JSRef}}
+ +

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

+ +
{{EmbedInteractiveExample("pages/js/math-imul.html")}}
+ + + +

Синтаксис

+ +
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')}} 
+ +

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

+ + + +

{{Compat("javascript.builtins.Math.imul")}}

-- cgit v1.2.3-54-g00ecf