Implement C23 rootn.

C23 adds various <math.h> function families originally defined in TS
18661-4.  Add the rootn functions, which compute the Yth root of X for
integer Y (with a domain error if Y is 0, even if X is a NaN).  The
integer exponent has type long long int in C23; it was intmax_t in TS
18661-4, and as with other interfaces changed after their initial
appearance in the TS, I don't think we need to support the original
version of the interface.

As with pown and compoundn, I strongly encourage searching for worst
cases for ulps error for these implementations (necessarily
non-exhaustively, given the size of the input space).  I also expect a
custom implementation for a given format could be much faster as well
as more accurate, although the implementation is simpler than those
for pown and compoundn.

This completes adding to glibc those TS 18661-4 functions (ignoring
DFP) that are included in C23.  See
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=118592 regarding the C23
mathematical functions (not just the TS 18661-4 ones) missing built-in
functions in GCC, where such functions might usefully be added.

Tested for x86_64 and x86, and with build-many-glibcs.py.
This commit is contained in:
Joseph Myers 2025-05-14 10:51:46 +00:00
parent 36189c76fb
commit 06caf53adf
48 changed files with 14473 additions and 2 deletions

3
NEWS
View File

@ -14,7 +14,8 @@ Major new features:
functions for float, double, long double, _FloatN and _FloatNx, and a
type-generic macro in <tgmath.h>.
- Power and absolute-value functions: compoundn, pown, powr, rsqrt.
- Power and absolute-value functions: compoundn, pown, powr, rootn,
rsqrt.
* On Linux, the pthread_gettid_np function has been added.

View File

@ -883,6 +883,22 @@ instead of the direct formula is wise, since the error is
much smaller. See also the function @code{cabs} in @ref{Absolute Value}.
@end deftypefun
@deftypefun double rootn (double @var{x}, long long int @var{n})
@deftypefunx float rootnf (float @var{x}, long long int @var{n})
@deftypefunx {long double} rootnl (long double @var{x}, long long int @var{n})
@deftypefunx _FloatN rootnfN (_Float@var{N} @var{x}, long long int @var{n})
@deftypefunx _FloatNx rootnfNx (_Float@var{N}x @var{x}, long long int @var{n})
@standards{TS 18661-4:2015, math.h}
@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}}
These return the @var{n}th root of @var{x}. If @var{n} is zero, or if
@var{x} is negative and @var{n} is even, @code{rootn} signals a domain
error.
The @code{rootn} functions are from TS 18661-4:2015 (which used
@code{intmax_t} as the type of @var{n}; the type changed to
@code{long long int} in C23).
@end deftypefun
@deftypefun double expm1 (double @var{x})
@deftypefunx float expm1f (float @var{x})
@deftypefunx {long double} expm1l (long double @var{x})

View File

@ -142,6 +142,7 @@ gen-libm-calls = \
s_nextdownF \
s_pownF \
s_powrF \
s_rootnF \
s_rsqrtF \
s_significandF \
s_sinpiF \
@ -691,6 +692,7 @@ libm-test-funcs-auto = \
pow \
pown \
powr \
rootn \
rsqrt \
sin \
sincos \
@ -1028,6 +1030,7 @@ tgmath3-macros = \
remainder \
remquo \
rint \
rootn \
round \
roundeven \
rsqrt \
@ -1454,6 +1457,7 @@ CFLAGS-s_powr.c += -fno-builtin-powrl
CFLAGS-w_remainder.c += -fno-builtin-remainderl -fno-builtin-dreml
CFLAGS-s_remquo.c += -fno-builtin-remquol
CFLAGS-s_rint.c += -fno-builtin-rintl
CFLAGS-s_rootn.c += -fno-builtin-rootnl
CFLAGS-s_round.c += -fno-builtin-roundl
CFLAGS-s_roundeven.c += -fno-builtin-roundevenl
CFLAGS-s_rsqrt.c += -fno-builtin-rsqrtl
@ -1592,6 +1596,7 @@ CFLAGS-s_powr.c += -fno-builtin-powrf32x -fno-builtin-powrf64
CFLAGS-w_remainder.c += -fno-builtin-remainderf32x -fno-builtin-remainderf64
CFLAGS-s_remquo.c += -fno-builtin-remquof32x -fno-builtin-remquof64
CFLAGS-s_rint.c += -fno-builtin-rintf32x -fno-builtin-rintf64
CFLAGS-s_rootn.c += -fno-builtin-rootnf32x -fno-builtin-rootnf64
CFLAGS-s_round.c += -fno-builtin-roundf32x -fno-builtin-roundf64
CFLAGS-s_roundeven.c += -fno-builtin-roundevenf32x -fno-builtin-roundevenf64
CFLAGS-s_rsqrt.c += -fno-builtin-rsqrtf32x -fno-builtin-rsqrtf64
@ -1721,6 +1726,7 @@ CFLAGS-s_powrf.c += -fno-builtin-powrf32
CFLAGS-w_remainderf.c += -fno-builtin-remainderf32
CFLAGS-s_remquof.c += -fno-builtin-remquof32
CFLAGS-s_rintf.c += -fno-builtin-rintf32
CFLAGS-s_rootnf.c += -fno-builtin-rootnf32
CFLAGS-s_roundf.c += -fno-builtin-roundf32
CFLAGS-s_roundevenf.c += -fno-builtin-roundevenf32
CFLAGS-s_rsqrtf.c += -fno-builtin-rsqrtf32

View File

@ -677,11 +677,13 @@ libm {
compoundnf32; compoundnf64; compoundnf32x;
pown; pownf; pownl; pownf32; pownf64; pownf32x;
powr; powrf; powrl; powrf32; powrf64; powrf32x;
rootn; rootnf; rootnl; rootnf32; rootnf64; rootnf32x;
rsqrt; rsqrtf; rsqrtl; rsqrtf32; rsqrtf64; rsqrtf32x;
# Functions involving _Float64x or _Float128, for some configurations.
compoundnf64x; compoundnf128;
pownf64x; pownf128;
powrf64x; powrf128;
rootnf64x; rootnf128;
rsqrtf64x; rsqrtf128;
}
}

View File

