From 7440b734c72279f65a0b6230b46a9dc63d768dff Mon Sep 17 00:00:00 2001 From: Yashvardhan Thorat Date: Mon, 8 Jun 2026 15:16:53 +0000 Subject: [PATCH] Fix #4: Implement Variance function --- src/primary/mod.rs | 2 ++ src/primary/variance.rs | 36 ++++++++++++++++++++++++++++++++++++ 2 files changed, 38 insertions(+) create mode 100644 src/primary/variance.rs diff --git a/src/primary/mod.rs b/src/primary/mod.rs index 7fdfd13..404e4aa 100644 --- a/src/primary/mod.rs +++ b/src/primary/mod.rs @@ -1,5 +1,7 @@ pub mod mean; pub mod mode; +pub mod variance; pub use mean::mean; pub use mode::mode; +pub use variance::variance; \ No newline at end of file diff --git a/src/primary/variance.rs b/src/primary/variance.rs new file mode 100644 index 0000000..a5a2b75 --- /dev/null +++ b/src/primary/variance.rs @@ -0,0 +1,36 @@ +/// Returns the arithmetic mean of a sequence of `f64` values. +/// +/// Empty input returns `None`. +/// +/// # Example +/// ``` +/// use rustats::primary::variance; +/// +/// let values = [1.0, 2.0, 3.0]; +/// let var = variance(&values); +/// assert_eq!(var, Some(0.6666666666666666)); +/// ``` +/// + +use super::mean; + + +pub fn variance(values: &[f64]) -> Option { + let mut count: u64 = 0; + let mut square_sum: f64 = 0.0; + let avg = mean(&values)?; + + for value in values { + square_sum += (*value-avg)*(*value-avg); + count += 1; + } + + if count < 2{ + None + } + + else { + Some((square_sum)/ (count - 1) as f64) + } + +}