Averages/Simple moving average: Difference between revisions
Content added Content deleted
Thundergnat (talk | contribs) (Rename Perl 6 -> Raku, alphabetize, minor clean-up) |
|||
Line 678: | Line 678: | ||
return 0; |
return 0; |
||
}</lang> |
}</lang> |
||
=={{header|C sharp|C#}}== |
|||
{{works with|C sharp|C#|3}} |
|||
<lang csharp>using System; |
|||
using System.Collections.Generic; |
|||
using System.Linq; |
|||
namespace SMA { |
|||
class Program { |
|||
static void Main(string[] args) { |
|||
var nums = Enumerable.Range(1, 5).Select(n => (double)n); |
|||
nums = nums.Concat(nums.Reverse()); |
|||
var sma3 = SMA(3); |
|||
var sma5 = SMA(5); |
|||
foreach (var n in nums) { |
|||
Console.WriteLine("{0} (sma3) {1,-16} (sma5) {2,-16}", n, sma3(n), sma5(n)); |
|||
} |
|||
} |
|||
static Func<double, double> SMA(int p) { |
|||
Queue<double> s = new Queue<double>(p); |
|||
return (x) => { |
|||
if (s.Count >= p) { |
|||
s.Dequeue(); |
|||
} |
|||
s.Enqueue(x); |
|||
return s.Average(); |
|||
}; |
|||
} |
|||
} |
|||
}</lang> |
|||
{{out}} |
|||
<pre> |
|||
1 (sma3) 1 (sma5) 1 |
|||
2 (sma3) 1.5 (sma5) 1.5 |
|||
3 (sma3) 2 (sma5) 2 |
|||
4 (sma3) 3 (sma5) 2.5 |
|||
5 (sma3) 4 (sma5) 3 |
|||
5 (sma3) 4.66666666666667 (sma5) 3.8 |
|||
4 (sma3) 4.66666666666667 (sma5) 4.2 |
|||
3 (sma3) 4 (sma5) 4.2 |
|||
2 (sma3) 3 (sma5) 3.8 |
|||
1 (sma3) 2 (sma5) 3 |
|||
</pre> |
|||
=={{header|C++}}== |
=={{header|C++}}== |
||
Line 783: | Line 832: | ||
} |
} |
||
</lang> |
</lang> |
||
=={{header|C sharp|C#}}== |
|||
{{works with|C sharp|C#|3}} |
|||
<lang csharp>using System; |
|||
using System.Collections.Generic; |
|||
using System.Linq; |
|||
namespace SMA { |
|||
class Program { |
|||
static void Main(string[] args) { |
|||
var nums = Enumerable.Range(1, 5).Select(n => (double)n); |
|||
nums = nums.Concat(nums.Reverse()); |
|||
var sma3 = SMA(3); |
|||
var sma5 = SMA(5); |
|||
foreach (var n in nums) { |
|||
Console.WriteLine("{0} (sma3) {1,-16} (sma5) {2,-16}", n, sma3(n), sma5(n)); |
|||
} |
|||
} |
|||
static Func<double, double> SMA(int p) { |
|||
Queue<double> s = new Queue<double>(p); |
|||
return (x) => { |
|||
if (s.Count >= p) { |
|||
s.Dequeue(); |
|||
} |
|||
s.Enqueue(x); |
|||
return s.Average(); |
|||
}; |
|||
} |
|||
} |
|||
}</lang> |
|||
{{out}} |
|||
<pre> |
|||
1 (sma3) 1 (sma5) 1 |
|||
2 (sma3) 1.5 (sma5) 1.5 |
|||
3 (sma3) 2 (sma5) 2 |
|||
4 (sma3) 3 (sma5) 2.5 |
|||
5 (sma3) 4 (sma5) 3 |
|||
5 (sma3) 4.66666666666667 (sma5) 3.8 |
|||
4 (sma3) 4.66666666666667 (sma5) 4.2 |
|||
3 (sma3) 4 (sma5) 4.2 |
|||
2 (sma3) 3 (sma5) 3.8 |
|||
1 (sma3) 2 (sma5) 3 |
|||
</pre> |
|||
=={{header|Clojure}}== |
=={{header|Clojure}}== |
||
Line 1,715: | Line 1,715: | ||
f(2); # 3 |
f(2); # 3 |
||
f(1); # 2</lang> |
f(1); # 2</lang> |
||
=={{header|Go}}== |
=={{header|Go}}== |
||
<lang go>package main |
<lang go>package main |
||
Line 2,358: | Line 2,359: | ||
end function |
end function |
||
</lang> |
</lang> |
||
=={{header|Logo}}== |
=={{header|Logo}}== |
||
Although Logo does not support closures, some varieties of Logo support enough metaprogramming to accomplish this task. |
Although Logo does not support closures, some varieties of Logo support enough metaprogramming to accomplish this task. |
||
Line 2,510: | Line 2,510: | ||
num: 41 sma3: 62.333333 sma5: 47 |
num: 41 sma3: 62.333333 sma5: 47 |
||
num: 94 sma3: 61 sma5: 64.2</pre> |
num: 94 sma3: 61 sma5: 64.2</pre> |
||
=={{header|NetRexx}}== |
=={{header|NetRexx}}== |
||
Line 3,118: | Line 3,117: | ||
n->if(sma_i++>#sma_v,sma_v[sma_i=1]=n;0,sma_v[sma_i]=n;0)+sum(i=1,#sma_v,sma_v[i])/#sma_v |
n->if(sma_i++>#sma_v,sma_v[sma_i=1]=n;0,sma_v[sma_i]=n;0)+sum(i=1,#sma_v,sma_v[i])/#sma_v |
||
};</lang> |
};</lang> |
||
=={{header|Pascal}}== |
=={{header|Pascal}}== |
||
{{works with|Free Pascal}} |
{{works with|Free Pascal}} |
||
Line 3,215: | Line 3,215: | ||
real 0m0.780s { 64-Bit }</pre> |
real 0m0.780s { 64-Bit }</pre> |
||
=={{header|Perl}}== |
=={{header|Perl}}== |
||
Line 3,242: | Line 3,243: | ||
append 1 --> sma = 1.00 (with period 3) |
append 1 --> sma = 1.00 (with period 3) |
||
append 2 --> sma = 1.50 (with period 3) |
append 2 --> sma = 1.50 (with period 3) |
||
append 3 --> sma = 2.00 (with period 3) |
|||
append 2 --> sma = 2.33 (with period 3) |
|||
append 7 --> sma = 4.00 (with period 3) |
|||
</pre> |
|||
=={{header|Perl 6}}== |
|||
{{works with|Rakudo|2016.08}} |
|||
<lang perl6>sub sma-generator (Int $P where * > 0) { |
|||
sub ($x) { |
|||
state @a = 0 xx $P; |
|||
@a.push($x).shift; |
|||
@a.sum / $P; |
|||
} |
|||
} |
|||
# Usage: |
|||
my &sma = sma-generator 3; |
|||
for 1, 2, 3, 2, 7 { |
|||
printf "append $_ --> sma = %.2f (with period 3)\n", sma $_; |
|||
}</lang> |
|||
{{out}} |
|||
<pre> |
|||
append 1 --> sma = 0.33 (with period 3) |
|||
append 2 --> sma = 1.00 (with period 3) |
|||
append 3 --> sma = 2.00 (with period 3) |
append 3 --> sma = 2.00 (with period 3) |
||
append 2 --> sma = 2.33 (with period 3) |
append 2 --> sma = 2.33 (with period 3) |
||
Line 3,685: | Line 3,659: | ||
(values (sma3 i) (sma5 i))) |
(values (sma3 i) (sma5 i))) |
||
</lang> |
</lang> |
||
=={{header|Raku}}== |
|||
(formerly Perl 6) |
|||
{{works with|Rakudo|2016.08}} |
|||
<lang perl6>sub sma-generator (Int $P where * > 0) { |
|||
sub ($x) { |
|||
state @a = 0 xx $P; |
|||
@a.push($x).shift; |
|||
@a.sum / $P; |
|||
} |
|||
} |
|||
# Usage: |
|||
my &sma = sma-generator 3; |
|||
for 1, 2, 3, 2, 7 { |
|||
printf "append $_ --> sma = %.2f (with period 3)\n", sma $_; |
|||
}</lang> |
|||
{{out}} |
|||
<pre> |
|||
append 1 --> sma = 0.33 (with period 3) |
|||
append 2 --> sma = 1.00 (with period 3) |
|||
append 3 --> sma = 2.00 (with period 3) |
|||
append 2 --> sma = 2.33 (with period 3) |
|||
append 7 --> sma = 4.00 (with period 3) |
|||
</pre> |
|||
=={{header|REXX}}== |
=={{header|REXX}}== |
||
Line 3,950: | Line 3,952: | ||
num, ma3 << num, ma5 <<num |
num, ma3 << num, ma5 <<num |
||
end</lang> |
end</lang> |
||
=={{header|Run Basic}}== |
|||
<lang runbasic>data 1,2,3,4,5,5,4,3,2,1 |
|||
dim sd(10) ' series data |
|||
global sd ' make it global so we all see it |
|||
for i = 1 to 10:read sd(i): next i |
|||
x = sma(3) ' simple moving average for 3 periods |
|||
x = sma(5) ' simple moving average for 5 periods |
|||
function sma(p) ' the simple moving average function |
|||
print "----- SMA:";p;" -----" |
|||
for i = 1 to 10 |
|||
sumSd = 0 |
|||
for j = max((i - p) + 1,1) to i |
|||
sumSd = sumSd + sd(j) ' sum series data for the period |
|||
next j |
|||
if p > i then p1 = i else p1 = p |
|||
print sd(i);" sma:";p;" ";sumSd / p1 |
|||
next i |
|||
end function</lang> |
|||
<pre>----- SMA:3 ----- |
|||
1 sma:3 1 |
|||
2 sma:3 1.5 |
|||
3 sma:3 2 |
|||
4 sma:3 3 |
|||
5 sma:3 4 |
|||
5 sma:3 4.6666665 |
|||
4 sma:3 4.6666665 |
|||
3 sma:3 4 |
|||
2 sma:3 3 |
|||
1 sma:3 2 |
|||
----- SMA:5 ----- |
|||
1 sma:5 1 |
|||
2 sma:5 1.5 |
|||
3 sma:5 2 |
|||
4 sma:5 2.5 |
|||
5 sma:5 3 |
|||
5 sma:5 3.79999995 |
|||
4 sma:5 4.1999998 |
|||
3 sma:5 4.1999998 |
|||
2 sma:5 3.79999995 |
|||
1 sma:5 3</pre> |
|||
=={{header|Rust}}== |
=={{header|Rust}}== |
||
===Vector Based=== |
===Vector Based=== |
||
Line 4,058: | Line 4,104: | ||
Number: 1 | Average: 3 |
Number: 1 | Average: 3 |
||
</pre> |
</pre> |
||
=={{header|Run Basic}}== |
|||
<lang runbasic>data 1,2,3,4,5,5,4,3,2,1 |
|||
dim sd(10) ' series data |
|||
global sd ' make it global so we all see it |
|||
for i = 1 to 10:read sd(i): next i |
|||
x = sma(3) ' simple moving average for 3 periods |
|||
x = sma(5) ' simple moving average for 5 periods |
|||
function sma(p) ' the simple moving average function |
|||
print "----- SMA:";p;" -----" |
|||
for i = 1 to 10 |
|||
sumSd = 0 |
|||
for j = max((i - p) + 1,1) to i |
|||
sumSd = sumSd + sd(j) ' sum series data for the period |
|||
next j |
|||
if p > i then p1 = i else p1 = p |
|||
print sd(i);" sma:";p;" ";sumSd / p1 |
|||
next i |
|||
end function</lang> |
|||
<pre>----- SMA:3 ----- |
|||
1 sma:3 1 |
|||
2 sma:3 1.5 |
|||
3 sma:3 2 |
|||
4 sma:3 3 |
|||
5 sma:3 4 |
|||
5 sma:3 4.6666665 |
|||
4 sma:3 4.6666665 |
|||
3 sma:3 4 |
|||
2 sma:3 3 |
|||
1 sma:3 2 |
|||
----- SMA:5 ----- |
|||
1 sma:5 1 |
|||
2 sma:5 1.5 |
|||
3 sma:5 2 |
|||
4 sma:5 2.5 |
|||
5 sma:5 3 |
|||
5 sma:5 3.79999995 |
|||
4 sma:5 4.1999998 |
|||
3 sma:5 4.1999998 |
|||
2 sma:5 3.79999995 |
|||
1 sma:5 3</pre> |
|||
=={{header|Scala}}== |
=={{header|Scala}}== |
||
Line 4,162: | Line 4,165: | ||
(1 3/2 2 3 4 14/3 14/3 4 3 2) |
(1 3/2 2 3 4 14/3 14/3 4 3 2) |
||
</pre> |
</pre> |
||
=={{header|Sidef}}== |
=={{header|Sidef}}== |
||
Line 4,480: | Line 4,482: | ||
9 3,00000 3,80000 |
9 3,00000 3,80000 |
||
10 2,00000 3,00000</pre> |
10 2,00000 3,00000</pre> |
||
=={{header|VBScript}}== |
=={{header|VBScript}}== |
||
<lang vb>data = "1,2,3,4,5,5,4,3,2,1" |
<lang vb>data = "1,2,3,4,5,5,4,3,2,1" |