aboutsummaryrefslogtreecommitdiff
path: root/files/uk/web/javascript/reference/global_objects/math/imul/index.html
diff options
context:
space:
mode:
authorPeter Bengtsson <mail@peterbe.com>2020-12-08 14:43:23 -0500
committerPeter Bengtsson <mail@peterbe.com>2020-12-08 14:43:23 -0500
commit218934fa2ed1c702a6d3923d2aa2cc6b43c48684 (patch)
treea9ef8ac1e1b8fe4207b6d64d3841bfb8990b6fd0 /files/uk/web/javascript/reference/global_objects/math/imul/index.html
parent074785cea106179cb3305637055ab0a009ca74f2 (diff)
downloadtranslated-content-218934fa2ed1c702a6d3923d2aa2cc6b43c48684.tar.gz
translated-content-218934fa2ed1c702a6d3923d2aa2cc6b43c48684.tar.bz2
translated-content-218934fa2ed1c702a6d3923d2aa2cc6b43c48684.zip
initial commit
Diffstat (limited to 'files/uk/web/javascript/reference/global_objects/math/imul/index.html')
-rw-r--r--files/uk/web/javascript/reference/global_objects/math/imul/index.html97
1 files changed, 97 insertions, 0 deletions
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
+---
+<div>{{JSRef}}</div>
+
+<p>Функція <strong><code>Math.imul()</code></strong> повертає результат C-подібного 32-бітного множення двох аргументів.</p>
+
+<div>{{EmbedInteractiveExample("pages/js/math-imul.html")}}</div>
+
+<p class="hidden">Джерело цих інтерактивних прикладів зберігається у репозиторії на GitHub. Якщо ви маєте бажання зробити свій внесок у проект інтерактивних прикладів - будь ласка, зклонуйте репозиторій <a href="https://github.com/mdn/interactive-examples">https://github.com/mdn/interactive-examples</a> та пришліть нам pull request.</p>
+
+<h2 id="Синтаксис">Синтаксис</h2>
+
+<pre class="syntaxbox">var <em>product</em> = Math.imul(<em>a</em>, <em>b</em>);</pre>
+
+<h3 id="Аргументи">Аргументи</h3>
+
+<dl>
+ <dt><code>a</code></dt>
+ <dd>Перше число.</dd>
+ <dt><code>b</code></dt>
+ <dd>Друге число.</dd>
+</dl>
+
+<h3 id="Результат">Результат</h3>
+
+<p>Результат C-подібного 32-бітного множення даних аргументів.</p>
+
+<h2 id="Опис">Опис</h2>
+
+<p><code>Math.imul()</code> дає можливість виконувати 32-бітне цілочисельне множення з C-подібною семантикою. Ця особливість дуже корисна для проектів на зразок <a href="http://en.wikipedia.org/wiki/Emscripten">Emscripten</a>.</p>
+
+<p>У зв'язку з тим, що <code>imul()</code> - це статичний метод <code>Math</code>, слід завжди викликати його як <code>Math.imul()</code>, аніж як метод створеного вами об'єкту <code>Math</code> (оскільки <code>Math</code> не являється конструктором).</p>
+
+<p>Якщо ви використаєте звичайні числа із рухомою комою в imul, ви отримаєте значну деградацію продуктивності. Причина криється у доволі коштовній з точки зору ресурсів конвертації числа із рухомою комою у ціле для виконання множення, і зворотній конвертації результату. <code>imul()</code> існує у зв'язку із тим, що він швидший у єдиному (поки що) випадку: застосування у AsmJS. AsmJS дозволяє JIST-оптимізаторам простіше реалізовувати цілі числа всередині у JavaScript. Множення двох чисел, що уже зберігаються як цілі (що, поки що, можливо лише з AsmJS) за допомогою imul - це єдина потенційна можливість для Math.imul покращити продуктивність у сучасних браузерах.</p>
+
+<h2 id="Приклади">Приклади</h2>
+
+<h3 id="Застосування_Math.imul()">Застосування <code>Math.imul()</code></h3>
+
+<pre class="brush: js">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
+</pre>
+
+<h2 id="Поліфіл">Поліфіл</h2>
+
+<p>Цей метод може бути реалізований за допомогою наступної функції:</p>
+
+<pre class="brush: js">Math.imul = Math.imul || function(a, b) {
+ var aHi = (a &gt;&gt;&gt; 16) &amp; 0xffff;
+ var aLo = a &amp; 0xffff;
+ var bHi = (b &gt;&gt;&gt; 16) &amp; 0xffff;
+ var bLo = b &amp; 0xffff;
+ // зсув на 0 фіксує знак старшої частини
+ // |0 наприкінці перетворює беззнакове значення у число із знаком
+ return ((aLo * bLo) + (((aHi * bLo + aLo * bHi) &lt;&lt; 16) &gt;&gt;&gt; 0) | 0);
+};
+</pre>
+
+<h2 id="Специфікації">Специфікації</h2>
+
+<table class="standard-table">
+ <tbody>
+ <tr>
+ <th scope="col">Специфікація</th>
+ <th scope="col">Статус документу</th>
+ <th scope="col">Примітка</th>
+ </tr>
+ <tr>
+ <td>{{SpecName('ES6', '#sec-math.imul', 'Math.imul')}}</td>
+ <td>{{Spec2('ES6')}}</td>
+ <td>Первинне визначення.</td>
+ </tr>
+ <tr>
+ <td>{{SpecName('ESDraft', '#sec-math.imul', 'Math.imul')}}</td>
+ <td>{{Spec2('ESDraft')}}</td>
+ <td> </td>
+ </tr>
+ </tbody>
+</table>
+
+<h2 id="Підтримка_у_браузерах">Підтримка у браузерах</h2>
+
+<p class="hidden">Таблиця сумісності на цій сторінці сформована автоматично із структурованих даних. Якщо ви маєте бажання зробити свій внесок до цих даних - будь-ласка, ось репозиторій <a href="https://github.com/mdn/browser-compat-data">https://github.com/mdn/browser-compat-data</a>, надішліть нам свій pull request.</p>
+
+<p>{{Compat("javascript.builtins.Math.imul")}}</p>