Skip to main content

ganit_core/eval/functions/statistical/stdeva/
mod.rs

1use crate::types::{ErrorKind, Value};
2use super::stat_helpers::collect_nums_a;
3use super::var_s::sample_variance;
4
5/// `STDEVA(value1, ...)` — sample standard deviation, text/FALSE=0, TRUE=1.
6pub fn stdeva_fn(args: &[Value]) -> Value {
7    if args.is_empty() {
8        return Value::Error(ErrorKind::NA);
9    }
10    if args.iter().any(|a| matches!(a, Value::Text(_))) {
11        return Value::Error(ErrorKind::Value);
12    }
13    let nums = collect_nums_a(args);
14    match sample_variance(&nums) {
15        Value::Number(v) => {
16            let s = v.sqrt();
17            if !s.is_finite() {
18                Value::Error(ErrorKind::Num)
19            } else {
20                Value::Number(s)
21            }
22        }
23        other => other,
24    }
25}
26
27#[cfg(test)]
28mod tests;