diff --git a/src/math/pievaluator.cpp b/src/math/pievaluator.cpp index f116ea24..b105bc6d 100755 --- a/src/math/pievaluator.cpp +++ b/src/math/pievaluator.cpp @@ -98,7 +98,8 @@ * * y0(x) - Bessel function second kind order 0 * * y1(x) - Bessel function second kind order 1 * * yn(x, n) - Bessel function second kind order n - * * random(s, f) - regular random number in range [s, f] + * * random(s, a) - regular random with shift s and amp a + * * randomn(s, a) - normalize random with shift s and amp a * * min(x0, x1, ...) - minimum of x0, x1, ... * * max(x0, x1, ...) - maximum of x0, x1, ... * * clamp(x, a, b) - trim x on range [a, b] @@ -123,6 +124,7 @@ PIEvaluatorContent::PIEvaluatorContent() { addFunction("arctg", 1); addFunction("arcctg", 1); addFunction("random", 2); + addFunction("randomn", 2); addFunction("sin", 1); addFunction("cos", 1); addFunction("ctg", 1); @@ -216,6 +218,7 @@ PIEvaluatorTypes::BaseFunctions PIEvaluatorContent::getBaseFunction(const PIStri if (name == "arcctg") return PIEvaluatorTypes::bfArcctg; if (name == "exp") return PIEvaluatorTypes::bfExp; if (name == "random") return PIEvaluatorTypes::bfRandom; + if (name == "randomn") return PIEvaluatorTypes::bfRandomn; if (name == "sh") return PIEvaluatorTypes::bfSh; if (name == "ch") return PIEvaluatorTypes::bfCh; if (name == "th") return PIEvaluatorTypes::bfTh; @@ -1160,10 +1163,11 @@ inline void PIEvaluator::execFunction(const PIEvaluatorTypes::Instruction & ci) tmpvars[oi].value = value(ci.operators[0]).real() > 0. ? complexd_1 : complexd_0; break; case PIEvaluatorTypes::bfRandom: - tmp = static_cast(rand()) / RAND_MAX; - stmp = value(ci.operators[1]) - value(ci.operators[0]); - tmpvars[oi].value = value(ci.operators[0]) + tmp * stmp; + tmpvars[oi].value = value(ci.operators[0]) + randomd() * value(ci.operators[1]); break; + case PIEvaluatorTypes::bfRandomn: + tmpvars[oi].value = randomn(value(ci.operators[0]).real(), value(ci.operators[1]).real()); + break; default: break; } } diff --git a/src/math/pievaluator.h b/src/math/pievaluator.h index f840b1ae..2819ce52 100755 --- a/src/math/pievaluator.h +++ b/src/math/pievaluator.h @@ -38,7 +38,8 @@ namespace PIEvaluatorTypes { }; enum BaseFunctions {bfUnknown, bfSin, bfCos, bfTg, bfCtg, bfArcsin, bfArccos, bfArctg, bfArcctg, - bfExp, bfRandom, bfSh, bfCh, bfTh, bfCth, + bfExp, bfRandom, bfRandomn, + bfSh, bfCh, bfTh, bfCth, bfSqrt, bfSqr, bfPow, bfAbs, bfLn, bfLg, bfLog, bfSign, bfIm, bfRe, bfArg, bfLen, bfConj,