re PR libstdc++/56202 (SIGFPE (division by zero) in std::binomial_distribution)
authorManuel López-Ibáñez <manu@gcc.gnu.org>
Mon, 4 Feb 2013 17:10:59 +0000 (17:10 +0000)
committerPaolo Carlini <paolo@gcc.gnu.org>
Mon, 4 Feb 2013 17:10:59 +0000 (17:10 +0000)
2013-02-04  Manuel López-Ibáñez  <manu@gcc.gnu.org>
    Paolo Carlini  <paolo.carlini@oracle.com>

PR libstdc++/56202
* include/bits/random.tcc (binomial_distribution<>::
_M_waiting(_UniformRandomNumberGenerator&, _IntType)): Avoid
division by zero.

Co-Authored-By: Paolo Carlini <paolo.carlini@oracle.com>
From-SVN: r195722

libstdc++-v3/ChangeLog
libstdc++-v3/include/bits/random.tcc

index 1a8a822fd5170bb793f87feee310b942124ee4e8..077e48386c0b35296c82b785d62b8b2f0a42fee2 100644 (file)
@@ -1,3 +1,11 @@
+2013-02-04  Manuel López-Ibáñez  <manu@gcc.gnu.org>
+           Paolo Carlini  <paolo.carlini@oracle.com>
+
+       PR libstdc++/56202
+       * include/bits/random.tcc (binomial_distribution<>::
+       _M_waiting(_UniformRandomNumberGenerator&, _IntType)): Avoid
+       division by zero.
+
 2013-02-03  Richard Sandiford  <rdsandiford@googlemail.com>
 
        Update copyright years.
index ffa3967492b2ebf7014dc829797491530163827b..6220a5d61d4dea8023150f69db8a2c7e51561007 100644 (file)
@@ -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;
          }