diff --git a/vowpalwabbit/OjaNewton.cc b/vowpalwabbit/OjaNewton.cc index 1d9c9be8ce2..4e98bc8500c 100644 --- a/vowpalwabbit/OjaNewton.cc +++ b/vowpalwabbit/OjaNewton.cc @@ -81,6 +81,15 @@ struct OjaNewton { float r1 = merand48(all->random_state); float r2 = merand48(all->random_state); + + //in the box-muller tranform, r1 should be strictly positive: https://en.wikipedia.org/wiki/Box%E2%80%93Muller_transform + //redraw until r1 > 0 + while (r1 == 0.0f) + { + r1 = merand48(all->random_state); + r2 = merand48(all->random_state); + } + (&w)[j] = sqrt(-2.f * log(r1)) * (float)cos(PI2 * r2); } }