UNPKG

aureooms-js-integer

Version:

integer code bricks for JavaScript

93 lines (75 loc) 6.17 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.bmul53_t = bmul53_t; exports.lmul53_t = lmul53_t; /** * /!\ BLOCK MULTIPLICATION RESULT MUST HOLD IN THE JAVASCRIPT NUMBER TYPE (DOUBLE i.e. 53 bits) * * big endian 1 block multiplication * */ function bmul53_t(r) { /** * Multiply two blocks, result is put in a 1 or 2 blocks big endian array. * aj - ai <= 1, bj - bi <= 1, cj - ci <= 2 * * * @param {array} a first operand * @param {int} ai a left * @param {int} aj a right * @param {array} b second operand * @param {int} bi b left * @param {int} bj b right * @param {array} c result, must be 0 initialized * @param {int} ci c left * @param {int} cj c right */ var mul = function mul(a, ai, aj, b, bi, bj, c, ci, cj) { var v; // EMPTY CASE if (aj <= ai || bj <= bi || cj <= ci) return; v = a[ai] * b[bi]; c[cj - 1] = v % r; if (cj > ci + 1) { c[cj - 2] = (v - c[cj - 1]) / r; } }; return mul; } /** * /!\ BLOCK MULTIPLICATION RESULT MUST HOLD IN THE JAVASCRIPT NUMBER TYPE (DOUBLE i.e. 53 bits) * * little endian 1 block multiplication * */ function lmul53_t(r) { /** * Multiply two blocks, result is put in a 1 or 2 blocks little endian array. * aj - ai <= 1, bj - bi <= 1, cj - ci <= 2 * * * @param {array} a first operand * @param {int} ai a left * @param {int} aj a right * @param {array} b second operand * @param {int} bi b left * @param {int} bj b right * @param {array} c result, must be 0 initialized * @param {int} ci c left * @param {int} cj c right */ var mul = function mul(a, ai, aj, b, bi, bj, c, ci, cj) { var v; // EMPTY CASE if (aj <= ai || bj <= bi || cj <= ci) return; v = a[ai] * b[bi]; c[ci] = v % r; if (cj > ci + 1) { c[ci + 1] = (v - c[ci]) / r; } }; return mul; } //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy8wLWxlZ2FjeS9hcml0aG1ldGljL211bC9tdWw1My5qcyJdLCJuYW1lcyI6WyJibXVsNTNfdCIsImxtdWw1M190IiwiciIsIm11bCIsImEiLCJhaSIsImFqIiwiYiIsImJpIiwiYmoiLCJjIiwiY2kiLCJjaiIsInYiXSwibWFwcGluZ3MiOiI7Ozs7O1FBT2dCQSxRLEdBQUFBLFE7UUE2Q0FDLFEsR0FBQUEsUTtBQXBEaEI7Ozs7Ozs7QUFPTyxTQUFTRCxRQUFULENBQW1CRSxDQUFuQixFQUFxQjs7QUFFM0I7Ozs7Ozs7Ozs7Ozs7Ozs7QUFnQkEsS0FBSUMsTUFBTSxTQUFOQSxHQUFNLENBQVNDLENBQVQsRUFBWUMsRUFBWixFQUFnQkMsRUFBaEIsRUFBb0JDLENBQXBCLEVBQXVCQyxFQUF2QixFQUEyQkMsRUFBM0IsRUFBK0JDLENBQS9CLEVBQWtDQyxFQUFsQyxFQUFzQ0MsRUFBdEMsRUFBeUM7O0FBRWxELE1BQUlDLENBQUo7O0FBRUE7QUFDQSxNQUFJUCxNQUFNRCxFQUFOLElBQVlJLE1BQU1ELEVBQWxCLElBQXdCSSxNQUFNRCxFQUFsQyxFQUFzQzs7QUFFdENFLE1BQUlULEVBQUVDLEVBQUYsSUFBUUUsRUFBRUMsRUFBRixDQUFaO0FBQ0FFLElBQUVFLEtBQUcsQ0FBTCxJQUFVQyxJQUFJWCxDQUFkOztBQUVBLE1BQUlVLEtBQUtELEtBQUssQ0FBZCxFQUFpQjtBQUNoQkQsS0FBRUUsS0FBRyxDQUFMLElBQVUsQ0FBQ0MsSUFBSUgsRUFBRUUsS0FBRyxDQUFMLENBQUwsSUFBZ0JWLENBQTFCO0FBQ0E7QUFFRCxFQWREOztBQWdCQSxRQUFPQyxHQUFQO0FBRUE7O0FBRUQ7Ozs7Ozs7QUFPTyxTQUFTRixRQUFULENBQW1CQyxDQUFuQixFQUFxQjs7QUFFM0I7Ozs7Ozs7Ozs7Ozs7Ozs7QUFnQkEsS0FBSUMsTUFBTSxTQUFOQSxHQUFNLENBQVNDLENBQVQsRUFBWUMsRUFBWixFQUFnQkMsRUFBaEIsRUFBb0JDLENBQXBCLEVBQXVCQyxFQUF2QixFQUEyQkMsRUFBM0IsRUFBK0JDLENBQS9CLEVBQWtDQyxFQUFsQyxFQUFzQ0MsRUFBdEMsRUFBeUM7O0FBRWxELE1BQUlDLENBQUo7O0FBRUE7QUFDQSxNQUFJUCxNQUFNRCxFQUFOLElBQVlJLE1BQU1ELEVBQWxCLElBQXdCSSxNQUFNRCxFQUFsQyxFQUFzQzs7QUFFdENFLE1BQUlULEVBQUVDLEVBQUYsSUFBUUUsRUFBRUMsRUFBRixDQUFaO0FBQ0FFLElBQUVDLEVBQUYsSUFBUUUsSUFBSVgsQ0FBWjs7QUFFQSxNQUFJVSxLQUFLRCxLQUFLLENBQWQsRUFBaUI7QUFDaEJELEtBQUVDLEtBQUcsQ0FBTCxJQUFVLENBQUNFLElBQUlILEVBQUVDLEVBQUYsQ0FBTCxJQUFjVCxDQUF4QjtBQUNBO0FBRUQsRUFkRDs7QUFnQkEsUUFBT0MsR0FBUDtBQUVBIiwiZmlsZSI6Im11bDUzLmpzIiwic291cmNlc0NvbnRlbnQiOlsiLyoqXG4gKiAvIVxcIEJMT0NLIE1VTFRJUExJQ0FUSU9OIFJFU1VMVCBNVVNUIEhPTEQgSU4gVEhFIEpBVkFTQ1JJUFQgTlVNQkVSIFRZUEUgKERPVUJMRSBpLmUuIDUzIGJpdHMpXG4gKlxuICogYmlnIGVuZGlhbiAxIGJsb2NrIG11bHRpcGxpY2F0aW9uXG4gKlxuICovXG5cbmV4cG9ydCBmdW5jdGlvbiBibXVsNTNfdCAocil7XG5cblx0LyoqXG5cdCAqIE11bHRpcGx5IHR3byBibG9ja3MsIHJlc3VsdCBpcyBwdXQgaW4gYSAxIG9yIDIgYmxvY2tzIGJpZyBlbmRpYW4gYXJyYXkuXG5cdCAqIGFqIC0gYWkgPD0gMSwgYmogLSBiaSA8PSAxLCBjaiAtIGNpIDw9IDJcblx0ICpcblx0ICpcblx0ICogQHBhcmFtIHthcnJheX0gYSBmaXJzdCBvcGVyYW5kXG5cdCAqIEBwYXJhbSB7aW50fSBhaSBhIGxlZnRcblx0ICogQHBhcmFtIHtpbnR9IGFqIGEgcmlnaHRcblx0ICogQHBhcmFtIHthcnJheX0gYiBzZWNvbmQgb3BlcmFuZFxuXHQgKiBAcGFyYW0ge2ludH0gYmkgYiBsZWZ0XG5cdCAqIEBwYXJhbSB7aW50fSBiaiBiIHJpZ2h0XG5cdCAqIEBwYXJhbSB7YXJyYXl9IGMgcmVzdWx0LCBtdXN0IGJlIDAgaW5pdGlhbGl6ZWRcblx0ICogQHBhcmFtIHtpbnR9IGNpIGMgbGVmdFxuXHQgKiBAcGFyYW0ge2ludH0gY2ogYyByaWdodFxuXHQgKi9cblxuXHR2YXIgbXVsID0gZnVuY3Rpb24oYSwgYWksIGFqLCBiLCBiaSwgYmosIGMsIGNpLCBjail7XG5cblx0XHR2YXIgdjtcblxuXHRcdC8vIEVNUFRZIENBU0Vcblx0XHRpZiAoYWogPD0gYWkgfHwgYmogPD0gYmkgfHwgY2ogPD0gY2kpIHJldHVybjtcblxuXHRcdHYgPSBhW2FpXSAqIGJbYmldO1xuXHRcdGNbY2otMV0gPSB2ICUgcjtcblxuXHRcdGlmIChjaiA+IGNpICsgMSkge1xuXHRcdFx0Y1tjai0yXSA9ICh2IC0gY1tjai0xXSkgLyByO1xuXHRcdH1cblxuXHR9O1xuXG5cdHJldHVybiBtdWw7XG5cbn1cblxuLyoqXG4gKiAvIVxcIEJMT0NLIE1VTFRJUExJQ0FUSU9OIFJFU1VMVCBNVVNUIEhPTEQgSU4gVEhFIEpBVkFTQ1JJUFQgTlVNQkVSIFRZUEUgKERPVUJMRSBpLmUuIDUzIGJpdHMpXG4gKlxuICogbGl0dGxlIGVuZGlhbiAxIGJsb2NrIG11bHRpcGxpY2F0aW9uXG4gKlxuICovXG5cbmV4cG9ydCBmdW5jdGlvbiBsbXVsNTNfdCAocil7XG5cblx0LyoqXG5cdCAqIE11bHRpcGx5IHR3byBibG9ja3MsIHJlc3VsdCBpcyBwdXQgaW4gYSAxIG9yIDIgYmxvY2tzIGxpdHRsZSBlbmRpYW4gYXJyYXkuXG5cdCAqIGFqIC0gYWkgPD0gMSwgYmogLSBiaSA8PSAxLCBjaiAtIGNpIDw9IDJcblx0ICpcblx0ICpcblx0ICogQHBhcmFtIHthcnJheX0gYSBmaXJzdCBvcGVyYW5kXG5cdCAqIEBwYXJhbSB7aW50fSBhaSBhIGxlZnRcblx0ICogQHBhcmFtIHtpbnR9IGFqIGEgcmlnaHRcblx0ICogQHBhcmFtIHthcnJheX0gYiBzZWNvbmQgb3BlcmFuZFxuXHQgKiBAcGFyYW0ge2ludH0gYmkgYiBsZWZ0XG5cdCAqIEBwYXJhbSB7aW50fSBiaiBiIHJpZ2h0XG5cdCAqIEBwYXJhbSB7YXJyYXl9IGMgcmVzdWx0LCBtdXN0IGJlIDAgaW5pdGlhbGl6ZWRcblx0ICogQHBhcmFtIHtpbnR9IGNpIGMgbGVmdFxuXHQgKiBAcGFyYW0ge2ludH0gY2ogYyByaWdodFxuXHQgKi9cblxuXHR2YXIgbXVsID0gZnVuY3Rpb24oYSwgYWksIGFqLCBiLCBiaSwgYmosIGMsIGNpLCBjail7XG5cblx0XHR2YXIgdjtcblxuXHRcdC8vIEVNUFRZIENBU0Vcblx0XHRpZiAoYWogPD0gYWkgfHwgYmogPD0gYmkgfHwgY2ogPD0gY2kpIHJldHVybjtcblxuXHRcdHYgPSBhW2FpXSAqIGJbYmldO1xuXHRcdGNbY2ldID0gdiAlIHI7XG5cblx0XHRpZiAoY2ogPiBjaSArIDEpIHtcblx0XHRcdGNbY2krMV0gPSAodiAtIGNbY2ldKSAvIHI7XG5cdFx0fVxuXG5cdH07XG5cblx0cmV0dXJuIG11bDtcblxufVxuIl19