@ -9050,6 +9050,224 @@ powr 0xd.73035p-4 -0x1.47bb8p+8
powr 0x1.059c76p+0 0x1.ff80bep+11
powr 0x1.7ac7cp+5 23
rootn 0 1
rootn 0 2
rootn 0 3
rootn 0 4
rootn 0 5
rootn 0 0x7fffffffffffffff
rootn -0 1
rootn -0 2
rootn -0 3
rootn -0 4
rootn -0 5
rootn -0 0x7fffffffffffffff
rootn min 1
rootn min 2
rootn min 3
rootn min 4
rootn min 5
rootn min 63
rootn min 127
rootn min 255
rootn min 511
rootn min 1023
rootn min 16383
rootn min 0x1000001
rootn min 0x10000000000001
rootn min 0x7fffffffffffffff
rootn -min 1
rootn -min 3
rootn -min 5
rootn -min 63
rootn -min 127
rootn -min 255
rootn -min 511
rootn -min 1023
rootn -min 16383
rootn -min 0x1000001
rootn -min 0x10000000000001
rootn -min 0x7fffffffffffffff
rootn min -1
rootn min -2
rootn min -3
rootn min -4
rootn min -5
rootn min -63
rootn min -127
rootn min -255
rootn min -511
rootn min -1023
rootn min -16383
rootn min -0x1000001
rootn min -0x10000000000001
rootn min -0x7fffffffffffffff
rootn -min -1
rootn -min -3
rootn -min -5
rootn -min -63
rootn -min -127
rootn -min -255
rootn -min -511
rootn -min -1023
rootn -min -16383
rootn -min -0x1000001
rootn -min -0x10000000000001
rootn -min -0x7fffffffffffffff
rootn min_subnorm 1
rootn min_subnorm 2
rootn min_subnorm 3
rootn min_subnorm 4
rootn min_subnorm 5
rootn min_subnorm 63
rootn min_subnorm 127
rootn min_subnorm 255
rootn min_subnorm 511
rootn min_subnorm 1023
rootn min_subnorm 16383
rootn min_subnorm 0x1000001
rootn min_subnorm 0x10000000000001
rootn min_subnorm 0x7fffffffffffffff
rootn -min_subnorm 1
rootn -min_subnorm 3
rootn -min_subnorm 5
rootn -min_subnorm 63
rootn -min_subnorm 127
rootn -min_subnorm 255
rootn -min_subnorm 511
rootn -min_subnorm 1023
rootn -min_subnorm 16383
rootn -min_subnorm 0x1000001
rootn -min_subnorm 0x10000000000001
rootn -min_subnorm 0x7fffffffffffffff
rootn min_subnorm -1
rootn min_subnorm -2
rootn min_subnorm -3
rootn min_subnorm -4
rootn min_subnorm -5
rootn min_subnorm -63
rootn min_subnorm -127
rootn min_subnorm -255
rootn min_subnorm -511
rootn min_subnorm -1023
rootn min_subnorm -16383
rootn min_subnorm -0x1000001
rootn min_subnorm -0x10000000000001
rootn min_subnorm -0x7fffffffffffffff
rootn -min_subnorm -1
rootn -min_subnorm -3
rootn -min_subnorm -5
rootn -min_subnorm -63
rootn -min_subnorm -127
rootn -min_subnorm -255
rootn -min_subnorm -511
rootn -min_subnorm -1023
rootn -min_subnorm -16383
rootn -min_subnorm -0x1000001
rootn -min_subnorm -0x10000000000001
rootn -min_subnorm -0x7fffffffffffffff
rootn max 1
rootn max 2
rootn max 3
rootn max 4
rootn max 5
rootn max 63
rootn max 127
rootn max 255
rootn max 511
rootn max 1023
rootn max 16383
rootn max 0x1000001
rootn max 0x10000000000001
rootn max 0x7fffffffffffffff
rootn -max 1
rootn -max 3
rootn -max 5
rootn -max 63
rootn -max 127
rootn -max 255
rootn -max 511
rootn -max 1023
rootn -max 16383
rootn -max 0x1000001
rootn -max 0x10000000000001
rootn -max 0x7fffffffffffffff
rootn max -1
rootn max -2
rootn max -3
rootn max -4
rootn max -5
rootn max -63
rootn max -127
rootn max -255
rootn max -511
rootn max -1023
rootn max -16383
rootn max -0x1000001
rootn max -0x10000000000001
rootn max -0x7fffffffffffffff
rootn -max -1
rootn -max -3
rootn -max -5
rootn -max -63
rootn -max -127
rootn -max -255
rootn -max -511
rootn -max -1023
rootn -max -16383
rootn -max -0x1000001
rootn -max -0x10000000000001
rootn -max -0x7fffffffffffffff
rootn 1 123
rootn 1 -123
rootn 1 1234
rootn 1 -1234
rootn -1 123
rootn -1 -123
rootn 2 123
rootn 2 -123
rootn 2 1234
rootn 2 -1234
rootn -2 123
rootn -2 -123
rootn 0x1.234p50 123
rootn 0x1.234p50 -123
rootn 0x1.234p50 1234
rootn 0x1.234p50 -1234
rootn -0x1.234p50 123
rootn -0x1.234p50 -123
rootn 0x1.234p500 123
rootn 0x1.234p500 -123
rootn 0x1.234p500 1234
rootn 0x1.234p500 -1234
rootn -0x1.234p500 123
rootn -0x1.234p500 -123
rootn 0x9.8765p5000 123
rootn 0x9.8765p5000 -123
rootn 0x9.8765p5000 1234
rootn 0x9.8765p5000 -1234
rootn 0x9.8765p5000 12345
rootn 0x9.8765p5000 -12345
rootn 0x9.8765p5000 1234567
rootn 0x9.8765p5000 -1234567
rootn -0x9.8765p5000 123
rootn -0x9.8765p5000 -123
rootn -0x9.8765p5000 12345
rootn -0x9.8765p5000 -12345
rootn -0x9.8765p5000 1234567
rootn -0x9.8765p5000 -1234567
rsqrt 2209
rsqrt 4
rsqrt 2

13734
math/auto-libm-test-out-rootn Normal file

File diff suppressed because it is too large Load Diff

View File

@ -195,6 +195,9 @@ __MATHCALL (pown,, (_Mdouble_ __x, long long int __y));
/* Return X to the Y power. */
__MATHCALL (powr,, (_Mdouble_ __x, _Mdouble_ __y));
/* Return the Yth root of X. */
__MATHCALL (rootn,, (_Mdouble_ __x, long long int __y));
/* Return the reciprocal of the square root of X. */
__MATHCALL (rsqrt,, (_Mdouble_ __x));
#endif

View File

@ -599,6 +599,7 @@ static test_function test_functions[] =
FUNC_mpfr_ff_f ("pow", mpfr_pow, false),
FUNC_mpfr_fL_f ("pown", mpfr_pow_si, false),
FUNC_mpfr_ff_f ("powr", mpfr_powr, false),
FUNC_mpfr_fL_f ("rootn", mpfr_rootn_si, false),
/* mpfr_rec_sqrt differs from rsqrt on -0, but gen-auto-libm-tests
does not handle results that are exact infinities anyway. */
FUNC_mpfr_f_f ("rsqrt", mpfr_rec_sqrt, true),

View File

@ -756,6 +756,7 @@ class Tests(object):
self.add_tests('logp1', 'r', ['r'])
self.add_tests('pown', 'r', ['r', 'long long int'])
self.add_tests('powr', 'r', ['r', 'r'])
self.add_tests('rootn', 'r', ['r', 'long long int'])
self.add_tests('rsqrt', 'r', ['r'])
self.add_tests('sinpi', 'r', ['r'])
self.add_tests('tanpi', 'r', ['r'])

