aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--NEWS2
-rw-r--r--manual/math.texi30
-rw-r--r--math/Makefile14
-rw-r--r--math/Versions4
-rw-r--r--math/auto-libm-test-in201
-rw-r--r--math/auto-libm-test-out-exp10m14491
-rw-r--r--math/auto-libm-test-out-exp2m14348
-rw-r--r--math/bits/mathcalls.h6
-rw-r--r--math/gen-auto-libm-tests.c2
-rwxr-xr-xmath/gen-tgmath-tests.py2
-rw-r--r--math/libm-test-exp10m1.inc49
-rw-r--r--math/libm-test-exp2m1.inc49
-rw-r--r--math/s_exp10m1_template.c45
-rw-r--r--math/s_exp2m1_template.c65
-rw-r--r--math/test-tgmath.c22
-rw-r--r--math/tgmath.h6
-rw-r--r--sysdeps/i386/i686/fpu/multiarch/libm-test-ulps48
-rw-r--r--sysdeps/ieee754/ldbl-128ibm-compat/Versions2
-rw-r--r--sysdeps/ieee754/ldbl-opt/Makefile4
-rw-r--r--sysdeps/ieee754/ldbl-opt/nldbl-exp10m1.c8
-rw-r--r--sysdeps/ieee754/ldbl-opt/nldbl-exp2m1.c8
-rw-r--r--sysdeps/mach/hurd/i386/libm.abilist16
-rw-r--r--sysdeps/mach/hurd/x86_64/libm.abilist16
-rw-r--r--sysdeps/powerpc/powerpc64/le/fpu/multiarch/Makefile5
-rw-r--r--sysdeps/powerpc/powerpc64/le/fpu/multiarch/float128_private.h2
-rw-r--r--sysdeps/powerpc/powerpc64/le/fpu/multiarch/math-type-macros-float128.h3
-rw-r--r--sysdeps/unix/sysv/linux/aarch64/libm.abilist16
-rw-r--r--sysdeps/unix/sysv/linux/alpha/libm.abilist16
-rw-r--r--sysdeps/unix/sysv/linux/arc/libm.abilist12
-rw-r--r--sysdeps/unix/sysv/linux/arm/be/libm.abilist12
-rw-r--r--sysdeps/unix/sysv/linux/arm/le/libm.abilist12
-rw-r--r--sysdeps/unix/sysv/linux/csky/libm.abilist12
-rw-r--r--sysdeps/unix/sysv/linux/hppa/libm.abilist12
-rw-r--r--sysdeps/unix/sysv/linux/i386/libm.abilist16
-rw-r--r--sysdeps/unix/sysv/linux/loongarch/lp64/libm.abilist16
-rw-r--r--sysdeps/unix/sysv/linux/m68k/coldfire/libm.abilist12
-rw-r--r--sysdeps/unix/sysv/linux/m68k/m680x0/libm.abilist12
-rw-r--r--sysdeps/unix/sysv/linux/microblaze/be/libm.abilist12
-rw-r--r--sysdeps/unix/sysv/linux/microblaze/le/libm.abilist12
-rw-r--r--sysdeps/unix/sysv/linux/mips/mips32/libm.abilist12
-rw-r--r--sysdeps/unix/sysv/linux/mips/mips64/libm.abilist16
-rw-r--r--sysdeps/unix/sysv/linux/nios2/libm.abilist12
-rw-r--r--sysdeps/unix/sysv/linux/or1k/libm.abilist12
-rw-r--r--sysdeps/unix/sysv/linux/powerpc/powerpc32/fpu/libm.abilist12
-rw-r--r--sysdeps/unix/sysv/linux/powerpc/powerpc32/nofpu/libm.abilist12
-rw-r--r--sysdeps/unix/sysv/linux/powerpc/powerpc64/be/libm.abilist12
-rw-r--r--sysdeps/unix/sysv/linux/powerpc/powerpc64/le/libm.abilist18
-rw-r--r--sysdeps/unix/sysv/linux/riscv/rv32/libm.abilist16
-rw-r--r--sysdeps/unix/sysv/linux/riscv/rv64/libm.abilist16
-rw-r--r--sysdeps/unix/sysv/linux/s390/s390-32/libm.abilist16
-rw-r--r--sysdeps/unix/sysv/linux/s390/s390-64/libm.abilist16
-rw-r--r--sysdeps/unix/sysv/linux/sh/be/libm.abilist12
-rw-r--r--sysdeps/unix/sysv/linux/sh/le/libm.abilist12
-rw-r--r--sysdeps/unix/sysv/linux/sparc/sparc32/libm.abilist16
-rw-r--r--sysdeps/unix/sysv/linux/sparc/sparc64/libm.abilist16
-rw-r--r--sysdeps/unix/sysv/linux/x86_64/64/libm.abilist16
-rw-r--r--sysdeps/unix/sysv/linux/x86_64/x32/libm.abilist16
-rw-r--r--sysdeps/x86_64/fpu/libm-test-ulps48
58 files changed, 9923 insertions, 3 deletions
diff --git a/NEWS b/NEWS
index ad5a7d6503..f626896aa0 100644
--- a/NEWS
+++ b/NEWS
@@ -26,6 +26,8 @@ Major new features:
functions for float, double, long double, _FloatN and _FloatNx, and a
type-generic macro in <tgmath.h>.
+ - Exponential functions: exp2m1, exp10m1.
+
- Logarithmic functions: log2p1, log10p1, logp1.
* A new tunable, glibc.rtld.enable_secure, used to run a program
diff --git a/manual/math.texi b/manual/math.texi
index 18b7173bf0..e4f9122609 100644
--- a/manual/math.texi
+++ b/manual/math.texi
@@ -740,6 +740,36 @@ near zero---a case where @code{exp (@var{x}) - 1} would be inaccurate owing
to subtraction of two numbers that are nearly equal.
@end deftypefun
+@deftypefun double exp2m1 (double @var{x})
+@deftypefunx float exp2m1f (float @var{x})
+@deftypefunx {long double} exp2m1l (long double @var{x})
+@deftypefunx _FloatN exp2m1fN (_Float@var{N} @var{x})
+@deftypefunx _FloatNx exp2m1fNx (_Float@var{N}x @var{x})
+@standards{TS 18661-4:2015, math.h}
+@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}}
+These functions return a value equivalent to @code{exp2 (@var{x}) - 1}.
+They are computed in a way that is accurate even if @var{x} is
+near zero---a case where @code{exp2 (@var{x}) - 1} would be inaccurate owing
+to subtraction of two numbers that are nearly equal.
+
+The @code{exp2m1} functions are from TS 18661-4:2015.
+@end deftypefun
+
+@deftypefun double exp10m1 (double @var{x})
+@deftypefunx float exp10m1f (float @var{x})
+@deftypefunx {long double} exp10m1l (long double @var{x})
+@deftypefunx _FloatN exp10m1fN (_Float@var{N} @var{x})
+@deftypefunx _FloatNx exp10m1fNx (_Float@var{N}x @var{x})
+@standards{TS 18661-4:2015, math.h}
+@safety{@prelim{}@mtsafe{}@assafe{}@acsafe{}}
+These functions return a value equivalent to @code{exp10 (@var{x}) - 1}.
+They are computed in a way that is accurate even if @var{x} is
+near zero---a case where @code{exp10 (@var{x}) - 1} would be inaccurate owing
+to subtraction of two numbers that are nearly equal.
+
+The @code{exp10m1} functions are from TS 18661-4:2015.
+@end deftypefun
+
@deftypefun double log1p (double @var{x})
@deftypefunx float log1pf (float @var{x})
@deftypefunx {long double} log1pl (long double @var{x})
diff --git a/math/Makefile b/math/Makefile
index 95085d9601..f06d370383 100644
--- a/math/Makefile
+++ b/math/Makefile
@@ -113,6 +113,8 @@ gen-libm-calls = \
s_csqrtF \
s_ctanF \
s_ctanhF \
+ s_exp10m1F \
+ s_exp2m1F \
s_fdimF \
s_fmaxF \
s_fmaximumF \
@@ -643,6 +645,8 @@ libm-test-funcs-auto = \
exp \
exp2 \
exp10 \
+ exp10m1 \
+ exp2m1 \
expm1 \
fma \
hypot \
@@ -651,10 +655,10 @@ libm-test-funcs-auto = \
jn \
lgamma \
log \
+ log2 \
log10 \
log10p1 \
log1p \
- log2 \
log2p1 \
pow \
sin \
@@ -932,8 +936,10 @@ tgmath3-macros = \
erf \
erfc \
exp \
+ exp10m1 \
exp2 \
exp10 \
+ exp2m1 \
expm1 \
fabs \
fdim \
@@ -1328,7 +1334,9 @@ CFLAGS-s_erf.c += -fno-builtin-erfl
CFLAGS-s_erfc.c += -fno-builtin-erfcl
CFLAGS-e_exp.c += -fno-builtin-expl
CFLAGS-w_exp10.c += -fno-builtin-exp10l
+CFLAGS-s_exp10m1.c += -fno-builtin-exp10m1l
CFLAGS-e_exp2.c += -fno-builtin-exp2l
+CFLAGS-s_exp2m1.c += -fno-builtin-exp2m1l
CFLAGS-s_expm1.c += -fno-builtin-expm1l
CFLAGS-s_f32xaddf64.c += -fno-builtin-daddl
CFLAGS-s_f32xdivf64.c += -fno-builtin-ddivl
@@ -1464,7 +1472,9 @@ CFLAGS-s_erf.c += -fno-builtin-erff32x -fno-builtin-erff64
CFLAGS-s_erfc.c += -fno-builtin-erfcf32x -fno-builtin-erfcf64
CFLAGS-e_exp.c += -fno-builtin-expf32x -fno-builtin-expf64
CFLAGS-w_exp10.c += -fno-builtin-exp10f32x -fno-builtin-exp10f64
+CFLAGS-s_exp10m1.c += -fno-builtin-exp10m1f32x -fno-builtin-exp10m1f64
CFLAGS-e_exp2.c += -fno-builtin-exp2f32x -fno-builtin-exp2f64
+CFLAGS-s_exp2m1.c += -fno-builtin-exp2m1f32x -fno-builtin-exp2m1f64
CFLAGS-s_expm1.c += -fno-builtin-expm1f32x -fno-builtin-expm1f64
CFLAGS-s_fabs.c += -fno-builtin-fabsf32x -fno-builtin-fabsf64
CFLAGS-s_fadd.c += -fno-builtin-f32addf32x -fno-builtin-f32addf64
@@ -1586,7 +1596,9 @@ CFLAGS-s_erff.c += -fno-builtin-erff32
CFLAGS-s_erfcf.c += -fno-builtin-erfcf32
CFLAGS-e_expf.c += -fno-builtin-expf32
CFLAGS-w_exp10f.c += -fno-builtin-exp10f32
+CFLAGS-s_exp10m1f.c += -fno-builtin-exp10m1f32
CFLAGS-e_exp2f.c += -fno-builtin-exp2f32
+CFLAGS-s_exp2m1f.c += -fno-builtin-exp2m1f32
CFLAGS-s_expm1f.c += -fno-builtin-expm1f32
CFLAGS-s_fabsf.c += -fno-builtin-fabsf32
CFLAGS-s_fdimf.c += -fno-builtin-fdimf32
diff --git a/math/Versions b/math/Versions
index 633722f8c6..49d61f212f 100644
--- a/math/Versions
+++ b/math/Versions
@@ -641,10 +641,14 @@ libm {
}
GLIBC_2.40 {
# Functions not involving _Float64x or _Float128, for all configurations.
+ exp2m1; exp2m1f; exp2m1l; exp2m1f32; exp2m1f64; exp2m1f32x;
+ exp10m1; exp10m1f; exp10m1l; exp10m1f32; exp10m1f64; exp10m1f32x;
log2p1; log2p1f; log2p1l; log2p1f32; log2p1f64; log2p1f32x;
log10p1; log10p1f; log10p1l; log10p1f32; log10p1f64; log10p1f32x;
logp1; logp1f; logp1l; logp1f32; logp1f64; logp1f32x;
# Functions involving _Float64x or _Float128, for some configurations.
+ exp2m1f64x; exp2m1f128;
+ exp10m1f64x; exp10m1f128;
log2p1f64x; log2p1f128;
log10p1f64x; log10p1f128;
logp1f64x; logp1f128;
diff --git a/math/auto-libm-test-in b/math/auto-libm-test-in
index 16b1d3e0c6..8f0c3d87bb 100644
--- a/math/auto-libm-test-in
+++ b/math/auto-libm-test-in
@@ -5249,6 +5249,106 @@ exp10 0xe.8b349p+4
exp10 0x3.495c78p+0
exp10 0xf.f33f6p+0
+exp10m1 0
+exp10m1 -0
+exp10m1 1
+exp10m1 0.75
+exp10m1 2
+exp10m1 3
+exp10m1 4
+exp10m1 5
+exp10m1 10
+exp10m1 15
+exp10m1 20
+exp10m1 25
+exp10m1 30
+exp10m1 35
+exp10m1 40
+exp10m1 50.0
+exp10m1 60
+exp10m1 70
+exp10m1 80
+exp10m1 90
+exp10m1 100
+exp10m1 127.0
+exp10m1 500.0
+exp10m1 11356.25
+exp10m1 -10.0
+exp10m1 -16.0
+exp10m1 -17.0
+exp10m1 -18.0
+exp10m1 -36.0
+exp10m1 -37.0
+exp10m1 -38.0
+exp10m1 -44.0
+exp10m1 -45.0
+exp10m1 -46.0
+exp10m1 -73.0
+exp10m1 -74.0
+exp10m1 -75.0
+exp10m1 -78.0
+exp10m1 -79.0
+exp10m1 -80.0
+exp10m1 -100.0
+exp10m1 -1000.0
+exp10m1 -10000.0
+exp10m1 -100000.0
+exp10m1 100000.0
+exp10m1 max
+exp10m1 -max
+exp10m1 0x1p-2
+exp10m1 -0x1p-2
+exp10m1 0x1p-10
+exp10m1 -0x1p-10
+exp10m1 0x1p-20
+exp10m1 -0x1p-20
+exp10m1 0x1p-29
+exp10m1 -0x1p-29
+exp10m1 0x1p-32
+exp10m1 -0x1p-32
+exp10m1 0x1p-50
+exp10m1 -0x1p-50
+exp10m1 0x1p-64
+exp10m1 -0x1p-64
+exp10m1 0x1p-100
+exp10m1 -0x1p-100
+exp10m1 0x1p-600
+exp10m1 -0x1p-600
+exp10m1 0x1p-10000
+exp10m1 -0x1p-10000
+exp10m1 0xe.4152ac57cd1ea7ap-60
+exp10m1 0x6.660247486aed8p-4
+exp10m1 0x6.289a78p-4
+exp10m1 0x6.1b4d318238d4a2a8p-4
+exp10m1 0x5.fb8dc64e91a74p-4
+exp10m1 0x3.735f497c4e67535cp-4
+exp10m1 -0x7.d6c50b469d404p+0
+exp10m1 0x4.857de8p+4
+exp10m1 0x5.dfeb68p-4
+exp10m1 0x4.0000000000000028p-16384
+exp10m1 0x5.8b911eb6733469c8p-4
+exp10m1 0x5.a343df0d680099a7a1a873a751a8p-4
+exp10m1 min
+exp10m1 -min
+exp10m1 min_subnorm
+exp10m1 -min_subnorm
+exp10m1 0x2.688268p+4
+exp10m1 0x2.68826cp+4
+exp10m1 0x1.34413509f79fep+8
+exp10m1 0x1.34413509f79ffp+8
+exp10m1 0x1.34413509f79fef2f625b0205a88p+8 xfail:ibm128-libgcc
+exp10m1 0x1.34413509f79fef2f625b0205a9p+8 xfail:ibm128-libgcc
+exp10m1 0x1.34413509f79fef3p+12
+exp10m1 0x1.34413509f79fef32p+12
+exp10m1 0x1.34413509f79fef311f12b35816f9p+12
+exp10m1 0x1.34413509f79fef311f12b35816fap+12
+exp10m1 0x1p-128
+exp10m1 0x1p-1024
+exp10m1 0x1p-16384
+exp10m1 -0x1p-128
+exp10m1 -0x1p-1024
+exp10m1 -0x1p-16384
+
exp2 0
exp2 -0
exp2 10
@@ -5353,6 +5453,107 @@ exp2 -0xc.1bf12p-16
exp2 -0x4.8ce878p-4
exp2 0xf.93d18bf7be8d272p-4
+exp2m1 0
+exp2m1 -0
+exp2m1 1
+exp2m1 0.75
+exp2m1 2
+exp2m1 3
+exp2m1 4
+exp2m1 5
+exp2m1 10
+exp2m1 15
+exp2m1 20
+exp2m1 25
+exp2m1 30
+exp2m1 35
+exp2m1 40
+exp2m1 50.0
+exp2m1 60
+exp2m1 70
+exp2m1 80
+exp2m1 90
+exp2m1 100
+exp2m1 127.0
+exp2m1 500.0
+exp2m1 11356.25
+exp2m1 -10.0
+exp2m1 -16.0
+exp2m1 -17.0
+exp2m1 -18.0
+exp2m1 -36.0
+exp2m1 -37.0
+exp2m1 -38.0
+exp2m1 -44.0
+exp2m1 -45.0
+exp2m1 -46.0
+exp2m1 -73.0
+exp2m1 -74.0
+exp2m1 -75.0
+exp2m1 -78.0
+exp2m1 -79.0
+exp2m1 -80.0
+exp2m1 -100.0
+exp2m1 -1000.0
+exp2m1 -10000.0
+exp2m1 -100000.0
+exp2m1 100000.0
+exp2m1 max
+exp2m1 -max
+exp2m1 0x1p-2
+exp2m1 -0x1p-2
+exp2m1 0x1p-10
+exp2m1 -0x1p-10
+exp2m1 0x1p-20