UNPKG

aureooms-js-integer

Version:

integer code bricks for JavaScript

47 lines (36 loc) 4.19 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.__ebs__ = __ebs__; /** * Computes pow(a, b) using exponentiation by squaring. * * *could add an additional base case for b = 1* * */ function __ebs__(alloc, iszero, setone, iseven, div2, minus1) { var ebs = function ebs(a, ai, aj, b, bi, bj, c, ci, cj) { var t, u, m, n; if (iszero(b, bi, bj)) { setone(c, ci, cj); } else if (iseven(b, bi, bj)) { m = bj - bi; t = alloc(m); t = div2(b, bi, bj, t, 0, m); n = cj - ci; u = alloc(n); ebs(a, ai, aj, t, 0, m, u, 0, n); mul(u, 0, n, u, 0, n, c, ci, cj); } else { m = bj - bi; t = alloc(m); t = minus1(b, bi, bj, t, 0, m); n = cj - ci; u = alloc(n); ebs(a, ai, aj, t, 0, m, u, 0, n); mul(a, ai, aj, u, 0, n, c, ci, cj); } }; } //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3NyYy8wLWxlZ2FjeS9vdGhlcnMvcG93L2Vicy5qcyJdLCJuYW1lcyI6WyJfX2Vic19fIiwiYWxsb2MiLCJpc3plcm8iLCJzZXRvbmUiLCJpc2V2ZW4iLCJkaXYyIiwibWludXMxIiwiZWJzIiwiYSIsImFpIiwiYWoiLCJiIiwiYmkiLCJiaiIsImMiLCJjaSIsImNqIiwidCIsInUiLCJtIiwibiIsIm11bCJdLCJtYXBwaW5ncyI6Ijs7Ozs7UUFPZ0JBLE8sR0FBQUEsTztBQVBoQjs7Ozs7OztBQU9PLFNBQVNBLE9BQVQsQ0FBa0JDLEtBQWxCLEVBQXlCQyxNQUF6QixFQUFpQ0MsTUFBakMsRUFBeUNDLE1BQXpDLEVBQWlEQyxJQUFqRCxFQUF1REMsTUFBdkQsRUFBK0Q7O0FBRXJFLEtBQUlDLE1BQU0sU0FBTkEsR0FBTSxDQUFVQyxDQUFWLEVBQWFDLEVBQWIsRUFBaUJDLEVBQWpCLEVBQXFCQyxDQUFyQixFQUF3QkMsRUFBeEIsRUFBNEJDLEVBQTVCLEVBQWdDQyxDQUFoQyxFQUFtQ0MsRUFBbkMsRUFBdUNDLEVBQXZDLEVBQTJDOztBQUVwRCxNQUFJQyxDQUFKLEVBQU9DLENBQVAsRUFBVUMsQ0FBVixFQUFhQyxDQUFiOztBQUVBLE1BQUtsQixPQUFPUyxDQUFQLEVBQVVDLEVBQVYsRUFBY0MsRUFBZCxDQUFMLEVBQXlCO0FBQ3hCVixVQUFPVyxDQUFQLEVBQVVDLEVBQVYsRUFBY0MsRUFBZDtBQUNBLEdBRkQsTUFHSyxJQUFLWixPQUFPTyxDQUFQLEVBQVVDLEVBQVYsRUFBY0MsRUFBZCxDQUFMLEVBQXlCO0FBQzdCTSxPQUFJTixLQUFLRCxFQUFUO0FBQ0FLLE9BQUloQixNQUFNa0IsQ0FBTixDQUFKO0FBQ0FGLE9BQUlaLEtBQUtNLENBQUwsRUFBUUMsRUFBUixFQUFZQyxFQUFaLEVBQWdCSSxDQUFoQixFQUFtQixDQUFuQixFQUFzQkUsQ0FBdEIsQ0FBSjs7QUFFQUMsT0FBSUosS0FBS0QsRUFBVDtBQUNBRyxPQUFJakIsTUFBTW1CLENBQU4sQ0FBSjs7QUFFQWIsT0FBSUMsQ0FBSixFQUFPQyxFQUFQLEVBQVdDLEVBQVgsRUFBZU8sQ0FBZixFQUFrQixDQUFsQixFQUFxQkUsQ0FBckIsRUFBd0JELENBQXhCLEVBQTJCLENBQTNCLEVBQThCRSxDQUE5Qjs7QUFFQUMsT0FBSUgsQ0FBSixFQUFPLENBQVAsRUFBVUUsQ0FBVixFQUFhRixDQUFiLEVBQWdCLENBQWhCLEVBQW1CRSxDQUFuQixFQUFzQk4sQ0FBdEIsRUFBeUJDLEVBQXpCLEVBQTZCQyxFQUE3QjtBQUNBLEdBWEksTUFZRDtBQUNIRyxPQUFJTixLQUFLRCxFQUFUO0FBQ0FLLE9BQUloQixNQUFNa0IsQ0FBTixDQUFKO0FBQ0FGLE9BQUlYLE9BQU9LLENBQVAsRUFBVUMsRUFBVixFQUFjQyxFQUFkLEVBQWtCSSxDQUFsQixFQUFxQixDQUFyQixFQUF3QkUsQ0FBeEIsQ0FBSjs7QUFFQUMsT0FBSUosS0FBS0QsRUFBVDtBQUNBRyxPQUFJakIsTUFBTW1CLENBQU4sQ0FBSjs7QUFFQWIsT0FBSUMsQ0FBSixFQUFPQyxFQUFQLEVBQVdDLEVBQVgsRUFBZU8sQ0FBZixFQUFrQixDQUFsQixFQUFxQkUsQ0FBckIsRUFBd0JELENBQXhCLEVBQTJCLENBQTNCLEVBQThCRSxDQUE5Qjs7QUFFQUMsT0FBSWIsQ0FBSixFQUFPQyxFQUFQLEVBQVdDLEVBQVgsRUFBZVEsQ0FBZixFQUFrQixDQUFsQixFQUFxQkUsQ0FBckIsRUFBd0JOLENBQXhCLEVBQTJCQyxFQUEzQixFQUErQkMsRUFBL0I7QUFDQTtBQUNELEVBL0JEO0FBZ0NBIiwiZmlsZSI6ImVicy5qcyIsInNvdXJjZXNDb250ZW50IjpbIi8qKlxuICogQ29tcHV0ZXMgcG93KGEsIGIpIHVzaW5nIGV4cG9uZW50aWF0aW9uIGJ5IHNxdWFyaW5nLlxuICpcbiAqICpjb3VsZCBhZGQgYW4gYWRkaXRpb25hbCBiYXNlIGNhc2UgZm9yIGIgPSAxKlxuICpcbiAqL1xuXG5leHBvcnQgZnVuY3Rpb24gX19lYnNfXyAoYWxsb2MsIGlzemVybywgc2V0b25lLCBpc2V2ZW4sIGRpdjIsIG1pbnVzMSkge1xuXG5cdHZhciBlYnMgPSBmdW5jdGlvbiAoYSwgYWksIGFqLCBiLCBiaSwgYmosIGMsIGNpLCBjaikge1xuXG5cdFx0dmFyIHQsIHUsIG0sIG47XG5cblx0XHRpZiAoIGlzemVybyhiLCBiaSwgYmopICkge1xuXHRcdFx0c2V0b25lKGMsIGNpLCBjaik7XG5cdFx0fVxuXHRcdGVsc2UgaWYgKCBpc2V2ZW4oYiwgYmksIGJqKSApIHtcblx0XHRcdG0gPSBiaiAtIGJpO1xuXHRcdFx0dCA9IGFsbG9jKG0pO1xuXHRcdFx0dCA9IGRpdjIoYiwgYmksIGJqLCB0LCAwLCBtKTtcblxuXHRcdFx0biA9IGNqIC0gY2k7XG5cdFx0XHR1ID0gYWxsb2Mobik7XG5cblx0XHRcdGVicyhhLCBhaSwgYWosIHQsIDAsIG0sIHUsIDAsIG4pO1xuXG5cdFx0XHRtdWwodSwgMCwgbiwgdSwgMCwgbiwgYywgY2ksIGNqKTtcblx0XHR9XG5cdFx0ZWxzZXtcblx0XHRcdG0gPSBiaiAtIGJpO1xuXHRcdFx0dCA9IGFsbG9jKG0pO1xuXHRcdFx0dCA9IG1pbnVzMShiLCBiaSwgYmosIHQsIDAsIG0pO1xuXG5cdFx0XHRuID0gY2ogLSBjaTtcblx0XHRcdHUgPSBhbGxvYyhuKTtcblxuXHRcdFx0ZWJzKGEsIGFpLCBhaiwgdCwgMCwgbSwgdSwgMCwgbik7XG5cblx0XHRcdG11bChhLCBhaSwgYWosIHUsIDAsIG4sIGMsIGNpLCBjaik7XG5cdFx0fVxuXHR9O1xufVxuIl19