summaryrefslogtreecommitdiff
path: root/numpy/random/src
diff options
context:
space:
mode:
authorRaúl Montón Pinillos <raul_m_p@me.com>2020-09-26 19:37:51 +0200
committerKevin Sheppard <kevin.k.sheppard@gmail.com>2021-02-26 11:35:53 +0000
commitb16dc4ad63ca02e5a3d88689fddc48159d297abd (patch)
treec349259541f787ff11e02ec327dd073412d66988 /numpy/random/src
parenta14c41264855e44ebd6187d7541b5b8d59bb32cb (diff)
downloadnumpy-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.c11
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) {