debot_utils/
math.rs

1use rand::{rngs::StdRng, Rng, RngCore, SeedableRng};
2
3pub fn exponential_decay(x: f64, a: f64) -> f64 {
4    f64::exp(-a * x)
5}
6
7pub fn random_bool(probability: f64, seed: Option<u64>) -> bool {
8    let mut rng: Box<dyn RngCore> = match seed {
9        Some(seed_value) => Box::new(StdRng::seed_from_u64(seed_value)),
10        None => Box::new(rand::thread_rng()),
11    };
12    rng.gen_bool(probability)
13}
14
15pub fn compute_std(values: &[f64]) -> f64 {
16    if values.is_empty() {
17        return 0.0;
18    }
19    let mean = values.iter().copied().sum::<f64>() / (values.len() as f64);
20    let var = values
21        .iter()
22        .map(|v| {
23            let diff = v - mean;
24            diff * diff
25        })
26        .sum::<f64>()
27        / (values.len() as f64);
28    var.sqrt()
29}