On Thu, 22 Aug 2019, Martin Jambor wrote: > +/* Round X to nearest integer, rounding halfway cases towards even. */ > + > +void > +real_roundeven (REAL_VALUE_TYPE *r, format_helper fmt, > + const REAL_VALUE_TYPE *x) > +{ > + if (is_halfway_below (x)) > + { > + do_add (r, x, &dconsthalf, x->sign); > + if (!is_even (r)) > + do_add (r, r, &dconstm1, x->sign);
I'm concerned that this would produce +0.0 for an argument of -0.5 (via -0.5 - 0.5 - -1.0 producing +0.0) when it needs to produce -0.0. Note that testcases for the sign of zero results need to check e.g. !!__builtin_signbit on the result, or the result of calling __builtin_copysign* to extract the sign of the result, since 0.0 == -0.0 so checking with ==, while necessary, is not sufficient in that case. -- Joseph S. Myers jos...@codesourcery.com