ganit_core/eval/functions/statistical/stdeva/
mod.rs1use crate::types::{ErrorKind, Value};
2use super::stat_helpers::collect_nums_a;
3use super::var_s::sample_variance;
4
5pub 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;