UNPKG

@okxweb3/coin-stellar

Version:

@okxweb3/coin-stellar is a Stellar SDK for building Web3 wallets and applications. It supports Stellar and PI blockchains, enabling private key management, address generation, transaction signing, trustline creation, and asset transfers

43 lines 1.44 kB
"use strict"; var __importDefault = (this && this.__importDefault) || function (mod) { return (mod && mod.__esModule) ? mod : { "default": mod }; }; Object.defineProperty(exports, "__esModule", { value: true }); exports.best_r = void 0; const bignumber_1 = __importDefault(require("./bignumber")); const MAX_INT = ((1 << 31) >>> 0) - 1; function best_r(rawNumber) { let number = new bignumber_1.default(rawNumber); let a; let f; const fractions = [ [new bignumber_1.default(0), new bignumber_1.default(1)], [new bignumber_1.default(1), new bignumber_1.default(0)] ]; let i = 2; while (true) { if (number.gt(MAX_INT)) { break; } a = number.integerValue(bignumber_1.default.ROUND_FLOOR); f = number.minus(a); const h = a.times(fractions[i - 1][0]).plus(fractions[i - 2][0]); const k = a.times(fractions[i - 1][1]).plus(fractions[i - 2][1]); if (h.gt(MAX_INT) || k.gt(MAX_INT)) { break; } fractions.push([h, k]); if (f.eq(0)) { break; } number = new bignumber_1.default(1).div(f); i += 1; } const [n, d] = fractions[fractions.length - 1]; if (n.isZero() || d.isZero()) { throw new Error("Couldn't find approximation"); } return [n.toNumber(), d.toNumber()]; } exports.best_r = best_r; //# sourceMappingURL=continued_fraction.js.map