https://gcc.gnu.org/bugzilla/show_bug.cgi?id=80506

            Bug ID: 80506
           Summary: Wrong magic number in std::gamma_distribution
           Product: gcc
           Version: 8.0
            Status: UNCONFIRMED
          Severity: normal
          Priority: P3
         Component: libstdc++
          Assignee: unassigned at gcc dot gnu.org
          Reporter: redi at gcc dot gnu.org
  Target Milestone: ---

Vincent Poinot reported the following by email:

The GNU C++ implementation uses the algorithm by Marsaglia and Tsang, and
in particular an optimization that avoids computing two logarithms. It goes
like this in random.tcc:

    do
      {
      }
    while (__u > result_type(1.0) - 0.331 * __n * __n * __n * __n
           && (std::log(__u) > (0.5 * __n * __n + __a1
                    * (1.0 - __v + std::log(__v)))));

However, I am pretty sure that the constant used in the short-circuit is
wrong: the paper by the authors (http://dl.acm.org/citation.cfm?id=358414)
clearly prescribes 0.0331 instead (and this is also the value used by the
GSL library that uses the same algorithm).

Reply via email to