]> git.sesse.net Git - videoredirector/blob - Mirror/Math.pm
Initial commit.
[videoredirector] / Mirror / Math.pm
1 package Mirror::Math;
2
3 use strict;
4 use warnings;
5 use POSIX;
6
7 sub stddev {
8     my @elems = @_;
9     my ($avg, $var) = (0, 0);
10
11     return 0 if (scalar(@elems) == 1);
12
13     for (@elems) {
14         $avg += $_;
15     }
16     $avg /= scalar(@elems);
17
18     for (@elems) {
19         $var += ($_-$avg)**2;
20     }
21     $var /= scalar(@elems)-1;
22
23     return sqrt($var);
24 }
25
26 sub iquartile(@) {
27     my @elems = @_;
28     my ($lower, $upper) = (0.25 * $#elems, 0.75 * $#elems);
29
30     $lower = POSIX::ceil($lower);
31     $upper = POSIX::ceil($upper);
32
33     return @elems[$lower..$upper];
34 }
35
36 1;