qrlew 0.3.2

Sarus Qrlew Engine
Documentation
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
use statrs::{
    distribution::{ContinuousCDF, Normal},
    prec::F64_PREC,
};

pub fn gaussian_noise(epsilon: f64, delta: f64, sensitivity: f64) -> f64 {
    (2. * (1.25_f64.ln() / delta)).sqrt() * sensitivity / epsilon
}

pub fn gaussian_tau(epsilon: f64, delta: f64, sensitivity: f64) -> f64 {
    let dist = Normal::new(0.0, 1.0).unwrap();
    let scale = gaussian_noise(epsilon, delta, sensitivity);
    // TODO: we want to overestimate tau
    1. + scale * dist.inverse_cdf((1. - delta / 2.).powf(1. / sensitivity)) + F64_PREC
}