aboutsummaryrefslogtreecommitdiff
path: root/math
diff options
context:
space:
mode:
authorJoseph Myers <josmyers@redhat.com>2024-05-20 13:41:39 +0000
committerJoseph Myers <josmyers@redhat.com>2024-05-20 13:41:39 +0000
commit79c52daf4740b00bef43e4f5a4281b3480459b38 (patch)
treecc15e0f7402870b20dbebf8d539df033806d48b0 /math
parentcf0ca8d52e1653d4aa4311a4649af8dc541ce6b4 (diff)
downloadglibc-79c52daf4740b00bef43e4f5a4281b3480459b38.tar.xz
glibc-79c52daf4740b00bef43e4f5a4281b3480459b38.zip
Implement C23 log2p1
C23 adds various <math.h> function families originally defined in TS 18661-4. Add the log2p1 functions (log2(1+x): like log1p, but for base-2 logarithms). This illustrates the intended structure of implementations of all these function families: define them initially with a type-generic template implementation. If someone wishes to add type-specific implementations, it is likely such implementations can be both faster and more accurate than the type-generic one and can then override it for types for which they are implemented (adding benchmarks would be desirable in such cases to demonstrate that a new implementation is indeed faster). The test inputs are copied from those for log1p. Note that these changes make gen-auto-libm-tests depend on MPFR 4.2 (or later). The bulk of the changes are fairly generic for any such new function. (sysdeps/powerpc/nofpu/Makefile only needs changing for those type-generic templates that use fabs.) Tested for x86_64 and x86, and with build-many-glibcs.py.
Diffstat (limited to 'math')
-rw-r--r--math/Makefile6
-rw-r--r--math/Versions6
-rw-r--r--math/auto-libm-test-in51
-rw-r--r--math/auto-libm-test-out-log2p12713
-rw-r--r--math/bits/mathcalls.h3
-rw-r--r--math/gen-auto-libm-tests.c1
-rwxr-xr-xmath/gen-tgmath-tests.py1
-rw-r--r--math/libm-test-log2p1.inc53
-rw-r--r--math/s_log2p1_template.c43
-rw-r--r--math/test-tgmath.c12
-rw-r--r--math/tgmath.h3
11 files changed, 2891 insertions, 1 deletions
diff --git a/math/Makefile b/math/Makefile
index 435939aedb..36024a5039 100644
--- a/math/Makefile
+++ b/math/Makefile
@@ -127,6 +127,7 @@ gen-libm-calls = \
s_fminimum_numF \
s_fminmagF \
s_iseqsigF \
+ s_log2p1F \
s_nanF \
s_nextdownF \
s_significandF \
@@ -650,6 +651,7 @@ libm-test-funcs-auto = \
log10 \
log1p \
log2 \
+ log2p1 \
pow \
sin \
sincos \
@@ -892,6 +894,7 @@ tgmath3-macros = \
log10 \
log1p \
log2 \
+ log2p1 \
logb \
lrint \
lround \
@@ -1264,6 +1267,7 @@ CFLAGS-e_log.c += -fno-builtin-logl
CFLAGS-w_log10.c += -fno-builtin-log10l
CFLAGS-w_log1p.c += -fno-builtin-log1pl
CFLAGS-e_log2.c += -fno-builtin-log2l
+CFLAGS-s_log2p1.c += -fno-builtin-log2p1l
CFLAGS-s_logb.c += -fno-builtin-logbl
CFLAGS-s_lrint.c += -fno-builtin-lrintl
CFLAGS-s_lround.c += -fno-builtin-lroundl
@@ -1389,6 +1393,7 @@ CFLAGS-e_log.c += -fno-builtin-logf32x -fno-builtin-logf64
CFLAGS-w_log10.c += -fno-builtin-log10f32x -fno-builtin-log10f64
CFLAGS-w_log1p.c += -fno-builtin-log1pf32x -fno-builtin-log1pf64
CFLAGS-e_log2.c += -fno-builtin-log2f32x -fno-builtin-log2f64
+CFLAGS-s_log2p1.c += -fno-builtin-log2p1f32x -fno-builtin-log2p1f64
CFLAGS-s_logb.c += -fno-builtin-logbf32x -fno-builtin-logbf64
CFLAGS-s_lrint.c += -fno-builtin-lrintf32x -fno-builtin-lrintf64
CFLAGS-s_lround.c += -fno-builtin-lroundf32x -fno-builtin-lroundf64
@@ -1503,6 +1508,7 @@ CFLAGS-e_logf.c += -fno-builtin-logf32
CFLAGS-w_log10f.c += -fno-builtin-log10f32
CFLAGS-w_log1pf.c += -fno-builtin-log1pf32
CFLAGS-e_log2f.c += -fno-builtin-log2f32
+CFLAGS-s_log2p1f.c += -fno-builtin-log2p1f32
CFLAGS-s_logbf.c += -fno-builtin-logbf32
CFLAGS-s_lrintf.c += -fno-builtin-lrintf32
CFLAGS-s_lroundf.c += -fno-builtin-lroundf32
diff --git a/math/Versions b/math/Versions
index 26e15cedea..46b9b87010 100644
--- a/math/Versions
+++ b/math/Versions
@@ -639,4 +639,10 @@ libm {
# No SVID compatible error handling.
exp10;
}
+ GLIBC_2.40 {
+ # Functions not involving _Float64x or _Float128, for all configurations.
+ log2p1; log2p1f; log2p1l; log2p1f32; log2p1f64; log2p1f32x;
+ # Functions involving _Float64x or _Float128, for some configurations.
+ log2p1f64x; log2p1f128;
+ }
}
diff --git a/math/auto-libm-test-in b/math/auto-libm-test-in
index 05d7ae5002..8982338b3a 100644
--- a/math/auto-libm-test-in
+++ b/math/auto-libm-test-in
@@ -6664,6 +6664,57 @@ log2 min
log2 min_subnorm
log2 max
+log2p1 0
+log2p1 -0
+log2p1 e-1
+log2p1 -0.25
+log2p1 -0.875
+log2p1 0x1p-5
+log2p1 0x1p-10
+log2p1 0x1p-15
+log2p1 0x1p-20
+log2p1 0x1p-25
+log2p1 0x1p-30
+log2p1 0x1p-35
+log2p1 0x1p-40
+log2p1 0x1p-45
+log2p1 0x1p-50
+log2p1 0x1p-55
+log2p1 0x1p-60
+log2p1 0x1p-100
+log2p1 0x1p-600
+log2p1 0x1p-10000
+log2p1 min
+log2p1 min_subnorm
+log2p1 -min
+log2p1 -min_subnorm
+log2p1 0x1p10
+log2p1 0x1p20
+log2p1 0x1p30
+log2p1 0x1p50
+log2p1 0x1p60
+log2p1 0x1p100
+log2p1 0x1p1000
+log2p1 0x6.a0cf42befce9ed4085ef59254b48p-4
+log2p1 max
+
+log2p1 0x7.2a4368p-4
+log2p1 0x6.d3a118p-4
+log2p1 0x5.03f228p+0
+log2p1 0x7.264963888ac9p-4
+log2p1 0x8.786bdp-4
+log2p1 0x7.89dc17790eeb4p-4
+log2p1 0x9.81ccf8887c24a7bp-4
+log2p1 0xa.5028608bd65f38dp-4
+log2p1 0x5.bf78873e20a2d468p-4
+log2p1 0x7.aa5198p-4
+log2p1 0x2.564fap+0
+log2p1 0x7.fc242a2235222ef8p-4
+log2p1 -0x4.f37d3c9ce0b14bdd86eb157df5d4p-4
+log2p1 0x7.2eca50c4d93196362b4f37f6e8dcp-4
+log2p1 -0x6.3fef3067427e43dfcde9e48f74bcp-4
+log2p1 0x6.af53d00fd2845d4772260ef5adc4p-4
+
mul 0 0
mul 0 -0
mul -0 0
diff --git a/math/auto-libm-test-out-log2p1 b/math/auto-libm-test-out-log2p1
new file mode 100644
index 0000000000..c8ec972d6f
--- /dev/null
+++ b/math/auto-libm-test-out-log2p1
@@ -0,0 +1,2713 @@
+log2p1 0
+= log2p1 downward binary32 0x0p+0 : 0x0p+0 : inexact-ok
+= log2p1 tonearest binary32 0x0p+0 : 0x0p+0 : inexact-ok
+= log2p1 towardzero binary32 0x0p+0 : 0x0p+0 : inexact-ok
+= log2p1 upward binary32 0x0p+0 : 0x0p+0 : inexact-ok
+= log2p1 downward binary64 0x0p+0 : 0x0p+0 : inexact-ok
+= log2p1 tonearest binary64 0x0p+0 : 0x0p+0 : inexact-ok
+= log2p1 towardzero binary64 0x0p+0 : 0x0p+0 : inexact-ok
+= log2p1 upward binary64 0x0p+0 : 0x0p+0 : inexact-ok
+= log2p1 downward intel96 0x0p+0 : 0x0p+0 : inexact-ok
+= log2p1 tonearest intel96 0x0p+0 : 0x0p+0 : inexact-ok
+= log2p1 towardzero intel96 0x0p+0 : 0x0p+0 : inexact-ok
+= log2p1 upward intel96 0x0p+0 : 0x0p+0 : inexact-ok
+= log2p1 downward m68k96 0x0p+0 : 0x0p+0 : inexact-ok
+= log2p1 tonearest m68k96 0x0p+0 : 0x0p+0 : inexact-ok
+= log2p1 towardzero m68k96 0x0p+0 : 0x0p+0 : inexact-ok
+= log2p1 upward m68k96 0x0p+0 : 0x0p+0 : inexact-ok
+= log2p1 downward binary128 0x0p+0 : 0x0p+0 : inexact-ok
+= log2p1 tonearest binary128 0x0p+0 : 0x0p+0 : inexact-ok
+= log2p1 towardzero binary128 0x0p+0 : 0x0p+0 : inexact-ok
+= log2p1 upward binary128 0x0p+0 : 0x0p+0 : inexact-ok
+= log2p1 downward ibm128 0x0p+0 : 0x0p+0 : inexact-ok
+= log2p1 tonearest ibm128 0x0p+0 : 0x0p+0 : inexact-ok
+= log2p1 towardzero ibm128 0x0p+0 : 0x0p+0 : inexact-ok
+= log2p1 upward ibm128 0x0p+0 : 0x0p+0 : inexact-ok
+log2p1 -0
+= log2p1 downward binary32 -0x0p+0 : -0x0p+0 : inexact-ok
+= log2p1 tonearest binary32 -0x0p+0 : -0x0p+0 : inexact-ok
+= log2p1 towardzero binary32 -0x0p+0 : -0x0p+0 : inexact-ok
+= log2p1 upward binary32 -0x0p+0 : -0x0p+0 : inexact-ok
+= log2p1 downward binary64 -0x0p+0 : -0x0p+0 : inexact-ok
+= log2p1 tonearest binary64 -0x0p+0 : -0x0p+0 : inexact-ok
+= log2p1 towardzero binary64 -0x0p+0 : -0x0p+0 : inexact-ok
+= log2p1 upward binary64 -0x0p+0 : -0x0p+0 : inexact-ok
+= log2p1 downward intel96 -0x0p+0 : -0x0p+0 : inexact-ok
+= log2p1 tonearest intel96 -0x0p+0 : -0x0p+0 : inexact-ok
+= log2p1 towardzero intel96 -0x0p+0 : -0x0p+0 : inexact-ok
+= log2p1 upward intel96 -0x0p+0 : -0x0p+0 : inexact-ok
+= log2p1 downward m68k96 -0x0p+0 : -0x0p+0 : inexact-ok
+= log2p1 tonearest m68k96 -0x0p+0 : -0x0p+0 : inexact-ok
+= log2p1 towardzero m68k96 -0x0p+0 : -0x0p+0 : inexact-ok
+= log2p1 upward m68k96 -0x0p+0 : -0x0p+0 : inexact-ok
+= log2p1 downward binary128 -0x0p+0 : -0x0p+0 : inexact-ok
+= log2p1 tonearest binary128 -0x0p+0 : -0x0p+0 : inexact-ok
+= log2p1 towardzero binary128 -0x0p+0 : -0x0p+0 : inexact-ok
+= log2p1 upward binary128 -0x0p+0 : -0x0p+0 : inexact-ok
+= log2p1 downward ibm128 -0x0p+0 : -0x0p+0 : inexact-ok
+= log2p1 tonearest ibm128 -0x0p+0 : -0x0p+0 : inexact-ok
+= log2p1 towardzero ibm128 -0x0p+0 : -0x0p+0 : inexact-ok
+= log2p1 upward ibm128 -0x0p+0 : -0x0p+0 : inexact-ok
+log2p1 e-1
+= log2p1 downward binary32 0x1.b7e152p+0 : 0x1.715476p+0 : inexact-ok
+= log2p1 tonearest binary32 0x1.b7e152p+0 : 0x1.715476p+0 : inexact-ok
+= log2p1 towardzero binary32 0x1.b7e152p+0 : 0x1.715476p+0 : inexact-ok
+= log2p1 upward binary32 0x1.b7e152p+0 : 0x1.715478p+0 : inexact-ok
+= log2p1 downward binary64 0x1.b7e152p+0 : 0x1.715476a649bcdp+0 : inexact-ok
+= log2p1 tonearest binary64 0x1.b7e152p+0 : 0x1.715476a649bcep+0 : inexact-ok
+= log2p1 towardzero binary64 0x1.b7e152p+0 : 0x1.715476a649bcdp+0 : inexact-ok
+= log2p1 upward binary64 0x1.b7e152p+0 : 0x1.715476a649bcep+0 : inexact-ok
+= log2p1 downward intel96 0x1.b7e152p+0 : 0x1.715476a649bcdd1p+0 : inexact-ok
+= log2p1 tonearest intel96 0x1.b7e152p+0 : 0x1.715476a649bcdd1p+0 : inexact-ok
+= log2p1 towardzero intel96 0x1.b7e152p+0 : 0x1.715476a649bcdd1p+0 : inexact-ok
+= log2p1 upward intel96 0x1.b7e152p+0 : 0x1.715476a649bcdd12p+0 : inexact-ok
+= log2p1 downward m68k96 0x1.b7e152p+0 : 0x1.715476a649bcdd1p+0 : inexact-ok
+= log2p1 tonearest m68k96 0x1.b7e152p+0 : 0x1.715476a649bcdd1p+0 : inexact-ok
+= log2p1 towardzero m68k96 0x1.b7e152p+0 : 0x1.715476a649bcdd1p+0 : inexact-ok
+= log2p1 upward m68k96 0x1.b7e152p+0 : 0x1.715476a649bcdd12p+0 : inexact-ok
+= log2p1 downward binary128 0x1.b7e152p+0 : 0x1.715476a649bcdd1095ef715f7243p+0 : inexact-ok
+= log2p1 tonearest binary128 0x1.b7e152p+0 : 0x1.715476a649bcdd1095ef715f7243p+0 : inexact-ok
+= log2p1 towardzero binary128 0x1.b7e152p+0 : 0x1.715476a649bcdd1095ef715f7243p+0 : inexact-ok
+= log2p1 upward binary128 0x1.b7e152p+0 : 0x1.715476a649bcdd1095ef715f7244p+0 : inexact-ok
+= log2p1 downward ibm128 0x1.b7e152p+0 : 0x1.715476a649bcdd1095ef715f72p+0 : inexact-ok
+= log2p1 tonearest ibm128 0x1.b7e152p+0 : 0x1.715476a649bcdd1095ef715f728p+0 : inexact-ok
+= log2p1 towardzero ibm128 0x1.b7e152p+0 : 0x1.715476a649bcdd1095ef715f72p+0 : inexact-ok
+= log2p1 upward ibm128 0x1.b7e152p+0 : 0x1.715476a649bcdd1095ef715f728p+0 : inexact-ok
+= log2p1 downward binary32 0x1.b7e15p+0 : 0x1.715474p+0 : inexact-ok
+= log2p1 tonearest binary32 0x1.b7e15p+0 : 0x1.715476p+0 : inexact-ok
+= log2p1 towardzero binary32 0x1.b7e15p+0 : 0x1.715474p+0 : inexact-ok
+= log2p1 upward binary32 0x1.b7e15p+0 : 0x1.715476p+0 : inexact-ok
+= log2p1 downward binary64 0x1.b7e15p+0 : 0x1.715475968cddcp+0 : inexact-ok
+= log2p1 tonearest binary64 0x1.b7e15p+0 : 0x1.715475968cddcp+0 : inexact-ok
+= log2p1 towardzero binary64 0x1.b7e15p+0 : 0x1.715475968cddcp+0 : inexact-ok
+= log2p1 upward binary64 0x1.b7e15p+0 : 0x1.715475968cdddp+0 : inexact-ok
+= log2p1 downward intel96 0x1.b7e15p+0 : 0x1.715475968cddc4e6p+0 : inexact-ok
+= log2p1 tonearest intel96 0x1.b7e15p+0 : 0x1.715475968cddc4e6p+0 : inexact-ok
+= log2p1 towardzero intel96 0x1.b7e15p+0 : 0x1.715475968cddc4e6p+0 : inexact-ok
+= log2p1 upward intel96 0x1.b7e15p+0 : 0x1.715475968cddc4e8p+0 : inexact-ok
+= log2p1 downward m68k96 0x1.b7e15p+0 : 0x1.715475968cddc4e6p+0 : inexact-ok
+= log2p1 tonearest m68k96 0x1.b7e15p+0 : 0x1.715475968cddc4e6p+0 : inexact-ok
+= log2p1 towardzero m68k96 0x1.b7e15p+0 : 0x1.715475968cddc4e6p+0 : inexact-ok
+= log2p1 upward m68k96 0x1.b7e15p+0 : 0x1.715475968cddc4e8p+0 : inexact-ok
+= log2p1 downward binary128 0x1.b7e15p+0 : 0x1.715475968cddc4e6c2b1cbd1a7c7p+0 : inexact-ok
+= log2p1 tonearest binary128 0x1.b7e15p+0 : 0x1.715475968cddc4e6c2b1cbd1a7c8p+0 : inexact-ok
+= log2p1 towardzero binary128 0x1.b7e15p+0 : 0x1.715475968cddc4e6c2b1cbd1a7c7p+0 : inexact-ok
+= log2p1 upward binary128 0x1.b7e15p+0 : 0x1.715475968cddc4e6c2b1cbd1a7c8p+0 : inexact-ok
+= log2p1 downward ibm128 0x1.b7e15p+0 : 0x1.715475968cddc4e6c2b1cbd1a78p+0 : inexact-ok
+= log2p1 tonearest ibm128 0x1.b7e15p+0 : 0x1.715475968cddc4e6c2b1cbd1a8p+0 : inexact-ok
+= log2p1 towardzero ibm128 0x1.b7e15p+0 : 0x1.715475968cddc4e6c2b1cbd1a78p+0 : inexact-ok
+= log2p1 upward ibm128 0x1.b7e15p+0 : 0x1.715475968cddc4e6c2b1cbd1a8p+0 : inexact-ok
+= log2p1 downward binary64 0x1.b7e151628aed3p+0 : 0x1.71547652b82fep+0 : inexact-ok
+= log2p1 tonearest binary64 0x1.b7e151628aed3p+0 : 0x1.71547652b82fep+0 : inexact-ok
+= log2p1 towardzero binary64 0x1.b7e151628aed3p+0 : 0x1.71547652b82fep+0 : inexact-ok
+= log2p1 upward binary64 0x1.b7e151628aed3p+0 : 0x1.71547652b82ffp+0 : inexact-ok
+= log2p1 downward intel96 0x1.b7e151628aed3p+0 : 0x1.71547652b82fe46ep+0 : inexact-ok
+= log2p1 tonearest intel96 0x1.b7e151628aed3p+0 : 0x1.71547652b82fe46ep+0 : inexact-ok
+= log2p1 towardzero intel96 0x1.b7e151628aed3p+0 : 0x1.71547652b82fe46ep+0 : inexact-ok
+= log2p1 upward intel96 0x1.b7e151628aed3p+0 : 0x1.71547652b82fe47p+0 : inexact-ok
+= log2p1 downward m68k96 0x1.b7e151628aed3p+0 : 0x1.71547652b82fe46ep+0 : inexact-ok
+= log2p1 tonearest m68k96 0x1.b7e151628aed3p+0 : 0x1.71547652b82fe46ep+0 : inexact-ok
+= log2p1 towardzero m68k96 0x1.b7e151628aed3p+0 : 0x1.71547652b82fe46ep+0 : inexact-ok
+= log2p1 upward m68k96 0x1.b7e151628aed3p+0 : 0x1.71547652b82fe47p+0 : inexact-ok
+= log2p1 downward binary128 0x1.b7e151628aed3p+0 : 0x1.71547652b82fe46e0bf78d510ab9p+0 : inexact-ok
+= log2p1 tonearest binary128 0x1.b7e151628aed3p+0 : 0x1.71547652b82fe46e0bf78d510ab9p+0 : inexact-ok
+= log2p1 towardzero binary128 0x1.b7e151628aed3p+0 : 0x1.71547652b82fe46e0bf78d510ab9p+0 : inexact-ok
+= log2p1 upward binary128 0x1.b7e151628aed3p+0 : 0x1.71547652b82fe46e0bf78d510abap+0 : inexact-ok
+= log2p1 downward ibm128 0x1.b7e151628aed3p+0 : 0x1.71547652b82fe46e0bf78d510a8p+0 : inexact-ok
+= log2p1 tonearest ibm128 0x1.b7e151628aed3p+0 : 0x1.71547652b82fe46e0bf78d510a8p+0 : inexact-ok
+= log2p1 towardzero ibm128 0x1.b7e151628aed3p+0 : 0x1.71547652b82fe46e0bf78d510a8p+0 : inexact-ok
+= log2p1 upward ibm128 0x1.b7e151628aed3p+0 : 0x1.71547652b82fe46e0bf78d510bp+0 : inexact-ok
+= log2p1 downward binary64 0x1.b7e151628aed2p+0 : 0x1.71547652b82fdp+0 : inexact-ok
+= log2p1 tonearest binary64 0x1.b7e151628aed2p+0 : 0x1.71547652b82fep+0 : inexact-ok
+= log2p1 towardzero binary64 0x1.b7e151628aed2p+0 : 0x1.71547652b82fdp+0 : inexact-ok
+= log2p1 upward binary64 0x1.b7e151628aed2p+0 : 0x1.71547652b82fep+0 : inexact-ok
+= log2p1 downward intel96 0x1.b7e151628aed2p+0 : 0x1.71547652b82fdbfp+0 : inexact-ok
+= log2p1 tonearest intel96 0x1.b7e151628aed2p+0 : 0x1.71547652b82fdbfp+0 : inexact-ok
+= log2p1 towardzero intel96 0x1.b7e151628aed2p+0 : 0x1.71547652b82fdbfp+0 : inexact-ok
+= log2p1 upward intel96 0x1.b7e151628aed2p+0 : 0x1.71547652b82fdbf2p+0 : inexact-ok
+= log2p1 downward m68k96 0x1.b7e151628aed2p+0 : 0x1.71547652b82fdbfp+0 : inexact-ok
+= log2p1 tonearest m68k96 0x1.b7e151628aed2p+0 : 0x1.71547652b82fdbfp+0 : inexact-ok
+= log2p1 towardzero m68k96 0x1.b7e151628aed2p+0 : 0x1.71547652b82fdbfp+0 : inexact-ok
+= log2p1 upward m68k96 0x1.b7e151628aed2p+0 : 0x1.71547652b82fdbf2p+0 : inexact-ok
+= log2p1 downward binary128 0x1.b7e151628aed2p+0 : 0x1.71547652b82fdbf024ffffda5e62p+0 : inexact-ok
+= log2p1 tonearest binary128 0x1.b7e151628aed2p+0 : 0x1.71547652b82fdbf024ffffda5e62p+0 : inexact-ok
+= log2p1 towardzero binary128 0x1.b7e151628aed2p+0 : 0x1.71547652b82fdbf024ffffda5e62p+0 : inexact-ok
+= log2p1 upward binary128 0x1.b7e151628aed2p+0 : 0x1.71547652b82fdbf024ffffda5e63p+0 : inexact-ok
+= log2p1 downward ibm128 0x1.b7e151628aed2p+0 : 0x1.71547652b82fdbf024ffffda5ep+0 : inexact-ok
+= log2p1 tonearest ibm128 0x1.b7e151628aed2p+0 : 0x1.71547652b82fdbf024ffffda5e8p+0 : inexact-ok
+= log2p1 towardzero ibm128 0x1.b7e151628aed2p+0 : 0x1.71547652b82fdbf024ffffda5ep+0 : inexact-ok
+= log2p1 upward ibm128 0x1.b7e151628aed2p+0 : 0x1.71547652b82fdbf024ffffda5e8p+0 : inexact-ok
+= log2p1 downward intel96 0x1.b7e151628aed2a6cp+0 : 0x1.71547652b82fe178p+0 : inexact-ok
+= log2p1 tonearest intel96 0x1.b7e151628aed2a6cp+0 : 0x1.71547652b82fe178p+0 : inexact-ok
+= log2p1 towardzero intel96 0x1.b7e151628aed2a6cp+0 : 0x1.71547652b82fe178p+0 : inexact-ok
+= log2p1 upward intel96 0x1.b7e151628aed2a6cp+0 : 0x1.71547652b82fe17ap+0 : inexact-ok
+= log2p1 downward m68k96 0x1.b7e151628aed2a6cp+0 : 0x1.71547652b82fe178p+0 : inexact-ok
+= log2p1 tonearest m68k96 0x1.b7e151628aed2a6cp+0 : 0x1.71547652b82fe178p+0 : inexact-ok
+= log2p1 towardzero m68k96 0x1.b7e151628aed2a6cp+0 : 0x1.71547652b82fe178p+0 : inexact-ok
+= log2p1 upward m68k96 0x1.b7e151628aed2a6cp+0 : 0x1.71547652b82fe17ap+0 : inexact-ok
+= log2p1 downward binary128 0x1.b7e151628aed2a6cp+0 : 0x1.71547652b82fe1782731bf3f6b29p+0 : inexact-ok
+= log2p1 tonearest binary128 0x1.b7e151628aed2a6cp+0 : 0x1.71547652b82fe1782731bf3f6b29p+0 : inexact-ok
+= log2p1 towardzero binary128 0x1.b7e151628aed2a6cp+0 : 0x1.71547652b82fe1782731bf3f6b29p+0 : inexact-ok
+= log2p1 upward binary128 0x1.b7e151628aed2a6cp+0 : 0x1.71547652b82fe1782731bf3f6b2ap+0 : inexact-ok
+= log2p1 downward ibm128 0x1.b7e151628aed2a6cp+0 : 0x1.71547652b82fe1782731bf3f6bp+0 : inexact-ok
+= log2p1 tonearest ibm128 0x1.b7e151628aed2a6cp+0 : 0x1.71547652b82fe1782731bf3f6bp+0 : inexact-ok
+= log2p1 towardzero ibm128 0x1.b7e151628aed2a6cp+0 : 0x1.71547652b82fe1782731bf3f6bp+0 : inexact-ok
+= log2p1 upward ibm128 0x1.b7e151628aed2a6cp+0 : 0x1.71547652b82fe1782731bf3f6b8p+0 : inexact-ok
+= log2p1 downward intel96 0x1.b7e151628aed2a6ap+0 : 0x1.71547652b82fe176p+0 : inexact-ok
+= log2p1 tonearest intel96 0x1.b7e151628aed2a6ap+0 : 0x1.71547652b82fe178p+0 : inexact-ok
+= log2p1 towardzero intel96 0x1.b7e151628aed2a6ap+0 : 0x1.71547652b82fe176p+0 : inexact-ok
+= log2p1 upward intel96 0x1.b7e151628aed2a6ap+0 : 0x1.71547652b82fe178p+0 : inexact-ok
+= log2p1 downward m68k96 0x1.b7e151628aed2a6ap+0 : 0x1.71547652b82fe176p+0 : inexact-ok
+= log2p1 tonearest m68k96 0x1.b7e151628aed2a6ap+0 : 0x1.71547652b82fe178p+0 : inexact-ok
+= log2p1 towardzero m68k96 0x1.b7e151628aed2a6ap+0 : 0x1.71547652b82fe176p+0 : inexact-ok
+= log2p1 upward m68k96 0x1.b7e151628aed2a6ap+0 : 0x1.71547652b82fe178p+0 : inexact-ok
+= log2p1 downward binary128 0x1.b7e151628aed2a6ap+0 : 0x1.71547652b82fe1771774e04dbc53p+0 : inexact-ok
+= log2p1 tonearest binary128 0x1.b7e151628aed2a6ap+0 : 0x1.71547652b82fe1771774e04dbc54p+0 : inexact-ok
+= log2p1 towardzero binary128 0x1.b7e151628aed2a6ap+0 : 0x1.71547652b82fe1771774e04dbc53p+0 : inexact-ok
+= log2p1 upward binary128 0x1.b7e151628aed2a6ap+0 : 0x1.71547652b82fe1771774e04dbc54p+0 : inexact-ok
+= log2p1 downward ibm128 0x1.b7e151628aed2a6ap+0 : 0x1.71547652b82fe1771774e04dbcp+0 : inexact-ok
+= log2p1 tonearest ibm128 0x1.b7e151628aed2a6ap+0 : 0x1.71547652b82fe1771774e04dbc8p+0 : inexact-ok
+= log2p1 towardzero ibm128 0x1.b7e151628aed2a6ap+0 : 0x1.71547652b82fe1771774e04dbcp+0 : inexact-ok
+= log2p1 upward ibm128 0x1.b7e151628aed2a6ap+0 : 0x1.71547652b82fe1771774e04dbc8p+0 : inexact-ok
+= log2p1 downward binary128 0x1.b7e151628aed2a6abf7158809cf5p+0 : 0x1.71547652b82fe1777d0ffda0d23ap+0 : inexact-ok
+= log2p1 tonearest binary128 0x1.b7e151628aed2a6abf7158809cf5p+0 : 0x1.71547652b82fe1777d0ffda0d23bp+0 : inexact-ok
+= log2p1 towardzero binary128 0x1.b7e151628aed2a6abf7158809cf5p+0 : 0x1.71547652b82fe1777d0ffda0d23ap+0 : inexact-ok
+= log2p1 upward binary128 0x1.b7e151628aed2a6abf7158809cf5p+0 : 0x1.71547652b82fe1777d0ffda0d23bp+0 : inexact-ok
+= log2p1 downward binary128 0x1.b7e151628aed2a6abf7158809cf4p+0 : 0x1.71547652b82fe1777d0ffda0d239p+0 : inexact-ok
+= log2p1 tonearest binary128 0x1.b7e151628aed2a6abf7158809cf4p+0 : 0x1.71547652b82fe1777d0ffda0d23ap+0 : inexact-ok
+= log2p1 towardzero binary128 0x1.b7e151628aed2a6abf7158809cf4p+0 : 0x1.71547652b82fe1777d0ffda0d239p+0 : inexact-ok
+= log2p1 upward binary128 0x1.b7e151628aed2a6abf7158809cf4p+0 : 0x1.71547652b82fe1777d0ffda0d23ap+0 : inexact-ok
+= log2p1 downward binary128 0x1.b7e151628aed2a6abf7158809dp+0 : 0x1.71547652b82fe1777d0ffda0d24p+0 : inexact-ok
+= log2p1 tonearest binary128 0x1.b7e151628aed2a6abf7158809dp+0 : 0x1.71547652b82fe1777d0ffda0d24p+0 : inexact-ok
+= log2p1 towardzero binary128 0x1.b7e151628aed2a6abf7158809dp+0 : 0x1.71547652b82fe1777d0ffda0d24p+0 : inexact-ok
+= log2p1 upward binary128 0x1.b7e151628aed2a6abf7158809dp+0 : 0x1.71547652b82fe1777d0ffda0d241p+0 : inexact-ok
+= log2p1 downward ibm128 0x1.b7e151628aed2a6abf7158809dp+0 : 0x1.71547652b82fe1777d0ffda0d2p+0 : inexact-ok
+= log2p1 tonearest ibm128 0x1.b7e151628aed2a6abf7158809dp+0 : 0x1.71547652b82fe1777d0ffda0d28p+0 : inexact-ok
+= log2p1 towardzero ibm128 0x1.b7e151628aed2a6abf7158809dp+0 : 0x1.71547652b82fe1777d0ffda0d2p+0 : inexact-ok
+= log2p1 upward ibm128 0x1.b7e151628aed2a6abf7158809dp+0 : 0x1.71547652b82fe1777d0ffda0d28p+0 : inexact-ok
+= log2p1 downward binary128 0x1.b7e151628aed2a6abf7158809c8p+0 : 0x1.71547652b82fe1777d0ffda0d1fcp+0 : inexact-ok
+= log2p1 tonearest binary128 0x1.b7e151628aed2a6abf7158809c8p+0 : 0x1.71547652b82fe1777d0ffda0d1fcp+0 : inexact-ok
+= log2p1 towardzero binary128 0x1.b7e151628aed2a6abf7158809c8p+0 : 0x1.71547652b82fe1777d0ffda0d1fcp+0 : inexact-ok
+= log2p1 upward binary128 0x1.b7e151628aed2a6abf7158809c8p+0 : 0x1.71547652b82fe1777d0ffda0d1fdp+0 : inexact-ok
+= log2p1 downward ibm128 0x1.b7e151628aed2a6abf7158809c8p+0 : 0x1.71547652b82fe1777d0ffda0d18p+0 : inexact-ok
+= log2p1 tonearest ibm128 0x1.b7e151628aed2a6abf7158809c8p+0 : 0x1.71547652b82fe1777d0ffda0d2p+0 : inexact-ok
+= log2p1 towardzero ibm128 0x1.b7e151628aed2a6abf7158809c8p+0 : 0x1.71547652b82fe1777d0ffda0d18p+0 : inexact-ok
+= log2p1 upward ibm128 0x1.b7e151628aed2a6abf7158809c8p+0 : 0x1.71547652b82fe1777d0ffda0d2p+0 : inexact-ok
+log2p1 -0.25
+= log2p1 downward binary32 -0x4p-4 : -0x6.a3fe6p-4 : inexact-ok
+= log2p1 tonearest binary32 -0x4p-4 : -0x6.a3fe6p-4 : inexact-ok
+= log2p1 towardzero binary32 -0x4p-4 : -0x6.a3fe58p-4 : inexact-ok
+= log2p1 upward binary32 -0x4p-4 : -0x6.a3fe58p-4 : inexact-ok
+= log2p1 downward binary64 -0x4p-4 : -0x6.a3fe5c604297cp-4 : inexact-ok
+= log2p1 tonearest binary64 -0x4p-4 : -0x6.a3fe5c6042978p-4 : inexact-ok
+= log2p1 towardzero binary64 -0x4p-4 : -0x6.a3fe5c6042978p-4 : inexact-ok
+= log2p1 upward binary64 -0x4p-4 : -0x6.a3fe5c6042978p-4 : inexact-ok
+= log2p1 downward intel96 -0x4p-4 : -0x6.a3fe5c6042978608p-4 : inexact-ok
+= log2p1 tonearest intel96 -0x4p-4 : -0x6.a3fe5c6042978608p-4 : inexact-ok
+= log2p1 towardzero intel96 -0x4p-4 : -0x6.a3fe5c60429786p-4 : inexact-ok
+= log2p1 upward intel96 -0x4p-4 : -0x6.a3fe5c60429786p-4 : inexact-ok
+= log2p1 downward m68k96 -0x4p-4 : -0x6.a3fe5c6042978608p-4 : inexact-ok
+= log2p1 tonearest m68k96 -0x4p-4 : -0x6.a3fe5c6042978608p-4 : inexact-ok
+= log2p1 towardzero m68k96 -0x4p-4 : -0x6.a3fe5c60429786p-4 : inexact-ok
+= log2p1 upward m68k96 -0x4p-4 : -0x6.a3fe5c60429786p-4 : inexact-ok
+= log2p1 downward binary128 -0x4p-4 : -0x6.a3fe5c6042978605ff4edf5f9748p-4 : inexact-ok
+= log2p1 tonearest binary128 -0x4p-4 : -0x6.a3fe5c6042978605ff4edf5f9744p-4 : inexact-ok
+= log2p1 towardzero binary128 -0x4p-4 : -0x6.a3fe5c6042978605ff4edf5f9744p-4 : inexact-ok
+= log2p1 upward binary128 -0x4p-4 : -0x6.a3fe5c6042978605ff4edf5f9744p-4 : inexact-ok
+= log2p1 downward ibm128 -0x4p-4 : -0x6.a3fe5c6042978605ff4edf5f98p-4 : inexact-ok
+= log2p1 tonearest ibm128 -0x4p-4 : -0x6.a3fe5c6042978605ff4edf5f98p-4 : inexact-ok
+= log2p1 towardzero ibm128 -0x4p-4 : -0x6.a3fe5c6042978605ff4edf5f96p-4 : inexact-ok
+= log2p1 upward ibm128 -0x4p-4 : -0x6.a3fe5c6042978605ff4edf5f96p-4 : inexact-ok
+log2p1 -0.875
+= log2p1 downward binary32 -0xep-4 : -0x3p+0 : inexact-ok
+= log2p1 tonearest binary32 -0xep-4 : -0x3p+0 : inexact-ok
+= log2p1 towardzero binary32 -0xep-4 : -0x3p+0 : inexact-ok
+= log2p1 upward binary32 -0xep-4 : -0x3p+0 : inexact-ok
+= log2p1 downward binary64 -0xep-4 : -0x3p+0 : inexact-ok
+= log2p1 tonearest binary64 -0xep-4 : -0x3p+0 : inexact-ok
+= log2p1 towardzero binary64 -0xep-4 : -0x3p+0 : inexact-ok
+= log2p1 upward binary64 -0xep-4 : -0x3p+0 : inexact-ok
+= log2p1 downward intel96 -0xep-4 : -0x3p+0 : inexact-ok
+= log2p1 tonearest intel96 -0xep-4 : -0x3p+0 : inexact-ok
+= log2p1 towardzero intel96 -0xep-4 : -0x3p+0 : inexact-ok
+= log2p1 upward intel96 -0xep-4 : -0x3p+0 : inexact-ok
+= log2p1 downward m68k96 -0xep-4 : -0x3p+0 : inexact-ok
+= log2p1 tonearest m68k96 -0xep-4 : -0x3p+0 : inexact-ok
+= log2p1 towardzero m68k96 -0xep-4 : -0x3p+0 : inexact-ok
+= log2p1 upward m68k96 -0xep-4 : -0x3p+0 : inexact-ok
+= log2p1 downward binary128 -0xep-4 : -0x3p+0 : inexact-ok
+= log2p1 tonearest binary128 -0xep-4 : -0x3p+0 : inexact-ok
+= log2p1 towardzero binary128 -0xep-4 : -0x3p+0 : inexact-ok
+= log2p1 upward binary128 -0xep-4 : -0x3p+0 : inexact-ok
+= log2p1 downward ibm128 -0xep-4 : -0x3p+0 : inexact-ok
+= log2p1 tonearest ibm128 -0xep-4 : -0x3p+0 : inexact-ok
+= log2p1 towardzero ibm128 -0xep-4 : -0x3p+0 : inexact-ok
+= log2p1 upward ibm128 -0xep-4 : -0x3p+0 : inexact-ok
+log2p1 0x1p-5
+= log2p1 downward binary32 0x8p-8 : 0xb.5d69bp-8 : inexact-ok
+= log2p1 tonearest binary32 0x8p-8 : 0xb.5d69cp-8 : inexact-ok
+= log2p1 towardzero binary32 0x8p-8 : 0xb.5d69bp-8 : inexact-ok
+= log2p1 upward binary32 0x8p-8 : 0xb.5d69cp-8 : inexact-ok
+= log2p1 downward binary64 0x8p-8 : 0xb.5d69bac77ec38p-8 : inexact-ok
+= log2p1 tonearest binary64 0x8p-8 : 0xb.5d69bac77ec38p-8 : inexact-ok
+= log2p1 towardzero binary64 0x8p-8 : 0xb.5d69bac77ec38p-8 : inexact-ok
+= log2p1 upward binary64 0x8p-8 : 0xb.5d69bac77ec4p-8 : inexact-ok
+= log2p1 downward intel96 0x8p-8 : 0xb.5d69bac77ec3989p-8 : inexact-ok
+= log2p1 tonearest intel96 0x8p-8 : 0xb.5d69bac77ec398ap-8 : inexact-ok
+= log2p1 towardzero intel96 0x8p-8 : 0xb.5d69bac77ec3989p-8 : inexact-ok
+= log2p1 upward intel96 0x8p-8 : 0xb.5d69bac77ec398ap-8 : inexact-ok
+= log2p1 downward m68k96 0x8p-8 : 0xb.5d69bac77ec3989p-8 : inexact-ok
+= log2p1 tonearest m68k96 0x8p-8 : 0xb.5d69bac77ec398ap-8 : inexact-ok
+= log2p1 towardzero m68k96 0x8p-8 : 0xb.5d69bac77ec3989p-8 : inexact-ok
+= log2p1 upward m68k96 0x8p-8 : 0xb.5d69bac77ec398ap-8 : inexact-ok
+= log2p1 downward binary128 0x8p-8 : 0xb.5d69bac77ec3989b03784b5be08p-8 : inexact-ok
+= log2p1 tonearest binary128 0x8p-8 : 0xb.5d69bac77ec3989b03784b5be088p-8 : inexact-ok
+= log2p1 towardzero binary128 0x8p-8 : 0xb.5d69bac77ec3989b03784b5be08p-8 : inexact-ok
+= log2p1 upward binary128 0x8p-8 : 0xb.5d69bac77ec3989b03784b5be088p-8 : inexact-ok
+= log2p1 downward ibm128 0x8p-8 : 0xb.5d69bac77ec3989b03784b5bep-8 : inexact-ok
+= log2p1 tonearest ibm128 0x8p-8 : 0xb.5d69bac77ec3989b03784b5bep-8 : inexact-ok
+= log2p1 towardzero ibm128 0x8p-8 : 0xb.5d69bac77ec3989b03784b5bep-8 : inexact-ok
+= log2p1 upwar