The clamp(v,a,b) function wraps v around the interval [a,b).
However prior to this commit, `clamp` was ignoring the third argument
and using the second argument again in its place. This resulted in a
division by zero. Hence `clamp` didn't work at all.
Even if the arguments were treated correctly, `clamp` incorrectly
multiplied rather than added whenever v < a. This would have produced
bogus results. (Thanks to Shona McNeill for pointing this out.)
Note that as implemented, `clamp` is undefined for b >= a.
These errors are present in the last upstream C version, v2.7.
They've been corrected in the C++ version that upstream now maintains
instead.
Thanks-to: Shona McNeill <prufrax@googlemail.com>
FS-7070 #resolve
err = exprEvalNode(obj, nodes->data.function.nodes, 1, &d1);
if (!err)
- err = exprEvalNode(obj, nodes->data.function.nodes, 1, &d2);
+ err = exprEvalNode(obj, nodes->data.function.nodes, 2, &d2);
if (!err) {
EXPR_RESET_ERR();
EXPR_CHECK_ERR();
if (tmp < 0.0)
- *val = tmp * d2;
+ *val = tmp + d2;
else
*val = tmp + d1;
} else