From 654ba2975793608dfa5588bddca775d24779f17c Mon Sep 17 00:00:00 2001 From: Johannes Hofmann Date: Mon, 18 Dec 2006 17:35:10 +0100 Subject: 400% speedup by using maxima's optimize() --- src/expr2c.mac | 20 ++++++++++++++++++++ 1 file changed, 20 insertions(+) create mode 100644 src/expr2c.mac (limited to 'src/expr2c.mac') diff --git a/src/expr2c.mac b/src/expr2c.mac new file mode 100644 index 0000000..dba5987 --- /dev/null +++ b/src/expr2c.mac @@ -0,0 +1,20 @@ +printdecl(vars) := ( + sprint("double", first(vars)), + for v in rest(vars) do sprint(",", v), + sprint(";"))$ + +printdef(expr) := sprint(first(expr), "=", second(expr), ";")$ + +block2c(expr) := + if ?equal(op(expr), block) then ( + printdecl(first(expr)), + for d in reverse(rest(reverse(rest(expr)))) do printdef(d), + sprint("return", string(last(expr)), ";}", " +")) + else + sprint("return", string(expr), ";}", " +")$ + +expr2c(funcname, args, expr) := ( + sprint("double", funcname, "(", args, ") {"), + block2c(subst(pow, "^", optimize(expr))))$ -- cgit v1.2.3