RosettaCodeData/Task/Cumulative-standard-deviation/Rust/cumulative-standard-deviati...

21 lines
416 B
Plaintext

fn sd_creator() -> impl FnMut(f64) -> f64 {
let mut n = 0.0;
let mut sum = 0.0;
let mut sum_sq = 0.0;
move |x| {
sum += x;
sum_sq += x*x;
n += 1.0;
(sum_sq / n - sum * sum / n / n).sqrt()
}
}
fn main() {
let nums = [2, 4, 4, 4, 5, 5, 7, 9];
let mut sd_acc = sd_creator();
for num in nums.iter() {
println!("{}", sd_acc(*num as f64));
}
}