about summary refs log tree commit diff
diff options
context:
space:
mode:
authorJoseph Myers <joseph@codesourcery.com>2015-02-12 19:02:45 +0000
committerJoseph Myers <joseph@codesourcery.com>2015-02-12 19:02:45 +0000
commit03d95bd48319256bd29cfaece45919fc58bf56cc (patch)
tree5ed21769ade47b69e555932587a23f69201c7ba6
parent98408b95b155464e760c22dce4842f29499db821 (diff)
downloadglibc-03d95bd48319256bd29cfaece45919fc58bf56cc.tar.gz
glibc-03d95bd48319256bd29cfaece45919fc58bf56cc.tar.xz
glibc-03d95bd48319256bd29cfaece45919fc58bf56cc.zip
Fix exp2 spurious underflows (bug 16560).
This patch fixes the remaining part of bug 16560, spurious underflows
from exp2 of arguments close to 0 (when the result is close to 1, so
should not underflow), by just using 1+x instead of a more complicated
calculation when the argument is sufficiently small.

Tested for x86_64, x86 and mips64.

	[BZ #16560]
	* math/e_exp2l.c [LDBL_MANT_DIG == 106] (LDBL_EPSILON): Undefine
	and redefine.
	(__ieee754_exp2l): Do not multiply small fractional parts by
	M_LN2l.
	* sysdeps/i386/fpu/e_exp2l.S (__ieee754_exp2l): Just add 1 to
	small argument.
	* sysdeps/ieee754/dbl-64/e_exp2.c (__ieee754_exp2): Likewise.
	* sysdeps/ieee754/flt-32/e_exp2f.c (__ieee754_exp2f): Likewise.
	* sysdeps/x86_64/fpu/e_exp2l.S (__ieee754_exp2l): Likewise.
	* math/auto-libm-test-in: Add more tests of exp2.
	* math/auto-libm-test-out: Regenerated.
-rw-r--r--ChangeLog15
-rw-r--r--NEWS2
-rw-r--r--math/auto-libm-test-in18
-rw-r--r--math/auto-libm-test-out666
-rw-r--r--math/e_exp2l.c9
-rw-r--r--sysdeps/i386/fpu/e_exp2l.S10
-rw-r--r--sysdeps/ieee754/dbl-64/e_exp2.c3
-rw-r--r--sysdeps/ieee754/flt-32/e_exp2f.c3
-rw-r--r--sysdeps/x86_64/fpu/e_exp2l.S10
9 files changed, 733 insertions, 3 deletions
diff --git a/ChangeLog b/ChangeLog
index d431c29f04..54da8c5fac 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,18 @@
+2015-02-12  Joseph Myers  <joseph@codesourcery.com>
+
+	[BZ #16560]
+	* math/e_exp2l.c [LDBL_MANT_DIG == 106] (LDBL_EPSILON): Undefine
+	and redefine.
+	(__ieee754_exp2l): Do not multiply small fractional parts by
+	M_LN2l.
+	* sysdeps/i386/fpu/e_exp2l.S (__ieee754_exp2l): Just add 1 to
+	small argument.
+	* sysdeps/ieee754/dbl-64/e_exp2.c (__ieee754_exp2): Likewise.
+	* sysdeps/ieee754/flt-32/e_exp2f.c (__ieee754_exp2f): Likewise.
+	* sysdeps/x86_64/fpu/e_exp2l.S (__ieee754_exp2l): Likewise.
+	* math/auto-libm-test-in: Add more tests of exp2.
+	* math/auto-libm-test-out: Regenerated.
+
 2015-02-12  Rajalakshmi Srinivasaraghavan  <raji@linux.vnet.ibm.com>
 
 	* sysdeps/powerpc/powerpc64/power7/strncpy.S (strncpy): Optimize
diff --git a/NEWS b/NEWS
index 2938f6e2d2..c3d2c974bb 100644
--- a/NEWS
+++ b/NEWS
@@ -9,7 +9,7 @@ Version 2.22
 
 * The following bugs are resolved with this release:
 
-  4719, 15467, 15790, 17912, 17932, 17944, 17949.
+  4719, 15467, 15790, 16560, 17912, 17932, 17944, 17949.
 
 Version 2.21
 
diff --git a/math/auto-libm-test-in b/math/auto-libm-test-in
index ad43113fd1..6bcfd54e55 100644
--- a/math/auto-libm-test-in
+++ b/math/auto-libm-test-in
@@ -938,6 +938,24 @@ exp2 1023
 exp2 -1074
 exp2 16383
 exp2 -16400
+exp2 0x1p-10
+exp2 -0x1p-10
+exp2 0x1p-20
+exp2 -0x1p-20
+exp2 0x1p-30
+exp2 -0x1p-30
+exp2 0x1p-40
+exp2 -0x1p-40
+exp2 0x1p-50
+exp2 -0x1p-50
+exp2 0x1p-60
+exp2 -0x1p-60
+exp2 0x1p-100
+exp2 -0x1p-100
+exp2 min
+exp2 -min
+exp2 min_subnorm
+exp2 -min_subnorm
 
 expm1 0
 expm1 -0
diff --git a/math/auto-libm-test-out b/math/auto-libm-test-out
index daa1468c03..7b569cf12a 100644
--- a/math/auto-libm-test-out
+++ b/math/auto-libm-test-out
@@ -92448,6 +92448,672 @@ exp2 -16400
 = exp2 tonearest ldbl-128ibm -0x4.01p+12L : 0x0p+0L : inexact-ok underflow errno-erange
 = exp2 towardzero ldbl-128ibm -0x4.01p+12L : 0x0p+0L : inexact-ok underflow errno-erange
 = exp2 upward ldbl-128ibm -0x4.01p+12L : 0x4p-1076L : inexact-ok underflow errno-erange-ok
+exp2 0x1p-10
+= exp2 downward flt-32 0x4p-12f : 0x1.002c6p+0f : inexact-ok
+= exp2 tonearest flt-32 0x4p-12f : 0x1.002c6p+0f : inexact-ok
+= exp2 towardzero flt-32 0x4p-12f : 0x1.002c6p+0f : inexact-ok
+= exp2 upward flt-32 0x4p-12f : 0x1.002c62p+0f : inexact-ok
+= exp2 downward dbl-64 0x4p-12 : 0x1.002c605e2e8cep+0 : inexact-ok
+= exp2 tonearest dbl-64 0x4p-12 : 0x1.002c605e2e8cfp+0 : inexact-ok
+= exp2 towardzero dbl-64 0x4p-12 : 0x1.002c605e2e8cep+0 : inexact-ok
+= exp2 upward dbl-64 0x4p-12 : 0x1.002c605e2e8cfp+0 : inexact-ok
+= exp2 downward ldbl-96-intel 0x4p-12L : 0x1.002c605e2e8cec5p+0L : inexact-ok
+= exp2 tonearest ldbl-96-intel 0x4p-12L : 0x1.002c605e2e8cec5p+0L : inexact-ok
+= exp2 towardzero ldbl-96-intel 0x4p-12L : 0x1.002c605e2e8cec5p+0L : inexact-ok
+= exp2 upward ldbl-96-intel 0x4p-12L : 0x1.002c605e2e8cec52p+0L : inexact-ok
+= exp2 downward ldbl-96-m68k 0x4p-12L : 0x1.002c605e2e8cec5p+0L : inexact-ok
+= exp2 tonearest ldbl-96-m68k 0x4p-12L : 0x1.002c605e2e8cec5p+0L : inexact-ok
+= exp2 towardzero ldbl-96-m68k 0x4p-12L : 0x1.002c605e2e8cec5p+0L : inexact-ok
+= exp2 upward ldbl-96-m68k 0x4p-12L : 0x1.002c605e2e8cec52p+0L : inexact-ok
+= exp2 downward ldbl-128 0x4p-12L : 0x1.002c605e2e8cec506d21bfc89a23p+0L : inexact-ok
+= exp2 tonearest ldbl-128 0x4p-12L : 0x1.002c605e2e8cec506d21bfc89a24p+0L : inexact-ok
+= exp2 towardzero ldbl-128 0x4p-12L : 0x1.002c605e2e8cec506d21bfc89a23p+0L : inexact-ok
+= exp2 upward ldbl-128 0x4p-12L : 0x1.002c605e2e8cec506d21bfc89a24p+0L : inexact-ok
+= exp2 downward ldbl-128ibm 0x4p-12L : 0x1.002c605e2e8cec506d21bfc89ap+0L : inexact-ok
+= exp2 tonearest ldbl-128ibm 0x4p-12L : 0x1.002c605e2e8cec506d21bfc89ap+0L : inexact-ok
+= exp2 towardzero ldbl-128ibm 0x4p-12L : 0x1.002c605e2e8cec506d21bfc89ap+0L : inexact-ok
+= exp2 upward ldbl-128ibm 0x4p-12L : 0x1.002c605e2e8cec506d21bfc89a8p+0L : inexact-ok
+exp2 -0x1p-10
+= exp2 downward flt-32 -0x4p-12f : 0xf.fd3a7p-4f : inexact-ok
+= exp2 tonearest flt-32 -0x4p-12f : 0xf.fd3a7p-4f : inexact-ok
+= exp2 towardzero flt-32 -0x4p-12f : 0xf.fd3a7p-4f : inexact-ok
+= exp2 upward flt-32 -0x4p-12f : 0xf.fd3a8p-4f : inexact-ok
+= exp2 downward dbl-64 -0x4p-12 : 0xf.fd3a751c0f7ep-4 : inexact-ok
+= exp2 tonearest dbl-64 -0x4p-12 : 0xf.fd3a751c0f7ep-4 : inexact-ok
+= exp2 towardzero dbl-64 -0x4p-12 : 0xf.fd3a751c0f7ep-4 : inexact-ok
+= exp2 upward dbl-64 -0x4p-12 : 0xf.fd3a751c0f7e8p-4 : inexact-ok
+= exp2 downward ldbl-96-intel -0x4p-12L : 0xf.fd3a751c0f7e10bp-4L : inexact-ok
+= exp2 tonearest ldbl-96-intel -0x4p-12L : 0xf.fd3a751c0f7e10cp-4L : inexact-ok
+= exp2 towardzero ldbl-96-intel -0x4p-12L : 0xf.fd3a751c0f7e10bp-4L : inexact-ok
+= exp2 upward ldbl-96-intel -0x4p-12L : 0xf.fd3a751c0f7e10cp-4L : inexact-ok
+= exp2 downward ldbl-96-m68k -0x4p-12L : 0xf.fd3a751c0f7e10bp-4L : inexact-ok
+= exp2 tonearest ldbl-96-m68k -0x4p-12L : 0xf.fd3a751c0f7e10cp-4L : inexact-ok
+= exp2 towardzero ldbl-96-m68k -0x4p-12L : 0xf.fd3a751c0f7e10bp-4L : inexact-ok
+= exp2 upward ldbl-96-m68k -0x4p-12L : 0xf.fd3a751c0f7e10cp-4L : inexact-ok
+= exp2 downward ldbl-128 -0x4p-12L : 0xf.fd3a751c0f7e10bd3b9f8ae012f8p-4L : inexact-ok
+= exp2 tonearest ldbl-128 -0x4p-12L : 0xf.fd3a751c0f7e10bd3b9f8ae012f8p-4L : inexact-ok
+= exp2 towardzero ldbl-128 -0x4p-12L : 0xf.fd3a751c0f7e10bd3b9f8ae012f8p-4L : inexact-ok
+= exp2 upward ldbl-128 -0x4p-12L : 0xf.fd3a751c0f7e10bd3b9f8ae013p-4L : inexact-ok
+= exp2 downward ldbl-128ibm -0x4p-12L : 0xf.fd3a751c0f7e10bd3b9f8ae01p-4L : inexact-ok
+= exp2 tonearest ldbl-128ibm -0x4p-12L : 0xf.fd3a751c0f7e10bd3b9f8ae014p-4L : inexact-ok
+= exp2 towardzero ldbl-128ibm -0x4p-12L : 0xf.fd3a751c0f7e10bd3b9f8ae01p-4L : inexact-ok
+= exp2 upward ldbl-128ibm -0x4p-12L : 0xf.fd3a751c0f7e10bd3b9f8ae014p-4L : inexact-ok
+exp2 0x1p-20
+= exp2 downward flt-32 0x1p-20f : 0x1.00000ap+0f : inexact-ok
+= exp2 tonearest flt-32 0x1p-20f : 0x1.00000cp+0f : inexact-ok
+= exp2 towardzero flt-32 0x1p-20f : 0x1.00000ap+0f : inexact-ok
+= exp2 upward flt-32 0x1p-20f : 0x1.00000cp+0f : inexact-ok
+= exp2 downward dbl-64 0x1p-20 : 0x1.00000b1721bcfp+0 : inexact-ok
+= exp2 tonearest dbl-64 0x1p-20 : 0x1.00000b1721bdp+0 : inexact-ok
+= exp2 towardzero dbl-64 0x1p-20 : 0x1.00000b1721bcfp+0 : inexact-ok
+= exp2 upward dbl-64 0x1p-20 : 0x1.00000b1721bdp+0 : inexact-ok
+= exp2 downward ldbl-96-intel 0x1p-20L : 0x1.00000b1721bcfc98p+0L : inexact-ok
+= exp2 tonearest ldbl-96-intel 0x1p-20L : 0x1.00000b1721bcfc9ap+0L : inexact-ok
+= exp2 towardzero ldbl-96-intel 0x1p-20L : 0x1.00000b1721bcfc98p+0L : inexact-ok
+= exp2 upward ldbl-96-intel 0x1p-20L : 0x1.00000b1721bcfc9ap+0L : inexact-ok
+= exp2 downward ldbl-96-m68k 0x1p-20L : 0x1.00000b1721bcfc98p+0L : inexact-ok
+= exp2 tonearest ldbl-96-m68k 0x1p-20L : 0x1.00000b1721bcfc9ap+0L : inexact-ok
+= exp2 towardzero ldbl-96-m68k 0x1p-20L : 0x1.00000b1721bcfc98p+0L : inexact-ok
+= exp2 upward ldbl-96-m68k 0x1p-20L : 0x1.00000b1721bcfc9ap+0L : inexact-ok
+= exp2 downward ldbl-128 0x1p-20L : 0x1.00000b1721bcfc99d9f890ea0691p+0L : inexact-ok
+= exp2 tonearest ldbl-128 0x1p-20L : 0x1.00000b1721bcfc99d9f890ea0691p+0L : inexact-ok
+= exp2 towardzero ldbl-128 0x1p-20L : 0x1.00000b1721bcfc99d9f890ea0691p+0L : inexact-ok
+= exp2 upward ldbl-128 0x1p-20L : 0x1.00000b1721bcfc99d9f890ea0692p+0L : inexact-ok
+= exp2 downward ldbl-128ibm 0x1p-20L : 0x1.00000b1721bcfc99d9f890ea068p+0L : inexact-ok
+= exp2 tonearest ldbl-128ibm 0x1p-20L : 0x1.00000b1721bcfc99d9f890ea068p+0L : inexact-ok
+= exp2 towardzero ldbl-128ibm 0x1p-20L : 0x1.00000b1721bcfc99d9f890ea068p+0L : inexact-ok
+= exp2 upward ldbl-128ibm 0x1p-20L : 0x1.00000b1721bcfc99d9f890ea07p+0L : inexact-ok
+exp2 -0x1p-20
+= exp2 downward flt-32 -0x1p-20f : 0xf.ffff4p-4f : inexact-ok
+= exp2 tonearest flt-32 -0x1p-20f : 0xf.ffff5p-4f : inexact-ok
+= exp2 towardzero flt-32 -0x1p-20f : 0xf.ffff4p-4f : inexact-ok
+= exp2 upward flt-32 -0x1p-20f : 0xf.ffff5p-4f : inexact-ok
+= exp2 downward dbl-64 -0x1p-20 : 0xf.ffff4e8debep-4 : inexact-ok
+= exp2 tonearest dbl-64 -0x1p-20 : 0xf.ffff4e8debep-4 : inexact-ok
+= exp2 towardzero dbl-64 -0x1p-20 : 0xf.ffff4e8debep-4 : inexact-ok
+= exp2 upward dbl-64 -0x1p-20 : 0xf.ffff4e8debe08p-4 : inexact-ok
+= exp2 downward ldbl-96-intel -0x1p-20L : 0xf.ffff4e8debe025ep-4L : inexact-ok
+= exp2 tonearest ldbl-96-intel -0x1p-20L : 0xf.ffff4e8debe025ep-4L : inexact-ok
+= exp2 towardzero ldbl-96-intel -0x1p-20L : 0xf.ffff4e8debe025ep-4L : inexact-ok
+= exp2 upward ldbl-96-intel -0x1p-20L : 0xf.ffff4e8debe025fp-4L : inexact-ok
+= exp2 downward ldbl-96-m68k -0x1p-20L : 0xf.ffff4e8debe025ep-4L : inexact-ok
+= exp2 tonearest ldbl-96-m68k -0x1p-20L : 0xf.ffff4e8debe025ep-4L : inexact-ok
+= exp2 towardzero ldbl-96-m68k -0x1p-20L : 0xf.ffff4e8debe025ep-4L : inexact-ok
+= exp2 upward ldbl-96-m68k -0x1p-20L : 0xf.ffff4e8debe025fp-4L : inexact-ok
+= exp2 downward ldbl-128 -0x1p-20L : 0xf.ffff4e8debe025e24128a3d4607p-4L : inexact-ok
+= exp2 tonearest ldbl-128 -0x1p-20L : 0xf.ffff4e8debe025e24128a3d4607p-4L : inexact-ok
+= exp2 towardzero ldbl-128 -0x1p-20L : 0xf.ffff4e8debe025e24128a3d4607p-4L : inexact-ok
+= exp2 upward ldbl-128 -0x1p-20L : 0xf.ffff4e8debe025e24128a3d46078p-4L : inexact-ok
+= exp2 downward ldbl-128ibm -0x1p-20L : 0xf.ffff4e8debe025e24128a3d46p-4L : inexact-ok
+= exp2 tonearest ldbl-128ibm -0x1p-20L : 0xf.ffff4e8debe025e24128a3d46p-4L : inexact-ok
+= exp2 towardzero ldbl-128ibm -0x1p-20L : 0xf.ffff4e8debe025e24128a3d46p-4L : inexact-ok
+= exp2 upward ldbl-128ibm -0x1p-20L : 0xf.ffff4e8debe025e24128a3d464p-4L : inexact-ok
+exp2 0x1p-30
+= exp2 downward flt-32 0x4p-32f : 0x1p+0f : inexact-ok
+= exp2 tonearest flt-32 0x4p-32f : 0x1p+0f : inexact-ok
+= exp2 towardzero flt-32 0x4p-32f : 0x1p+0f : inexact-ok
+= exp2 upward flt-32 0x4p-32f : 0x1.000002p+0f : inexact-ok
+= exp2 downward dbl-64 0x4p-32 : 0x1.00000002c5c85p+0 : inexact-ok
+= exp2 tonearest dbl-64 0x4p-32 : 0x1.00000002c5c86p+0 : inexact-ok
+= exp2 towardzero dbl-64 0x4p-32 : 0x1.00000002c5c85p+0 : inexact-ok
+= exp2 upward dbl-64 0x4p-32 : 0x1.00000002c5c86p+0 : inexact-ok
+= exp2 downward ldbl-96-intel 0x4p-32L : 0x1.00000002c5c85fe2p+0L : inexact-ok
+= exp2 tonearest ldbl-96-intel 0x4p-32L : 0x1.00000002c5c85fe4p+0L : inexact-ok
+= exp2 towardzero ldbl-96-intel 0x4p-32L : 0x1.00000002c5c85fe2p+0L : inexact-ok
+= exp2 upward ldbl-96-intel 0x4p-32L : 0x1.00000002c5c85fe4p+0L : inexact-ok
+= exp2 downward ldbl-96-m68k 0x4p-32L : 0x1.00000002c5c85fe2p+0L : inexact-ok
+= exp2 tonearest ldbl-96-m68k 0x4p-32L : 0x1.00000002c5c85fe4p+0L : inexact-ok
+= exp2 towardzero ldbl-96-m68k 0x4p-32L : 0x1.00000002c5c85fe2p+0L : inexact-ok
+= exp2 upward ldbl-96-m68k 0x4p-32L : 0x1.00000002c5c85fe4p+0L : inexact-ok
+= exp2 downward ldbl-128 0x4p-32L : 0x1.00000002c5c85fe31f35a6a30da1p+0L : inexact-ok
+= exp2 tonearest ldbl-128 0x4p-32L : 0x1.00000002c5c85fe31f35a6a30da2p+0L : inexact-ok
+= exp2 towardzero ldbl-128 0x4p-32L : 0x1.00000002c5c85fe31f35a6a30da1p+0L : inexact-ok
+= exp2 upward ldbl-128 0x4p-32L : 0x1.00000002c5c85fe31f35a6a30da2p+0L : inexact-ok
+= exp2 downward ldbl-128ibm 0x4p-32L : 0x1.00000002c5c85fe31f35a6a30d8p+0L : inexact-ok
+= exp2 tonearest ldbl-128ibm 0x4p-32L : 0x1.00000002c5c85fe31f35a6a30d8p+0L : inexact-ok
+= exp2 towardzero ldbl-128ibm 0x4p-32L : 0x1.00000002c5c85fe31f35a6a30d8p+0L : inexact-ok
+= exp2 upward ldbl-128ibm 0x4p-32L : 0x1.00000002c5c85fe31f35a6a30ep+0L : inexact-ok
+exp2 -0x1p-30
+= exp2 downward flt-32 -0x4p-32f : 0xf.fffffp-4f : inexact-ok
+= exp2 tonearest flt-32 -0x4p-32f : 0x1p+0f : inexact-ok
+= exp2 towardzero flt-32 -0x4p-32f : 0xf.fffffp-4f : inexact-ok
+= exp2 upward flt-32 -0x4p-32f : 0x1p+0f : inexact-ok
+= exp2 downward dbl-64 -0x4p-32 : 0xf.ffffffd3a37ap-4 : inexact-ok
+= exp2 tonearest dbl-64 -0x4p-32 : 0xf.ffffffd3a37ap-4 : inexact-ok
+= exp2 towardzero dbl-64 -0x4p-32 : 0xf.ffffffd3a37ap-4 : inexact-ok
+= exp2 upward dbl-64 -0x4p-32 : 0xf.ffffffd3a37a8p-4 : inexact-ok
+= exp2 downward ldbl-96-intel -0x4p-32L : 0xf.ffffffd3a37a024p-4L : inexact-ok
+= exp2 tonearest ldbl-96-intel -0x4p-32L : 0xf.ffffffd3a37a025p-4L : inexact-ok
+= exp2 towardzero ldbl-96-intel -0x4p-32L : 0xf.ffffffd3a37a024p-4L : inexact-ok
+= exp2 upward ldbl-96-intel -0x4p-32L : 0xf.ffffffd3a37a025p-4L : inexact-ok
+= exp2 downward ldbl-96-m68k -0x4p-32L : 0xf.ffffffd3a37a024p-4L : inexact-ok
+= exp2 tonearest ldbl-96-m68k -0x4p-32L : 0xf.ffffffd3a37a025p-4L : inexact-ok
+= exp2 towardzero ldbl-96-m68k -0x4p-32L : 0xf.ffffffd3a37a024p-4L : inexact-ok
+= exp2 upward ldbl-96-m68k -0x4p-32L : 0xf.ffffffd3a37a025p-4L : inexact-ok
+= exp2 downward ldbl-128 -0x4p-32L : 0xf.ffffffd3a37a02490b9d93da3c18p-4L : inexact-ok
+= exp2 tonearest ldbl-128 -0x4p-32L : 0xf.ffffffd3a37a02490b9d93da3c2p-4L : inexact-ok
+= exp2 towardzero ldbl-128 -0x4p-32L : 0xf.ffffffd3a37a02490b9d93da3c18p-4L : inexact-ok
+= exp2 upward ldbl-128 -0x4p-32L : 0xf.ffffffd3a37a02490b9d93da3c2p-4L : inexact-ok
+= exp2 downward ldbl-128ibm -0x4p-32L : 0xf.ffffffd3a37a02490b9d93da3cp-4L : inexact-ok
+= exp2 tonearest ldbl-128ibm -0x4p-32L : 0xf.ffffffd3a37a02490b9d93da3cp-4L : inexact-ok
+= exp2 towardzero ldbl-128ibm -0x4p-32L : 0xf.ffffffd3a37a02490b9d93da3cp-4L : inexact-ok
+= exp2 upward ldbl-128ibm -0x4p-32L : 0xf.ffffffd3a37a02490b9d93da4p-4L : inexact-ok
+exp2 0x1p-40
+= exp2 downward flt-32 0x1p-40f : 0x1p+0f : inexact-ok
+= exp2 tonearest flt-32 0x1p-40f : 0x1p+0f : inexact-ok
+= exp2 towardzero flt-32 0x1p-40f : 0x1p+0f : inexact-ok
+= exp2 upward flt-32 0x1p-40f : 0x1.000002p+0f : inexact-ok
+= exp2 downward dbl-64 0x1p-40 : 0x1.0000000000b17p+0 : inexact-ok
+= exp2 tonearest dbl-64 0x1p-40 : 0x1.0000000000b17p+0 : inexact-ok
+= exp2 towardzero dbl-64 0x1p-40 : 0x1.0000000000b17p+0 : inexact-ok
+= exp2 upward dbl-64 0x1p-40 : 0x1.0000000000b18p+0 : inexact-ok
+= exp2 downward ldbl-96-intel 0x1p-40L : 0x1.0000000000b17216p+0L : inexact-ok
+= exp2 tonearest ldbl-96-intel 0x1p-40L : 0x1.0000000000b17218p+0L : inexact-ok
+= exp2 towardzero ldbl-96-intel 0x1p-40L : 0x1.0000000000b17216p+0L : inexact-ok
+= exp2 upward ldbl-96-intel 0x1p-40L : 0x1.0000000000b17218p+0L : inexact-ok
+= exp2 downward ldbl-96-m68k 0x1p-40L : 0x1.0000000000b17216p+0L : inexact-ok
+= exp2 tonearest ldbl-96-m68k 0x1p-40L : 0x1.0000000000b17218p+0L : inexact-ok
+= exp2 towardzero ldbl-96-m68k 0x1p-40L : 0x1.0000000000b17216p+0L : inexact-ok
+= exp2 upward ldbl-96-m68k 0x1p-40L : 0x1.0000000000b17218p+0L : inexact-ok
+= exp2 downward ldbl-128 0x1p-40L : 0x1.0000000000b17217f7d20cf927c8p+0L : inexact-ok
+= exp2 tonearest ldbl-128 0x1p-40L : 0x1.0000000000b17217f7d20cf927c9p+0L : inexact-ok
+= exp2 towardzero ldbl-128 0x1p-40L : 0x1.0000000000b17217f7d20cf927c8p+0L : inexact-ok
+= exp2 upward ldbl-128 0x1p-40L : 0x1.0000000000b17217f7d20cf927c9p+0L : inexact-ok
+= exp2 downward ldbl-128ibm 0x1p-40L : 0x1.0000000000b17217f7d20cf9278p+0L : inexact-ok
+= exp2 tonearest ldbl-128ibm 0x1p-40L : 0x1.0000000000b17217f7d20cf928p+0L : inexact-ok
+= exp2 towardzero ldbl-128ibm 0x1p-40L : 0x1.0000000000b17217f7d20cf9278p+0L : inexact-ok
+= exp2 upward ldbl-128ibm 0x1p-40L : 0x1.0000000000b17217f7d20cf928p+0L : inexact-ok
+exp2 -0x1p-40
+= exp2 downward flt-32 -0x1p-40f : 0xf.fffffp-4f : inexact-ok
+= exp2 tonearest flt-32 -0x1p-40f : 0x1p+0f : inexact-ok
+= exp2 towardzero flt-32 -0x1p-40f : 0xf.fffffp-4f : inexact-ok
+= exp2 upward flt-32 -0x1p-40f : 0x1p+0f : inexact-ok
+= exp2 downward dbl-64 -0x1p-40 : 0xf.fffffffff4e88p-4 : inexact-ok
+= exp2 tonearest dbl-64 -0x1p-40 : 0xf.fffffffff4e9p-4 : inexact-ok
+= exp2 towardzero dbl-64 -0x1p-40 : 0xf.fffffffff4e88p-4 : inexact-ok
+= exp2 upward dbl-64 -0x1p-40 : 0xf.fffffffff4e9p-4 : inexact-ok
+= exp2 downward ldbl-96-intel -0x1p-40L : 0xf.fffffffff4e8de8p-4L : inexact-ok
+= exp2 tonearest ldbl-96-intel -0x1p-40L : 0xf.fffffffff4e8de8p-4L : inexact-ok
+= exp2 towardzero ldbl-96-intel -0x1p-40L : 0xf.fffffffff4e8de8p-4L : inexact-ok
+= exp2 upward ldbl-96-intel -0x1p-40L : 0xf.fffffffff4e8de9p-4L : inexact-ok
+= exp2 downward ldbl-96-m68k -0x1p-40L : 0xf.fffffffff4e8de8p-4L : inexact-ok
+= exp2 tonearest ldbl-96-m68k -0x1p-40L : 0xf.fffffffff4e8de8p-4L : inexact-ok
+= exp2 towardzero ldbl-96-m68k -0x1p-40L : 0xf.fffffffff4e8de8p-4L : inexact-ok
+= exp2 upward ldbl-96-m68k -0x1p-40L : 0xf.fffffffff4e8de9p-4L : inexact-ok
+= exp2 downward ldbl-128 -0x1p-40L : 0xf.fffffffff4e8de8082e6e05d035p-4L : inexact-ok
+= exp2 tonearest ldbl-128 -0x1p-40L : 0xf.fffffffff4e8de8082e6e05d035p-4L : inexact-ok
+= exp2 towardzero ldbl-128 -0x1p-40L : 0xf.fffffffff4e8de8082e6e05d035p-4L : inexact-ok
+= exp2 upward ldbl-128 -0x1p-40L : 0xf.fffffffff4e8de8082e6e05d0358p-4L : inexact-ok
+= exp2 downward ldbl-128ibm -0x1p-40L : 0xf.fffffffff4e8de8082e6e05dp-4L : inexact-ok
+= exp2 tonearest ldbl-128ibm -0x1p-40L : 0xf.fffffffff4e8de8082e6e05d04p-4L : inexact-ok
+= exp2 towardzero ldbl-128ibm -0x1p-40L : 0xf.fffffffff4e8de8082e6e05dp-4L : inexact-ok
+= exp2 upward ldbl-128ibm -0x1p-40L : 0xf.fffffffff4e8de8082e6e05d04p-4L : inexact-ok
+exp2 0x1p-50
+= exp2 downward flt-32 0x4p-52f : 0x1p+0f : inexact-ok
+= exp2 tonearest flt-32 0x4p-52f : 0x1p+0f : inexact-ok
+= exp2 towardzero flt-32 0x4p-52f : 0x1p+0f : inexact-ok
+= exp2 upward flt-32 0x4p-52f : 0x1.000002p+0f : inexact-ok
+= exp2 downward dbl-64 0x4p-52 : 0x1.0000000000002p+0 : inexact-ok
+= exp2 tonearest dbl-64 0x4p-52 : 0x1.0000000000003p+0 : inexact-ok
+= exp2 towardzero dbl-64 0x4p-52 : 0x1.0000000000002p+0 : inexact-ok
+= exp2 upward dbl-64 0x4p-52 : 0x1.0000000000003p+0 : inexact-ok
+= exp2 downward ldbl-96-intel 0x4p-52L : 0x1.0000000000002c5cp+0L : inexact-ok
+= exp2 tonearest ldbl-96-intel 0x4p-52L : 0x1.0000000000002c5cp+0L : inexact-ok
+= exp2 towardzero ldbl-96-intel 0x4p-52L : 0x1.0000000000002c5cp+0L : inexact-ok
+= exp2 upward ldbl-96-intel 0x4p-52L : 0x1.0000000000002c5ep+0L : inexact-ok
+= exp2 downward ldbl-96-m68k 0x4p-52L : 0x1.0000000000002c5cp+0L : inexact-ok
+= exp2 tonearest ldbl-96-m68k 0x4p-52L : 0x1.0000000000002c5cp+0L : inexact-ok
+= exp2 towardzero ldbl-96-m68k 0x4p-52L : 0x1.0000000000002c5cp+0L : inexact-ok
+= exp2 upward ldbl-96-m68k 0x4p-52L : 0x1.0000000000002c5ep+0L : inexact-ok
+= exp2 downward ldbl-128 0x4p-52L : 0x1.0000000000002c5c85fdf473e242p+0L : inexact-ok
+= exp2 tonearest ldbl-128 0x4p-52L : 0x1.0000000000002c5c85fdf473e243p+0L : inexact-ok
+= exp2 towardzero ldbl-128 0x4p-52L : 0x1.0000000000002c5c85fdf473e242p+0L : inexact-ok
+= exp2 upward ldbl-128 0x4p-52L : 0x1.0000000000002c5c85fdf473e243p+0L : inexact-ok
+= exp2 downward ldbl-128ibm 0x4p-52L : 0x1.0000000000002c5c85fdf473e2p+0L : inexact-ok
+= exp2 tonearest ldbl-128ibm 0x4p-52L : 0x1.0000000000002c5c85fdf473e28p+0L : inexact-ok
+= exp2 towardzero ldbl-128ibm 0x4p-52L : 0x1.0000000000002c5c85fdf473e2p+0L : inexact-ok
+= exp2 upward ldbl-128ibm 0x4p-52L : 0x1.0000000000002c5c85fdf473e28p+0L : inexact-ok
+exp2 -0x1p-50
+= exp2 downward flt-32 -0x4p-52f : 0xf.fffffp-4f : inexact-ok
+= exp2 tonearest flt-32 -0x4p-52f : 0x1p+0f : inexact-ok
+= exp2 towardzero flt-32 -0x4p-52f : 0xf.fffffp-4f : inexact-ok
+= exp2 upward flt-32 -0x4p-52f : 0x1p+0f : inexact-ok
+= exp2 downward dbl-64 -0x4p-52 : 0xf.fffffffffffdp-4 : inexact-ok
+= exp2 tonearest dbl-64 -0x4p-52 : 0xf.fffffffffffdp-4 : inexact-ok
+= exp2 towardzero dbl-64 -0x4p-52 : 0xf.fffffffffffdp-4 : inexact-ok
+= exp2 upward dbl-64 -0x4p-52 : 0xf.fffffffffffd8p-4 : inexact-ok
+= exp2 downward ldbl-96-intel -0x4p-52L : 0xf.fffffffffffd3a3p-4L : inexact-ok
+= exp2 tonearest ldbl-96-intel -0x4p-52L : 0xf.fffffffffffd3a3p-4L : inexact-ok
+= exp2 towardzero ldbl-96-intel -0x4p-52L : 0xf.fffffffffffd3a3p-4L : inexact-ok
+= exp2 upward ldbl-96-intel -0x4p-52L : 0xf.fffffffffffd3a4p-4L : inexact-ok
+= exp2 downward ldbl-96-m68k -0x4p-52L : 0xf.fffffffffffd3a3p-4L : inexact-ok
+= exp2 tonearest ldbl-96-m68k -0x4p-52L : 0xf.fffffffffffd3a3p-4L : inexact-ok
+= exp2 towardzero ldbl-96-m68k -0x4p-52L : 0xf.fffffffffffd3a3p-4L : inexact-ok
+= exp2 upward ldbl-96-m68k -0x4p-52L : 0xf.fffffffffffd3a4p-4L : inexact-ok
+= exp2 downward ldbl-128 -0x4p-52L : 0xf.fffffffffffd3a37a020b8c256dp-4L : inexact-ok
+= exp2 tonearest ldbl-128 -0x4p-52L : 0xf.fffffffffffd3a37a020b8c256dp-4L : inexact-ok
+= exp2 towardzero ldbl-128 -0x4p-52L : 0xf.fffffffffffd3a37a020b8c256dp-4L : inexact-ok
+= exp2 upward ldbl-128 -0x4p-52L : 0xf.fffffffffffd3a37a020b8c256d8p-4L : inexact-ok
+= exp2 downward ldbl-128ibm -0x4p-52L : 0xf.fffffffffffd3a37a020b8c254p-4L : inexact-ok
+= exp2 tonearest ldbl-128ibm -0x4p-52L : 0xf.fffffffffffd3a37a020b8c258p-4L : inexact-ok
+= exp2 towardzero ldbl-128ibm -0x4p-52L : 0xf.fffffffffffd3a37a020b8c254p-4L : inexact-ok
+= exp2 upward ldbl-128ibm -0x4p-52L : 0xf.fffffffffffd3a37a020b8c258p-4L : inexact-ok
+exp2 0x1p-60
+= exp2 downward flt-32 0x1p-60f : 0x1p+0f : inexact-ok
+= exp2 tonearest flt-32 0x1p-60f : 0x1p+0f : inexact-ok
+= exp2 towardzero flt-32 0x1p-60f : 0x1p+0f : inexact-ok
+= exp2 upward flt-32 0x1p-60f : 0x1.000002p+0f : inexact-ok
+= exp2 downward dbl-64 0x1p-60 : 0x1p+0 : inexact-ok
+= exp2 tonearest dbl-64 0x1p-60 : 0x1p+0 : inexact-ok
+= exp2 towardzero dbl-64 0x1p-60 : 0x1p+0 : inexact-ok
+= exp2 upward dbl-64 0x1p-60 : 0x1.0000000000001p+0 : inexact-ok
+= exp2 downward ldbl-96-intel 0x1p-60L : 0x1.000000000000000ap+0L : inexact-ok
+= exp2 tonearest ldbl-96-intel 0x1p-60L : 0x1.000000000000000cp+0L : inexact-ok
+= exp2 towardzero ldbl-96-intel 0x1p-60L : 0x1.000000000000000ap+0L : inexact-ok
+= exp2 upward ldbl-96-intel 0x1p-60L : 0x1.000000000000000cp+0L : inexact-ok
+= exp2 downward ldbl-96-m68k 0x1p-60L : 0x1.000000000000000ap+0L : inexact-ok
+= exp2 tonearest ldbl-96-m68k 0x1p-60L : 0x1.000000000000000cp+0L : inexact-ok
+= exp2 towardzero ldbl-96-m68k 0x1p-60L : 0x1.000000000000000ap+0L : inexact-ok
+= exp2 upward ldbl-96-m68k 0x1p-60L : 0x1.000000000000000cp+0L : inexact-ok
+= exp2 downward ldbl-128 0x1p-60L : 0x1.000000000000000b17217f7d1cf7p+0L : inexact-ok
+= exp2 tonearest ldbl-128 0x1p-60L : 0x1.000000000000000b17217f7d1cf8p+0L : inexact-ok
+= exp2 towardzero ldbl-128 0x1p-60L : 0x1.000000000000000b17217f7d1cf7p+0L : inexact-ok
+= exp2 upward ldbl-128 0x1p-60L : 0x1.000000000000000b17217f7d1cf8p+0L : inexact-ok
+= exp2 downward ldbl-128ibm 0x1p-60L : 0x1.000000000000000b17217f7d1c8p+0L : inexact-ok
+= exp2 tonearest ldbl-128ibm 0x1p-60L : 0x1.000000000000000b17217f7d1dp+0L : inexact-ok
+= exp2 towardzero ldbl-128ibm 0x1p-60L : 0x1.000000000000000b17217f7d1c8p+0L : inexact-ok
+= exp2 upward ldbl-128ibm 0x1p-60L : 0x1.000000000000000b17217f7d1dp+0L : inexact-ok
+exp2 -0x1p-60
+= exp2 downward flt-32 -0x1p-60f : 0xf.fffffp-4f : inexact-ok
+= exp2 tonearest flt-32 -0x1p-60f : 0x1p+0f : inexact-ok
+= exp2 towardzero flt-32 -0x1p-60f : 0xf.fffffp-4f : inexact-ok
+= exp2 upward flt-32 -0x1p-60f : 0x1p+0f : inexact-ok
+= exp2 downward dbl-64 -0x1p-60 : 0xf.ffffffffffff8p-4 : inexact-ok
+= exp2 tonearest dbl-64 -0x1p-60 : 0x1p+0 : inexact-ok
+= exp2 towardzero dbl-64 -0x1p-60 : 0xf.ffffffffffff8p-4 : inexact-ok
+= exp2 upward dbl-64 -0x1p-60 : 0x1p+0 : inexact-ok
+= exp2 downward ldbl-96-intel -0x1p-60L : 0xf.ffffffffffffff4p-4L : inexact-ok
+= exp2 tonearest ldbl-96-intel -0x1p-60L : 0xf.ffffffffffffff5p-4L : inexact-ok
+= exp2 towardzero ldbl-96-intel -0x1p-60L : 0xf.ffffffffffffff4p-4L : inexact-ok
+= exp2 upward ldbl-96-intel -0x1p-60L : 0xf.ffffffffffffff5p-4L : inexact-ok
+= exp2 downward ldbl-96-m68k -0x1p-60L : 0xf.ffffffffffffff4p-4L : inexact-ok
+= exp2 tonearest ldbl-96-m68k -0x1p-60L : 0xf.ffffffffffffff5p-4L : inexact-ok
+= exp2 towardzero ldbl-96-m68k -0x1p-60L : 0xf.ffffffffffffff4p-4L : inexact-ok
+= exp2 upward ldbl-96-m68k -0x1p-60L : 0xf.ffffffffffffff5p-4L : inexact-ok
+= exp2 downward ldbl-128 -0x1p-60L : 0xf.ffffffffffffff4e8de8082e308p-4L : inexact-ok
+= exp2 tonearest ldbl-128 -0x1p-60L : 0xf.ffffffffffffff4e8de8082e3088p-4L : inexact-ok
+= exp2 towardzero ldbl-128 -0x1p-60L : 0xf.ffffffffffffff4e8de8082e308p-4L : inexact-ok
+= exp2 upward ldbl-128 -0x1p-60L : 0xf.ffffffffffffff4e8de8082e3088p-4L : inexact-ok
+= exp2 downward ldbl-128ibm -0x1p-60L : 0xf.ffffffffffffff4e8de8082e3p-4L : inexact-ok
+= exp2 tonearest ldbl-128ibm -0x1p-60L : 0xf.ffffffffffffff4e8de8082e3p-4L : inexact-ok
+= exp2 towardzero ldbl-128ibm -0x1p-60L : 0xf.ffffffffffffff4e8de8082e3p-4L : inexact-ok
+= exp2 upward ldbl-128ibm -0x1p-60L : 0xf.ffffffffffffff4e8de8082e34p-4L : inexact-ok
+exp2 0x1p-100
+= exp2 downward flt-32 0x1p-100f : 0x1p+0f : inexact-ok
+= exp2 tonearest flt-32 0x1p-100f : 0x1p+0f : inexact-ok
+= exp2 towardzero flt-32 0x1p-100f : 0x1p+0f : inexact-ok
+= exp2 upward flt-32 0x1p-100f : 0x1.000002p+0f : inexact-ok
+= exp2 downward dbl-64 0x1p-100 : 0x1p+0 : inexact-ok
+= exp2 tonearest dbl-64 0x1p-100 : 0x1p+0 : inexact-ok
+= exp2 towardzero dbl-64 0x1p-100 : 0x1p+0 : inexact-ok
+= exp2 upward dbl-64 0x1p-100 : 0x1.0000000000001p+0 : inexact-ok
+= exp2 downward ldbl-96-intel 0x1p-100L : 0x1p+0L : inexact-ok
+= exp2 tonearest ldbl-96-intel 0x1p-100L : 0x1p+0L : inexact-ok
+= exp2 towardzero ldbl-96-intel 0x1p-100L : 0x1p+0L : inexact-ok
+= exp2 upward ldbl-96-intel 0x1p-100L : 0x1.0000000000000002p+0L : inexact-ok
+= exp2 downward ldbl-96-m68k 0x1p-100L : 0x1p+0L : inexact-ok
+= exp2 tonearest ldbl-96-m68k 0x1p-100L : 0x1p+0L : inexact-ok
+= exp2 towardzero ldbl-96-m68k 0x1p-100L : 0x1p+0L : inexact-ok
+= exp2 upward ldbl-96-m68k 0x1p-100L : 0x1.0000000000000002p+0L : inexact-ok
+= exp2 downward ldbl-128 0x1p-100L : 0x1.0000000000000000000000000b17p+0L : inexact-ok
+= exp2 tonearest ldbl-128 0x1p-100L : 0x1.0000000000000000000000000b17p+0L : inexact-ok
+= exp2 towardzero ldbl-128 0x1p-100L : 0x1.0000000000000000000000000b17p+0L : inexact-ok
+= exp2 upward ldbl-128 0x1p-100L : 0x1.0000000000000000000000000b18p+0L : inexact-ok
+= exp2 downward ldbl-128ibm 0x1p-100L : 0x1.0000000000000000000000000bp+0L : inexact-ok
+= exp2 tonearest ldbl-128ibm 0x1p-100L : 0x1.0000000000000000000000000bp+0L : inexact-ok
+= exp2 towardzero ldbl-128ibm 0x1p-100L : 0x1.0000000000000000000000000bp+0L : inexact-ok
+= exp2 upward ldbl-128ibm 0x1p-100L : 0x1.0000000000000000000000000b8p+0L : inexact-ok
+exp2 -0x1p-100
+= exp2 downward flt-32 -0x1p-100f : 0xf.fffffp-4f : inexact-ok
+= exp2 tonearest flt-32 -0x1p-100f : 0x1p+0f : inexact-ok
+= exp2 towardzero flt-32 -0x1p-100f : 0xf.fffffp-4f : inexact-ok
+= exp2 upward flt-32 -0x1p-100f : 0x1p+0f : inexact-ok
+= exp2 downward dbl-64 -0x1p-100 : 0xf.ffffffffffff8p-4 : inexact-ok
+= exp2 tonearest dbl-64 -0x1p-100 : 0x1p+0 : inexact-ok
+= exp2 towardzero dbl-64 -0x1p-100 : 0xf.ffffffffffff8p-4 : inexact-ok
+= exp2 upward dbl-64 -0x1p-100 : 0x1p+0 : inexact-ok
+= exp2 downward ldbl-96-intel -0x1p-100L : 0xf.fffffffffffffffp-4L : inexact-ok
+= exp2 tonearest ldbl-96-intel -0x1p-100L : 0x1p+0L : inexact-ok
+= exp2 towardzero ldbl-96-intel -0x1p-100L : 0xf.fffffffffffffffp-4L : inexact-ok
+= exp2 upward ldbl-96-intel -0x1p-100L : 0x1p+0L : inexact-ok
+= exp2 downward ldbl-96-m68k -0x1p-100L : 0xf.fffffffffffffffp-4L : inexact-ok
+= exp2 tonearest ldbl-96-m68k -0x1p-100L : 0x1p+0L : inexact-ok
+= exp2 towardzero ldbl-96-m68k -0x1p-100L : 0xf.fffffffffffffffp-4L : inexact-ok
+= exp2 upward ldbl-96-m68k -0x1p-100L : 0x1p+0L : inexact-ok
+= exp2 downward ldbl-128 -0x1p-100L : 0xf.ffffffffffffffffffffffff4e88p-4L : inexact-ok
+= exp2 tonearest ldbl-128 -0x1p-100L : 0xf.ffffffffffffffffffffffff4e9p-4L : inexact-ok
+= exp2 towardzero ldbl-128 -0x1p-100L : 0xf.ffffffffffffffffffffffff4e88p-4L : inexact-ok
+= exp2 upward ldbl-128 -0x1p-100L : 0xf.ffffffffffffffffffffffff4e9p-4L : inexact-ok
+= exp2 downward ldbl-128ibm -0x1p-100L : 0xf.ffffffffffffffffffffffff4cp-4L : inexact-ok
+= exp2 tonearest ldbl-128ibm -0x1p-100L : 0xf.ffffffffffffffffffffffff5p-4L : inexact-ok
+= exp2 towardzero ldbl-128ibm -0x1p-100L : 0xf.ffffffffffffffffffffffff4cp-4L : inexact-ok
+= exp2 upward ldbl-128ibm -0x1p-100L : 0xf.ffffffffffffffffffffffff5p-4L : inexact-ok
+exp2 min
+= exp2 downward flt-32 0x4p-128f : 0x1p+0f : inexact-ok
+= exp2 tonearest flt-32 0x4p-128f : 0x1p+0f : inexact-ok
+= exp2 towardzero flt-32 0x4p-128f : 0x1p+0f : inexact-ok
+= exp2 upward flt-32 0x4p-128f : 0x1.000002p+0f : inexact-ok
+= exp2 downward dbl-64 0x4p-128 : 0x1p+0 : inexact-ok
+= exp2 tonearest dbl-64 0x4p-128 : 0x1p+0 : inexact-ok
+= exp2 towardzero dbl-64 0x4p-128 : 0x1p+0 : inexact-ok
+= exp2 upward dbl-64 0x4p-128 : 0x1.0000000000001p+0 : inexact-ok
+= exp2 downward ldbl-96-intel 0x4p-128L : 0x1p+0L : inexact-ok
+= exp2 tonearest ldbl-96-intel 0x4p-128L : 0x1p+0L : inexact-ok
+= exp2 towardzero ldbl-96-intel 0x4p-128L : 0x1p+0L : inexact-ok
+= exp2 upward ldbl-96-intel 0x4p-128L : 0x1.0000000000000002p+0L : inexact-ok
+= exp2 downward ldbl-96-m68k 0x4p-128L : 0x1p+0L : inexact-ok
+= exp2 tonearest ldbl-96-m68k 0x4p-128L : 0x1p+0L : inexact-ok
+= exp2 towardzero ldbl-96-m68k 0x4p-128L : 0x1p+0L : inexact-ok
+= exp2 upward ldbl-96-m68k 0x4p-128L : 0x1.0000000000000002p+0L : inexact-ok
+= exp2 downward ldbl-128 0x4p-128L : 0x1p+0L : inexact-ok
+= exp2 tonearest ldbl-128 0x4p-128L : 0x1p+0L : inexact-ok
+= exp2 towardzero ldbl-128 0x4p-128L : 0x1p+0L : inexact-ok
+= exp2 upward ldbl-128 0x4p-128L : 0x1.0000000000000000000000000001p+0L : inexact-ok
+= exp2 downward ldbl-128ibm 0x4p-128L : 0x1p+0L : inexact-ok
+= exp2 tonearest ldbl-128ibm 0x4p-128L : 0x1p+0L : inexact-ok
+= exp2 towardzero ldbl-128ibm 0x4p-128L : 0x1p+0L : inexact-ok
+= exp2 upward ldbl-128ibm 0x4p-128L : 0x1.000000000000000000000000008p+0L : inexact-ok
+= exp2 downward dbl-64 0x4p-1024 : 0x1p+0 : inexact-ok
+= exp2 tonearest dbl-64 0x4p-1024 : 0x1p+0 : inexact-ok
+= exp2 towardzero dbl-64 0x4p-1024 : 0x1p+0 : inexact-ok
+= exp2 upward dbl-64 0x4p-1024 : 0x1.0000000000001p+0 : inexact-ok
+= exp2 downward ldbl-96-intel 0x4p-1024L : 0x1p+0L : inexact-ok
+= exp2 tonearest ldbl-96-intel 0x4p-1024L : 0x1p+0L : inexact-ok
+= exp2 towardzero ldbl-96-intel 0x4p-1024L : 0x1p+0L : inexact-ok
+= exp2 upward ldbl-96-intel 0x4p-1024L : 0x1.0000000000000002p+0L : inexact-ok
+= exp2 downward ldbl-96-m68k 0x4p-1024L : 0x1p+0L : inexact-ok
+= exp2 tonearest ldbl-96-m68k 0x4p-1024L : 0x1p+0L : inexact-ok
+= exp2 towardzero ldbl-96-m68k 0x4p-1024L : 0x1p+0L : inexact-ok
+= exp2 upward ldbl-96-m68k 0x4p-1024L : 0x1.0000000000000002p+0L : inexact-ok
+= exp2 downward ldbl-128 0x4p-1024L : 0x1p+0L : inexact-ok
+= exp2 tonearest ldbl-128 0x4p-1024L : 0x1p+0L : inexact-ok
+= exp2 towardzero ldbl-128 0x4p-1024L : 0x1p+0L : inexact-ok
+= exp2 upward ldbl-128 0x4p-1024L : 0x1.0000000000000000000000000001p+0L : inexact-ok
+= exp2 downward ldbl-128ibm 0x4p-1024L : 0x1p+0L : inexact-ok
+= exp2 tonearest ldbl-128ibm 0x4p-1024L : 0x1p+0L : inexact-ok
+= exp2 towardzero ldbl-128ibm 0x4p-1024L : 0x1p+0L : inexact-ok
+= exp2 upward ldbl-128ibm 0x4p-1024L : 0x1.000000000000000000000000008p+0L : inexact-ok
+= exp2 downward ldbl-96-intel 0x4p-16384L : 0x1p+0L : inexact-ok
+= exp2 tonearest ldbl-96-intel 0x4p-16384L : 0x1p+0L : inexact-ok
+= exp2 towardzero ldbl-96-intel 0x4p-16384L : 0x1p+0L : inexact-ok
+= exp2 upward ldbl-96-intel 0x4p-16384L : 0x1.0000000000000002p+0L : inexact-ok
+= exp2 downward ldbl-96-m68k 0x4p-16384L : 0x1p+0L : inexact-ok
+= exp2 tonearest ldbl-96-m68k 0x4p-16384L : 0x1p+0L : inexact-ok
+= exp2 towardzero ldbl-96-m68k 0x4p-16384L : 0x1p+0L : inexact-ok
+= exp2 upward ldbl-96-m68k 0x4p-16384L : 0x1.0000000000000002p+0L : inexact-ok
+= exp2 downward ldbl-128 0x4p-16384L : 0x1p+0L : inexact-ok
+= exp2 tonearest ldbl-128 0x4p-16384L : 0x1p+0L : inexact-ok
+= exp2 towardzero ldbl-128 0x4p-16384L : 0x1p+0L : inexact-ok
+= exp2 upward ldbl-128 0x4p-16384L : 0x1.0000000000000000000000000001p+0L : inexact-ok
+= exp2 downward ldbl-96-intel 0x2p-16384L : 0x1p+0L : inexact-ok
+= exp2 tonearest ldbl-96-intel 0x2p-16384L : 0x1p+0L : inexact-ok
+= exp2 towardzero ldbl-96-intel 0x2p-16384L : 0x1p+0L : inexact-ok
+= exp2 upward ldbl-96-intel 0x2p-16384L : 0x1.0000000000000002p+0L : inexact-ok
+= exp2 downward ldbl-96-m68k 0x2p-16384L : 0x1p+0L : inexact-ok
+= exp2 tonearest ldbl-96-m68k 0x2p-16384L : 0x1p+0L : inexact-ok
+= exp2 towardzero ldbl-96-m68k 0x2p-16384L : 0x1p+0L : inexact-ok
+= exp2 upward ldbl-96-m68k 0x2p-16384L : 0x1.0000000000000002p+0L : inexact-ok
+= exp2 downward ldbl-128 0x2p-16384L : 0x1p+0L : inexact-ok
+= exp2 tonearest ldbl-128 0x2p-16384L : 0x1p+0L : inexact-ok
+= exp2 towardzero ldbl-128 0x2p-16384L : 0x1p+0L : inexact-ok
+= exp2 upward ldbl-128 0x2p-16384L : 0x1.0000000000000000000000000001p+0L : inexact-ok
+= exp2 downward dbl-64 0x8p-972 : 0x1p+0 : inexact-ok
+= exp2 tonearest dbl-64 0x8p-972 : 0x1p+0 : inexact-ok
+= exp2 towardzero dbl-64 0x8p-972 : 0x1p+0 : inexact-ok
+= exp2 upward dbl-64 0x8p-972 : 0x1.0000000000001p+0 : inexact-ok
+= exp2 downward ldbl-96-intel 0x8p-972L : 0x1p+0L : inexact-ok
+= exp2 tonearest ldbl-96-intel 0x8p-972L : 0x1p+0L : inexact-ok
+= exp2 towardzero ldbl-96-intel 0x8p-972L : 0x1p+0L : inexact-ok
+= exp2 upward ldbl-96-intel 0x8p-972L : 0x1.0000000000000002p+0L : inexact-ok
+= exp2 downward ldbl-96-m68k 0x8p-972L : 0x1p+0L : inexact-ok
+= exp2 tonearest ldbl-96-m68k 0x8p-972L : 0x1p+0L : inexact-ok
+= exp2 towardzero ldbl-96-m68k 0x8p-972L : 0x1p+0L : inexact-ok
+= exp2 upward ldbl-96-m68k 0x8p-972L : 0x1.0000000000000002p+0L : inexact-ok
+= exp2 downward ldbl-128 0x8p-972L : 0x1p+0L : inexact-ok
+= exp2 tonearest ldbl-128 0x8p-972L : 0x1p+0L : inexact-ok
+= exp2 towardzero ldbl-128 0x8p-972L : 0x1p+0L : inexact-ok
+= exp2 upward ldbl-128 0x8p-972L : 0x1.0000000000000000000000000001p+0L : inexact-ok
+= exp2 downward ldbl-128ibm 0x8p-972L : 0x1p+0L : inexact-ok
+= exp2 tonearest ldbl-128ibm 0x8p-972L : 0x1p+0L : inexact-ok
+= exp2 towardzero ldbl-128ibm 0x8p-972L : 0x1p+0L : inexact-ok
+= exp2 upward ldbl-128ibm 0x8p-972L : 0x1.000000000000000000000000008p+0L : inexact-ok
+exp2 -min
+= exp2 downward flt-32 -0x4p-128f : 0xf.fffffp-4f : inexact-ok
+= exp2 tonearest flt-32 -0x4p-128f : 0x1p+0f : inexact-ok
+= exp2 towardzero flt-32 -0x4p-128f : 0xf.fffffp-4f : inexact-ok
+= exp2 upward flt-32 -0x4p-128f : 0x1p+0f : inexact-ok
+= exp2 downward dbl-64 -0x4p-128 : 0xf.ffffffffffff8p-4 : inexact-ok
+= exp2 tonearest dbl-64 -0x4p-128 : 0x1p+0 : inexact-ok
+= exp2 towardzero dbl-64 -0x4p-128 : 0xf.ffffffffffff8p-4 : inexact-ok
+= exp2 upward dbl-64 -0x4p-128 : 0x1p+0 : inexact-ok
+= exp2 downward ldbl-96-intel -0x4p-128L : 0xf.fffffffffffffffp-4L : inexact-ok
+= exp2 tonearest ldbl-96-intel -0x4p-128L : 0x1p+0L : inexact-ok
+= exp2 towardzero ldbl-96-intel -0x4p-128L : 0xf.fffffffffffffffp-4L : inexact-ok
+= exp2 upward ldbl-96-intel -0x4p-128L : 0x1p+0L : inexact-ok
+= exp2 downward ldbl-96-m68k -0x4p-128L : 0xf.fffffffffffffffp-4L : inexact-ok
+= exp2 tonearest ldbl-96-m68k -0x4p-128L : 0x1p+0L : inexact-ok
+= exp2 towardzero ldbl-96-m68k -0x4p-128L : 0xf.fffffffffffffffp-4L : inexact-ok
+= exp2 upward ldbl-96-m68k -0x4p-128L : 0x1p+0L : inexact-ok
+= exp2 downward ldbl-128 -0x4p-128L : 0xf.fffffffffffffffffffffffffff8p-4L : inexact-ok
+= exp2 tonearest ldbl-128 -0x4p-128L : 0x1p+0L : inexact-ok
+= exp2 towardzero ldbl-128 -0x4p-128L : 0xf.fffffffffffffffffffffffffff8p-4L : inexact-ok
+= exp2 upward ldbl-128 -0x4p-128L : 0x1p+0L : inexact-ok
+= exp2 downward ldbl-128ibm -0x4p-128L : 0xf.fffffffffffffffffffffffffcp-4L : inexact-ok
+= exp2 tonearest ldbl-128ibm -0x4p-128L : 0x1p+0L : inexact-ok
+= exp2 towardzero ldbl-128ibm -0x4p-128L : 0xf.fffffffffffffffffffffffffcp-4L : inexact-ok
+= exp2 upward ldbl-128ibm -0x4p-128L : 0x1p+0L : inexact-ok
+= exp2 downward dbl-64 -0x4p-1024 : 0xf.ffffffffffff8p-4 : inexact-ok
+= exp2 tonearest dbl-64 -0x4p-1024 : 0x1p+0 : inexact-ok
+= exp2 towardzero dbl-64 -0x4p-1024 : 0xf.ffffffffffff8p-4 : inexact-ok
+= exp2 upward dbl-64 -0x4p-1024 : 0x1p+0 : inexact-ok
+= exp2 downward ldbl-96-intel -0x4p-1024L : 0xf.fffffffffffffffp-4L : inexact-ok
+= exp2 tonearest ldbl-96-intel -0x4p-1024L : 0x1p+0L : inexact-ok
+= exp2 towardzero ldbl-96-intel -0x4p-1024L : 0xf.fffffffffffffffp-4L : inexact-ok
+= exp2 upward ldbl-96-intel -0x4p-1024L : 0x1p+0L : inexact-ok
+= exp2 downward ldbl-96-m68k -0x4p-1024L : 0xf.fffffffffffffffp-4L : inexact-ok
+= exp2 tonearest ldbl-96-m68k -0x4p-1024L : 0x1p+0L : inexact-ok
+= exp2 towardzero ldbl-96-m68k -0x4p-1024L : 0xf.fffffffffffffffp-4L : inexact-ok
+= exp2 upward ldbl-96-m68k -0x4p-1024L : 0x1p+0L : inexact-ok
+= exp2 downward ldbl-128 -0x4p-1024L : 0xf.fffffffffffffffffffffffffff8p-4L : inexact-ok
+= exp2 tonearest ldbl-128 -0x4p-1024L : 0x1p+0L : inexact-ok
+= exp2 towardzero ldbl-128 -0x4p-1024L : 0xf.fffffffffffffffffffffffffff8p-4L : inexact-ok
+= exp2 upward ldbl-128 -0x4p-1024L : 0x1p+0L : inexact-ok
+= exp2 downward ldbl-128ibm -0x4p-1024L : 0xf.fffffffffffffffffffffffffcp-4L : inexact-ok
+= exp2 tonearest ldbl-128ibm -0x4p-1024L : 0x1p+0L : inexact-ok
+= exp2 towardzero ldbl-128ibm -0x4p-1024L : 0xf.fffffffffffffffffffffffffcp-4L : inexact-ok
+= exp2 upward ldbl-128ibm -0x4p-1024L : 0x1p+0L : inexact-ok
+= exp2 downward ldbl-96-intel -0x4p-16384L : 0xf.fffffffffffffffp-4L : inexact-ok
+= exp2 tonearest ldbl-96-intel -0x4p-16384L : 0x1p+0L : inexact-ok
+= exp2 towardzero ldbl-96-intel -0x4p-16384L : 0xf.fffffffffffffffp-4L : inexact-ok
+= exp2 upward ldbl-96-intel -0x4p-16384L : 0x1p+0L : inexact-ok
+= exp2 downward ldbl-96-m68k -0x4p-16384L : 0xf.fffffffffffffffp-4L : inexact-ok
+= exp2 tonearest ldbl-96-m68k -0x4p-16384L : 0x1p+0L : inexact-ok
+= exp2 towardzero ldbl-96-m68k -0x4p-16384L : 0xf.fffffffffffffffp-4L : inexact-ok
+= exp2 upward ldbl-96-m68k -0x4p-16384L : 0x1p+0L : inexact-ok
+= exp2 downward ldbl-128 -0x4p-16384L : 0xf.fffffffffffffffffffffffffff8p-4L : inexact-ok
+= exp2 tonearest ldbl-128 -0x4p-16384L : 0x1p+0L : inexact-ok
+= exp2 towardzero ldbl-128 -0x4p-16384L : 0xf.fffffffffffffffffffffffffff8p-4L : inexact-ok
+= exp2 upward ldbl-128 -0x4p-16384L : 0x1p+0L : inexact-ok
+= exp2 downward ldbl-96-intel -0x2p-16384L : 0xf.fffffffffffffffp-4L : inexact-ok
+= exp2 tonearest ldbl-96-intel -0x2p-16384L : 0x1p+0L : inexact-ok
+= exp2 towardzero ldbl-96-intel -0x2p-16384L : 0xf.fffffffffffffffp-4L : inexact-ok
+= exp2 upward ldbl-96-intel -0x2p-16384L : 0x1p+0L : inexact-ok
+= exp2 downward ldbl-96-m68k -0x2p-16384L : 0xf.fffffffffffffffp-4L : inexact-ok
+= exp2 tonearest ldbl-96-m68k -0x2p-16384L : 0x1p+0L : inexact-ok
+= exp2 towardzero ldbl-96-m68k -0x2p-16384L : 0xf.fffffffffffffffp-4L : inexact-ok
+= exp2 upward ldbl-96-m68k -0x2p-16384L : 0x1p+0L : inexact-ok
+= exp2 downward ldbl-128 -0x2p-16384L : 0xf.fffffffffffffffffffffffffff8p-4L : inexact-ok
+= exp2 tonearest ldbl-128 -0x2p-16384L : 0x1p+0L : inexact-ok
+= exp2 towardzero ldbl-128 -0x2p-16384L : 0xf.fffffffffffffffffffffffffff8p-4L : inexact-ok
+= exp2 upward ldbl-128 -0x2p-16384L : 0x1p+0L : inexact-ok
+= exp2 downward dbl-64 -0x8p-972 : 0xf.ffffffffffff8p-4 : inexact-ok
+= exp2 tonearest dbl-64 -0x8p-972 : 0x1p+0 : inexact-ok
+= exp2 towardzero dbl-64 -0x8p-972 : 0xf.ffffffffffff8p-4 : inexact-ok
+= exp2 upward dbl-64 -0x8p-972 : 0x1p+0 : inexact-ok
+= exp2 downward ldbl-96-intel -0x8p-972L : 0xf.fffffffffffffffp-4L : inexact-ok
+= exp2 tonearest ldbl-96-intel -0x8p-972L : 0x1p+0L : inexact-ok
+= exp2 towardzero ldbl-96-intel -0x8p-972L : 0xf.fffffffffffffffp-4L : inexact-ok
+= exp2 upward ldbl-96-intel -0x8p-972L : 0x1p+0L : inexact-ok
+= exp2 downward ldbl-96-m68k -0x8p-972L : 0xf.fffffffffffffffp-4L : inexact-ok
+= exp2 tonearest ldbl-96-m68k -0x8p-972L : 0x1p+0L : inexact-ok
+= exp2 towardzero ldbl-96-m68k -0x8p-972L : 0xf.fffffffffffffffp-4L : inexact-ok
+= exp2 upward ldbl-96-m68k -0x8p-972L : 0x1p+0L : inexact-ok
+= exp2 downward ldbl-128 -0x8p-972L : 0xf.fffffffffffffffffffffffffff8p-4L : inexact-ok
+= exp2 tonearest ldbl-128 -0x8p-972L : 0x1p+0L : inexact-ok
+= exp2 towardzero ldbl-128 -0x8p-972L : 0xf.fffffffffffffffffffffffffff8p-4L : inexact-ok
+= exp2 upward ldbl-128 -0x8p-972L : 0x1p+0L : inexact-ok
+= exp2 downward ldbl-128ibm -0x8p-972L : 0xf.fffffffffffffffffffffffffcp-4L : inexact-ok
+= exp2 tonearest ldbl-128ibm -0x8p-972L : 0x1p+0L : inexact-ok
+= exp2 towardzero ldbl-128ibm -0x8p-972L : 0xf.fffffffffffffffffffffffffcp-4L : inexact-ok
+= exp2 upward ldbl-128ibm -0x8p-972L : 0x1p+0L : inexact-ok
+exp2 min_subnorm
+= exp2 downward flt-32 0x8p-152f : 0x1p+0f : inexact-ok
+= exp2 tonearest flt-32 0x8p-152f : 0x1p+0f : inexact-ok
+= exp2 towardzero flt-32 0x8p-152f : 0x1p+0f : inexact-ok
+= exp2 upward flt-32 0x8p-152f : 0x1.000002p+0f : inexact-ok
+= exp2 downward dbl-64 0x8p-152 : 0x1p+0 : inexact-ok
+= exp2 tonearest dbl-64 0x8p-152 : 0x1p+0 : inexact-ok
+= exp2 towardzero dbl-64 0x8p-152 : 0x1p+0 : inexact-ok
+= exp2 upward dbl-64 0x8p-152 : 0x1.0000000000001p+0 : inexact-ok
+= exp2 downward ldbl-96-intel 0x8p-152L : 0x1p+0L : inexact-ok
+= exp2 tonearest ldbl-96-intel 0x8p-152L : 0x1p+0L : inexact-ok
+= exp2 towardzero ldbl-96-intel 0x8p-152L : 0x1p+0L : inexact-ok
+= exp2 upward ldbl-96-intel 0x8p-152L : 0x1.0000000000000002p+0L : inexact-ok
+= exp2 downward ldbl-96-m68k 0x8p-152L : 0x1p+0L : inexact-ok
+= exp2 tonearest ldbl-96-m68k 0x8p-152L : 0x1p+0L : inexact-ok
+= exp2 towardzero ldbl-96-m68k 0x8p-152L : 0x1p+0L : inexact-ok
+= exp2 upward ldbl-96-m68k 0x8p-152L : 0x1.0000000000000002p+0L : inexact-ok
+= exp2 downward ldbl-128 0x8p-152L : 0x1p+0L : inexact-ok
+= exp2 tonearest ldbl-128 0x8p-152L : 0x1p+0L : inexact-ok
+= exp2 towardzero ldbl-128 0x8p-152L : 0x1p+0L : inexact-ok
+= exp2 upward ldbl-128 0x8p-152L : 0x1.0000000000000000000000000001p+0L : inexact-ok
+= exp2 downward ldbl-128ibm 0x8p-152L : 0x1p+0L : inexact-ok
+= exp2 tonearest ldbl-128ibm 0x8p-152L : 0x1p+0L : inexact-ok
+= exp2 towardzero ldbl-128ibm 0x8p-152L : 0x1p+0L : inexact-ok
+= exp2 upward ldbl-128ibm 0x8p-152L : 0x1.000000000000000000000000008p+0L : inexact-ok
+= exp2 downward dbl-64 0x4p-1076 : 0x1p+0 : inexact-ok
+= exp2 tonearest dbl-64 0x4p-1076 : 0x1p+0 : inexact-ok
+= exp2 towardzero dbl-64 0x4p-1076 : 0x1p+0 : inexact-ok
+= exp2 upward dbl-64 0x4p-1076 : 0x1.0000000000001p+0 : inexact-ok
+= exp2 downward ldbl-96-intel 0x4p-1076L : 0x1p+0L : inexact-ok
+= exp2 tonearest ldbl-96-intel 0x4p-1076L : 0x1p+0L : inexact-ok
+= exp2 towardzero ldbl-96-intel 0x4p-1076L : 0x1p+0L : inexact-ok
+= exp2 upward ldbl-96-intel 0x4p-1076L : 0x1.0000000000000002p+0L : inexact-ok
+= exp2 downward ldbl-96-m68k 0x4p-1076L : 0x1p+0L : inexact-ok
+= exp2 tonearest ldbl-96-m68k 0x4p-1076L : 0x1p+0L : inexact-ok
+= exp2 towardzero ldbl-96-m68k 0x4p-1076L : 0x1p+0L : inexact-ok
+= exp2 upward ldbl-96-m68k 0x4p-1076L : 0x1.0000000000000002p+0L : inexact-ok
+= exp2 downward ldbl-128 0x4p-1076L : 0x1p+0L : inexact-ok
+= exp2 tonearest ldbl-128 0x4p-1076L : 0x1p+0L : inexact-ok
+= exp2 towardzero ldbl-128 0x4p-1076L : 0x1p+0L : inexact-ok
+= exp2 upward ldbl-128 0x4p-1076L : 0x1.0000000000000000000000000001p+0L : inexact-ok
+= exp2 downward ldbl-128ibm 0x4p-1076L : 0x1p+0L : inexact-ok
+= exp2 tonearest ldbl-128ibm 0x4p-1076L : 0x1p+0L : inexact-ok
+= exp2 towardzero ldbl-128ibm 0x4p-1076L : 0x1p+0L : inexact-ok
+= exp2 upward ldbl-128ibm 0x4p-1076L : 0x1.000000000000000000000000008p+0L : inexact-ok
+= exp2 downward ldbl-96-intel 0x8p-16448L : 0x1p+0L : inexact-ok
+= exp2 tonearest ldbl-96-intel 0x8p-16448L : 0x1p+0L : inexact-ok
+= exp2 towardzero ldbl-96-intel 0x8p-16448L : 0x1p+0L : inexact-ok
+= exp2 upward ldbl-96-intel 0x8p-16448L : 0x1.0000000000000002p+0L : inexact-ok
+= exp2 downward ldbl-96-m68k 0x8p-16448L : 0x1p+0L : inexact-ok
+= exp2 tonearest ldbl-96-m68k 0x8p-16448L : 0x1p+0L : inexact-ok
+= exp2 towardzero ldbl-96-m68k 0x8p-16448L : 0x1p+0L : inexact-ok
+= exp2 upward ldbl-96-m68k 0x8p-16448L : 0x1.0000000000000002p+0L : inexact-ok
+= exp2 downward ldbl-128 0x8p-16448L : 0x1p+0L : inexact-ok
+= exp2 tonearest ldbl-128 0x8p-16448L : 0x1p+0L : inexact-ok
+= exp2 towardzero ldbl-128 0x8p-16448L : 0x1p+0L : inexact-ok
+= exp2 upward ldbl-128 0x8p-16448L : 0x1.0000000000000000000000000001p+0L : inexact-ok
+= exp2 downward ldbl-96-m68k 0x4p-16448L : 0x1p+0L : inexact-ok
+= exp2 tonearest ldbl-96-m68k 0x4p-16448L : 0x1p+0L : inexact-ok
+= exp2 towardzero ldbl-96-m68k 0x4p-16448L : 0x1p+0L : inexact-ok
+= exp2 upward ldbl-96-m68k 0x4p-16448L : 0x1.0000000000000002p+0L : inexact-ok
+= exp2 downward ldbl-128 0x4p-16448L : 0x1p+0L : inexact-ok
+= exp2 tonearest ldbl-128 0x4p-16448L : 0x1p+0L : inexact-ok
+= exp2 towardzero ldbl-128 0x4p-16448L : 0x1p+0L : inexact-ok
+= exp2 upward ldbl-128 0x4p-16448L : 0x1.0000000000000000000000000001p+0L : inexact-ok
+= exp2 downward ldbl-128 0x4p-16496L : 0x1p+0L : inexact-ok
+= exp2 tonearest ldbl-128 0x4p-16496L : 0x1p+0L : inexact-ok
+= exp2 towardzero ldbl-128 0x4p-16496L : 0x1p+0L : inexact-ok
+= exp2 upward ldbl-128 0x4p-16496L : 0x1.0000000000000000000000000001p+0L : inexact-ok
+exp2 -min_subnorm
+= exp2 downward flt-32 -0x8p-152f : 0xf.fffffp-4f : inexact-ok
+= exp2 tonearest flt-32 -0x8p-152f : 0x1p+0f : inexact-ok
+= exp2 towardzero flt-32 -0x8p-152f : 0xf.fffffp-4f : inexact-ok
+= exp2 upward flt-32 -0x8p-152f : 0x1p+0f : inexact-ok
+= exp2 downward dbl-64 -0x8p-152 : 0xf.ffffffffffff8p-4 : inexact-ok
+= exp2 tonearest dbl-64 -0x8p-152 : 0x1p+0 : inexact-ok
+= exp2 towardzero dbl-64 -0x8p-152 : 0xf.ffffffffffff8p-4 : inexact-ok
+= exp2 upward dbl-64 -0x8p-152 : 0x1p+0 : inexact-ok
+= exp2 downward ldbl-96-intel -0x8p-152L : 0xf.fffffffffffffffp-4L : inexact-ok
+= exp2 tonearest ldbl-96-intel -0x8p-152L : 0x1p+0L : inexact-ok
+= exp2 towardzero ldbl-96-intel -0x8p-152L : 0xf.fffffffffffffffp-4L : inexact-ok
+= exp2 upward ldbl-96-intel -0x8p-152L : 0x1p+0L : inexact-ok
+= exp2 downward ldbl-96-m68k -0x8p-152L : 0xf.fffffffffffffffp-4L : inexact-ok
+= exp2 tonearest ldbl-96-m68k -0x8p-152L : 0x1p+0L : inexact-ok
+= exp2 towardzero ldbl-96-m68k -0x8p-152L : 0xf.fffffffffffffffp-4L : inexact-ok
+= exp2 upward ldbl-96-m68k -0x8p-152L : 0x1p+0L : inexact-ok
+= exp2 downward ldbl-128 -0x8p-152L : 0xf.fffffffffffffffffffffffffff8p-4L : inexact-ok
+= exp2 tonearest ldbl-128 -0x8p-152L : 0x1p+0L : inexact-ok
+= exp2 towardzero ldbl-128 -0x8p-152L : 0xf.fffffffffffffffffffffffffff8p-4L : inexact-ok
+= exp2 upward ldbl-128 -0x8p-152L : 0x1p+0L : inexact-ok
+= exp2 downward ldbl-128ibm -0x8p-152L : 0xf.fffffffffffffffffffffffffcp-4L : inexact-ok
+= exp2 tonearest ldbl-128ibm -0x8p-152L : 0x1p+0L : inexact-ok
+= exp2 towardzero ldbl-128ibm -0x8p-152L : 0xf.fffffffffffffffffffffffffcp-4L : inexact-ok
+= exp2 upward ldbl-128ibm -0x8p-152L : 0x1p+0L : inexact-ok
+= exp2 downward dbl-64 -0x4p-1076 : 0xf.ffffffffffff8p-4 : inexact-ok
+= exp2 tonearest dbl-64 -0x4p-1076 : 0x1p+0 : inexact-ok
+= exp2 towardzero dbl-64 -0x4p-1076 : 0xf.ffffffffffff8p-4 : inexact-ok
+= exp2 upward dbl-64 -0x4p-1076 : 0x1p+0 : inexact-ok
+= exp2 downward ldbl-96-intel -0x4p-1076L : 0xf.fffffffffffffffp-4L : inexact-ok
+= exp2 tonearest ldbl-96-intel -0x4p-1076L : 0x1p+0L : inexact-ok
+= exp2 towardzero ldbl-96-intel -0x4p-1076L : 0xf.fffffffffffffffp-4L : inexact-ok
+= exp2 upward ldbl-96-intel -0x4p-1076L : 0x1p+0L : inexact-ok
+= exp2 downward ldbl-96-m68k -0x4p-1076L : 0xf.fffffffffffffffp-4L : inexact-ok
+= exp2 tonearest ldbl-96-m68k -0x4p-1076L : 0x1p+0L : inexact-ok
+= exp2 towardzero ldbl-96-m68k -0x4p-1076L : 0xf.fffffffffffffffp-4L : inexact-ok
+= exp2 upward ldbl-96-m68k -0x4p-1076L : 0x1p+0L : inexact-ok
+= exp2 downward ldbl-128 -0x4p-1076L : 0xf.fffffffffffffffffffffffffff8p-4L : inexact-ok
+= exp2 tonearest ldbl-128 -0x4p-1076L : 0x1p+0L : inexact-ok
+= exp2 towardzero ldbl-128 -0x4p-1076L : 0xf.fffffffffffffffffffffffffff8p-4L : inexact-ok
+= exp2 upward ldbl-128 -0x4p-1076L : 0x1p+0L : inexact-ok
+= exp2 downward ldbl-128ibm -0x4p-1076L : 0xf.fffffffffffffffffffffffffcp-4L : inexact-ok
+= exp2 tonearest ldbl-128ibm -0x4p-1076L : 0x1p+0L : inexact-ok
+= exp2 towardzero ldbl-128ibm -0x4p-1076L : 0xf.fffffffffffffffffffffffffcp-4L : inexact-ok
+= exp2 upward ldbl-128ibm -0x4p-1076L : 0x1p+0L : inexact-ok
+= exp2 downward ldbl-96-intel -0x8p-16448L : 0xf.fffffffffffffffp-4L : inexact-ok
+= exp2 tonearest ldbl-96-intel -0x8p-16448L : 0x1p+0L : inexact-ok
+= exp2 towardzero ldbl-96-intel -0x8p-16448L : 0xf.fffffffffffffffp-4L : inexact-ok
+= exp2 upward ldbl-96-intel -0x8p-16448L : 0x1p+0L : inexact-ok
+= exp2 downward ldbl-96-m68k -0x8p-16448L : 0xf.fffffffffffffffp-4L : inexact-ok
+= exp2 tonearest ldbl-96-m68k -0x8p-16448L : 0x1p+0L : inexact-ok
+= exp2 towardzero ldbl-96-m68k -0x8p-16448L : 0xf.fffffffffffffffp-4L : inexact-ok
+= exp2 upward ldbl-96-m68k -0x8p-16448L : 0x1p+0L : inexact-ok
+= exp2 downward ldbl-128 -0x8p-16448L : 0xf.fffffffffffffffffffffffffff8p-4L : inexact-ok
+= exp2 tonearest ldbl-128 -0x8p-16448L : 0x1p+0L : inexact-ok
+= exp2 towardzero ldbl-128 -0x8p-16448L : 0xf.fffffffffffffffffffffffffff8p-4L : inexact-ok
+= exp2 upward ldbl-128 -0x8p-16448L : 0x1p+0L : inexact-ok
+= exp2 downward ldbl-96-m68k -0x4p-16448L : 0xf.fffffffffffffffp-4L : inexact-ok
+= exp2 tonearest ldbl-96-m68k -0x4p-16448L : 0x1p+0L : inexact-ok
+= exp2 towardzero ldbl-96-m68k -0x4p-16448L : 0xf.fffffffffffffffp-4L : inexact-ok
+= exp2 upward ldbl-96-m68k -0x4p-16448L : 0x1p+0L : inexact-ok
+= exp2 downward ldbl-128 -0x4p-16448L : 0xf.fffffffffffffffffffffffffff8p-4L : inexact-ok
+= exp2 tonearest ldbl-128 -0x4p-16448L : 0x1p+0L : inexact-ok
+= exp2 towardzero ldbl-128 -0x4p-16448L : 0xf.fffffffffffffffffffffffffff8p-4L : inexact-ok
+= exp2 upward ldbl-128 -0x4p-16448L : 0x1p+0L : inexact-ok
+= exp2 downward ldbl-128 -0x4p-16496L : 0xf.fffffffffffffffffffffffffff8p-4L : inexact-ok
+= exp2 tonearest ldbl-128 -0x4p-16496L : 0x1p+0L : inexact-ok
+= exp2 towardzero ldbl-128 -0x4p-16496L : 0xf.fffffffffffffffffffffffffff8p-4L : inexact-ok
+= exp2 upward ldbl-128 -0x4p-16496L : 0x1p+0L : inexact-ok
 expm1 0
 = expm1 downward flt-32 0x0p+0f : 0x0p+0f : inexact-ok
 = expm1 tonearest flt-32 0x0p+0f : 0x0p+0f : inexact-ok
diff --git a/math/e_exp2l.c b/math/e_exp2l.c
index bb7feefeff..9eb7bafadd 100644
--- a/math/e_exp2l.c
+++ b/math/e_exp2l.c
@@ -20,6 +20,13 @@
 #include <math_private.h>
 #include <float.h>
 
+/* To avoid spurious underflows, use this definition to treat IBM long
+   double as approximating an IEEE-style format.  */
+#if LDBL_MANT_DIG == 106
+# undef LDBL_EPSILON
+# define LDBL_EPSILON 0x1p-106L
+#endif
+
 long double
 __ieee754_exp2l (long double x)
 {
@@ -31,6 +38,8 @@ __ieee754_exp2l (long double x)
 	{
 	  int intx = (int) x;
 	  long double fractx = x - intx;
+	  if (fabsl (fractx) < LDBL_EPSILON / 4.0L)
+	    return __scalbnl (1.0L + fractx, intx);
 	  return __scalbnl (__ieee754_expl (M_LN2l * fractx), intx);
 	}
       else
diff --git a/sysdeps/i386/fpu/e_exp2l.S b/sysdeps/i386/fpu/e_exp2l.S
index 203dd0078d..2bf9a25727 100644
--- a/sysdeps/i386/fpu/e_exp2l.S
+++ b/sysdeps/i386/fpu/e_exp2l.S
@@ -18,7 +18,15 @@ ENTRY(__ieee754_exp2l)
 	andb	%ah, %dh
 	cmpb	$0x05, %dh
 	je	1f			/* Is +-Inf, jump.  */
-	fld	%st
+	movzwl	4+8(%esp), %eax
+	andl	$0x7fff, %eax
+	cmpl	$0x3fbe, %eax
+	jge	3f
+	/* Argument's exponent below -65, result rounds to 1.  */
+	fld1
+	faddp
+	ret
+3:	fld	%st
 	frndint				/* int(x) */
 	fsubr	%st,%st(1)		/* fract(x) */
 	fxch
diff --git a/sysdeps/ieee754/dbl-64/e_exp2.c b/sysdeps/ieee754/dbl-64/e_exp2.c
index 3666c6a9da..f964a5ae38 100644
--- a/sysdeps/ieee754/dbl-64/e_exp2.c
+++ b/sysdeps/ieee754/dbl-64/e_exp2.c
@@ -61,6 +61,9 @@ __ieee754_exp2 (double x)
       double rx, x22, result;
       union ieee754_double ex2_u, scale_u;
 
+      if (fabs (x) < DBL_EPSILON / 4.0)
+	return 1.0 + x;
+
       {
 	SET_RESTORE_ROUND_NOEX (FE_TONEAREST);
 
diff --git a/sysdeps/ieee754/flt-32/e_exp2f.c b/sysdeps/ieee754/flt-32/e_exp2f.c
index 01cd4441a4..f3e3a8e6fc 100644
--- a/sysdeps/ieee754/flt-32/e_exp2f.c
+++ b/sysdeps/ieee754/flt-32/e_exp2f.c
@@ -54,6 +54,9 @@ __ieee754_exp2f (float x)
       float rx, x22, result;
       union ieee754_float ex2_u, scale_u;
 
+      if (fabsf (x) < FLT_EPSILON / 4.0f)
+	return 1.0f + x;
+
       {
 	SET_RESTORE_ROUND_NOEXF (FE_TONEAREST);
 
diff --git a/sysdeps/x86_64/fpu/e_exp2l.S b/sysdeps/x86_64/fpu/e_exp2l.S
index 7abf425c7b..7d42a932db 100644
--- a/sysdeps/x86_64/fpu/e_exp2l.S
+++ b/sysdeps/x86_64/fpu/e_exp2l.S
@@ -19,7 +19,15 @@ ENTRY(__ieee754_exp2l)
 	andb	%ah, %dh
 	cmpb	$0x05, %dh
 	je	1f			/* Is +-Inf, jump.  */
-	fld	%st
+	movzwl	8+8(%rsp), %eax
+	andl	$0x7fff, %eax
+	cmpl	$0x3fbe, %eax
+	jge	3f
+	/* Argument's exponent below -65, result rounds to 1.  */
+	fld1
+	faddp
+	ret
+3:	fld	%st
 	frndint				/* int(x) */
 	fsubr	%st,%st(1)		/* fract(x) */
 	fxch