159
math/libm-test-rootn.inc Normal file
View File

@ -0,0 +1,159 @@
/* Test rootn.
Copyright (C) 2025 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 "libm-test-driver.c"
static const struct test_fL_f_data rootn_test_data[] =
{
TEST_fL_f (rootn, qnan_value, 0, qnan_value, INVALID_EXCEPTION|ERRNO_EDOM),
TEST_fL_f (rootn, -qnan_value, 0, qnan_value, INVALID_EXCEPTION|ERRNO_EDOM),
TEST_fL_f (rootn, snan_value, 0, qnan_value, INVALID_EXCEPTION|ERRNO_EDOM),
TEST_fL_f (rootn, -snan_value, 0, qnan_value, INVALID_EXCEPTION|ERRNO_EDOM),
TEST_fL_f (rootn, plus_infty, 0, qnan_value, INVALID_EXCEPTION|ERRNO_EDOM),
TEST_fL_f (rootn, minus_infty, 0, qnan_value, INVALID_EXCEPTION|ERRNO_EDOM),
TEST_fL_f (rootn, plus_zero, 0, qnan_value, INVALID_EXCEPTION|ERRNO_EDOM),
TEST_fL_f (rootn, minus_zero, 0, qnan_value, INVALID_EXCEPTION|ERRNO_EDOM),
TEST_fL_f (rootn, min_value, 0, qnan_value, INVALID_EXCEPTION|ERRNO_EDOM),
TEST_fL_f (rootn, -min_value, 0, qnan_value, INVALID_EXCEPTION|ERRNO_EDOM),
TEST_fL_f (rootn, min_subnorm_value, 0, qnan_value, INVALID_EXCEPTION|ERRNO_EDOM),
TEST_fL_f (rootn, -min_subnorm_value, 0, qnan_value, INVALID_EXCEPTION|ERRNO_EDOM),
TEST_fL_f (rootn, max_value, 0, qnan_value, INVALID_EXCEPTION|ERRNO_EDOM),
TEST_fL_f (rootn, -max_value, 0, qnan_value, INVALID_EXCEPTION|ERRNO_EDOM),
TEST_fL_f (rootn, -min_subnorm_value, 2, qnan_value, INVALID_EXCEPTION|ERRNO_EDOM),
TEST_fL_f (rootn, -min_subnorm_value, 4, qnan_value, INVALID_EXCEPTION|ERRNO_EDOM),
TEST_fL_f (rootn, -min_subnorm_value, 0x7ffffffffffffffeLL, qnan_value, INVALID_EXCEPTION|ERRNO_EDOM),
TEST_fL_f (rootn, -min_value, 2, qnan_value, INVALID_EXCEPTION|ERRNO_EDOM),
TEST_fL_f (rootn, -min_value, 4, qnan_value, INVALID_EXCEPTION|ERRNO_EDOM),
TEST_fL_f (rootn, -min_value, 0x7ffffffffffffffeLL, qnan_value, INVALID_EXCEPTION|ERRNO_EDOM),
TEST_fL_f (rootn, -1.0, 2, qnan_value, INVALID_EXCEPTION|ERRNO_EDOM),
TEST_fL_f (rootn, -1.0, 4, qnan_value, INVALID_EXCEPTION|ERRNO_EDOM),
TEST_fL_f (rootn, -1.0, 0x7ffffffffffffffeLL, qnan_value, INVALID_EXCEPTION|ERRNO_EDOM),
TEST_fL_f (rootn, -max_value, 2, qnan_value, INVALID_EXCEPTION|ERRNO_EDOM),
TEST_fL_f (rootn, -max_value, 4, qnan_value, INVALID_EXCEPTION|ERRNO_EDOM),
TEST_fL_f (rootn, -max_value, 0x7ffffffffffffffeLL, qnan_value, INVALID_EXCEPTION|ERRNO_EDOM),
TEST_fL_f (rootn, minus_infty, 2, qnan_value, INVALID_EXCEPTION|ERRNO_EDOM),
TEST_fL_f (rootn, minus_infty, 4, qnan_value, INVALID_EXCEPTION|ERRNO_EDOM),
TEST_fL_f (rootn, minus_infty, 0x7ffffffffffffffeLL, qnan_value, INVALID_EXCEPTION|ERRNO_EDOM),
TEST_fL_f (rootn, -min_subnorm_value, -2, qnan_value, INVALID_EXCEPTION|ERRNO_EDOM),
TEST_fL_f (rootn, -min_subnorm_value, -4, qnan_value, INVALID_EXCEPTION|ERRNO_EDOM),
TEST_fL_f (rootn, -min_subnorm_value, LLONG_MIN, qnan_value, INVALID_EXCEPTION|ERRNO_EDOM),
TEST_fL_f (rootn, -min_value, -2, qnan_value, INVALID_EXCEPTION|ERRNO_EDOM),
TEST_fL_f (rootn, -min_value, -4, qnan_value, INVALID_EXCEPTION|ERRNO_EDOM),
TEST_fL_f (rootn, -min_value, LLONG_MIN, qnan_value, INVALID_EXCEPTION|ERRNO_EDOM),
TEST_fL_f (rootn, -1.0, -2, qnan_value, INVALID_EXCEPTION|ERRNO_EDOM),
TEST_fL_f (rootn, -1.0, -4, qnan_value, INVALID_EXCEPTION|ERRNO_EDOM),
TEST_fL_f (rootn, -1.0, LLONG_MIN, qnan_value, INVALID_EXCEPTION|ERRNO_EDOM),
TEST_fL_f (rootn, -max_value, -2, qnan_value, INVALID_EXCEPTION|ERRNO_EDOM),
TEST_fL_f (rootn, -max_value, -4, qnan_value, INVALID_EXCEPTION|ERRNO_EDOM),
TEST_fL_f (rootn, -max_value, LLONG_MIN, qnan_value, INVALID_EXCEPTION|ERRNO_EDOM),
TEST_fL_f (rootn, minus_infty, -2, qnan_value, INVALID_EXCEPTION|ERRNO_EDOM),
TEST_fL_f (rootn, minus_infty, -4, qnan_value, INVALID_EXCEPTION|ERRNO_EDOM),
TEST_fL_f (rootn, minus_infty, LLONG_MIN, qnan_value, INVALID_EXCEPTION|ERRNO_EDOM),
TEST_fL_f (rootn, qnan_value, 1, qnan_value, NO_INEXACT_EXCEPTION|ERRNO_UNCHANGED),
TEST_fL_f (rootn, -qnan_value, 1, qnan_value, NO_INEXACT_EXCEPTION|ERRNO_UNCHANGED),
TEST_fL_f (rootn, qnan_value, -1, qnan_value, NO_INEXACT_EXCEPTION|ERRNO_UNCHANGED),
TEST_fL_f (rootn, -qnan_value, -1, qnan_value, NO_INEXACT_EXCEPTION|ERRNO_UNCHANGED),
TEST_fL_f (rootn, qnan_value, 2, qnan_value, NO_INEXACT_EXCEPTION|ERRNO_UNCHANGED),
TEST_fL_f (rootn, -qnan_value, 2, qnan_value, NO_INEXACT_EXCEPTION|ERRNO_UNCHANGED),
TEST_fL_f (rootn, qnan_value, -2, qnan_value, NO_INEXACT_EXCEPTION|ERRNO_UNCHANGED),
TEST_fL_f (rootn, -qnan_value, -2, qnan_value, NO_INEXACT_EXCEPTION|ERRNO_UNCHANGED),
TEST_fL_f (rootn, qnan_value, 3, qnan_value, NO_INEXACT_EXCEPTION|ERRNO_UNCHANGED),
TEST_fL_f (rootn, -qnan_value, 3, qnan_value, NO_INEXACT_EXCEPTION|ERRNO_UNCHANGED),
TEST_fL_f (rootn, qnan_value, -3, qnan_value, NO_INEXACT_EXCEPTION|ERRNO_UNCHANGED),
TEST_fL_f (rootn, -qnan_value, -3, qnan_value, NO_INEXACT_EXCEPTION|ERRNO_UNCHANGED),
TEST_fL_f (rootn, qnan_value, LLONG_MAX, qnan_value, NO_INEXACT_EXCEPTION|ERRNO_UNCHANGED),
TEST_fL_f (rootn, -qnan_value, LLONG_MAX, qnan_value, NO_INEXACT_EXCEPTION|ERRNO_UNCHANGED),
TEST_fL_f (rootn, qnan_value, LLONG_MIN, qnan_value, NO_INEXACT_EXCEPTION|ERRNO_UNCHANGED),
TEST_fL_f (rootn, -qnan_value, LLONG_MIN, qnan_value, NO_INEXACT_EXCEPTION|ERRNO_UNCHANGED),
TEST_fL_f (rootn, snan_value, 1, qnan_value, INVALID_EXCEPTION),
TEST_fL_f (rootn, -snan_value, 1, qnan_value, INVALID_EXCEPTION),
TEST_fL_f (rootn, snan_value, -1, qnan_value, INVALID_EXCEPTION),
TEST_fL_f (rootn, -snan_value, -1, qnan_value, INVALID_EXCEPTION),
TEST_fL_f (rootn, snan_value, 2, qnan_value, INVALID_EXCEPTION),
TEST_fL_f (rootn, -snan_value, 2, qnan_value, INVALID_EXCEPTION),
TEST_fL_f (rootn, snan_value, -2, qnan_value, INVALID_EXCEPTION),
TEST_fL_f (rootn, -snan_value, -2, qnan_value, INVALID_EXCEPTION),
TEST_fL_f (rootn, snan_value, 3, qnan_value, INVALID_EXCEPTION),
TEST_fL_f (rootn, -snan_value, 3, qnan_value, INVALID_EXCEPTION),
TEST_fL_f (rootn, snan_value, -3, qnan_value, INVALID_EXCEPTION),
TEST_fL_f (rootn, -snan_value, -3, qnan_value, INVALID_EXCEPTION),
TEST_fL_f (rootn, snan_value, LLONG_MAX, qnan_value, INVALID_EXCEPTION),
TEST_fL_f (rootn, -snan_value, LLONG_MAX, qnan_value, INVALID_EXCEPTION),
TEST_fL_f (rootn, snan_value, LLONG_MIN, qnan_value, INVALID_EXCEPTION),
TEST_fL_f (rootn, -snan_value, LLONG_MIN, qnan_value, INVALID_EXCEPTION),
TEST_fL_f (rootn, plus_zero, -1, plus_infty, DIVIDE_BY_ZERO_EXCEPTION|ERRNO_ERANGE),
TEST_fL_f (rootn, minus_zero, -1, minus_infty, DIVIDE_BY_ZERO_EXCEPTION|ERRNO_ERANGE),
TEST_fL_f (rootn, plus_zero, -2, plus_infty, DIVIDE_BY_ZERO_EXCEPTION|ERRNO_ERANGE),
TEST_fL_f (rootn, minus_zero, -2, plus_infty, DIVIDE_BY_ZERO_EXCEPTION|ERRNO_ERANGE),
TEST_fL_f (rootn, plus_zero, -3, plus_infty, DIVIDE_BY_ZERO_EXCEPTION|ERRNO_ERANGE),
TEST_fL_f (rootn, minus_zero, -3, minus_infty, DIVIDE_BY_ZERO_EXCEPTION|ERRNO_ERANGE),
TEST_fL_f (rootn, plus_zero, -4, plus_infty, DIVIDE_BY_ZERO_EXCEPTION|ERRNO_ERANGE),
TEST_fL_f (rootn, minus_zero, -4, plus_infty, DIVIDE_BY_ZERO_EXCEPTION|ERRNO_ERANGE),
TEST_fL_f (rootn, plus_zero, -5, plus_infty, DIVIDE_BY_ZERO_EXCEPTION|ERRNO_ERANGE),
TEST_fL_f (rootn, minus_zero, -5, minus_infty, DIVIDE_BY_ZERO_EXCEPTION|ERRNO_ERANGE),
TEST_fL_f (rootn, plus_zero, LLONG_MIN, plus_infty, DIVIDE_BY_ZERO_EXCEPTION|ERRNO_ERANGE),
TEST_fL_f (rootn, minus_zero, LLONG_MIN, plus_infty, DIVIDE_BY_ZERO_EXCEPTION|ERRNO_ERANGE),
TEST_fL_f (rootn, plus_infty, 1, plus_infty, ERRNO_UNCHANGED),
TEST_fL_f (rootn, minus_infty, 1, minus_infty, ERRNO_UNCHANGED),
TEST_fL_f (rootn, plus_infty, 2, plus_infty, ERRNO_UNCHANGED),
TEST_fL_f (rootn, plus_infty, 3, plus_infty, ERRNO_UNCHANGED),
TEST_fL_f (rootn, minus_infty, 3, minus_infty, ERRNO_UNCHANGED),
TEST_fL_f (rootn, plus_infty, 4, plus_infty, ERRNO_UNCHANGED),
TEST_fL_f (rootn, plus_infty, 5, plus_infty, ERRNO_UNCHANGED),
TEST_fL_f (rootn, minus_infty, 5, minus_infty, ERRNO_UNCHANGED),
TEST_fL_f (rootn, plus_infty, LLONG_MAX, plus_infty, ERRNO_UNCHANGED),
TEST_fL_f (rootn, minus_infty, LLONG_MAX, minus_infty, ERRNO_UNCHANGED),
TEST_fL_f (rootn, plus_infty, -1, plus_zero, ERRNO_UNCHANGED),
TEST_fL_f (rootn, minus_infty, -1, minus_zero, ERRNO_UNCHANGED),
TEST_fL_f (rootn, plus_infty, -2, plus_zero, ERRNO_UNCHANGED),
TEST_fL_f (rootn, plus_infty, -3, plus_zero, ERRNO_UNCHANGED),
TEST_fL_f (rootn, minus_infty, -3, minus_zero, ERRNO_UNCHANGED),
TEST_fL_f (rootn, plus_infty, -4, plus_zero, ERRNO_UNCHANGED),
TEST_fL_f (rootn, plus_infty, -5, plus_zero, ERRNO_UNCHANGED),
TEST_fL_f (rootn, minus_infty, -5, minus_zero, ERRNO_UNCHANGED),
TEST_fL_f (rootn, plus_infty, -0x7fffffffffffffffLL, plus_zero, ERRNO_UNCHANGED),
TEST_fL_f (rootn, minus_infty, -0x7fffffffffffffffLL, minus_zero, ERRNO_UNCHANGED),
TEST_fL_f (rootn, plus_infty, LLONG_MIN, plus_zero, ERRNO_UNCHANGED),
AUTO_TESTS_fL_f (rootn),
};
static void
rootn_test (void)
{
ALL_RM_TEST (rootn, 0, rootn_test_data, RUN_TEST_LOOP_fL_f, END);
}
static void
do_test (void)
{
rootn_test ();
}
/*
* Local Variables:
* mode:c
* End:
*/

