It works?!

This commit is contained in:
2018-10-23 14:58:30 +02:00
parent d6ea5e3116
commit 1b840e737d
4 changed files with 607 additions and 62 deletions

View File

@@ -1,10 +1,51 @@
use std::ops;
#[derive(Clone, Copy)]
pub struct Gaussian {
pub pi: f32,
pub tau: f32,
}
impl Gaussian {
pub fn new(pi: f32, tau: f32) -> Gaussian {
pub fn new() -> Gaussian {
Gaussian::with_pi_tau(0.0, 0.0)
}
pub fn with_pi_tau(pi: f32, tau: f32) -> Gaussian {
Gaussian { pi, tau }
}
pub fn with_mu_sigma(mu: f32, sigma: f32) -> Gaussian {
let pi = 1.0 / sigma.powi(2);
Gaussian::with_pi_tau(pi, pi * mu)
}
pub fn mu(&self) -> f32 {
if self.pi == 0.0 {
0.0
} else {
self.tau / self.pi
}
}
pub fn sigma(&self) -> f32 {
(1.0 / self.pi).sqrt()
}
}
impl ops::Mul<Gaussian> for Gaussian {
type Output = Gaussian;
fn mul(self, rhs: Gaussian) -> Gaussian {
Gaussian::with_pi_tau(self.pi + rhs.pi, self.tau + rhs.tau)
}
}
impl ops::Div<Gaussian> for Gaussian {
type Output = Gaussian;
fn div(self, rhs: Gaussian) -> Gaussian {
Gaussian::with_pi_tau(self.pi - rhs.pi, self.tau - rhs.tau)
}
}