diff options
Diffstat (limited to 'src/lib/netlist')
-rw-r--r-- | src/lib/netlist/plib/pfunction.cpp | 7 | ||||
-rw-r--r-- | src/lib/netlist/plib/pfunction.h | 1 |
2 files changed, 8 insertions, 0 deletions
diff --git a/src/lib/netlist/plib/pfunction.cpp b/src/lib/netlist/plib/pfunction.cpp index c369dc2ed90..42f767ef562 100644 --- a/src/lib/netlist/plib/pfunction.cpp +++ b/src/lib/netlist/plib/pfunction.cpp @@ -12,6 +12,7 @@ #include <cmath> #include <stack> +#include <stdlib.h> namespace plib { @@ -37,6 +38,7 @@ void pfunction::compile_postfix(const std::vector<pstring> &inputs, for (const pstring &cmd : cmds) { + printf("%s %d\n", cmd.c_str(), stk); rpn_inst rc; if (cmd == "+") { rc.m_cmd = ADD; stk -= 1; } @@ -52,6 +54,8 @@ void pfunction::compile_postfix(const std::vector<pstring> &inputs, { rc.m_cmd = SIN; stk -= 0; } else if (cmd == "cos") { rc.m_cmd = COS; stk -= 0; } + else if (cmd == "rand") + { rc.m_cmd = RAND; stk += 1; } else { for (unsigned i = 0; i < inputs.size(); i++) @@ -199,6 +203,9 @@ double pfunction::evaluate(const std::vector<double> &values) OP(POW, 1, std::pow(ST2, ST1)) OP(SIN, 0, std::sin(ST2)); OP(COS, 0, std::cos(ST2)); + case RAND: + stack[ptr++] = static_cast<double>(rand()) / static_cast<double>(RAND_MAX); + break; case PUSH_INPUT: stack[ptr++] = values[static_cast<unsigned>(rc.m_param)]; break; diff --git a/src/lib/netlist/plib/pfunction.h b/src/lib/netlist/plib/pfunction.h index 0e24a633f3b..50e279cf034 100644 --- a/src/lib/netlist/plib/pfunction.h +++ b/src/lib/netlist/plib/pfunction.h @@ -32,6 +32,7 @@ namespace plib { POW, SIN, COS, + RAND, /* random number between 0 and 1 */ PUSH_CONST, PUSH_INPUT }; |