81
math/s_rootn_template.c Normal file
View File

@ -0,0 +1,81 @@
/* Return the Yth root of X for integer Y.
Copyright (C) 2025 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 <errno.h>
#include <limits.h>
#include <math.h>
#include <math-narrow-eval.h>
#include <math_private.h>
FLOAT
M_DECL_FUNC (__rootn) (FLOAT x, long long int y)
{
if (y == 0)
{
/* This is a domain error even if X is a NaN. */
__set_errno (EDOM);
return M_LIT (0.0) / M_LIT (0.0);
}
if (isnan (x))
return x + x;
if (x < 0 && (y & 1) == 0)
{
__set_errno (EDOM);
return (x - x) / (x - x);
}
if (isinf (x))
/* If X is negative, then Y is odd. */
return y > 0 ? x : M_LIT (1.0) / x;
if (x == M_LIT (0.0))
{
if (y > 0)
return (y & 1) == 0 ? M_LIT (0.0) : x;
else
{
__set_errno (ERANGE);
return M_LIT (1.0) / ((y & 1) == 0 ? M_LIT (0.0) : x);
}
}
if (y == 1)
return x;
if (y == -1)
{
/* Overflow is possible in this case (and underflow, though not
underflow to zero). */
FLOAT ret = math_narrow_eval (M_LIT (1.0) / x);
if (isinf (ret))
__set_errno (ERANGE);
return ret;
}
/* Now X is finite and no overflow or underflow (or results even
close to overflowing or underflowing) is possible. If X is
negative, then Y is odd; the result should have the sign of X. */
if (y >= 4 * M_MAX_EXP || y <= -4 * M_MAX_EXP)
/* No extra precision is needed in computing the exponent; it is
OK if Y cannot be exactly represented in type FLOAT. */
return M_COPYSIGN (M_SUF (__ieee754_pow) (M_FABS (x), M_LIT (1.0) / y), x);
/* Compute 1 / Y with extra precision. Y can be exactly represented
in type FLOAT. */
FLOAT qhi, qlo;
qhi = math_narrow_eval (M_LIT (1.0) / y);
qlo = M_SUF (fma) (-qhi, y, 1.0) / y;
return M_COPYSIGN (M_SUF (__ieee754_pow) (M_FABS (x), qhi)
* M_SUF (__ieee754_pow) (M_FABS (x), qlo), x);
}
declare_mgen_alias (__rootn, rootn);

