Library globals

Source math.nas

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49
var abs = func(n) { n < 0 ? -n : n }

var sgn = func(x) { x < 0 ? -1 : x > 0 }

var max = func(x) {
    var n = x;
    for (var i = 0; i < size(arg); i += 1) {
        if (arg[i] > n) n = arg[i];
    }
    return n;
}

var min = func(x) {
    var n = x;
    for (var i = 0; i < size(arg); i += 1) {
        if (arg[i] < n) n = arg[i];
    }
    return n;
}

var avg = func {
    var x = 0;
    for (var i = 0; i < size(arg); i += 1) {
        x += arg[i];
    }
    x /= size(arg);
    return x;
}

# this follows std::clamp for argument order, as opposed to
# qBound which uses (min, value, max)
var clamp = func(value, min, max) {
  return (value < min) ? min : (value > max) ? max : value;
}

# note - mathlib defines an fmod function (added after this was written)
# It uses C-library fmod(), which has different rounding behaviour to
# this code (eg, fmod(-5, 4) gives -1, whereas this code gives 3)
var mod = func(n, m) {
    var x = n - m * int(n/m);      # int() truncates to zero, not -Inf
    return x < 0 ? x + abs(m) : x; # ...so must handle negative n's
}

var _iln10 = 1/ln(10);
var log10 = func(x) { ln(x) * _iln10 }

var approx_eq = func (a,b, d = 0.000001) {
    return (abs(a-b) < d);
}