nerdamer-ts
Version:
javascript light-weight symbolic math expression evaluator
41 lines • 1.75 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.pfactor = void 0;
const Symbol_1 = require("../../../Types/Symbol");
const Utils_1 = require("../../../Core/Utils");
const Math2_1 = require("../../Math2");
const Frac_1 = require("../../../Types/Frac");
const index_1 = require("../index");
const Parser_1 = require("../../../Parser/Parser");
function pfactor(symbol) {
//Fix issue #458 | nerdamer("sqrt(1-(3.3333333550520926e-7)^2)").evaluate().text()
//More Big Number issues >:(
if (symbol.greaterThan(9.999999999998891e+41) || symbol.equals(-1))
return symbol;
//Fix issue #298
if (symbol.equals(Math.PI))
return new Symbol_1.Symbol(Math.PI);
//evaluate the symbol to merge constants
symbol = (0, Parser_1.evaluate)(symbol.clone());
if (symbol.isConstant()) {
var retval = new Symbol_1.Symbol(1);
var m = symbol.toString();
if ((0, Utils_1.isInt)(m)) {
var factors = Math2_1.Math2.ifactor(m);
for (var factor in factors) {
var p = factors[factor];
retval = (0, index_1.multiply)(retval, (0, Symbol_1.symfunction)('parens', [new Symbol_1.Symbol(factor).setPower(new Frac_1.Frac(p))]));
}
}
else {
var n = pfactor(new Symbol_1.Symbol(symbol.multiplier.num));
var d = pfactor(new Symbol_1.Symbol(symbol.multiplier.den));
retval = (0, index_1.multiply)((0, Symbol_1.symfunction)('parens', [n]), (0, Symbol_1.symfunction)('parens', [d]).invert());
}
}
else
retval = (0, Symbol_1.symfunction)('pfactor', arguments);
return retval;
}
exports.pfactor = pfactor;
//# sourceMappingURL=pfactor.js.map