View File

@ -48,7 +48,7 @@ volatile int count_cdouble;
volatile int count_cfloat;
volatile int count_cldouble;
#define NCALLS 192
#define NCALLS 194
#define NCALLS_INT 4
#define NCCALLS 47
@ -270,6 +270,7 @@ F(compile_test) (void)
a = pow (pow (x, a), pow (c, b));
b = pown (pown (x, k), k);
b = compoundn (compoundn (x, k), k);
b = rootn (rootn (x, k), k);
a = powr (powr (x, a), powr (c, b));
b = sqrt (sqrt (a));
a = rsqrt (rsqrt (b));
@ -399,6 +400,7 @@ F(compile_test) (void)
a = pow (y, y);
a = pown (y, 12345);
a = compoundn (y, 12345);
a = rootn (y, 12345);
a = powr (y, y);
a = sqrt (y);
a = rsqrt (y);
@ -801,6 +803,14 @@ TYPE
return x + y;
}
TYPE
(F(rootn)) (TYPE x, long long int y)
{
++count;
P ();
return x + y;
}
TYPE
(F(sqrt)) (TYPE x)
{

View File

@ -934,6 +934,9 @@
/* Return X to the Y power. */
# define powr(Val1, Val2) __TGMATH_BINARY_REAL_ONLY (Val1, Val2, powr)
/* Return the Yth root of X. */
# define rootn(Val1, Val2) __TGMATH_BINARY_FIRST_REAL_ONLY (Val1, Val2, rootn)
/* Return 1/sqrt(X). */
# define rsqrt(Val) __TGMATH_UNARY_REAL_ONLY (Val, rsqrt)
#endif

View File

@ -157,6 +157,7 @@ libm {
__compoundnieee128;
__pownieee128;
__powrieee128;
__rootnieee128;
__rsqrtieee128;
}
}

View File

@ -181,6 +181,7 @@ libnldbl-calls = \
remainder \
remquo \
rint \
rootn \
round \
roundeven \
rsqrt \
@ -384,6 +385,7 @@ CFLAGS-nldbl-powr.c = -fno-builtin-powrl
CFLAGS-nldbl-remainder.c = -fno-builtin-remainderl -fno-builtin-dreml
CFLAGS-nldbl-remquo.c = -fno-builtin-remquol
CFLAGS-nldbl-rint.c = -fno-builtin-rintl
CFLAGS-nldbl-rootn.c = -fno-builtin-rootnl
CFLAGS-nldbl-round.c = -fno-builtin-roundl
CFLAGS-nldbl-roundeven.c = -fno-builtin-roundevenl
CFLAGS-nldbl-rsqrt.c = -fno-builtin-rsqrtl

View File

@ -0,0 +1,8 @@
#include "nldbl-compat.h"
double
attribute_hidden
rootnl (double x, long long int y)
{
return rootn (x, y);
}

View File

