shunting-yard-arbitrary-precision
v2.5.0
Published
Mathematical expression parser with arbitrary precision support
Downloads
3
Readme
shunting-yard-arbitrary-precision
Arbitrary precision support on top of javascript-shunting-yard, a mathematical expression parser.
Install
npm i shunting-yard-arbitrary-precision
Usage
const shunt = require('shunting-yard-arbitrary-precision');
Number(shunt('3+2')); //=> 5
// all following results are returned as Decimal
// with the floating adapter by default
shunt('3+2'); //=> 5 (as Decimal)
shunt('(10+5)/5'); //=> 3
shunt('3+(5*2)*(-3+2)'); //=> -7
shunt('2^3'); //=> 8
const decimalFactory = require('arbitrary-precision');
const Decimal = decimalFactory(require('bigjs-adapter'));
shunt('0.1+0.2', {Decimal: Decimal}); //=> 0.3
let context = new shunt.Context();
context.def('abs');
shunt('2*abs(-3)', {context: context}); //=> 6
context.def('tau', 2 * Math.PI);
shunt('3*tau', {context: context}); //=> 18.84955592153876
context.def('javier', a => a * 1.618);
shunt('javier(21)', {context: context}); //=> 33.978
Example with Ramda:
const R = require('ramda');
const curriedShunt = R.curryN(2, shunt);
const myShunt = curriedShunt(R.__, {Decimal: Decimal, context: context});
myShunt('javier(abs(-3))*.2'); //=> 0.9708
shunt('(1.618*3)*.2'); //=> 0.9708000000000001
See live example.
See spec.