From 85018f40aedb5d60c63a8f3f85f17d71c84b01ac Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Manuel=20L=C3=B3pez-Ib=C3=A1=C3=B1ez?= Date: Mon, 4 Feb 2013 17:10:59 +0000 Subject: [PATCH] re PR libstdc++/56202 (SIGFPE (division by zero) in std::binomial_distribution) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 2013-02-04 Manuel López-Ibáñez Paolo Carlini PR libstdc++/56202 * include/bits/random.tcc (binomial_distribution<>:: _M_waiting(_UniformRandomNumberGenerator&, _IntType)): Avoid division by zero. Co-Authored-By: Paolo Carlini From-SVN: r195722 --- libstdc++-v3/ChangeLog | 8 ++++++++ libstdc++-v3/include/bits/random.tcc | 6 ++++++ 2 files changed, 14 insertions(+) diff --git a/libstdc++-v3/ChangeLog b/libstdc++-v3/ChangeLog index 1a8a822fd51..077e48386c0 100644 --- a/libstdc++-v3/ChangeLog +++ b/libstdc++-v3/ChangeLog @@ -1,3 +1,11 @@ +2013-02-04 Manuel López-Ibáñez + Paolo Carlini + + PR libstdc++/56202 + * include/bits/random.tcc (binomial_distribution<>:: + _M_waiting(_UniformRandomNumberGenerator&, _IntType)): Avoid + division by zero. + 2013-02-03 Richard Sandiford Update copyright years. diff --git a/libstdc++-v3/include/bits/random.tcc b/libstdc++-v3/include/bits/random.tcc index ffa3967492b..6220a5d61d4 100644 --- a/libstdc++-v3/include/bits/random.tcc +++ b/libstdc++-v3/include/bits/random.tcc @@ -1658,6 +1658,12 @@ _GLIBCXX_BEGIN_NAMESPACE_VERSION do { const double __e = -std::log(1.0 - __aurng()); + if (__t == __x) + { + if (__e) + return __x; + continue; + } __sum += __e / (__t - __x); __x += 1; }