Skip to content

Commit a99a734

Browse files
author
Kendrick Ledet
committed
Merge pull request kennyledet#444 from Wayfur/master
Implementation of Average in Haxe
2 parents 95cb49a + 10b33cf commit a99a734

1 file changed

Lines changed: 113 additions & 0 deletions

File tree

Average/Haxe/Wayfur/Average.hx

Lines changed: 113 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,113 @@
1+
package;
2+
3+
/**
4+
* A Haxe implementation of various averages or means
5+
*
6+
* @author Tyler Pond AKA Wayfur
7+
*/
8+
class Average
9+
{
10+
public function new():Void{}
11+
12+
public function arithmeticMean(arr:Array<Float>):Float
13+
{
14+
var sum:Float = 0;
15+
for (num in arr)
16+
{
17+
sum += num;
18+
}
19+
return sum / arr.length;
20+
}
21+
22+
public function geometricMean(arr:Array<Float>):Float
23+
{
24+
var product:Float = 1;
25+
for (num in arr)
26+
{
27+
product *= num;
28+
}
29+
return Math.pow(product, (1 / arr.length));
30+
}
31+
32+
public function harmonicMean(arr:Array<Float>):Float
33+
{
34+
var sum:Float = 0;
35+
for (num in arr)
36+
{
37+
sum += (1 / num);
38+
}
39+
return arr.length / sum;
40+
}
41+
42+
public function quadraticMean(arr:Array<Float>):Float
43+
{
44+
var sum:Float = 0;
45+
for (num in arr)
46+
{
47+
sum += num * num;
48+
}
49+
return Math.sqrt(sum / arr.length);
50+
}
51+
52+
public function powerMean(arr:Array<Float>, power:Float):Float
53+
{
54+
var sum:Float = 0;
55+
for (num in arr)
56+
{
57+
sum += Math.pow(num, power);
58+
}
59+
return Math.pow(((1 / arr.length) * sum), (1 / power));
60+
}
61+
62+
public function weightedMean(arr:Array<Float>, weights:Array<Float>):Float
63+
{
64+
if (arr.length != weights.length)
65+
{
66+
throw "values and weights lengths are not equal";
67+
}
68+
else
69+
{
70+
var weighted:Float = 0;
71+
var sum:Float = 0;
72+
for (i in 0...arr.length)
73+
{
74+
weighted += arr[i] * weights[i];
75+
sum += weights[i];
76+
}
77+
return weighted / sum;
78+
}
79+
}
80+
81+
public function midrangeMean(arr:Array<Float>):Float
82+
{
83+
var min:Float = 0;
84+
var max:Float = 0;
85+
for (num in arr)
86+
{
87+
if (num > max)
88+
max = num;
89+
}
90+
min = max;
91+
for (num in arr)
92+
{
93+
if (num < min)
94+
min = num;
95+
}
96+
return 0.5 * (max + min);
97+
}
98+
99+
public function energaticMean(arr:Array<Float>):Float
100+
{
101+
var sum:Float = 0;
102+
for (num in arr)
103+
{
104+
sum += Math.pow(10, num / 10);
105+
}
106+
return 10 * log(1 / arr.length * sum, 10);
107+
}
108+
109+
private function log(a:Float, b:Float):Float
110+
{
111+
return Math.log(a) / Math.log(b);
112+
}
113+
}

0 commit comments

Comments
 (0)