From 03d95bd48319256bd29cfaece45919fc58bf56cc Mon Sep 17 00:00:00 2001 From: Joseph Myers Date: Thu, 12 Feb 2015 19:02:45 +0000 Subject: [PATCH] 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. --- ChangeLog | 15 + NEWS | 2 +- math/auto-libm-test-in | 18 + math/auto-libm-test-out | 666 +++++++++++++++++++++++++++++++ math/e_exp2l.c | 9 + sysdeps/i386/fpu/e_exp2l.S | 10 +- sysdeps/ieee754/dbl-64/e_exp2.c | 3 + sysdeps/ieee754/flt-32/e_exp2f.c | 3 + sysdeps/x86_64/fpu/e_exp2l.S | 10 +- 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 + + [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 * 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 #include +/* 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