diff options
author | Johannes Hofmann <Johannes.Hofmann@gmx.de> | 2006-12-18 17:35:10 +0100 |
---|---|---|
committer | Johannes Hofmann <Johannes.Hofmann@gmx.de> | 2006-12-18 17:35:10 +0100 |
commit | 654ba2975793608dfa5588bddca775d24779f17c (patch) | |
tree | 40365569feb4acb00885313389fbda13b3cfa2fd /src/expr2c.mac | |
parent | c7286f257ec637f2d67e4b4a2bd1d70b4aff0116 (diff) |
400% speedup by using maxima's optimize()
Diffstat (limited to 'src/expr2c.mac')
-rw-r--r-- | src/expr2c.mac | 20 |
1 files changed, 20 insertions, 0 deletions
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))))$ |