JSFiddle - React, Tailwind, and code Playground
by magneto903
HTML
<script src="https://cdnjs.cloudflare.com/ajax/libs/mathjs/8.1.0/math.js" integrity="sha512-ne87j5uORxbrU7+bsqeJJWfWj5in65R9PCjaQL161xtH5cesZgULVbeVAkzAAN7hnYOcrHeBas9Wbd/Lm8gXFA==" crossorigin="anonymous"></script>
JavaScript
var parser = math.parser()
//console.log(math.parse("2+2").toString())
var compiled_func = math.compile("sin(cos(x^2))").evaluate
var js_func = function(x) {
return Math.sin(Math.cos(Math.pow(x, 2)))
}
var s_time = performance.now()
var test_val = 0;
for (var i=0; i < 1000000; i++) {
test_val = js_func(Math.random())
}
document.write("Native js func: " + (performance.now()-s_time).toFixed(2)+'ms <br>')
var s_time = performance.now()
var test_val = 0;
for (var i=0; i < 1000000; i++) {
test_val = compiled_func({"x":Math.random()})
}
document.write("Compiled to js func: " + (performance.now()-s_time).toFixed(2)+'ms <br>')
var defined_func = math.evaluate("f(x) = sin(cos(x^2))")
var s_time = performance.now()
var test_val = 0;
for (var i=0; i < 1000000; i++) {
test_val = defined_func(Math.random())
}
document.write("Defined to js func: " + (performance.now()-s_time).toFixed(2)+'ms')
parser.evaluate("f1(x)=2*x")
parser.evaluate("f2(x)=x^2")
parser.evaluate("f3(x)=f1(f2(x))")
//console.log(parser.get('f3'))
math.import({
"f3": parser.get('f3')
})
var node = math.parse('f3(2)')
node.traverse(function (node, path, parent) {
switch (node.type) {
case 'OperatorNode':
console.log(node.type, node.op)
break
case 'ConstantNode':
console.log(node.type, node.value)
break
case 'SymbolNode':
console.log(node.type, node.name)
break
default:
console.log(node.type)
}
})
// outputs:
// OperatorNode +
// OperatorNode *
// ConstantNode 3
// SymbolNode x
// ConstantNode 2