diff options
| author | Raúl Montón Pinillos <raul_m_p@me.com> | 2020-09-26 19:37:51 +0200 |
|---|---|---|
| committer | Kevin Sheppard <kevin.k.sheppard@gmail.com> | 2021-02-26 11:35:53 +0000 |
| commit | b16dc4ad63ca02e5a3d88689fddc48159d297abd (patch) | |
| tree | c349259541f787ff11e02ec327dd073412d66988 /numpy/random/src | |
| parent | a14c41264855e44ebd6187d7541b5b8d59bb32cb (diff) | |
| download | numpy-b16dc4ad63ca02e5a3d88689fddc48159d297abd.tar.gz | |
Fixed Von Mises distribution for big values of kappa by falling back to a normal distribution (which the von mises distribution converges to).
Diffstat (limited to 'numpy/random/src')
| -rw-r--r-- | numpy/random/src/distributions/distributions.c | 11 |
1 files changed, 8 insertions, 3 deletions
diff --git a/numpy/random/src/distributions/distributions.c b/numpy/random/src/distributions/distributions.c index 4494f860e..6c60ad882 100644 --- a/numpy/random/src/distributions/distributions.c +++ b/numpy/random/src/distributions/distributions.c @@ -853,9 +853,14 @@ double random_vonmises(bitgen_t *bitgen_state, double mu, double kappa) { */ s = (1. / kappa + kappa); } else { - double r = 1 + sqrt(1 + 4 * kappa * kappa); - double rho = (r - sqrt(2 * r)) / (2 * kappa); - s = (1 + rho * rho) / (2 * rho); + /* Fallback to normal distribution for big values of kappa*/ + if (kappa > 1e6){ + return mu + sqrt(1/kappa) * random_standard_normal(bitgen_state); + }else{ + double r = 1 + sqrt(1 + 4 * kappa * kappa); + double rho = (r - sqrt(2 * r)) / (2 * kappa); + s = (1 + rho * rho) / (2 * rho); + } } while (1) { |
