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

--- Comment #3 from John Salmon <john.salmon at deshaw dot com> ---
It's easy to overthink this.  0.0 is perfectly acceptable, as is any other
_RealType in the range [0, 1.).  But since rounding was, presumably, to-nearest
or up, it's slightly disconcerting that 0.0 is neither near nor up from the
"exact" value.

How about:


      if (__builtin_expect(__ret >= _RealType(1), 0))
        {
#if _GLIBCXX_USE_C99_MATH_TR1
          __ret = std::nextafter(_RealType(1), _RealType(0));
#else
          __ret = _RealType(1) - std::numeric_limits<_RealType>::epsilon()/2.;
#endif
        }

I.e., if there's no nextafter, then use numeric_limits::epsilon() to find the
value just below 1.0.

John Salmon

Reply via email to