Fix mod_expr `clamp` function
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
This commit is contained in:
parent
d88bae1a62
commit
65e678ba1d
|
@ -763,7 +763,7 @@ case EXPR_NODEFUNC_CLAMP:
|
|||
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();
|
||||
|
@ -771,7 +771,7 @@ case EXPR_NODEFUNC_CLAMP:
|
|||
EXPR_CHECK_ERR();
|
||||
|
||||
if (tmp < 0.0)
|
||||
*val = tmp * d2;
|
||||
*val = tmp + d2;
|
||||
else
|
||||
*val = tmp + d1;
|
||||
} else
|
||||
|
|
Loading…
Reference in New Issue