mirror of
https://github.com/Ed94/Odin.git
synced 2026-08-05 15:18:49 +00:00
Add more distributions
This commit is contained in:
@@ -249,3 +249,44 @@ float64_von_mises :: proc(mean_angle, kappa: f64, r: ^Rand = nil) -> f64 {
|
|||||||
float32_von_mises :: proc(mean_angle, kappa: f32, r: ^Rand = nil) -> f32 {
|
float32_von_mises :: proc(mean_angle, kappa: f32, r: ^Rand = nil) -> f32 {
|
||||||
return f32(float64_von_mises(f64(mean_angle), f64(kappa), r))
|
return f32(float64_von_mises(f64(mean_angle), f64(kappa), r))
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
// Cauchy-Lorentz Distribution
|
||||||
|
// `x_0` is the location, `gamma` is the scale where `gamma` > 0
|
||||||
|
float64_cauchy_lorentz :: proc(x_0, gamma: f64, r: ^Rand = nil) -> f64 {
|
||||||
|
assert(gamma > 0)
|
||||||
|
|
||||||
|
// Calculated from the inverse CDF
|
||||||
|
|
||||||
|
return math.tan(math.PI * (float64(r) - 0.5))*gamma + x_0
|
||||||
|
}
|
||||||
|
// Cauchy-Lorentz Distribution
|
||||||
|
// `x_0` is the location, `gamma` is the scale where `gamma` > 0
|
||||||
|
float32_cauchy_lorentz :: proc(x_0, gamma: f32, r: ^Rand = nil) -> f32 {
|
||||||
|
return f32(float64_cauchy_lorentz(f64(x_0), f64(gamma), r))
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
// Log Cauchy-Lorentz Distribution
|
||||||
|
// `x_0` is the location, `gamma` is the scale where `gamma` > 0
|
||||||
|
float64_log_cauchy_lorentz :: proc(x_0, gamma: f64, r: ^Rand = nil) -> f64 {
|
||||||
|
assert(gamma > 0)
|
||||||
|
return math.exp(math.tan(math.PI * (float64(r) - 0.5))*gamma + x_0)
|
||||||
|
}
|
||||||
|
// Log Cauchy-Lorentz Distribution
|
||||||
|
// `x_0` is the location, `gamma` is the scale where `gamma` > 0
|
||||||
|
float32_log_cauchy_lorentz :: proc(x_0, gamma: f32, r: ^Rand = nil) -> f32 {
|
||||||
|
return f32(float64_log_cauchy_lorentz(f64(x_0), f64(gamma), r))
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
// Laplace Distribution
|
||||||
|
// `b` is the scale where `b` > 0
|
||||||
|
float64_laplace :: proc(mean, b: f64, r: ^Rand = nil) -> f64 {
|
||||||
|
assert(b > 0)
|
||||||
|
p := float64(r)-0.5
|
||||||
|
return -math.sign(p)*math.ln(1 - 2*abs(p))*b + mean
|
||||||
|
}
|
||||||
|
float32_laplace :: proc(mean, b: f32, r: ^Rand = nil) -> f32 {
|
||||||
|
return f32(float64_laplace(f64(mean), f64(b), r))
|
||||||
|
}
|
||||||
Reference in New Issue
Block a user