@ -1301,6 +1301,14 @@ GLIBC_2.42 powrf32x F
GLIBC_2.42 powrf64 F
GLIBC_2.42 powrf64x F
GLIBC_2.42 powrl F
GLIBC_2.42 rootn F
GLIBC_2.42 rootnf F
GLIBC_2.42 rootnf128 F
GLIBC_2.42 rootnf32 F
GLIBC_2.42 rootnf32x F
GLIBC_2.42 rootnf64 F
GLIBC_2.42 rootnf64x F
GLIBC_2.42 rootnl F
GLIBC_2.42 rsqrt F
GLIBC_2.42 rsqrtf F
GLIBC_2.42 rsqrtf128 F

View File

@ -1158,6 +1158,14 @@ GLIBC_2.42 powrf32x F
GLIBC_2.42 powrf64 F
GLIBC_2.42 powrf64x F
GLIBC_2.42 powrl F
GLIBC_2.42 rootn F
GLIBC_2.42 rootnf F
GLIBC_2.42 rootnf128 F
GLIBC_2.42 rootnf32 F
GLIBC_2.42 rootnf32x F
GLIBC_2.42 rootnf64 F
GLIBC_2.42 rootnf64x F
GLIBC_2.42 rootnl F
GLIBC_2.42 rsqrt F
GLIBC_2.42 rsqrtf F
GLIBC_2.42 rsqrtf128 F

View File

@ -1269,6 +1269,14 @@ GLIBC_2.42 powrf32x F
GLIBC_2.42 powrf64 F
GLIBC_2.42 powrf64x F
GLIBC_2.42 powrl F
GLIBC_2.42 rootn F
GLIBC_2.42 rootnf F
GLIBC_2.42 rootnf128 F
GLIBC_2.42 rootnf32 F
GLIBC_2.42 rootnf32x F
GLIBC_2.42 rootnf64 F
GLIBC_2.42 rootnf64x F
GLIBC_2.42 rootnl F
GLIBC_2.42 rsqrt F
GLIBC_2.42 rsqrtf F
GLIBC_2.42 rsqrtf128 F

View File

@ -1428,6 +1428,14 @@ GLIBC_2.42 powrf32x F
GLIBC_2.42 powrf64 F
GLIBC_2.42 powrf64x F
GLIBC_2.42 powrl F
GLIBC_2.42 rootn F
GLIBC_2.42 rootnf F
GLIBC_2.42 rootnf128 F
GLIBC_2.42 rootnf32 F
GLIBC_2.42 rootnf32x F
GLIBC_2.42 rootnf64 F
GLIBC_2.42 rootnf64x F
GLIBC_2.42 rootnl F
GLIBC_2.42 rsqrt F
GLIBC_2.42 rsqrtf F
GLIBC_2.42 rsqrtf128 F

View File

@ -847,6 +847,12 @@ GLIBC_2.42 powrf32 F
GLIBC_2.42 powrf32x F
GLIBC_2.42 powrf64 F
GLIBC_2.42 powrl F
GLIBC_2.42 rootn F
GLIBC_2.42 rootnf F
GLIBC_2.42 rootnf32 F
GLIBC_2.42 rootnf32x F
GLIBC_2.42 rootnf64 F
GLIBC_2.42 rootnl F
GLIBC_2.42 rsqrt F
GLIBC_2.42 rsqrtf F
GLIBC_2.42 rsqrtf32 F

View File

@ -938,6 +938,12 @@ GLIBC_2.42 powrf32 F
GLIBC_2.42 powrf32x F
GLIBC_2.42 powrf64 F
GLIBC_2.42 powrl F
GLIBC_2.42 rootn F
GLIBC_2.42 rootnf F
GLIBC_2.42 rootnf32 F
GLIBC_2.42 rootnf32x F
GLIBC_2.42 rootnf64 F
GLIBC_2.42 rootnl F
GLIBC_2.42 rsqrt F
GLIBC_2.42 rsqrtf F
GLIBC_2.42 rsqrtf32 F

View File

@ -938,6 +938,12 @@ GLIBC_2.42 powrf32 F
GLIBC_2.42 powrf32x F
GLIBC_2.42 powrf64 F
GLIBC_2.42 powrl F
GLIBC_2.42 rootn F
GLIBC_2.42 rootnf F
GLIBC_2.42 rootnf32 F
GLIBC_2.42 rootnf32x F
GLIBC_2.42 rootnf64 F
GLIBC_2.42 rootnl F
GLIBC_2.42 rsqrt F
GLIBC_2.42 rsqrtf F
GLIBC_2.42 rsqrtf32 F

View File

@ -913,6 +913,12 @@ GLIBC_2.42 powrf32 F
GLIBC_2.42 powrf32x F
GLIBC_2.42 powrf64 F
GLIBC_2.42 powrl F
GLIBC_2.42 rootn F
GLIBC_2.42 rootnf F
GLIBC_2.42 rootnf32 F
GLIBC_2.42 rootnf32x F
GLIBC_2.42 rootnf64 F
GLIBC_2.42 rootnl F
GLIBC_2.42 rsqrt F
GLIBC_2.42 rsqrtf F
GLIBC_2.42 rsqrtf32 F

View File

@ -938,6 +938,12 @@ GLIBC_2.42 powrf32 F
GLIBC_2.42 powrf32x F
GLIBC_2.42 powrf64 F
GLIBC_2.42 powrl F
GLIBC_2.42 rootn F
GLIBC_2.42 rootnf F
GLIBC_2.42 rootnf32 F
GLIBC_2.42 rootnf32x F
GLIBC_2.42 rootnf64 F
GLIBC_2.42 rootnl F
GLIBC_2.42 rsqrt F
GLIBC_2.42 rsqrtf F
GLIBC_2.42 rsqrtf32 F

View File

@ -1308,6 +1308,14 @@ GLIBC_2.42 powrf32x F
GLIBC_2.42 powrf64 F
GLIBC_2.42 powrf64x F
GLIBC_2.42 powrl F
GLIBC_2.42 rootn F
GLIBC_2.42 rootnf F
GLIBC_2.42 rootnf128 F
GLIBC_2.42 rootnf32 F
GLIBC_2.42 rootnf32x F
GLIBC_2.42 rootnf64 F
GLIBC_2.42 rootnf64x F
GLIBC_2.42 rootnl F
GLIBC_2.42 rsqrt F
GLIBC_2.42 rsqrtf F
GLIBC_2.42 rsqrtf128 F

View File

@ -1148,6 +1148,14 @@ GLIBC_2.42 powrf32x F
GLIBC_2.42 powrf64 F
GLIBC_2.42 powrf64x F
GLIBC_2.42 powrl F
GLIBC_2.42 rootn F
GLIBC_2.42 rootnf F
GLIBC_2.42 rootnf128 F
GLIBC_2.42 rootnf32 F
GLIBC_2.42 rootnf32x F
GLIBC_2.42 rootnf64 F
GLIBC_2.42 rootnf64x F
GLIBC_2.42 rootnl F
GLIBC_2.42 rsqrt F
GLIBC_2.42 rsqrtf F
GLIBC_2.42 rsqrtf128 F

View File

