Skip to content

Commit 3ef5264

Browse files
Sync Rust normal_dist_inv_cdf with Python equivalent
See python/cpython#95265. To quote: > Restores alignment with random.gauss(mu, sigma) and random.normalvariate(mu, sigma) both. of which are equivalent to sampling from NormalDist(mu, sigma).inv_cdf(random()). The two functions in the random module happy accept sigma=0 and give a well-defined result. > This also lets the function gently handle a sigma getting smaller, eventually becoming zero. As sigma decrease, NormalDist(mu, sigma).inv_cdf(p) forms a tighter and tighter internal around mu and becoming exactly mu in the limit. For example, NormalDist(100, 1E-300).inv_cdf(0.3) cleanly evaluates to 100.0but withsigma=1e-500`` the function previously would raised an unexpected error.
1 parent 3b14ad8 commit 3ef5264

File tree

1 file changed

+1
-1
lines changed

1 file changed

+1
-1
lines changed

stdlib/src/statistics.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@ mod _statistics {
77
// See https://github.com/python/cpython/blob/6846d6712a0894f8e1a91716c11dd79f42864216/Modules/_statisticsmodule.c#L28-L120
88
#[allow(clippy::excessive_precision)]
99
fn normal_dist_inv_cdf(p: f64, mu: f64, sigma: f64) -> Option<f64> {
10-
if p <= 0.0 || p >= 1.0 || sigma <= 0.0 {
10+
if p <= 0.0 || p >= 1.0 {
1111
return None;
1212
}
1313

0 commit comments

Comments
 (0)