Math.imul()

Baseline Widely available

This feature is well established and works across many devices and browser versions. It’s been available across browsers since July 2015.

Сводка

Метод Math.imul() возвращает результат перемножения в стиле C двух 32-битных чисел.

Синтаксис

Math.imul(a, b)

Параметры

a

Первое число.

b

Второе число.

Описание

Метод Math.imul() позволяет выполнять быстрое перемножение двух 32-битных чисел с семантикой C. Эта возможность полезна для таких проектов, как Emscripten. Поскольку метод imul() является статическим методом объекта Math, вы всегда должны использовать его как Math.imul(), а не пытаться вызывать метод на созданном экземпляре объекта Math (поскольку объект Math не является конструктором).

Примеры

Пример: использование метода Math.imul()

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

Полифил

Этот метод может эмулироваться следующим способом:

js
Math.imul =
  Math.imul ||
  function (a, b) {
    var ah = (a >>> 16) & 0xffff;
    var al = a & 0xffff;
    var bh = (b >>> 16) & 0xffff;
    var bl = b & 0xffff;
    // сдвиг на 0 бит закрепляет знак в старшей части числа
    // окончательный |0 преобразует беззнаковое значение обратно в знаковое значение
    return (al * bl + (((ah * bl + al * bh) << 16) >>> 0)) | 0;
  };

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

Specification
ECMAScript Language Specification
# sec-math.imul

Совместимость с браузерами

BCD tables only load in the browser