Phi: nicer scroll animation for METAR widget
[fg:fgdata.git] / Nasal / math.nas
1 var abs = func(n) { n < 0 ? -n : n }
2
3 var sgn = func(x) { x < 0 ? -1 : x > 0 }
4
5 var max = func(x) {
6     var n = x;
7     for (var i = 0; i < size(arg); i += 1) {
8         if (arg[i] > n) n = arg[i];
9     }
10     return n;
11 }
12
13 var min = func(x) {
14     var n = x;
15     for (var i = 0; i < size(arg); i += 1) {
16         if (arg[i] < n) n = arg[i];
17     }
18     return n;
19 }
20
21 var avg = func {
22     var x = 0;
23     for (var i = 0; i < size(arg); i += 1) {
24         x += arg[i];
25     }
26     x /= size(arg);
27     return x;
28 }
29
30 # note - mathlib defines an fmod function (added after this was written)
31 # It uses C-library fmod(), which has different rounding behaviour to
32 # this code (eg, fmod(-5, 4) gives -1, whereas this code gives 3)
33 var mod = func(n, m) {
34     var x = n - m * int(n/m);      # int() truncates to zero, not -Inf
35     return x < 0 ? x + abs(m) : x; # ...so must handle negative n's
36 }
37
38 var _iln10 = 1/ln(10);
39 var log10 = func(x) { ln(x) * _iln10 }