@ -938,6 +938,12 @@ GLIBC_2.42 powrf32 F
GLIBC_2.42 powrf32x F
GLIBC_2.42 powrf64 F
GLIBC_2.42 powrl F
GLIBC_2.42 rootn F
GLIBC_2.42 rootnf F
GLIBC_2.42 rootnf32 F
GLIBC_2.42 rootnf32x F
GLIBC_2.42 rootnf64 F
GLIBC_2.42 rootnl F
GLIBC_2.42 rsqrt F
GLIBC_2.42 rsqrtf F
GLIBC_2.42 rsqrtf32 F

View File

@ -974,6 +974,12 @@ GLIBC_2.42 powrf32 F
GLIBC_2.42 powrf32x F
GLIBC_2.42 powrf64 F
GLIBC_2.42 powrl F
GLIBC_2.42 rootn F
GLIBC_2.42 rootnf F
GLIBC_2.42 rootnf32 F
GLIBC_2.42 rootnf32x F
GLIBC_2.42 rootnf64 F
GLIBC_2.42 rootnl F
GLIBC_2.42 rsqrt F
GLIBC_2.42 rsqrtf F
GLIBC_2.42 rsqrtf32 F

View File

@ -938,6 +938,12 @@ GLIBC_2.42 powrf32 F
GLIBC_2.42 powrf32x F
GLIBC_2.42 powrf64 F
GLIBC_2.42 powrl F
GLIBC_2.42 rootn F
GLIBC_2.42 rootnf F
GLIBC_2.42 rootnf32 F
GLIBC_2.42 rootnf32x F
GLIBC_2.42 rootnf64 F
GLIBC_2.42 rootnl F
GLIBC_2.42 rsqrt F
GLIBC_2.42 rsqrtf F
GLIBC_2.42 rsqrtf32 F

View File

@ -938,6 +938,12 @@ GLIBC_2.42 powrf32 F
GLIBC_2.42 powrf32x F
GLIBC_2.42 powrf64 F
GLIBC_2.42 powrl F
GLIBC_2.42 rootn F
GLIBC_2.42 rootnf F
GLIBC_2.42 rootnf32 F
GLIBC_2.42 rootnf32x F
GLIBC_2.42 rootnf64 F
GLIBC_2.42 rootnl F
GLIBC_2.42 rsqrt F
GLIBC_2.42 rsqrtf F
GLIBC_2.42 rsqrtf32 F

View File

@ -938,6 +938,12 @@ GLIBC_2.42 powrf32 F
GLIBC_2.42 powrf32x F
GLIBC_2.42 powrf64 F
GLIBC_2.42 powrl F
GLIBC_2.42 rootn F
GLIBC_2.42 rootnf F
GLIBC_2.42 rootnf32 F
GLIBC_2.42 rootnf32x F
GLIBC_2.42 rootnf64 F
GLIBC_2.42 rootnl F
GLIBC_2.42 rsqrt F
GLIBC_2.42 rsqrtf F
GLIBC_2.42 rsqrtf32 F

View File

@ -1269,6 +1269,14 @@ GLIBC_2.42 powrf32x F
GLIBC_2.42 powrf64 F
GLIBC_2.42 powrf64x F
GLIBC_2.42 powrl F
GLIBC_2.42 rootn F
GLIBC_2.42 rootnf F
GLIBC_2.42 rootnf128 F
GLIBC_2.42 rootnf32 F
GLIBC_2.42 rootnf32x F
GLIBC_2.42 rootnf64 F
GLIBC_2.42 rootnf64x F
GLIBC_2.42 rootnl F
GLIBC_2.42 rsqrt F
GLIBC_2.42 rsqrtf F
GLIBC_2.42 rsqrtf128 F

View File

@ -847,6 +847,12 @@ GLIBC_2.42 powrf32 F
GLIBC_2.42 powrf32x F
GLIBC_2.42 powrf64 F
GLIBC_2.42 powrl F
GLIBC_2.42 rootn F
GLIBC_2.42 rootnf F
GLIBC_2.42 rootnf32 F
GLIBC_2.42 rootnf32x F
GLIBC_2.42 rootnf64 F
GLIBC_2.42 rootnl F
GLIBC_2.42 rsqrt F
GLIBC_2.42 rsqrtf F
GLIBC_2.42 rsqrtf32 F

View File

@ -1085,6 +1085,12 @@ GLIBC_2.42 powrf32 F
GLIBC_2.42 powrf32x F
GLIBC_2.42 powrf64 F
GLIBC_2.42 powrl F
GLIBC_2.42 rootn F
GLIBC_2.42 rootnf F
GLIBC_2.42 rootnf32 F
GLIBC_2.42 rootnf32x F
GLIBC_2.42 rootnf64 F
GLIBC_2.42 rootnl F
GLIBC_2.42 rsqrt F
GLIBC_2.42 rsqrtf F
GLIBC_2.42 rsqrtf32 F

View File

@ -1084,6 +1084,12 @@ GLIBC_2.42 powrf32 F
GLIBC_2.42 powrf32x F
GLIBC_2.42 powrf64 F
GLIBC_2.42 powrl F
GLIBC_2.42 rootn F
GLIBC_2.42 rootnf F
GLIBC_2.42 rootnf32 F
GLIBC_2.42 rootnf32x F
GLIBC_2.42 rootnf64 F
GLIBC_2.42 rootnl F
GLIBC_2.42 rsqrt F
GLIBC_2.42 rsqrtf F
GLIBC_2.42 rsqrtf32 F

View File

@ -1078,6 +1078,12 @@ GLIBC_2.42 powrf32 F
GLIBC_2.42 powrf32x F
GLIBC_2.42 powrf64 F
GLIBC_2.42 powrl F
GLIBC_2.42 rootn F
GLIBC_2.42 rootnf F
GLIBC_2.42 rootnf32 F
GLIBC_2.42 rootnf32x F
GLIBC_2.42 rootnf64 F
GLIBC_2.42 rootnl F
GLIBC_2.42 rsqrt F
GLIBC_2.42 rsqrtf F
GLIBC_2.42 rsqrtf32 F

View File

@ -1432,6 +1432,7 @@ GLIBC_2.41 tanpil F
GLIBC_2.42 __compoundnieee128 F
GLIBC_2.42 __pownieee128 F
GLIBC_2.42 __powrieee128 F
GLIBC_2.42 __rootnieee128 F
GLIBC_2.42 __rsqrtieee128 F
GLIBC_2.42 compoundn F
GLIBC_2.42 compoundnf F
@ -1457,6 +1458,14 @@ GLIBC_2.42 powrf32x F
GLIBC_2.42 powrf64 F
GLIBC_2.42 powrf64x F
GLIBC_2.42 powrl F
GLIBC_2.42 rootn F
GLIBC_2.42 rootnf F
GLIBC_2.42 rootnf128 F
GLIBC_2.42 rootnf32 F
GLIBC_2.42 rootnf32x F
GLIBC_2.42 rootnf64 F
GLIBC_2.42 rootnf64x F
GLIBC_2.42 rootnl F
GLIBC_2.42 rsqrt F
GLIBC_2.42 rsqrtf F
GLIBC_2.42 rsqrtf128 F

