Averages/Simple moving average: Difference between revisions
Content added Content deleted
m (→{{header|Ring}}: fixed a typo.) |
|||
Line 3,588: | Line 3,588: | ||
num, ma3 << num, ma5 <<num |
num, ma3 << num, ma5 <<num |
||
end</lang> |
end</lang> |
||
=={{header|Rust}}== |
|||
===Vector Based=== |
|||
<lang rust>struct SimpleMovingAverage { |
|||
period: usize, |
|||
numbers: Vec<usize> |
|||
} |
|||
impl SimpleMovingAverage { |
|||
fn new(p: usize) -> SimpleMovingAverage { |
|||
SimpleMovingAverage { |
|||
period: p, |
|||
numbers: Vec::new() |
|||
} |
|||
} |
|||
fn add_number(&mut self, number: usize) -> f64 { |
|||
self.numbers.push(number); |
|||
if self.numbers.len() > self.period { |
|||
self.numbers.remove(0); |
|||
} |
|||
if self.numbers.is_empty() { |
|||
return 0f64; |
|||
}else { |
|||
let sum = self.numbers.iter().fold(0, |acc, x| acc+x); |
|||
return sum as f64 / self.numbers.len() as f64; |
|||
} |
|||
} |
|||
} |
|||
fn main() { |
|||
for period in [3, 5].iter() { |
|||
println!("Moving average with period {}", period); |
|||
let mut sma = SimpleMovingAverage::new(*period); |
|||
for i in [1, 2, 3, 4, 5, 5, 4, 3, 2, 1].iter() { |
|||
println!("Number: {} | Average: {}", i, sma.add_number(*i)); |
|||
} |
|||
} |
|||
}</lang> |
|||
<pre>Moving average with period 3 |
|||
Number: 1 | Average: 1 |
|||
Number: 2 | Average: 1.5 |
|||
Number: 3 | Average: 2 |
|||
Number: 4 | Average: 3 |
|||
Number: 5 | Average: 4 |
|||
Number: 5 | Average: 4.666666666666667 |
|||
Number: 4 | Average: 4.666666666666667 |
|||
Number: 3 | Average: 4 |
|||
Number: 2 | Average: 3 |
|||
Number: 1 | Average: 2 |
|||
Moving average with period 5 |
|||
Number: 1 | Average: 1 |
|||
Number: 2 | Average: 1.5 |
|||
Number: 3 | Average: 2 |
|||
Number: 4 | Average: 2.5 |
|||
Number: 5 | Average: 3 |
|||
Number: 5 | Average: 3.8 |
|||
Number: 4 | Average: 4.2 |
|||
Number: 3 | Average: 4.2 |
|||
Number: 2 | Average: 3.8 |
|||
Number: 1 | Average: 3 |
|||
</pre> |
|||
=={{header|Run Basic}}== |
=={{header|Run Basic}}== |
||
<lang runbasic>data 1,2,3,4,5,5,4,3,2,1 |
<lang runbasic>data 1,2,3,4,5,5,4,3,2,1 |