aureooms-js-integer
Version:
integer code bricks for JavaScript
47 lines (36 loc) • 4.19 kB
JavaScript
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
;