View File

@ -1148,6 +1148,14 @@ GLIBC_2.42 powrf32x F
GLIBC_2.42 powrf64 F
GLIBC_2.42 powrf64x F
GLIBC_2.42 powrl F
GLIBC_2.42 rootn F
GLIBC_2.42 rootnf F
GLIBC_2.42 rootnf128 F
GLIBC_2.42 rootnf32 F
GLIBC_2.42 rootnf32x F
GLIBC_2.42 rootnf64 F
GLIBC_2.42 rootnf64x F
GLIBC_2.42 rootnl F
GLIBC_2.42 rsqrt F
GLIBC_2.42 rsqrtf F
GLIBC_2.42 rsqrtf128 F

View File

@ -1245,6 +1245,14 @@ GLIBC_2.42 powrf32x F
GLIBC_2.42 powrf64 F
GLIBC_2.42 powrf64x F
GLIBC_2.42 powrl F
GLIBC_2.42 rootn F
GLIBC_2.42 rootnf F
GLIBC_2.42 rootnf128 F
GLIBC_2.42 rootnf32 F
GLIBC_2.42 rootnf32x F
GLIBC_2.42 rootnf64 F
GLIBC_2.42 rootnf64x F
GLIBC_2.42 rootnl F
GLIBC_2.42 rsqrt F
GLIBC_2.42 rsqrtf F
GLIBC_2.42 rsqrtf128 F

View File

@ -1372,6 +1372,14 @@ GLIBC_2.42 powrf32x F
GLIBC_2.42 powrf64 F
GLIBC_2.42 powrf64x F
GLIBC_2.42 powrl F
GLIBC_2.42 rootn F
GLIBC_2.42 rootnf F
GLIBC_2.42 rootnf128 F
GLIBC_2.42 rootnf32 F
GLIBC_2.42 rootnf32x F
GLIBC_2.42 rootnf64 F
GLIBC_2.42 rootnf64x F
GLIBC_2.42 rootnl F
GLIBC_2.42 rsqrt F
GLIBC_2.42 rsqrtf F
GLIBC_2.42 rsqrtf128 F

View File

@ -1372,6 +1372,14 @@ GLIBC_2.42 powrf32x F
GLIBC_2.42 powrf64 F
GLIBC_2.42 powrf64x F
GLIBC_2.42 powrl F
GLIBC_2.42 rootn F
GLIBC_2.42 rootnf F
GLIBC_2.42 rootnf128 F
GLIBC_2.42 rootnf32 F
GLIBC_2.42 rootnf32x F
GLIBC_2.42 rootnf64 F
GLIBC_2.42 rootnf64x F
GLIBC_2.42 rootnl F
GLIBC_2.42 rsqrt F
GLIBC_2.42 rsqrtf F
GLIBC_2.42 rsqrtf128 F

View File

@ -938,6 +938,12 @@ GLIBC_2.42 powrf32 F
GLIBC_2.42 powrf32x F
GLIBC_2.42 powrf64 F
GLIBC_2.42 powrl F
GLIBC_2.42 rootn F
GLIBC_2.42 rootnf F
GLIBC_2.42 rootnf32 F
GLIBC_2.42 rootnf32x F
GLIBC_2.42 rootnf64 F
GLIBC_2.42 rootnl F
GLIBC_2.42 rsqrt F
GLIBC_2.42 rsqrtf F
GLIBC_2.42 rsqrtf32 F

View File

@ -938,6 +938,12 @@ GLIBC_2.42 powrf32 F
GLIBC_2.42 powrf32x F
GLIBC_2.42 powrf64 F
GLIBC_2.42 powrl F
GLIBC_2.42 rootn F
GLIBC_2.42 rootnf F
GLIBC_2.42 rootnf32 F
GLIBC_2.42 rootnf32x F
GLIBC_2.42 rootnf64 F
GLIBC_2.42 rootnl F
GLIBC_2.42 rsqrt F
GLIBC_2.42 rsqrtf F
GLIBC_2.42 rsqrtf32 F

View File

@ -1379,6 +1379,14 @@ GLIBC_2.42 powrf32x F
GLIBC_2.42 powrf64 F
GLIBC_2.42 powrf64x F
GLIBC_2.42 powrl F
GLIBC_2.42 rootn F
GLIBC_2.42 rootnf F
GLIBC_2.42 rootnf128 F
GLIBC_2.42 rootnf32 F
GLIBC_2.42 rootnf32x F
GLIBC_2.42 rootnf64 F
GLIBC_2.42 rootnf64x F
GLIBC_2.42 rootnl F
GLIBC_2.42 rsqrt F
GLIBC_2.42 rsqrtf F
GLIBC_2.42 rsqrtf128 F

View File

@ -1269,6 +1269,14 @@ GLIBC_2.42 powrf32x F
GLIBC_2.42 powrf64 F
GLIBC_2.42 powrf64x F
GLIBC_2.42 powrl F
GLIBC_2.42 rootn F
GLIBC_2.42 rootnf F
GLIBC_2.42 rootnf128 F
GLIBC_2.42 rootnf32 F
GLIBC_2.42 rootnf32x F
GLIBC_2.42 rootnf64 F
GLIBC_2.42 rootnf64x F
GLIBC_2.42 rootnl F
GLIBC_2.42 rsqrt F
GLIBC_2.42 rsqrtf F
GLIBC_2.42 rsqrtf128 F

View File

@ -1302,6 +1302,14 @@ GLIBC_2.42 powrf32x F
GLIBC_2.42 powrf64 F
GLIBC_2.42 powrf64x F
GLIBC_2.42 powrl F
GLIBC_2.42 rootn F
GLIBC_2.42 rootnf F
GLIBC_2.42 rootnf128 F
GLIBC_2.42 rootnf32 F
GLIBC_2.42 rootnf32x F
GLIBC_2.42 rootnf64 F
GLIBC_2.42 rootnf64x F
GLIBC_2.42 rootnl F
GLIBC_2.42 rsqrt F
GLIBC_2.42 rsqrtf F
GLIBC_2.42 rsqrtf128 F

View File

@ -1302,6 +1302,14 @@ GLIBC_2.42 powrf32x F
GLIBC_2.42 powrf64 F
GLIBC_2.42 powrf64x F
GLIBC_2.42 powrl F
GLIBC_2.42 rootn F
GLIBC_2.42 rootnf F
GLIBC_2.42 rootnf128 F
GLIBC_2.42 rootnf32 F
GLIBC_2.42 rootnf32x F
GLIBC_2.42 rootnf64 F
GLIBC_2.42 rootnf64x F
GLIBC_2.42 rootnl F
GLIBC_2.42 rsqrt F
GLIBC_2.42 rsqrtf F
GLIBC_2.42 rsqrtf128 F