Files
glibc/math/s_fminmag_template.c
T
Adhemerval Zanella 822bb11278 math: Order signed zeros in f{max,min}mag{f,l,f128}
The functions are documented to behave like fmax/fmin when the
arguments have the same absolute value.

Checked on x86_64-linux-gnu, aarch64-linux-gnu, i686-linux-gnu,
arm-linux-gnueabihf, powerpc64le-linux-gnu,
riscv64-linux-gnu-rv64imafdc-lp64d, and loongarch64-linux-gnuf64.

Reviewed-by: Wilco Dijkstra  <Wilco.Dijkstra@arm.com>
2026-02-02 14:35:44 -03:00

39 lines
1.2 KiB
C

/* Return value with minimum magnitude.
Copyright (C) 2016-2026 Free Software Foundation, Inc.
This file is part of the GNU C Library.
The GNU C Library is free software; you can redistribute it and/or
modify it under the terms of the GNU Lesser General Public
License as published by the Free Software Foundation; either
version 2.1 of the License, or (at your option) any later version.
The GNU C Library is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
Lesser General Public License for more details.
You should have received a copy of the GNU Lesser General Public
License along with the GNU C Library; if not, see
<https://www.gnu.org/licenses/>. */
#include <math.h>
FLOAT
M_DECL_FUNC (__fminmag) (FLOAT x, FLOAT y)
{
if (__glibc_likely (!isunordered (x, y)))
{
FLOAT ax = M_FABS (x);
FLOAT ay = M_FABS (y);
if (__glibc_unlikely (ax == ay))
return signbit (x) ? x : y;
return isless (ax, ay) ? x : y;
}
else if (issignaling (x) || issignaling (y))
return x + y;
else
return isnan (y) ? x : y;
}
declare_mgen_alias (__fminmag, fminmag);