This is the mail archive of the
gcc-patches@gcc.gnu.org
mailing list for the GCC project.
Re: [PATCH] Builtin function roundeven folding implementation
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
joseph@codesourcery.com