It works?!
This commit is contained in:
@@ -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)
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user