@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
JavaScript
;
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