Averages/Simple moving average: Difference between revisions

m
No edit summary
m (→‎{{header|Sidef}}: code fixes)
Line 3,127:
=={{header|Sidef}}==
Closure:
<lang ruby>func simple_moving_average(sizeperiod) {
var nums = [];
var sum = 0;
 
var numslist = [];
func (hello) {
nums.append(hello)var sum = 0;
 
var goodbye = (nums.len > size ? nums.shift : 0);
sum +=func (hellonumber) - goodbye);{
sum / nums list.lengthappend(number);
var sum += 0number;
}.copy;
list.len > period && (
sum -= list.shift;
);
return (sum / list.length);
}.copy;
}
 
Line 3,142 ⟶ 3,145:
var ma5 = simple_moving_average(5);
 
[(1 .upto(.^ 5).to_a..., +( 5 ^.downto(. 1 ).to_a...].reverse -> each {|num|
printf("Next number = %d, SMA_3 = %.3f, SMA_5 = %.1f\n",
num, ma3.call(num), ma5.call(num));
Line 3,150 ⟶ 3,153:
<lang ruby>class sma_generator(period) {
 
__CLASS__def += (:list => []);
__CLASS__def += (:sum => 0);
 
method SMA(number) {
self[:.list].append(number);
self.sum(self[:sum] += number);
self[:.list].len > self[:.period] && (
self.sum(self[:sum] -= self[:.list].shift);
);
return (self[:.sum] / self[:.list].len);
}
}
Line 3,166 ⟶ 3,169:
var ma5 = sma_generator(5);
 
[(1 .upto(.^ 5).to_a..., +( 5 ^.downto(. 1 ).to_a...].reverse -> each {|num|
printf("Next number = %d, SMA_3 = %.3f, SMA_5 = %.1f\n",
num, ma3.SMA(num), ma5.SMA(num));
2,747

edits