public inbox for libc-alpha@sourceware.org
 help / color / mirror / Atom feed
* math: Add inputs that yield larger errors for float type
@ 2020-03-30 14:10 paul zimmermann
  2020-03-31 19:30 ` Carlos O'Donell
  0 siblings, 1 reply; 6+ messages in thread
From: paul zimmermann @ 2020-03-30 14:10 UTC (permalink / raw)
  To: libc-alpha

       Dear all,

now that my copyright assignment is ok, you'll find on [1] a first contribution
that adds some inputs that yield larger errors for the float (binary32) type on
x86_64. These cases were generated by exhaustive search using MPFR, thus the
corresponding bounds are now definitive (on x86_64 only of course).

For those functions where no case was added, this means the previous bounds
were the largest ones.

This exhaustive search only concerns functions with one argument. It does not
cover functions like pow(x,y) or hypot(x,y) where exhaustive search would be
too expensive.

I would be grateful if someone could review that contribution.

Paul Zimmermann

[1] https://homepages.loria.fr/PZimmermann/glibc-contrib/0001-math-Add-inputs-that-yield-larger-errors-for-float-t.patch (md5sum bacf7746dd7b9cf8f8d3db12d45b932e)

^ permalink raw reply	[flat|nested] 6+ messages in thread

* Re: math: Add inputs that yield larger errors for float type
  2020-03-30 14:10 math: Add inputs that yield larger errors for float type paul zimmermann
@ 2020-03-31 19:30 ` Carlos O'Donell
  2020-03-31 20:37   ` Joseph Myers
  0 siblings, 1 reply; 6+ messages in thread
From: Carlos O'Donell @ 2020-03-31 19:30 UTC (permalink / raw)
  To: paul zimmermann, libc-alpha, Joseph Myers

On 3/30/20 10:10 AM, paul zimmermann wrote:
>        Dear all,
> 
> now that my copyright assignment is ok, you'll find on [1] a first contribution
> that adds some inputs that yield larger errors for the float (binary32) type on
> x86_64. These cases were generated by exhaustive search using MPFR, thus the
> corresponding bounds are now definitive (on x86_64 only of course).
> 
> For those functions where no case was added, this means the previous bounds
> were the largest ones.
> 
> This exhaustive search only concerns functions with one argument. It does not
> cover functions like pow(x,y) or hypot(x,y) where exhaustive search would be
> too expensive.
> 
> I would be grateful if someone could review that contribution.
> 
> Paul Zimmermann
> 
> [1] https://homepages.loria.fr/PZimmermann/glibc-contrib/0001-math-Add-inputs-that-yield-larger-errors-for-float-t.patch (md5sum bacf7746dd7b9cf8f8d3db12d45b932e)
> 

Verified 13 new additions.
Verified 13 output files updated.
Verified ULPs seem reasonable.
Verified libm-test-ulps seems reasonable.

Looks good to me.

I'd like to see Joseph give this quick review also before committing.

You don't say why you limit j*/y* functions to ULP <=9, but I expect the
implied intent is to avoid using such a high ULP value that it hides other
genuine bugs.

Reviewed-by: Carlos O'Donell <carlos@redhat.com>

> From 323c6fa4915a04c4d5626a4d46c9248050489b2b Mon Sep 17 00:00:00 2001
> From: Paul Zimmermann <Paul.Zimmermann@inria.fr>
> Date: Mon, 30 Mar 2020 15:55:55 +0200
> Subject: [PATCH] math: Add inputs that yield larger errors for float type
>  (x86_64)
> 
> The corner cases included were generated using exhaustive search
> for all float/binary32 values on x86_64 (comparing to MPFR for
> correct rounding to nearest).
> 
> For the j0/j1/y0/y1 functions, only cases with ulp error <= 9 were
> included.
> ---
>  math/auto-libm-test-in            | 26 +++++++++
>  math/auto-libm-test-out-asinh     | 25 +++++++++
>  math/auto-libm-test-out-cos       | 25 +++++++++
>  math/auto-libm-test-out-cosh      | 25 +++++++++
>  math/auto-libm-test-out-erfc      | 25 +++++++++
>  math/auto-libm-test-out-exp       | 25 +++++++++
>  math/auto-libm-test-out-exp10     | 25 +++++++++
>  math/auto-libm-test-out-j0        | 25 +++++++++
>  math/auto-libm-test-out-j1        | 25 +++++++++
>  math/auto-libm-test-out-lgamma    | 25 +++++++++
>  math/auto-libm-test-out-sin       | 25 +++++++++
>  math/auto-libm-test-out-tgamma    | 25 +++++++++
>  math/auto-libm-test-out-y0        | 25 +++++++++
>  math/auto-libm-test-out-y1        | 25 +++++++++
>  sysdeps/x86_64/fpu/libm-test-ulps | 88 ++++++++++++++++---------------
>  15 files changed, 397 insertions(+), 42 deletions(-)
> 
> diff --git a/math/auto-libm-test-in b/math/auto-libm-test-in
> index f36fea0ea8..708296cf80 100644
> --- a/math/auto-libm-test-in
> +++ b/math/auto-libm-test-in
> @@ -371,6 +371,8 @@ asinh -0x6.e26358p-4
>  asinh 0x6.c92c08p-4
>  asinh 0x1p-500
>  asinh 0x1p-5000
> +# the next value generates larger error bounds on x86_64 (binary32)
> +asinh 0xf.96c69p-8
>  asinh min
>  asinh -min
>  asinh min_subnorm
> @@ -4421,6 +4423,8 @@ cos 0x3.042d88p+0
>  cos 0x1.8475e5afd4481p+0
>  cos 1.57079697
>  cos -1.57079697
> +# the next value generates larger error bounds on x86_64 (binary32)
> +cos 0x2.3c6ef4p-12
>  
>  cosh 0
>  cosh -0
> @@ -4482,6 +4486,8 @@ cosh 0x2.c5d37700c6bb03a6c24b6c9b494cp+12
>  cosh 0x2.c5d37700c6bb03a6c24b6c9b494ep+12
>  cosh -0x2.c5d37700c6bb03a6c24b6c9b494cp+12
>  cosh -0x2.c5d37700c6bb03a6c24b6c9b494ep+12
> +# the next value generates larger error bounds on x86_64 (binary32)
> +cosh 0x5.8bfe6p+4
>  
>  cpow 1 0 0 0 ignore-zero-inf-sign
>  cpow 2 0 10 0 ignore-zero-inf-sign
> @@ -4982,6 +4988,8 @@ erfc 0x6.a8a0561d8bbe942p+4
>  erfc 0x6.a8a0561d8bbe9428p+4
>  erfc 0x6.a893032db905274042fb05c665dcp+4
>  erfc 0x6.a893032db905274042fb05c665ep+4
> +# the next value generates larger error bounds on x86_64 (binary32)
> +erfc 0xd.03d06p-4
>  erfc min
>  erfc -min
>  erfc min_subnorm
> @@ -5096,6 +5104,8 @@ exp 0x3.248524p+0
>  exp 0x1.f0b362p+0
>  exp 0xd.89746a799ac4eedp+0
>  exp -0x6.58b64p-4
> +# the next value generates larger error bounds on x86_64 (binary32)
> +exp 0x1.fefe02p-16
>  
>  exp10 0
>  exp10 -0
> @@ -5159,6 +5169,8 @@ exp10 0x1.34413509f79fef311f12b35816f9p+12
>  exp10 0x1.34413509f79fef311f12b35816fap+12
>  exp10 -0x1.343793004f503231a589bac27c39p+12
>  exp10 -0x1.343793004f503231a589bac27c38p+12
> +# the next value generates larger error bounds on x86_64 (binary32)
> +exp10 -0xa.6f431p+0
>  exp10 min
>  exp10 -min
>  exp10 min_subnorm
> @@ -5734,6 +5746,8 @@ j0 -0x1.001000001p+593
>  j0 0x1p1023
>  j0 0x1p16382
>  j0 0x1p16383
> +# the next value generates larger error bounds on x86_64 (binary32)
> +j0 0x2.602774p+0
>  
>  j1 -1.0
>  j1 0.0
> @@ -5765,6 +5779,8 @@ j1 0x1p-60
>  j1 0x1p-100
>  j1 0x1p-600
>  j1 0x1p-10000
> +# the next value generates larger error bounds on x86_64 (binary32)
> +j1 0x3.ae4b2p+0
>  j1 min
>  j1 -min
>  j1 min_subnorm
> @@ -5903,6 +5919,8 @@ lgamma 0x1p-16445
>  lgamma -0x1p-16445
>  lgamma 0x1p-16494
>  lgamma -0x1p-16494
> +# the next value generates larger error bounds on x86_64 (binary32)
> +lgamma -0x3.ec4298p+0
>  
>  # Values +/- 10ulp from overflow threshold.  (Values very close to
>  # overflow threshold produce results very close of that threshold,
> @@ -7205,6 +7223,8 @@ sin 0x6.287cc8749212e72p+0
>  sin -0x1.02e34cp+0
>  sin 0xf.f0274p+4
>  sin 0x3.042d88p+0
> +# the next value generates larger error bounds on x86_64 (binary32)
> +sin 0x1.d12ed2p-12
>  sin max
>  sin -max
>  sin min
> @@ -8159,6 +8179,8 @@ tgamma -0xa.ccfcep+0
>  tgamma -0x9.418c8p+0
>  tgamma -0x6.ce9158p+0
>  tgamma -0xd.cbf53d0e7d06p+0
> +# the next value generates larger error bounds on x86_64 (binary32)
> +tgamma -0x3.0aa534p+0
>  
>  y0 0.125
>  y0 0.75
> @@ -8185,6 +8207,8 @@ y0 0x1p-100
>  y0 0x1p-110
>  y0 0x1p-600
>  y0 0x1p-10000
> +# the next value generates larger error bounds on x86_64 (binary32)
> +y0 0xd.3432bp-4
>  y0 min
>  y0 min_subnorm
>  
> @@ -8213,6 +8237,8 @@ y1 0x1p-100
>  y1 0x1p-110
>  y1 0x1p-600
>  y1 0x1p-10000
> +# the next value generates larger error bounds on x86_64 (binary32)
> +y1 0x1.f7e5dcp+0
>  y1 min
>  y1 min_subnorm
>  
> diff --git a/math/auto-libm-test-out-asinh b/math/auto-libm-test-out-asinh
> index 8520865bab..648fe066cb 100644
> --- a/math/auto-libm-test-out-asinh
> +++ b/math/auto-libm-test-out-asinh
> @@ -2506,6 +2506,31 @@ asinh 0x1p-5000
>  = asinh tonearest binary128 0x1p-5000 : 0x1p-5000 : inexact-ok
>  = asinh towardzero binary128 0x1p-5000 : 0xf.fffffffffffffffffffffffffff8p-5004 : inexact-ok
>  = asinh upward binary128 0x1p-5000 : 0x1p-5000 : inexact-ok
> +asinh 0xf.96c69p-8
> += asinh downward binary32 0xf.96c69p-8 : 0xf.94503p-8 : inexact-ok
> += asinh tonearest binary32 0xf.96c69p-8 : 0xf.94504p-8 : inexact-ok
> += asinh towardzero binary32 0xf.96c69p-8 : 0xf.94503p-8 : inexact-ok
> += asinh upward binary32 0xf.96c69p-8 : 0xf.94504p-8 : inexact-ok
> += asinh downward binary64 0xf.96c69p-8 : 0xf.94503821fcc68p-8 : inexact-ok
> += asinh tonearest binary64 0xf.96c69p-8 : 0xf.94503821fcc68p-8 : inexact-ok
> += asinh towardzero binary64 0xf.96c69p-8 : 0xf.94503821fcc68p-8 : inexact-ok
> += asinh upward binary64 0xf.96c69p-8 : 0xf.94503821fcc7p-8 : inexact-ok
> += asinh downward intel96 0xf.96c69p-8 : 0xf.94503821fcc6aeap-8 : inexact-ok
> += asinh tonearest intel96 0xf.96c69p-8 : 0xf.94503821fcc6aebp-8 : inexact-ok
> += asinh towardzero intel96 0xf.96c69p-8 : 0xf.94503821fcc6aeap-8 : inexact-ok
> += asinh upward intel96 0xf.96c69p-8 : 0xf.94503821fcc6aebp-8 : inexact-ok
> += asinh downward m68k96 0xf.96c69p-8 : 0xf.94503821fcc6aeap-8 : inexact-ok
> += asinh tonearest m68k96 0xf.96c69p-8 : 0xf.94503821fcc6aebp-8 : inexact-ok
> += asinh towardzero m68k96 0xf.96c69p-8 : 0xf.94503821fcc6aeap-8 : inexact-ok
> += asinh upward m68k96 0xf.96c69p-8 : 0xf.94503821fcc6aebp-8 : inexact-ok
> += asinh downward binary128 0xf.96c69p-8 : 0xf.94503821fcc6aead1cad28d4935p-8 : inexact-ok
> += asinh tonearest binary128 0xf.96c69p-8 : 0xf.94503821fcc6aead1cad28d4935p-8 : inexact-ok
> += asinh towardzero binary128 0xf.96c69p-8 : 0xf.94503821fcc6aead1cad28d4935p-8 : inexact-ok
> += asinh upward binary128 0xf.96c69p-8 : 0xf.94503821fcc6aead1cad28d49358p-8 : inexact-ok
> += asinh downward ibm128 0xf.96c69p-8 : 0xf.94503821fcc6aead1cad28d49p-8 : inexact-ok
> += asinh tonearest ibm128 0xf.96c69p-8 : 0xf.94503821fcc6aead1cad28d494p-8 : inexact-ok
> += asinh towardzero ibm128 0xf.96c69p-8 : 0xf.94503821fcc6aead1cad28d49p-8 : inexact-ok
> += asinh upward ibm128 0xf.96c69p-8 : 0xf.94503821fcc6aead1cad28d494p-8 : inexact-ok
>  asinh min
>  = asinh downward binary32 0x4p-128 : 0x3.fffff8p-128 : inexact-ok underflow-ok errno-erange-ok
>  = asinh tonearest binary32 0x4p-128 : 0x4p-128 : inexact-ok underflow-ok errno-erange-ok
> diff --git a/math/auto-libm-test-out-cos b/math/auto-libm-test-out-cos
> index 072e04f157..fcb5d17924 100644
> --- a/math/auto-libm-test-out-cos
> +++ b/math/auto-libm-test-out-cos
> @@ -3223,3 +3223,28 @@ cos -1.57079697
>  = cos tonearest ibm128 -0x1.921fc00ece4f02f278ade6ad9fp+0 : -0xa.ca8b7d7e881db0d4919460ab44p-24 : inexact-ok
>  = cos towardzero ibm128 -0x1.921fc00ece4f02f278ade6ad9fp+0 : -0xa.ca8b7d7e881db0d4919460ab4p-24 : inexact-ok
>  = cos upward ibm128 -0x1.921fc00ece4f02f278ade6ad9fp+0 : -0xa.ca8b7d7e881db0d4919460ab4p-24 : inexact-ok
> +cos 0x2.3c6ef4p-12
> += cos downward binary32 0x2.3c6ef4p-12 : 0xf.ffffdp-4 : inexact-ok
> += cos tonearest binary32 0x2.3c6ef4p-12 : 0xf.ffffdp-4 : inexact-ok
> += cos towardzero binary32 0x2.3c6ef4p-12 : 0xf.ffffdp-4 : inexact-ok
> += cos upward binary32 0x2.3c6ef4p-12 : 0xf.ffffep-4 : inexact-ok
> += cos downward binary64 0x2.3c6ef4p-12 : 0xf.ffffd7fffffc8p-4 : inexact-ok
> += cos tonearest binary64 0x2.3c6ef4p-12 : 0xf.ffffd7fffffdp-4 : inexact-ok
> += cos towardzero binary64 0x2.3c6ef4p-12 : 0xf.ffffd7fffffc8p-4 : inexact-ok
> += cos upward binary64 0x2.3c6ef4p-12 : 0xf.ffffd7fffffdp-4 : inexact-ok
> += cos downward intel96 0x2.3c6ef4p-12 : 0xf.ffffd7fffffcf5ep-4 : inexact-ok
> += cos tonearest intel96 0x2.3c6ef4p-12 : 0xf.ffffd7fffffcf5ep-4 : inexact-ok
> += cos towardzero intel96 0x2.3c6ef4p-12 : 0xf.ffffd7fffffcf5ep-4 : inexact-ok
> += cos upward intel96 0x2.3c6ef4p-12 : 0xf.ffffd7fffffcf5fp-4 : inexact-ok
> += cos downward m68k96 0x2.3c6ef4p-12 : 0xf.ffffd7fffffcf5ep-4 : inexact-ok
> += cos tonearest m68k96 0x2.3c6ef4p-12 : 0xf.ffffd7fffffcf5ep-4 : inexact-ok
> += cos towardzero m68k96 0x2.3c6ef4p-12 : 0xf.ffffd7fffffcf5ep-4 : inexact-ok
> += cos upward m68k96 0x2.3c6ef4p-12 : 0xf.ffffd7fffffcf5fp-4 : inexact-ok
> += cos downward binary128 0x2.3c6ef4p-12 : 0xf.ffffd7fffffcf5e6384f874e68fp-4 : inexact-ok
> += cos tonearest binary128 0x2.3c6ef4p-12 : 0xf.ffffd7fffffcf5e6384f874e68fp-4 : inexact-ok
> += cos towardzero binary128 0x2.3c6ef4p-12 : 0xf.ffffd7fffffcf5e6384f874e68fp-4 : inexact-ok
> += cos upward binary128 0x2.3c6ef4p-12 : 0xf.ffffd7fffffcf5e6384f874e68f8p-4 : inexact-ok
> += cos downward ibm128 0x2.3c6ef4p-12 : 0xf.ffffd7fffffcf5e6384f874e68p-4 : inexact-ok
> += cos tonearest ibm128 0x2.3c6ef4p-12 : 0xf.ffffd7fffffcf5e6384f874e68p-4 : inexact-ok
> += cos towardzero ibm128 0x2.3c6ef4p-12 : 0xf.ffffd7fffffcf5e6384f874e68p-4 : inexact-ok
> += cos upward ibm128 0x2.3c6ef4p-12 : 0xf.ffffd7fffffcf5e6384f874e6cp-4 : inexact-ok
> diff --git a/math/auto-libm-test-out-cosh b/math/auto-libm-test-out-cosh
> index 35edd5a7ee..6039a35e41 100644
> --- a/math/auto-libm-test-out-cosh
> +++ b/math/auto-libm-test-out-cosh
> @@ -3385,3 +3385,28 @@ cosh -0x2.c5d37700c6bb03a6c24b6c9b494ep+12
>  = cosh tonearest ibm128 -0x2.c5d37700c6bb03a6c24b6c9b4ap+12 : plus_infty : inexact-ok overflow errno-erange
>  = cosh towardzero ibm128 -0x2.c5d37700c6bb03a6c24b6c9b4ap+12 : 0xf.ffffffffffffbffffffffffffcp+1020 : xfail:ibm128-libgcc inexact-ok overflow errno-erange-ok
>  = cosh upward ibm128 -0x2.c5d37700c6bb03a6c24b6c9b4ap+12 : plus_infty : xfail:ibm128-libgcc inexact-ok overflow errno-erange
> +cosh 0x5.8bfe6p+4
> += cosh downward binary32 0x5.8bfe6p+4 : 0x8.378d9p+124 : inexact-ok
> += cosh tonearest binary32 0x5.8bfe6p+4 : 0x8.378d9p+124 : inexact-ok
> += cosh towardzero binary32 0x5.8bfe6p+4 : 0x8.378d9p+124 : inexact-ok
> += cosh upward binary32 0x5.8bfe6p+4 : 0x8.378dap+124 : inexact-ok
> += cosh downward binary64 0x5.8bfe6p+4 : 0x8.378d97e8a9838p+124 : inexact-ok
> += cosh tonearest binary64 0x5.8bfe6p+4 : 0x8.378d97e8a9838p+124 : inexact-ok
> += cosh towardzero binary64 0x5.8bfe6p+4 : 0x8.378d97e8a9838p+124 : inexact-ok
> += cosh upward binary64 0x5.8bfe6p+4 : 0x8.378d97e8a984p+124 : inexact-ok
> += cosh downward intel96 0x5.8bfe6p+4 : 0x8.378d97e8a9838b8p+124 : inexact-ok
> += cosh tonearest intel96 0x5.8bfe6p+4 : 0x8.378d97e8a9838b8p+124 : inexact-ok
> += cosh towardzero intel96 0x5.8bfe6p+4 : 0x8.378d97e8a9838b8p+124 : inexact-ok
> += cosh upward intel96 0x5.8bfe6p+4 : 0x8.378d97e8a9838b9p+124 : inexact-ok
> += cosh downward m68k96 0x5.8bfe6p+4 : 0x8.378d97e8a9838b8p+124 : inexact-ok
> += cosh tonearest m68k96 0x5.8bfe6p+4 : 0x8.378d97e8a9838b8p+124 : inexact-ok
> += cosh towardzero m68k96 0x5.8bfe6p+4 : 0x8.378d97e8a9838b8p+124 : inexact-ok
> += cosh upward m68k96 0x5.8bfe6p+4 : 0x8.378d97e8a9838b9p+124 : inexact-ok
> += cosh downward binary128 0x5.8bfe6p+4 : 0x8.378d97e8a9838b8164de61b93a68p+124 : inexact-ok
> += cosh tonearest binary128 0x5.8bfe6p+4 : 0x8.378d97e8a9838b8164de61b93a68p+124 : inexact-ok
> += cosh towardzero binary128 0x5.8bfe6p+4 : 0x8.378d97e8a9838b8164de61b93a68p+124 : inexact-ok
> += cosh upward binary128 0x5.8bfe6p+4 : 0x8.378d97e8a9838b8164de61b93a7p+124 : inexact-ok
> += cosh downward ibm128 0x5.8bfe6p+4 : 0x8.378d97e8a9838b8164de61b938p+124 : inexact-ok
> += cosh tonearest ibm128 0x5.8bfe6p+4 : 0x8.378d97e8a9838b8164de61b93cp+124 : inexact-ok
> += cosh towardzero ibm128 0x5.8bfe6p+4 : 0x8.378d97e8a9838b8164de61b938p+124 : inexact-ok
> += cosh upward ibm128 0x5.8bfe6p+4 : 0x8.378d97e8a9838b8164de61b93cp+124 : inexact-ok
> diff --git a/math/auto-libm-test-out-erfc b/math/auto-libm-test-out-erfc
> index 257370e5ba..6a921febcb 100644
> --- a/math/auto-libm-test-out-erfc
> +++ b/math/auto-libm-test-out-erfc
> @@ -2860,6 +2860,31 @@ erfc 0x6.a893032db905274042fb05c665ep+4
>  = erfc tonearest ibm128 0x6.a893032db905274042fb05c664p+4 : 0x0p+0 : inexact-ok underflow errno-erange
>  = erfc towardzero ibm128 0x6.a893032db905274042fb05c664p+4 : 0x0p+0 : xfail:ibm128-libgcc inexact-ok underflow errno-erange
>  = erfc upward ibm128 0x6.a893032db905274042fb05c664p+4 : 0x4p-1076 : xfail:ibm128-libgcc inexact-ok underflow errno-erange-ok
> +erfc 0xd.03d06p-4
> += erfc downward binary32 0xd.03d06p-4 : 0x3.fff918p-4 : inexact-ok
> += erfc tonearest binary32 0xd.03d06p-4 : 0x3.fff91cp-4 : inexact-ok
> += erfc towardzero binary32 0xd.03d06p-4 : 0x3.fff918p-4 : inexact-ok
> += erfc upward binary32 0xd.03d06p-4 : 0x3.fff91cp-4 : inexact-ok
> += erfc downward binary64 0xd.03d06p-4 : 0x3.fff91a7d782bp-4 : inexact-ok
> += erfc tonearest binary64 0xd.03d06p-4 : 0x3.fff91a7d782bp-4 : inexact-ok
> += erfc towardzero binary64 0xd.03d06p-4 : 0x3.fff91a7d782bp-4 : inexact-ok
> += erfc upward binary64 0xd.03d06p-4 : 0x3.fff91a7d782b2p-4 : inexact-ok
> += erfc downward intel96 0xd.03d06p-4 : 0x3.fff91a7d782b0064p-4 : inexact-ok
> += erfc tonearest intel96 0xd.03d06p-4 : 0x3.fff91a7d782b0064p-4 : inexact-ok
> += erfc towardzero intel96 0xd.03d06p-4 : 0x3.fff91a7d782b0064p-4 : inexact-ok
> += erfc upward intel96 0xd.03d06p-4 : 0x3.fff91a7d782b0068p-4 : inexact-ok
> += erfc downward m68k96 0xd.03d06p-4 : 0x3.fff91a7d782b0064p-4 : inexact-ok
> += erfc tonearest m68k96 0xd.03d06p-4 : 0x3.fff91a7d782b0064p-4 : inexact-ok
> += erfc towardzero m68k96 0xd.03d06p-4 : 0x3.fff91a7d782b0064p-4 : inexact-ok
> += erfc upward m68k96 0xd.03d06p-4 : 0x3.fff91a7d782b0068p-4 : inexact-ok
> += erfc downward binary128 0xd.03d06p-4 : 0x3.fff91a7d782b006458655c2be87cp-4 : inexact-ok
> += erfc tonearest binary128 0xd.03d06p-4 : 0x3.fff91a7d782b006458655c2be87cp-4 : inexact-ok
> += erfc towardzero binary128 0xd.03d06p-4 : 0x3.fff91a7d782b006458655c2be87cp-4 : inexact-ok
> += erfc upward binary128 0xd.03d06p-4 : 0x3.fff91a7d782b006458655c2be87ep-4 : inexact-ok
> += erfc downward ibm128 0xd.03d06p-4 : 0x3.fff91a7d782b006458655c2be8p-4 : inexact-ok
> += erfc tonearest ibm128 0xd.03d06p-4 : 0x3.fff91a7d782b006458655c2be8p-4 : inexact-ok
> += erfc towardzero ibm128 0xd.03d06p-4 : 0x3.fff91a7d782b006458655c2be8p-4 : inexact-ok
> += erfc upward ibm128 0xd.03d06p-4 : 0x3.fff91a7d782b006458655c2be9p-4 : inexact-ok
>  erfc min
>  = erfc downward binary32 0x4p-128 : 0xf.fffffp-4 : inexact-ok
>  = erfc tonearest binary32 0x4p-128 : 0x1p+0 : inexact-ok
> diff --git a/math/auto-libm-test-out-exp b/math/auto-libm-test-out-exp
> index 399f5b6b5d..38d2c52ac7 100644
> --- a/math/auto-libm-test-out-exp
> +++ b/math/auto-libm-test-out-exp
> @@ -4844,3 +4844,28 @@ exp -0x6.58b64p-4
>  = exp tonearest ibm128 -0x6.58b64p-4 : 0xa.c2d2580088709f3262612e0cb8p-4 : inexact-ok
>  = exp towardzero ibm128 -0x6.58b64p-4 : 0xa.c2d2580088709f3262612e0cb8p-4 : inexact-ok
>  = exp upward ibm128 -0x6.58b64p-4 : 0xa.c2d2580088709f3262612e0cbcp-4 : inexact-ok
> +exp 0x1.fefe02p-16
> += exp downward binary32 0x1.fefe02p-16 : 0x1.0001fep+0 : inexact-ok
> += exp tonearest binary32 0x1.fefe02p-16 : 0x1.0001fep+0 : inexact-ok
> += exp towardzero binary32 0x1.fefe02p-16 : 0x1.0001fep+0 : inexact-ok
> += exp upward binary32 0x1.fefe02p-16 : 0x1.0002p+0 : inexact-ok
> += exp downward binary64 0x1.fefe02p-16 : 0x1.0001fefffffddp+0 : inexact-ok
> += exp tonearest binary64 0x1.fefe02p-16 : 0x1.0001fefffffdep+0 : inexact-ok
> += exp towardzero binary64 0x1.fefe02p-16 : 0x1.0001fefffffddp+0 : inexact-ok
> += exp upward binary64 0x1.fefe02p-16 : 0x1.0001fefffffdep+0 : inexact-ok
> += exp downward intel96 0x1.fefe02p-16 : 0x1.0001fefffffdd952p+0 : inexact-ok
> += exp tonearest intel96 0x1.fefe02p-16 : 0x1.0001fefffffdd954p+0 : inexact-ok
> += exp towardzero intel96 0x1.fefe02p-16 : 0x1.0001fefffffdd952p+0 : inexact-ok
> += exp upward intel96 0x1.fefe02p-16 : 0x1.0001fefffffdd954p+0 : inexact-ok
> += exp downward m68k96 0x1.fefe02p-16 : 0x1.0001fefffffdd952p+0 : inexact-ok
> += exp tonearest m68k96 0x1.fefe02p-16 : 0x1.0001fefffffdd954p+0 : inexact-ok
> += exp towardzero m68k96 0x1.fefe02p-16 : 0x1.0001fefffffdd952p+0 : inexact-ok
> += exp upward m68k96 0x1.fefe02p-16 : 0x1.0001fefffffdd954p+0 : inexact-ok
> += exp downward binary128 0x1.fefe02p-16 : 0x1.0001fefffffdd953027f9648616fp+0 : inexact-ok
> += exp tonearest binary128 0x1.fefe02p-16 : 0x1.0001fefffffdd953027f9648617p+0 : inexact-ok
> += exp towardzero binary128 0x1.fefe02p-16 : 0x1.0001fefffffdd953027f9648616fp+0 : inexact-ok
> += exp upward binary128 0x1.fefe02p-16 : 0x1.0001fefffffdd953027f9648617p+0 : inexact-ok
> += exp downward ibm128 0x1.fefe02p-16 : 0x1.0001fefffffdd953027f964861p+0 : inexact-ok
> += exp tonearest ibm128 0x1.fefe02p-16 : 0x1.0001fefffffdd953027f9648618p+0 : inexact-ok
> += exp towardzero ibm128 0x1.fefe02p-16 : 0x1.0001fefffffdd953027f964861p+0 : inexact-ok
> += exp upward ibm128 0x1.fefe02p-16 : 0x1.0001fefffffdd953027f9648618p+0 : inexact-ok
> diff --git a/math/auto-libm-test-out-exp10 b/math/auto-libm-test-out-exp10
> index 4ce495d78c..d078b36467 100644
> --- a/math/auto-libm-test-out-exp10
> +++ b/math/auto-libm-test-out-exp10
> @@ -3620,6 +3620,31 @@ exp10 -0x1.343793004f503231a589bac27c38p+12
>  = exp10 tonearest ibm128 -0x1.343793004f503231a589bac27c8p+12 : 0x0p+0 : inexact-ok underflow errno-erange
>  = exp10 towardzero ibm128 -0x1.343793004f503231a589bac27c8p+12 : 0x0p+0 : xfail:ibm128-libgcc inexact-ok underflow errno-erange
>  = exp10 upward ibm128 -0x1.343793004f503231a589bac27c8p+12 : 0x4p-1076 : xfail:ibm128-libgcc inexact-ok underflow errno-erange-ok
> +exp10 -0xa.6f431p+0
> += exp10 downward binary32 -0xa.6f431p+0 : 0x2.86b328p-36 : inexact-ok
> += exp10 tonearest binary32 -0xa.6f431p+0 : 0x2.86b32cp-36 : inexact-ok
> += exp10 towardzero binary32 -0xa.6f431p+0 : 0x2.86b328p-36 : inexact-ok
> += exp10 upward binary32 -0xa.6f431p+0 : 0x2.86b32cp-36 : inexact-ok
> += exp10 downward binary64 -0xa.6f431p+0 : 0x2.86b32a000000cp-36 : inexact-ok
> += exp10 tonearest binary64 -0xa.6f431p+0 : 0x2.86b32a000000ep-36 : inexact-ok
> += exp10 towardzero binary64 -0xa.6f431p+0 : 0x2.86b32a000000cp-36 : inexact-ok
> += exp10 upward binary64 -0xa.6f431p+0 : 0x2.86b32a000000ep-36 : inexact-ok
> += exp10 downward intel96 -0xa.6f431p+0 : 0x2.86b32a000000da34p-36 : inexact-ok
> += exp10 tonearest intel96 -0xa.6f431p+0 : 0x2.86b32a000000da34p-36 : inexact-ok
> += exp10 towardzero intel96 -0xa.6f431p+0 : 0x2.86b32a000000da34p-36 : inexact-ok
> += exp10 upward intel96 -0xa.6f431p+0 : 0x2.86b32a000000da38p-36 : inexact-ok
> += exp10 downward m68k96 -0xa.6f431p+0 : 0x2.86b32a000000da34p-36 : inexact-ok
> += exp10 tonearest m68k96 -0xa.6f431p+0 : 0x2.86b32a000000da34p-36 : inexact-ok
> += exp10 towardzero m68k96 -0xa.6f431p+0 : 0x2.86b32a000000da34p-36 : inexact-ok
> += exp10 upward m68k96 -0xa.6f431p+0 : 0x2.86b32a000000da38p-36 : inexact-ok
> += exp10 downward binary128 -0xa.6f431p+0 : 0x2.86b32a000000da34970abbb69d3ap-36 : inexact-ok
> += exp10 tonearest binary128 -0xa.6f431p+0 : 0x2.86b32a000000da34970abbb69d3ap-36 : inexact-ok
> += exp10 towardzero binary128 -0xa.6f431p+0 : 0x2.86b32a000000da34970abbb69d3ap-36 : inexact-ok
> += exp10 upward binary128 -0xa.6f431p+0 : 0x2.86b32a000000da34970abbb69d3cp-36 : inexact-ok
> += exp10 downward ibm128 -0xa.6f431p+0 : 0x2.86b32a000000da34970abbb69dp-36 : inexact-ok
> += exp10 tonearest ibm128 -0xa.6f431p+0 : 0x2.86b32a000000da34970abbb69dp-36 : inexact-ok
> += exp10 towardzero ibm128 -0xa.6f431p+0 : 0x2.86b32a000000da34970abbb69dp-36 : inexact-ok
> += exp10 upward ibm128 -0xa.6f431p+0 : 0x2.86b32a000000da34970abbb69ep-36 : inexact-ok
>  exp10 min
>  = exp10 downward binary32 0x4p-128 : 0x1p+0 : inexact-ok
>  = exp10 tonearest binary32 0x4p-128 : 0x1p+0 : inexact-ok
> diff --git a/math/auto-libm-test-out-j0 b/math/auto-libm-test-out-j0
> index dd66299f55..2b19908948 100644
> --- a/math/auto-libm-test-out-j0
> +++ b/math/auto-libm-test-out-j0
> @@ -1334,3 +1334,28 @@ j0 0x1p16383
>  = j0 tonearest ibm128 0xf.ffffffffffffbffffffffffffcp+1020 : -0xb.a80d0ee91ce259a722e1f01904p-516 : inexact-ok
>  = j0 towardzero ibm128 0xf.ffffffffffffbffffffffffffcp+1020 : -0xb.a80d0ee91ce259a722e1f019p-516 : inexact-ok
>  = j0 upward ibm128 0xf.ffffffffffffbffffffffffffcp+1020 : -0xb.a80d0ee91ce259a722e1f019p-516 : inexact-ok
> +j0 0x2.602774p+0
> += j0 downward binary32 0x2.602774p+0 : 0x3.e83778p-8 : inexact-ok
> += j0 tonearest binary32 0x2.602774p+0 : 0x3.e83778p-8 : inexact-ok
> += j0 towardzero binary32 0x2.602774p+0 : 0x3.e83778p-8 : inexact-ok
> += j0 upward binary32 0x2.602774p+0 : 0x3.e8377cp-8 : inexact-ok
> += j0 downward binary64 0x2.602774p+0 : 0x3.e83779fe1991p-8 : inexact-ok
> += j0 tonearest binary64 0x2.602774p+0 : 0x3.e83779fe19912p-8 : inexact-ok
> += j0 towardzero binary64 0x2.602774p+0 : 0x3.e83779fe1991p-8 : inexact-ok
> += j0 upward binary64 0x2.602774p+0 : 0x3.e83779fe19912p-8 : inexact-ok
> += j0 downward intel96 0x2.602774p+0 : 0x3.e83779fe19911fa8p-8 : inexact-ok
> += j0 tonearest intel96 0x2.602774p+0 : 0x3.e83779fe19911fa8p-8 : inexact-ok
> += j0 towardzero intel96 0x2.602774p+0 : 0x3.e83779fe19911fa8p-8 : inexact-ok
> += j0 upward intel96 0x2.602774p+0 : 0x3.e83779fe19911facp-8 : inexact-ok
> += j0 downward m68k96 0x2.602774p+0 : 0x3.e83779fe19911fa8p-8 : inexact-ok
> += j0 tonearest m68k96 0x2.602774p+0 : 0x3.e83779fe19911fa8p-8 : inexact-ok
> += j0 towardzero m68k96 0x2.602774p+0 : 0x3.e83779fe19911fa8p-8 : inexact-ok
> += j0 upward m68k96 0x2.602774p+0 : 0x3.e83779fe19911facp-8 : inexact-ok
> += j0 downward binary128 0x2.602774p+0 : 0x3.e83779fe19911fa806cee83ab7p-8 : inexact-ok
> += j0 tonearest binary128 0x2.602774p+0 : 0x3.e83779fe19911fa806cee83ab7p-8 : inexact-ok
> += j0 towardzero binary128 0x2.602774p+0 : 0x3.e83779fe19911fa806cee83ab7p-8 : inexact-ok
> += j0 upward binary128 0x2.602774p+0 : 0x3.e83779fe19911fa806cee83ab702p-8 : inexact-ok
> += j0 downward ibm128 0x2.602774p+0 : 0x3.e83779fe19911fa806cee83ab7p-8 : inexact-ok
> += j0 tonearest ibm128 0x2.602774p+0 : 0x3.e83779fe19911fa806cee83ab7p-8 : inexact-ok
> += j0 towardzero ibm128 0x2.602774p+0 : 0x3.e83779fe19911fa806cee83ab7p-8 : inexact-ok
> += j0 upward ibm128 0x2.602774p+0 : 0x3.e83779fe19911fa806cee83ab8p-8 : inexact-ok
> diff --git a/math/auto-libm-test-out-j1 b/math/auto-libm-test-out-j1
> index db6896c8d9..52a4e407c8 100644
> --- a/math/auto-libm-test-out-j1
> +++ b/math/auto-libm-test-out-j1
> @@ -968,6 +968,31 @@ j1 0x1p-10000
>  = j1 tonearest binary128 0x1p-10000 : 0x8p-10004 : inexact-ok
>  = j1 towardzero binary128 0x1p-10000 : 0x7.fffffffffffffffffffffffffffcp-10004 : inexact-ok
>  = j1 upward binary128 0x1p-10000 : 0x8p-10004 : inexact-ok
> +j1 0x3.ae4b2p+0
> += j1 downward binary32 0x3.ae4b2p+0 : 0xf.d085cp-8 : inexact-ok
> += j1 tonearest binary32 0x3.ae4b2p+0 : 0xf.d085cp-8 : inexact-ok
> += j1 towardzero binary32 0x3.ae4b2p+0 : 0xf.d085cp-8 : inexact-ok
> += j1 upward binary32 0x3.ae4b2p+0 : 0xf.d085dp-8 : inexact-ok
> += j1 downward binary64 0x3.ae4b2p+0 : 0xf.d085c66e86f3p-8 : inexact-ok
> += j1 tonearest binary64 0x3.ae4b2p+0 : 0xf.d085c66e86f3p-8 : inexact-ok
> += j1 towardzero binary64 0x3.ae4b2p+0 : 0xf.d085c66e86f3p-8 : inexact-ok
> += j1 upward binary64 0x3.ae4b2p+0 : 0xf.d085c66e86f38p-8 : inexact-ok
> += j1 downward intel96 0x3.ae4b2p+0 : 0xf.d085c66e86f3026p-8 : inexact-ok
> += j1 tonearest intel96 0x3.ae4b2p+0 : 0xf.d085c66e86f3026p-8 : inexact-ok
> += j1 towardzero intel96 0x3.ae4b2p+0 : 0xf.d085c66e86f3026p-8 : inexact-ok
> += j1 upward intel96 0x3.ae4b2p+0 : 0xf.d085c66e86f3027p-8 : inexact-ok
> += j1 downward m68k96 0x3.ae4b2p+0 : 0xf.d085c66e86f3026p-8 : inexact-ok
> += j1 tonearest m68k96 0x3.ae4b2p+0 : 0xf.d085c66e86f3026p-8 : inexact-ok
> += j1 towardzero m68k96 0x3.ae4b2p+0 : 0xf.d085c66e86f3026p-8 : inexact-ok
> += j1 upward m68k96 0x3.ae4b2p+0 : 0xf.d085c66e86f3027p-8 : inexact-ok
> += j1 downward binary128 0x3.ae4b2p+0 : 0xf.d085c66e86f30267f22d6f787d2p-8 : inexact-ok
> += j1 tonearest binary128 0x3.ae4b2p+0 : 0xf.d085c66e86f30267f22d6f787d2p-8 : inexact-ok
> += j1 towardzero binary128 0x3.ae4b2p+0 : 0xf.d085c66e86f30267f22d6f787d2p-8 : inexact-ok
> += j1 upward binary128 0x3.ae4b2p+0 : 0xf.d085c66e86f30267f22d6f787d28p-8 : inexact-ok
> += j1 downward ibm128 0x3.ae4b2p+0 : 0xf.d085c66e86f30267f22d6f787cp-8 : inexact-ok
> += j1 tonearest ibm128 0x3.ae4b2p+0 : 0xf.d085c66e86f30267f22d6f787cp-8 : inexact-ok
> += j1 towardzero ibm128 0x3.ae4b2p+0 : 0xf.d085c66e86f30267f22d6f787cp-8 : inexact-ok
> += j1 upward ibm128 0x3.ae4b2p+0 : 0xf.d085c66e86f30267f22d6f788p-8 : inexact-ok
>  j1 min
>  = j1 downward binary32 0x4p-128 : 0x1.fffff8p-128 : inexact-ok underflow errno-erange-ok
>  = j1 tonearest binary32 0x4p-128 : 0x2p-128 : inexact-ok underflow errno-erange-ok
> diff --git a/math/auto-libm-test-out-lgamma b/math/auto-libm-test-out-lgamma
> index e685783636..36665b8560 100644
> --- a/math/auto-libm-test-out-lgamma
> +++ b/math/auto-libm-test-out-lgamma
> @@ -2201,6 +2201,31 @@ lgamma -0x1p-16494
>  = lgamma tonearest binary128 -0x4p-16496 : 0x2.ca8c50440f005913a49acbd2c4e8p+12 -1 : inexact-ok
>  = lgamma towardzero binary128 -0x4p-16496 : 0x2.ca8c50440f005913a49acbd2c4e6p+12 -1 : inexact-ok
>  = lgamma upward binary128 -0x4p-16496 : 0x2.ca8c50440f005913a49acbd2c4e8p+12 -1 : inexact-ok
> +lgamma -0x3.ec4298p+0
> += lgamma downward binary32 -0x3.ec4298p+0 : -0x7.d809fp-4 1 : inexact-ok
> += lgamma tonearest binary32 -0x3.ec4298p+0 : -0x7.d809fp-4 1 : inexact-ok
> += lgamma towardzero binary32 -0x3.ec4298p+0 : -0x7.d809e8p-4 1 : inexact-ok
> += lgamma upward binary32 -0x3.ec4298p+0 : -0x7.d809e8p-4 1 : inexact-ok
> += lgamma downward binary64 -0x3.ec4298p+0 : -0x7.d809ecd340fc4p-4 1 : inexact-ok
> += lgamma tonearest binary64 -0x3.ec4298p+0 : -0x7.d809ecd340fcp-4 1 : inexact-ok
> += lgamma towardzero binary64 -0x3.ec4298p+0 : -0x7.d809ecd340fcp-4 1 : inexact-ok
> += lgamma upward binary64 -0x3.ec4298p+0 : -0x7.d809ecd340fcp-4 1 : inexact-ok
> += lgamma downward intel96 -0x3.ec4298p+0 : -0x7.d809ecd340fc16ep-4 1 : inexact-ok
> += lgamma tonearest intel96 -0x3.ec4298p+0 : -0x7.d809ecd340fc16d8p-4 1 : inexact-ok
> += lgamma towardzero intel96 -0x3.ec4298p+0 : -0x7.d809ecd340fc16d8p-4 1 : inexact-ok
> += lgamma upward intel96 -0x3.ec4298p+0 : -0x7.d809ecd340fc16d8p-4 1 : inexact-ok
> += lgamma downward m68k96 -0x3.ec4298p+0 : -0x7.d809ecd340fc16ep-4 1 : inexact-ok
> += lgamma tonearest m68k96 -0x3.ec4298p+0 : -0x7.d809ecd340fc16d8p-4 1 : inexact-ok
> += lgamma towardzero m68k96 -0x3.ec4298p+0 : -0x7.d809ecd340fc16d8p-4 1 : inexact-ok
> += lgamma upward m68k96 -0x3.ec4298p+0 : -0x7.d809ecd340fc16d8p-4 1 : inexact-ok
> += lgamma downward binary128 -0x3.ec4298p+0 : -0x7.d809ecd340fc16da6722ad116694p-4 1 : inexact-ok
> += lgamma tonearest binary128 -0x3.ec4298p+0 : -0x7.d809ecd340fc16da6722ad116694p-4 1 : inexact-ok
> += lgamma towardzero binary128 -0x3.ec4298p+0 : -0x7.d809ecd340fc16da6722ad11669p-4 1 : inexact-ok
> += lgamma upward binary128 -0x3.ec4298p+0 : -0x7.d809ecd340fc16da6722ad11669p-4 1 : inexact-ok
> += lgamma downward ibm128 -0x3.ec4298p+0 : -0x7.d809ecd340fc16da6722ad1168p-4 1 : inexact-ok
> += lgamma tonearest ibm128 -0x3.ec4298p+0 : -0x7.d809ecd340fc16da6722ad1166p-4 1 : inexact-ok
> += lgamma towardzero ibm128 -0x3.ec4298p+0 : -0x7.d809ecd340fc16da6722ad1166p-4 1 : inexact-ok
> += lgamma upward ibm128 -0x3.ec4298p+0 : -0x7.d809ecd340fc16da6722ad1166p-4 1 : inexact-ok
>  lgamma 0x3.12be0cp+120
>  = lgamma downward binary32 0x3.12be0cp+120 : 0xf.ffff1p+124 1 : inexact-ok
>  = lgamma tonearest binary32 0x3.12be0cp+120 : 0xf.ffff1p+124 1 : inexact-ok
> diff --git a/math/auto-libm-test-out-sin b/math/auto-libm-test-out-sin
> index 4826063340..be9afb2bdb 100644
> --- a/math/auto-libm-test-out-sin
> +++ b/math/auto-libm-test-out-sin
> @@ -3118,6 +3118,31 @@ sin 0x3.042d88p+0
>  = sin tonearest ibm128 0x3.042d88p+0 : 0x1.ffc6da9f1ffed895f9fa424ba9p-4 : inexact-ok
>  = sin towardzero ibm128 0x3.042d88p+0 : 0x1.ffc6da9f1ffed895f9fa424ba9p-4 : inexact-ok
>  = sin upward ibm128 0x3.042d88p+0 : 0x1.ffc6da9f1ffed895f9fa424ba98p-4 : inexact-ok
> +sin 0x1.d12ed2p-12
> += sin downward binary32 0x1.d12ed2p-12 : 0x1.d12edp-12 : inexact-ok
> += sin tonearest binary32 0x1.d12ed2p-12 : 0x1.d12edp-12 : inexact-ok
> += sin towardzero binary32 0x1.d12ed2p-12 : 0x1.d12edp-12 : inexact-ok
> += sin upward binary32 0x1.d12ed2p-12 : 0x1.d12ed2p-12 : inexact-ok
> += sin downward binary64 0x1.d12ed2p-12 : 0x1.d12ed0fffffdfp-12 : inexact-ok
> += sin tonearest binary64 0x1.d12ed2p-12 : 0x1.d12ed0fffffep-12 : inexact-ok
> += sin towardzero binary64 0x1.d12ed2p-12 : 0x1.d12ed0fffffdfp-12 : inexact-ok
> += sin upward binary64 0x1.d12ed2p-12 : 0x1.d12ed0fffffep-12 : inexact-ok
> += sin downward intel96 0x1.d12ed2p-12 : 0x1.d12ed0fffffdfe0ep-12 : inexact-ok
> += sin tonearest intel96 0x1.d12ed2p-12 : 0x1.d12ed0fffffdfe1p-12 : inexact-ok
> += sin towardzero intel96 0x1.d12ed2p-12 : 0x1.d12ed0fffffdfe0ep-12 : inexact-ok
> += sin upward intel96 0x1.d12ed2p-12 : 0x1.d12ed0fffffdfe1p-12 : inexact-ok
> += sin downward m68k96 0x1.d12ed2p-12 : 0x1.d12ed0fffffdfe0ep-12 : inexact-ok
> += sin tonearest m68k96 0x1.d12ed2p-12 : 0x1.d12ed0fffffdfe1p-12 : inexact-ok
> += sin towardzero m68k96 0x1.d12ed2p-12 : 0x1.d12ed0fffffdfe0ep-12 : inexact-ok
> += sin upward m68k96 0x1.d12ed2p-12 : 0x1.d12ed0fffffdfe1p-12 : inexact-ok
> += sin downward binary128 0x1.d12ed2p-12 : 0x1.d12ed0fffffdfe0f0008c8b28232p-12 : inexact-ok
> += sin tonearest binary128 0x1.d12ed2p-12 : 0x1.d12ed0fffffdfe0f0008c8b28233p-12 : inexact-ok
> += sin towardzero binary128 0x1.d12ed2p-12 : 0x1.d12ed0fffffdfe0f0008c8b28232p-12 : inexact-ok
> += sin upward binary128 0x1.d12ed2p-12 : 0x1.d12ed0fffffdfe0f0008c8b28233p-12 : inexact-ok
> += sin downward ibm128 0x1.d12ed2p-12 : 0x1.d12ed0fffffdfe0f0008c8b282p-12 : inexact-ok
> += sin tonearest ibm128 0x1.d12ed2p-12 : 0x1.d12ed0fffffdfe0f0008c8b282p-12 : inexact-ok
> += sin towardzero ibm128 0x1.d12ed2p-12 : 0x1.d12ed0fffffdfe0f0008c8b282p-12 : inexact-ok
> += sin upward ibm128 0x1.d12ed2p-12 : 0x1.d12ed0fffffdfe0f0008c8b2828p-12 : inexact-ok
>  sin max
>  = sin downward binary32 0xf.fffffp+124 : -0x8.599b4p-4 : inexact-ok
>  = sin tonearest binary32 0xf.fffffp+124 : -0x8.599b3p-4 : inexact-ok
> diff --git a/math/auto-libm-test-out-tgamma b/math/auto-libm-test-out-tgamma
> index cb12b2b1b3..a3f4f8efbe 100644
> --- a/math/auto-libm-test-out-tgamma
> +++ b/math/auto-libm-test-out-tgamma
> @@ -27303,3 +27303,28 @@ tgamma -0xd.cbf53d0e7d06p+0
>  = tgamma tonearest ibm128 -0xd.cbf53d0e7d06p+0 : 0x7.2508c022ac5a1f121d3ba32c5ap-36 : inexact-ok
>  = tgamma towardzero ibm128 -0xd.cbf53d0e7d06p+0 : 0x7.2508c022ac5a1f121d3ba32c58p-36 : inexact-ok
>  = tgamma upward ibm128 -0xd.cbf53d0e7d06p+0 : 0x7.2508c022ac5a1f121d3ba32c5ap-36 : inexact-ok
> +tgamma -0x3.0aa534p+0
> += tgamma downward binary32 -0x3.0aa534p+0 : 0x3.d05ef8p+0 : inexact-ok
> += tgamma tonearest binary32 -0x3.0aa534p+0 : 0x3.d05efcp+0 : inexact-ok
> += tgamma towardzero binary32 -0x3.0aa534p+0 : 0x3.d05ef8p+0 : inexact-ok
> += tgamma upward binary32 -0x3.0aa534p+0 : 0x3.d05efcp+0 : inexact-ok
> += tgamma downward binary64 -0x3.0aa534p+0 : 0x3.d05efb28d49ccp+0 : inexact-ok
> += tgamma tonearest binary64 -0x3.0aa534p+0 : 0x3.d05efb28d49ccp+0 : inexact-ok
> += tgamma towardzero binary64 -0x3.0aa534p+0 : 0x3.d05efb28d49ccp+0 : inexact-ok
> += tgamma upward binary64 -0x3.0aa534p+0 : 0x3.d05efb28d49cep+0 : inexact-ok
> += tgamma downward intel96 -0x3.0aa534p+0 : 0x3.d05efb28d49cc498p+0 : inexact-ok
> += tgamma tonearest intel96 -0x3.0aa534p+0 : 0x3.d05efb28d49cc49cp+0 : inexact-ok
> += tgamma towardzero intel96 -0x3.0aa534p+0 : 0x3.d05efb28d49cc498p+0 : inexact-ok
> += tgamma upward intel96 -0x3.0aa534p+0 : 0x3.d05efb28d49cc49cp+0 : inexact-ok
> += tgamma downward m68k96 -0x3.0aa534p+0 : 0x3.d05efb28d49cc498p+0 : inexact-ok
> += tgamma tonearest m68k96 -0x3.0aa534p+0 : 0x3.d05efb28d49cc49cp+0 : inexact-ok
> += tgamma towardzero m68k96 -0x3.0aa534p+0 : 0x3.d05efb28d49cc498p+0 : inexact-ok
> += tgamma upward m68k96 -0x3.0aa534p+0 : 0x3.d05efb28d49cc49cp+0 : inexact-ok
> += tgamma downward binary128 -0x3.0aa534p+0 : 0x3.d05efb28d49cc49b798cfd0f0a28p+0 : inexact-ok
> += tgamma tonearest binary128 -0x3.0aa534p+0 : 0x3.d05efb28d49cc49b798cfd0f0a28p+0 : inexact-ok
> += tgamma towardzero binary128 -0x3.0aa534p+0 : 0x3.d05efb28d49cc49b798cfd0f0a28p+0 : inexact-ok
> += tgamma upward binary128 -0x3.0aa534p+0 : 0x3.d05efb28d49cc49b798cfd0f0a2ap+0 : inexact-ok
> += tgamma downward ibm128 -0x3.0aa534p+0 : 0x3.d05efb28d49cc49b798cfd0f0ap+0 : inexact-ok
> += tgamma tonearest ibm128 -0x3.0aa534p+0 : 0x3.d05efb28d49cc49b798cfd0f0ap+0 : inexact-ok
> += tgamma towardzero ibm128 -0x3.0aa534p+0 : 0x3.d05efb28d49cc49b798cfd0f0ap+0 : inexact-ok
> += tgamma upward ibm128 -0x3.0aa534p+0 : 0x3.d05efb28d49cc49b798cfd0f0bp+0 : inexact-ok
> diff --git a/math/auto-libm-test-out-y0 b/math/auto-libm-test-out-y0
> index cc5158ed6b..8ebb585170 100644
> --- a/math/auto-libm-test-out-y0
> +++ b/math/auto-libm-test-out-y0
> @@ -795,6 +795,31 @@ y0 0x1p-10000
>  = y0 tonearest binary128 0x1p-10000 : -0x1.13cc92aab9d385d1d0f2693cb631p+12 : inexact-ok
>  = y0 towardzero binary128 0x1p-10000 : -0x1.13cc92aab9d385d1d0f2693cb631p+12 : inexact-ok
>  = y0 upward binary128 0x1p-10000 : -0x1.13cc92aab9d385d1d0f2693cb631p+12 : inexact-ok
> +y0 0xd.3432bp-4
> += y0 downward binary32 0xd.3432bp-4 : -0xf.fdd88p-8 : inexact-ok
> += y0 tonearest binary32 0xd.3432bp-4 : -0xf.fdd87p-8 : inexact-ok
> += y0 towardzero binary32 0xd.3432bp-4 : -0xf.fdd87p-8 : inexact-ok
> += y0 upward binary32 0xd.3432bp-4 : -0xf.fdd87p-8 : inexact-ok
> += y0 downward binary64 0xd.3432bp-4 : -0xf.fdd871793bc78p-8 : inexact-ok
> += y0 tonearest binary64 0xd.3432bp-4 : -0xf.fdd871793bc7p-8 : inexact-ok
> += y0 towardzero binary64 0xd.3432bp-4 : -0xf.fdd871793bc7p-8 : inexact-ok
> += y0 upward binary64 0xd.3432bp-4 : -0xf.fdd871793bc7p-8 : inexact-ok
> += y0 downward intel96 0xd.3432bp-4 : -0xf.fdd871793bc71fap-8 : inexact-ok
> += y0 tonearest intel96 0xd.3432bp-4 : -0xf.fdd871793bc71f9p-8 : inexact-ok
> += y0 towardzero intel96 0xd.3432bp-4 : -0xf.fdd871793bc71f9p-8 : inexact-ok
> += y0 upward intel96 0xd.3432bp-4 : -0xf.fdd871793bc71f9p-8 : inexact-ok
> += y0 downward m68k96 0xd.3432bp-4 : -0xf.fdd871793bc71fap-8 : inexact-ok
> += y0 tonearest m68k96 0xd.3432bp-4 : -0xf.fdd871793bc71f9p-8 : inexact-ok
> += y0 towardzero m68k96 0xd.3432bp-4 : -0xf.fdd871793bc71f9p-8 : inexact-ok
> += y0 upward m68k96 0xd.3432bp-4 : -0xf.fdd871793bc71f9p-8 : inexact-ok
> += y0 downward binary128 0xd.3432bp-4 : -0xf.fdd871793bc71f92d6b137b44118p-8 : inexact-ok
> += y0 tonearest binary128 0xd.3432bp-4 : -0xf.fdd871793bc71f92d6b137b44118p-8 : inexact-ok
> += y0 towardzero binary128 0xd.3432bp-4 : -0xf.fdd871793bc71f92d6b137b4411p-8 : inexact-ok
> += y0 upward binary128 0xd.3432bp-4 : -0xf.fdd871793bc71f92d6b137b4411p-8 : inexact-ok
> += y0 downward ibm128 0xd.3432bp-4 : -0xf.fdd871793bc71f92d6b137b444p-8 : inexact-ok
> += y0 tonearest ibm128 0xd.3432bp-4 : -0xf.fdd871793bc71f92d6b137b44p-8 : inexact-ok
> += y0 towardzero ibm128 0xd.3432bp-4 : -0xf.fdd871793bc71f92d6b137b44p-8 : inexact-ok
> += y0 upward ibm128 0xd.3432bp-4 : -0xf.fdd871793bc71f92d6b137b44p-8 : inexact-ok
>  y0 min
>  = y0 downward binary32 0x4p-128 : -0x3.7ac89cp+4 : inexact-ok
>  = y0 tonearest binary32 0x4p-128 : -0x3.7ac89cp+4 : inexact-ok
> diff --git a/math/auto-libm-test-out-y1 b/math/auto-libm-test-out-y1
> index af68e6c05a..76840efd72 100644
> --- a/math/auto-libm-test-out-y1
> +++ b/math/auto-libm-test-out-y1
> @@ -795,6 +795,31 @@ y1 0x1p-10000
>  = y1 tonearest binary128 0x1p-10000 : -0xa.2f9836e4e441529fc2757d1f535p+9996 : inexact-ok
>  = y1 towardzero binary128 0x1p-10000 : -0xa.2f9836e4e441529fc2757d1f5348p+9996 : inexact-ok
>  = y1 upward binary128 0x1p-10000 : -0xa.2f9836e4e441529fc2757d1f5348p+9996 : inexact-ok
> +y1 0x1.f7e5dcp+0
> += y1 downward binary32 0x1.f7e5dcp+0 : -0x1.ffea2cp-4 : inexact-ok
> += y1 tonearest binary32 0x1.f7e5dcp+0 : -0x1.ffea2ap-4 : inexact-ok
> += y1 towardzero binary32 0x1.f7e5dcp+0 : -0x1.ffea2ap-4 : inexact-ok
> += y1 upward binary32 0x1.f7e5dcp+0 : -0x1.ffea2ap-4 : inexact-ok
> += y1 downward binary64 0x1.f7e5dcp+0 : -0x1.ffea2a288b0ffp-4 : inexact-ok
> += y1 tonearest binary64 0x1.f7e5dcp+0 : -0x1.ffea2a288b0ffp-4 : inexact-ok
> += y1 towardzero binary64 0x1.f7e5dcp+0 : -0x1.ffea2a288b0fep-4 : inexact-ok
> += y1 upward binary64 0x1.f7e5dcp+0 : -0x1.ffea2a288b0fep-4 : inexact-ok
> += y1 downward intel96 0x1.f7e5dcp+0 : -0x1.ffea2a288b0fea92p-4 : inexact-ok
> += y1 tonearest intel96 0x1.f7e5dcp+0 : -0x1.ffea2a288b0fea92p-4 : inexact-ok
> += y1 towardzero intel96 0x1.f7e5dcp+0 : -0x1.ffea2a288b0fea9p-4 : inexact-ok
> += y1 upward intel96 0x1.f7e5dcp+0 : -0x1.ffea2a288b0fea9p-4 : inexact-ok
> += y1 downward m68k96 0x1.f7e5dcp+0 : -0x1.ffea2a288b0fea92p-4 : inexact-ok
> += y1 tonearest m68k96 0x1.f7e5dcp+0 : -0x1.ffea2a288b0fea92p-4 : inexact-ok
> += y1 towardzero m68k96 0x1.f7e5dcp+0 : -0x1.ffea2a288b0fea9p-4 : inexact-ok
> += y1 upward m68k96 0x1.f7e5dcp+0 : -0x1.ffea2a288b0fea9p-4 : inexact-ok
> += y1 downward binary128 0x1.f7e5dcp+0 : -0x1.ffea2a288b0fea9149928e9f2e6fp-4 : inexact-ok
> += y1 tonearest binary128 0x1.f7e5dcp+0 : -0x1.ffea2a288b0fea9149928e9f2e6fp-4 : inexact-ok
> += y1 towardzero binary128 0x1.f7e5dcp+0 : -0x1.ffea2a288b0fea9149928e9f2e6ep-4 : inexact-ok
> += y1 upward binary128 0x1.f7e5dcp+0 : -0x1.ffea2a288b0fea9149928e9f2e6ep-4 : inexact-ok
> += y1 downward ibm128 0x1.f7e5dcp+0 : -0x1.ffea2a288b0fea9149928e9f2e8p-4 : inexact-ok
> += y1 tonearest ibm128 0x1.f7e5dcp+0 : -0x1.ffea2a288b0fea9149928e9f2e8p-4 : inexact-ok
> += y1 towardzero ibm128 0x1.f7e5dcp+0 : -0x1.ffea2a288b0fea9149928e9f2ep-4 : inexact-ok
> += y1 upward ibm128 0x1.f7e5dcp+0 : -0x1.ffea2a288b0fea9149928e9f2ep-4 : inexact-ok
>  y1 min
>  = y1 downward binary32 0x4p-128 : -0x2.8be61p+124 : inexact-ok
>  = y1 tonearest binary32 0x4p-128 : -0x2.8be60cp+124 : inexact-ok
> diff --git a/sysdeps/x86_64/fpu/libm-test-ulps b/sysdeps/x86_64/fpu/libm-test-ulps
> index 7dc9252bc9..196e60d0b9 100644
> --- a/sysdeps/x86_64/fpu/libm-test-ulps
> +++ b/sysdeps/x86_64/fpu/libm-test-ulps
> @@ -73,7 +73,7 @@ ldouble: 1
>  
>  Function: "asinh":
>  double: 1
> -float: 1
> +float: 2
>  float128: 3
>  ldouble: 3
>  
> @@ -761,6 +761,7 @@ ldouble: 1
>  
>  Function: "cos":
>  double: 1
> +float: 1
>  float128: 1
>  ldouble: 1
>  
> @@ -804,7 +805,7 @@ float: 1
>  
>  Function: "cosh":
>  double: 1
> -float: 1
> +float: 2
>  float128: 1
>  ldouble: 2
>  
> @@ -1135,7 +1136,7 @@ ldouble: 1
>  
>  Function: "erfc":
>  double: 3
> -float: 2
> +float: 3
>  float128: 2
>  ldouble: 3
>  
> @@ -1158,11 +1159,13 @@ float128: 5
>  ldouble: 5
>  
>  Function: "exp":
> +float: 1
>  float128: 1
>  ldouble: 1
>  
>  Function: "exp10":
>  double: 2
> +float: 1
>  float128: 2
>  ldouble: 1
>  
> @@ -1269,22 +1272,22 @@ ldouble: 4
>  
>  Function: "gamma":
>  double: 4
> -float: 4
> +float: 7
>  ldouble: 4
>  
>  Function: "gamma_downward":
>  double: 5
> -float: 4
> +float: 7
>  ldouble: 7
>  
>  Function: "gamma_towardzero":
>  double: 5
> -float: 4
> +float: 6
>  ldouble: 7
>  
>  Function: "gamma_upward":
>  double: 5
> -float: 5
> +float: 6
>  ldouble: 6
>  
>  Function: "hypot":
> @@ -1309,7 +1312,7 @@ ldouble: 1
>  
>  Function: "j0":
>  double: 2
> -float: 2
> +float: 8
>  float128: 2
>  ldouble: 2
>  
> @@ -1320,26 +1323,26 @@ float128: 4
>  ldouble: 4
>  
>  Function: "j0_towardzero":
> -double: 3
> -float: 2
> +double: 4
> +float: 5
>  float128: 2
>  ldouble: 5
>  
>  Function: "j0_upward":
> -double: 3
> -float: 2
> +double: 4
> +float: 5
>  float128: 5
> -ldouble: 4
> +ldouble: 6
>  
>  Function: "j1":
> -double: 1
> -float: 2
> +double: 2
> +float: 9
>  float128: 4
> -ldouble: 1
> +ldouble: 5
>  
>  Function: "j1_downward":
>  double: 3
> -float: 3
> +float: 5
>  float128: 4
>  ldouble: 4
>  
> @@ -1381,25 +1384,25 @@ ldouble: 5
>  
>  Function: "lgamma":
>  double: 4
> -float: 4
> +float: 7
>  float128: 5
>  ldouble: 4
>  
>  Function: "lgamma_downward":
>  double: 5
> -float: 4
> +float: 7
>  float128: 8
>  ldouble: 7
>  
>  Function: "lgamma_towardzero":
>  double: 5
> -float: 4
> +float: 6
>  float128: 5
>  ldouble: 7
>  
>  Function: "lgamma_upward":
>  double: 5
> -float: 5
> +float: 6
>  float128: 8
>  ldouble: 6
>  
> @@ -1562,6 +1565,7 @@ float: 3
>  
>  Function: "sin":
>  double: 1
> +float: 1
>  float128: 1
>  ldouble: 1
>  
> @@ -1719,37 +1723,37 @@ ldouble: 4
>  
>  Function: "tgamma":
>  double: 5
> -float: 5
> +float: 8
>  float128: 4
>  ldouble: 5
>  
>  Function: "tgamma_downward":
>  double: 5
> -float: 5
> +float: 7
>  float128: 5
>  ldouble: 5
>  
>  Function: "tgamma_towardzero":
>  double: 5
> -float: 5
> +float: 7
>  float128: 5
>  ldouble: 5
>  
>  Function: "tgamma_upward":
>  double: 5
> -float: 5
> +float: 8
>  float128: 4
>  ldouble: 5
>  
>  Function: "y0":
> -double: 2
> -float: 1
> +double: 3
> +float: 8
>  float128: 3
>  ldouble: 1
>  
>  Function: "y0_downward":
>  double: 3
> -float: 4
> +float: 6
>  float128: 4
>  ldouble: 5
>  
> @@ -1757,37 +1761,37 @@ Function: "y0_towardzero":
>  double: 3
>  float: 3
>  float128: 3
> -ldouble: 5
> +ldouble: 6
>  
>  Function: "y0_upward":
>  double: 3
> -float: 5
> +float: 6
>  float128: 3
> -ldouble: 3
> +ldouble: 5
>  
>  Function: "y1":
> -double: 3
> -float: 2
> -float128: 2
> -ldouble: 2
> +double: 6
> +float: 9
> +float128: 5
> +ldouble: 3
>  
>  Function: "y1_downward":
>  double: 3
>  float: 2
> -float128: 4
> +float128: 5
>  ldouble: 7
>  
>  Function: "y1_towardzero":
> -double: 3
> -float: 2
> -float128: 2
> +double: 4
> +float: 5
> +float128: 6
>  ldouble: 5
>  
>  Function: "y1_upward":
>  double: 7
> -float: 2
> -float128: 5
> -ldouble: 7
> +float: 9
> +float128: 6
> +ldouble: 9
>  
>  Function: "yn":
>  double: 3
> -- 
> 2.25.1
> 


-- 
Cheers,
Carlos.


^ permalink raw reply	[flat|nested] 6+ messages in thread

* Re: math: Add inputs that yield larger errors for float type
  2020-03-31 19:30 ` Carlos O'Donell
@ 2020-03-31 20:37   ` Joseph Myers
  2020-04-01  1:47     ` Carlos O'Donell
  0 siblings, 1 reply; 6+ messages in thread
From: Joseph Myers @ 2020-03-31 20:37 UTC (permalink / raw)
  To: Carlos O'Donell; +Cc: paul zimmermann, libc-alpha

On Tue, 31 Mar 2020, Carlos O'Donell via Libc-alpha wrote:

> I'd like to see Joseph give this quick review also before committing.

This patch is OK.
> 
> You don't say why you limit j*/y* functions to ULP <=9, but I expect the

The libm-test machinery refuses to accept a larger ULP value in a 
libm-test-ulps file.  So any input that produces a larger ULP value 
results in a test FAIL.  And we have Bugzilla to track known issues rather 
than leaving FAILs in the testsuite.

-- 
Joseph S. Myers
joseph@codesourcery.com

^ permalink raw reply	[flat|nested] 6+ messages in thread

* Re: math: Add inputs that yield larger errors for float type
  2020-03-31 20:37   ` Joseph Myers
@ 2020-04-01  1:47     ` Carlos O'Donell
  2020-04-01  8:40       ` paul zimmermann
  0 siblings, 1 reply; 6+ messages in thread
From: Carlos O'Donell @ 2020-04-01  1:47 UTC (permalink / raw)
  To: Joseph Myers; +Cc: paul zimmermann, libc-alpha

[-- Attachment #1: Type: text/plain, Size: 4900 bytes --]

On 3/31/20 4:37 PM, Joseph Myers wrote:
> On Tue, 31 Mar 2020, Carlos O'Donell via Libc-alpha wrote:
> 
>> I'd like to see Joseph give this quick review also before committing.
> 
> This patch is OK.
>>
>> You don't say why you limit j*/y* functions to ULP <=9, but I expect the
> 
> The libm-test machinery refuses to accept a larger ULP value in a 
> libm-test-ulps file.  So any input that produces a larger ULP value 
> results in a test FAIL.  And we have Bugzilla to track known issues rather 
> than leaving FAILs in the testsuite.
> 

Paul,

The changes trigger higher ULPs on my test system and one failure for y1.

Things pass if I drop the y1 value e.g. 0x1.f7e5dcp+0.

I don't think we can reliably add y1.

I can push your patch without the y1 value, tell me if that works for you.

See the attached patch.

I'm using gcc version 9.2.1 20190827 (Red Hat 9.2.1-1) (GCC), and the y1
test seems sensitive to compilers.

testing double (without inline functions)
Failure: Test: y1_downward (0x1.f7e5dcp+0)
Result:
 is:         -1.2497917621721319e-01  -0x1.ffea2a288b10ep-4
 should be:  -1.2497917621721299e-01  -0x1.ffea2a288b0ffp-4
 difference:  2.0816681711721685e-16   0x1.e000000000000p-53
 ulp       :  15.0000
 max.ulp   :  3.0000
Failure: Test: y1_upward (0x1.f7e5dcp+0)
Result:
 is:         -1.2497917621721281e-01  -0x1.ffea2a288b0f3p-4
 should be:  -1.2497917621721296e-01  -0x1.ffea2a288b0fep-4
 difference:  1.5265566588595903e-16   0x1.6000000000000p-53
 ulp       :  11.0000
 max.ulp   :  7.0000

Test suite completed:
  172 test cases plus 168 tests for exception flags and
    168 tests for errno executed.
  2 errors occurred.

testing float (without inline functions)
Failure: Test: y1_downward (0x1.f7e5dcp+0)
Result:
 is:         -1.24979288e-01  -0x1.ffea48p-4
 should be:  -1.24979184e-01  -0x1.ffea2cp-4
 difference:  1.04308128e-07   0x1.c00000p-24
 ulp       :  14.0000
 max.ulp   :  2.0000

Test suite completed:
  144 test cases plus 140 tests for exception flags and
    140 tests for errno executed.
  1 errors occurred.

testing _Float32 (without inline functions)
Failure: Test: y1_downward (0x1.f7e5dcp+0)
Result:
 is:         -1.24979288e-01  -0x1.ffea48p-4
 should be:  -1.24979184e-01  -0x1.ffea2cp-4
 difference:  1.04308128e-07   0x1.c00000p-24
 ulp       :  14.0000
 max.ulp   :  2.0000

Test suite completed:
  144 test cases plus 140 tests for exception flags and
    140 tests for errno executed.
  1 errors occurred.

testing _Float32x (without inline functions)
Failure: Test: y1_downward (0x1.f7e5dcp+0)
Result:
 is:         -1.2497917621721319e-01  -0x1.ffea2a288b10ep-4
 should be:  -1.2497917621721299e-01  -0x1.ffea2a288b0ffp-4
 difference:  2.0816681711721685e-16   0x1.e000000000000p-53
 ulp       :  15.0000
 max.ulp   :  3.0000
Failure: Test: y1_upward (0x1.f7e5dcp+0)
Result:
 is:         -1.2497917621721281e-01  -0x1.ffea2a288b0f3p-4
 should be:  -1.2497917621721296e-01  -0x1.ffea2a288b0fep-4
 difference:  1.5265566588595903e-16   0x1.6000000000000p-53
 ulp       :  11.0000
 max.ulp   :  7.0000

Test suite completed:
  172 test cases plus 168 tests for exception flags and
    168 tests for errno executed.
  2 errors occurred.

testing _Float64 (without inline functions)
Failure: Test: y1_downward (0x1.f7e5dcp+0)
Result:
 is:         -1.2497917621721319e-01  -0x1.ffea2a288b10ep-4
 should be:  -1.2497917621721299e-01  -0x1.ffea2a288b0ffp-4
 difference:  2.0816681711721685e-16   0x1.e000000000000p-53
 ulp       :  15.0000
 max.ulp   :  3.0000
Failure: Test: y1_upward (0x1.f7e5dcp+0)
Result:
 is:         -1.2497917621721281e-01  -0x1.ffea2a288b0f3p-4
 should be:  -1.2497917621721296e-01  -0x1.ffea2a288b0fep-4
 difference:  1.5265566588595903e-16   0x1.6000000000000p-53
 ulp       :  11.0000
 max.ulp   :  7.0000

Test suite completed:
  172 test cases plus 168 tests for exception flags and
    168 tests for errno executed.
  2 errors occurred.

testing _Float64x (without inline functions)
Failure: Test: y1_downward (0x1.f7e5dcp+0)
Result:
 is:         -1.24979176217212976465e-01  -0xf.ff515144587f5550p-7
 should be:  -1.24979176217212976384e-01  -0xf.ff515144587f5490p-7
 difference:  8.13151629364128325505e-20   0xc.0000000000000000p-67
 ulp       :  12.0000
 max.ulp   :  7.0000

Test suite completed:
  196 test cases plus 192 tests for exception flags and
    192 tests for errno executed.
  1 errors occurred.

testing long double (without inline functions)
Failure: Test: y1_downward (0x1.f7e5dcp+0)
Result:
 is:         -1.24979176217212976465e-01  -0xf.ff515144587f5550p-7
 should be:  -1.24979176217212976384e-01  -0xf.ff515144587f5490p-7
 difference:  8.13151629364128325505e-20   0xc.0000000000000000p-67
 ulp       :  12.0000
 max.ulp   :  7.0000

Test suite completed:
  196 test cases plus 192 tests for exception flags and
    192 tests for errno executed.
  1 errors occurred.


-- 
Cheers,
Carlos.

[-- Attachment #2: 0001-math-Add-inputs-that-yield-larger-errors-for-float-t.patch --]
[-- Type: text/x-patch, Size: 40291 bytes --]

From 6e7273dbe15ced6feafa389704bd89593d8eb036 Mon Sep 17 00:00:00 2001
From: Paul Zimmermann <Paul.Zimmermann@inria.fr>
Date: Mon, 30 Mar 2020 15:55:55 +0200
Subject: [PATCH] math: Add inputs that yield larger errors for float type
 (x86_64)

The corner cases included were generated using exhaustive search
for all float/binary32 values on x86_64 (comparing to MPFR for
correct rounding to nearest).

For the j0/j1/y0 functions, only cases with ulp error <= 9 were
included.

Reviewed-by: Carlos O'Donell <carlos@redhat.com>
---
 math/auto-libm-test-in                        | 24 +++++
 math/auto-libm-test-out-asinh                 | 25 ++++++
 math/auto-libm-test-out-cos                   | 25 ++++++
 math/auto-libm-test-out-cosh                  | 25 ++++++
 math/auto-libm-test-out-erfc                  | 25 ++++++
 math/auto-libm-test-out-exp                   | 25 ++++++
 math/auto-libm-test-out-exp10                 | 25 ++++++
 math/auto-libm-test-out-j0                    | 25 ++++++
 math/auto-libm-test-out-j1                    | 25 ++++++
 math/auto-libm-test-out-lgamma                | 25 ++++++
 math/auto-libm-test-out-sin                   | 25 ++++++
 math/auto-libm-test-out-tgamma                | 25 ++++++
 math/auto-libm-test-out-y0                    | 25 ++++++
 .../i386/i686/fpu/multiarch/libm-test-ulps    | 35 ++++----
 sysdeps/x86_64/fpu/libm-test-ulps             | 88 ++++++++++---------
 15 files changed, 388 insertions(+), 59 deletions(-)

diff --git a/math/auto-libm-test-in b/math/auto-libm-test-in
index f36fea0ea8..749eb34746 100644
--- a/math/auto-libm-test-in
+++ b/math/auto-libm-test-in
@@ -371,6 +371,8 @@ asinh -0x6.e26358p-4
 asinh 0x6.c92c08p-4
 asinh 0x1p-500
 asinh 0x1p-5000
+# the next value generates larger error bounds on x86_64 (binary32)
+asinh 0xf.96c69p-8
 asinh min
 asinh -min
 asinh min_subnorm
@@ -4421,6 +4423,8 @@ cos 0x3.042d88p+0
 cos 0x1.8475e5afd4481p+0
 cos 1.57079697
 cos -1.57079697
+# the next value generates larger error bounds on x86_64 (binary32)
+cos 0x2.3c6ef4p-12
 
 cosh 0
 cosh -0
@@ -4482,6 +4486,8 @@ cosh 0x2.c5d37700c6bb03a6c24b6c9b494cp+12
 cosh 0x2.c5d37700c6bb03a6c24b6c9b494ep+12
 cosh -0x2.c5d37700c6bb03a6c24b6c9b494cp+12
 cosh -0x2.c5d37700c6bb03a6c24b6c9b494ep+12
+# the next value generates larger error bounds on x86_64 (binary32)
+cosh 0x5.8bfe6p+4
 
 cpow 1 0 0 0 ignore-zero-inf-sign
 cpow 2 0 10 0 ignore-zero-inf-sign
@@ -4982,6 +4988,8 @@ erfc 0x6.a8a0561d8bbe942p+4
 erfc 0x6.a8a0561d8bbe9428p+4
 erfc 0x6.a893032db905274042fb05c665dcp+4
 erfc 0x6.a893032db905274042fb05c665ep+4
+# the next value generates larger error bounds on x86_64 (binary32)
+erfc 0xd.03d06p-4
 erfc min
 erfc -min
 erfc min_subnorm
@@ -5096,6 +5104,8 @@ exp 0x3.248524p+0
 exp 0x1.f0b362p+0
 exp 0xd.89746a799ac4eedp+0
 exp -0x6.58b64p-4
+# the next value generates larger error bounds on x86_64 (binary32)
+exp 0x1.fefe02p-16
 
 exp10 0
 exp10 -0
@@ -5159,6 +5169,8 @@ exp10 0x1.34413509f79fef311f12b35816f9p+12
 exp10 0x1.34413509f79fef311f12b35816fap+12
 exp10 -0x1.343793004f503231a589bac27c39p+12
 exp10 -0x1.343793004f503231a589bac27c38p+12
+# the next value generates larger error bounds on x86_64 (binary32)
+exp10 -0xa.6f431p+0
 exp10 min
 exp10 -min
 exp10 min_subnorm
@@ -5734,6 +5746,8 @@ j0 -0x1.001000001p+593
 j0 0x1p1023
 j0 0x1p16382
 j0 0x1p16383
+# the next value generates larger error bounds on x86_64 (binary32)
+j0 0x2.602774p+0
 
 j1 -1.0
 j1 0.0
@@ -5765,6 +5779,8 @@ j1 0x1p-60
 j1 0x1p-100
 j1 0x1p-600
 j1 0x1p-10000
+# the next value generates larger error bounds on x86_64 (binary32)
+j1 0x3.ae4b2p+0
 j1 min
 j1 -min
 j1 min_subnorm
@@ -5903,6 +5919,8 @@ lgamma 0x1p-16445
 lgamma -0x1p-16445
 lgamma 0x1p-16494
 lgamma -0x1p-16494
+# the next value generates larger error bounds on x86_64 (binary32)
+lgamma -0x3.ec4298p+0
 
 # Values +/- 10ulp from overflow threshold.  (Values very close to
 # overflow threshold produce results very close of that threshold,
@@ -7205,6 +7223,8 @@ sin 0x6.287cc8749212e72p+0
 sin -0x1.02e34cp+0
 sin 0xf.f0274p+4
 sin 0x3.042d88p+0
+# the next value generates larger error bounds on x86_64 (binary32)
+sin 0x1.d12ed2p-12
 sin max
 sin -max
 sin min
@@ -8159,6 +8179,8 @@ tgamma -0xa.ccfcep+0
 tgamma -0x9.418c8p+0
 tgamma -0x6.ce9158p+0
 tgamma -0xd.cbf53d0e7d06p+0
+# the next value generates larger error bounds on x86_64 (binary32)
+tgamma -0x3.0aa534p+0
 
 y0 0.125
 y0 0.75
@@ -8185,6 +8207,8 @@ y0 0x1p-100
 y0 0x1p-110
 y0 0x1p-600
 y0 0x1p-10000
+# the next value generates larger error bounds on x86_64 (binary32)
+y0 0xd.3432bp-4
 y0 min
 y0 min_subnorm
 
diff --git a/math/auto-libm-test-out-asinh b/math/auto-libm-test-out-asinh
index 8520865bab..648fe066cb 100644
--- a/math/auto-libm-test-out-asinh
+++ b/math/auto-libm-test-out-asinh
@@ -2506,6 +2506,31 @@ asinh 0x1p-5000
 = asinh tonearest binary128 0x1p-5000 : 0x1p-5000 : inexact-ok
 = asinh towardzero binary128 0x1p-5000 : 0xf.fffffffffffffffffffffffffff8p-5004 : inexact-ok
 = asinh upward binary128 0x1p-5000 : 0x1p-5000 : inexact-ok
+asinh 0xf.96c69p-8
+= asinh downward binary32 0xf.96c69p-8 : 0xf.94503p-8 : inexact-ok
+= asinh tonearest binary32 0xf.96c69p-8 : 0xf.94504p-8 : inexact-ok
+= asinh towardzero binary32 0xf.96c69p-8 : 0xf.94503p-8 : inexact-ok
+= asinh upward binary32 0xf.96c69p-8 : 0xf.94504p-8 : inexact-ok
+= asinh downward binary64 0xf.96c69p-8 : 0xf.94503821fcc68p-8 : inexact-ok
+= asinh tonearest binary64 0xf.96c69p-8 : 0xf.94503821fcc68p-8 : inexact-ok
+= asinh towardzero binary64 0xf.96c69p-8 : 0xf.94503821fcc68p-8 : inexact-ok
+= asinh upward binary64 0xf.96c69p-8 : 0xf.94503821fcc7p-8 : inexact-ok
+= asinh downward intel96 0xf.96c69p-8 : 0xf.94503821fcc6aeap-8 : inexact-ok
+= asinh tonearest intel96 0xf.96c69p-8 : 0xf.94503821fcc6aebp-8 : inexact-ok
+= asinh towardzero intel96 0xf.96c69p-8 : 0xf.94503821fcc6aeap-8 : inexact-ok
+= asinh upward intel96 0xf.96c69p-8 : 0xf.94503821fcc6aebp-8 : inexact-ok
+= asinh downward m68k96 0xf.96c69p-8 : 0xf.94503821fcc6aeap-8 : inexact-ok
+= asinh tonearest m68k96 0xf.96c69p-8 : 0xf.94503821fcc6aebp-8 : inexact-ok
+= asinh towardzero m68k96 0xf.96c69p-8 : 0xf.94503821fcc6aeap-8 : inexact-ok
+= asinh upward m68k96 0xf.96c69p-8 : 0xf.94503821fcc6aebp-8 : inexact-ok
+= asinh downward binary128 0xf.96c69p-8 : 0xf.94503821fcc6aead1cad28d4935p-8 : inexact-ok
+= asinh tonearest binary128 0xf.96c69p-8 : 0xf.94503821fcc6aead1cad28d4935p-8 : inexact-ok
+= asinh towardzero binary128 0xf.96c69p-8 : 0xf.94503821fcc6aead1cad28d4935p-8 : inexact-ok
+= asinh upward binary128 0xf.96c69p-8 : 0xf.94503821fcc6aead1cad28d49358p-8 : inexact-ok
+= asinh downward ibm128 0xf.96c69p-8 : 0xf.94503821fcc6aead1cad28d49p-8 : inexact-ok
+= asinh tonearest ibm128 0xf.96c69p-8 : 0xf.94503821fcc6aead1cad28d494p-8 : inexact-ok
+= asinh towardzero ibm128 0xf.96c69p-8 : 0xf.94503821fcc6aead1cad28d49p-8 : inexact-ok
+= asinh upward ibm128 0xf.96c69p-8 : 0xf.94503821fcc6aead1cad28d494p-8 : inexact-ok
 asinh min
 = asinh downward binary32 0x4p-128 : 0x3.fffff8p-128 : inexact-ok underflow-ok errno-erange-ok
 = asinh tonearest binary32 0x4p-128 : 0x4p-128 : inexact-ok underflow-ok errno-erange-ok
diff --git a/math/auto-libm-test-out-cos b/math/auto-libm-test-out-cos
index 072e04f157..fcb5d17924 100644
--- a/math/auto-libm-test-out-cos
+++ b/math/auto-libm-test-out-cos
@@ -3223,3 +3223,28 @@ cos -1.57079697
 = cos tonearest ibm128 -0x1.921fc00ece4f02f278ade6ad9fp+0 : -0xa.ca8b7d7e881db0d4919460ab44p-24 : inexact-ok
 = cos towardzero ibm128 -0x1.921fc00ece4f02f278ade6ad9fp+0 : -0xa.ca8b7d7e881db0d4919460ab4p-24 : inexact-ok
 = cos upward ibm128 -0x1.921fc00ece4f02f278ade6ad9fp+0 : -0xa.ca8b7d7e881db0d4919460ab4p-24 : inexact-ok
+cos 0x2.3c6ef4p-12
+= cos downward binary32 0x2.3c6ef4p-12 : 0xf.ffffdp-4 : inexact-ok
+= cos tonearest binary32 0x2.3c6ef4p-12 : 0xf.ffffdp-4 : inexact-ok
+= cos towardzero binary32 0x2.3c6ef4p-12 : 0xf.ffffdp-4 : inexact-ok
+= cos upward binary32 0x2.3c6ef4p-12 : 0xf.ffffep-4 : inexact-ok
+= cos downward binary64 0x2.3c6ef4p-12 : 0xf.ffffd7fffffc8p-4 : inexact-ok
+= cos tonearest binary64 0x2.3c6ef4p-12 : 0xf.ffffd7fffffdp-4 : inexact-ok
+= cos towardzero binary64 0x2.3c6ef4p-12 : 0xf.ffffd7fffffc8p-4 : inexact-ok
+= cos upward binary64 0x2.3c6ef4p-12 : 0xf.ffffd7fffffdp-4 : inexact-ok
+= cos downward intel96 0x2.3c6ef4p-12 : 0xf.ffffd7fffffcf5ep-4 : inexact-ok
+= cos tonearest intel96 0x2.3c6ef4p-12 : 0xf.ffffd7fffffcf5ep-4 : inexact-ok
+= cos towardzero intel96 0x2.3c6ef4p-12 : 0xf.ffffd7fffffcf5ep-4 : inexact-ok
+= cos upward intel96 0x2.3c6ef4p-12 : 0xf.ffffd7fffffcf5fp-4 : inexact-ok
+= cos downward m68k96 0x2.3c6ef4p-12 : 0xf.ffffd7fffffcf5ep-4 : inexact-ok
+= cos tonearest m68k96 0x2.3c6ef4p-12 : 0xf.ffffd7fffffcf5ep-4 : inexact-ok
+= cos towardzero m68k96 0x2.3c6ef4p-12 : 0xf.ffffd7fffffcf5ep-4 : inexact-ok
+= cos upward m68k96 0x2.3c6ef4p-12 : 0xf.ffffd7fffffcf5fp-4 : inexact-ok
+= cos downward binary128 0x2.3c6ef4p-12 : 0xf.ffffd7fffffcf5e6384f874e68fp-4 : inexact-ok
+= cos tonearest binary128 0x2.3c6ef4p-12 : 0xf.ffffd7fffffcf5e6384f874e68fp-4 : inexact-ok
+= cos towardzero binary128 0x2.3c6ef4p-12 : 0xf.ffffd7fffffcf5e6384f874e68fp-4 : inexact-ok
+= cos upward binary128 0x2.3c6ef4p-12 : 0xf.ffffd7fffffcf5e6384f874e68f8p-4 : inexact-ok
+= cos downward ibm128 0x2.3c6ef4p-12 : 0xf.ffffd7fffffcf5e6384f874e68p-4 : inexact-ok
+= cos tonearest ibm128 0x2.3c6ef4p-12 : 0xf.ffffd7fffffcf5e6384f874e68p-4 : inexact-ok
+= cos towardzero ibm128 0x2.3c6ef4p-12 : 0xf.ffffd7fffffcf5e6384f874e68p-4 : inexact-ok
+= cos upward ibm128 0x2.3c6ef4p-12 : 0xf.ffffd7fffffcf5e6384f874e6cp-4 : inexact-ok
diff --git a/math/auto-libm-test-out-cosh b/math/auto-libm-test-out-cosh
index 35edd5a7ee..6039a35e41 100644
--- a/math/auto-libm-test-out-cosh
+++ b/math/auto-libm-test-out-cosh
@@ -3385,3 +3385,28 @@ cosh -0x2.c5d37700c6bb03a6c24b6c9b494ep+12
 = cosh tonearest ibm128 -0x2.c5d37700c6bb03a6c24b6c9b4ap+12 : plus_infty : inexact-ok overflow errno-erange
 = cosh towardzero ibm128 -0x2.c5d37700c6bb03a6c24b6c9b4ap+12 : 0xf.ffffffffffffbffffffffffffcp+1020 : xfail:ibm128-libgcc inexact-ok overflow errno-erange-ok
 = cosh upward ibm128 -0x2.c5d37700c6bb03a6c24b6c9b4ap+12 : plus_infty : xfail:ibm128-libgcc inexact-ok overflow errno-erange
+cosh 0x5.8bfe6p+4
+= cosh downward binary32 0x5.8bfe6p+4 : 0x8.378d9p+124 : inexact-ok
+= cosh tonearest binary32 0x5.8bfe6p+4 : 0x8.378d9p+124 : inexact-ok
+= cosh towardzero binary32 0x5.8bfe6p+4 : 0x8.378d9p+124 : inexact-ok
+= cosh upward binary32 0x5.8bfe6p+4 : 0x8.378dap+124 : inexact-ok
+= cosh downward binary64 0x5.8bfe6p+4 : 0x8.378d97e8a9838p+124 : inexact-ok
+= cosh tonearest binary64 0x5.8bfe6p+4 : 0x8.378d97e8a9838p+124 : inexact-ok
+= cosh towardzero binary64 0x5.8bfe6p+4 : 0x8.378d97e8a9838p+124 : inexact-ok
+= cosh upward binary64 0x5.8bfe6p+4 : 0x8.378d97e8a984p+124 : inexact-ok
+= cosh downward intel96 0x5.8bfe6p+4 : 0x8.378d97e8a9838b8p+124 : inexact-ok
+= cosh tonearest intel96 0x5.8bfe6p+4 : 0x8.378d97e8a9838b8p+124 : inexact-ok
+= cosh towardzero intel96 0x5.8bfe6p+4 : 0x8.378d97e8a9838b8p+124 : inexact-ok
+= cosh upward intel96 0x5.8bfe6p+4 : 0x8.378d97e8a9838b9p+124 : inexact-ok
+= cosh downward m68k96 0x5.8bfe6p+4 : 0x8.378d97e8a9838b8p+124 : inexact-ok
+= cosh tonearest m68k96 0x5.8bfe6p+4 : 0x8.378d97e8a9838b8p+124 : inexact-ok
+= cosh towardzero m68k96 0x5.8bfe6p+4 : 0x8.378d97e8a9838b8p+124 : inexact-ok
+= cosh upward m68k96 0x5.8bfe6p+4 : 0x8.378d97e8a9838b9p+124 : inexact-ok
+= cosh downward binary128 0x5.8bfe6p+4 : 0x8.378d97e8a9838b8164de61b93a68p+124 : inexact-ok
+= cosh tonearest binary128 0x5.8bfe6p+4 : 0x8.378d97e8a9838b8164de61b93a68p+124 : inexact-ok
+= cosh towardzero binary128 0x5.8bfe6p+4 : 0x8.378d97e8a9838b8164de61b93a68p+124 : inexact-ok
+= cosh upward binary128 0x5.8bfe6p+4 : 0x8.378d97e8a9838b8164de61b93a7p+124 : inexact-ok
+= cosh downward ibm128 0x5.8bfe6p+4 : 0x8.378d97e8a9838b8164de61b938p+124 : inexact-ok
+= cosh tonearest ibm128 0x5.8bfe6p+4 : 0x8.378d97e8a9838b8164de61b93cp+124 : inexact-ok
+= cosh towardzero ibm128 0x5.8bfe6p+4 : 0x8.378d97e8a9838b8164de61b938p+124 : inexact-ok
+= cosh upward ibm128 0x5.8bfe6p+4 : 0x8.378d97e8a9838b8164de61b93cp+124 : inexact-ok
diff --git a/math/auto-libm-test-out-erfc b/math/auto-libm-test-out-erfc
index 257370e5ba..6a921febcb 100644
--- a/math/auto-libm-test-out-erfc
+++ b/math/auto-libm-test-out-erfc
@@ -2860,6 +2860,31 @@ erfc 0x6.a893032db905274042fb05c665ep+4
 = erfc tonearest ibm128 0x6.a893032db905274042fb05c664p+4 : 0x0p+0 : inexact-ok underflow errno-erange
 = erfc towardzero ibm128 0x6.a893032db905274042fb05c664p+4 : 0x0p+0 : xfail:ibm128-libgcc inexact-ok underflow errno-erange
 = erfc upward ibm128 0x6.a893032db905274042fb05c664p+4 : 0x4p-1076 : xfail:ibm128-libgcc inexact-ok underflow errno-erange-ok
+erfc 0xd.03d06p-4
+= erfc downward binary32 0xd.03d06p-4 : 0x3.fff918p-4 : inexact-ok
+= erfc tonearest binary32 0xd.03d06p-4 : 0x3.fff91cp-4 : inexact-ok
+= erfc towardzero binary32 0xd.03d06p-4 : 0x3.fff918p-4 : inexact-ok
+= erfc upward binary32 0xd.03d06p-4 : 0x3.fff91cp-4 : inexact-ok
+= erfc downward binary64 0xd.03d06p-4 : 0x3.fff91a7d782bp-4 : inexact-ok
+= erfc tonearest binary64 0xd.03d06p-4 : 0x3.fff91a7d782bp-4 : inexact-ok
+= erfc towardzero binary64 0xd.03d06p-4 : 0x3.fff91a7d782bp-4 : inexact-ok
+= erfc upward binary64 0xd.03d06p-4 : 0x3.fff91a7d782b2p-4 : inexact-ok
+= erfc downward intel96 0xd.03d06p-4 : 0x3.fff91a7d782b0064p-4 : inexact-ok
+= erfc tonearest intel96 0xd.03d06p-4 : 0x3.fff91a7d782b0064p-4 : inexact-ok
+= erfc towardzero intel96 0xd.03d06p-4 : 0x3.fff91a7d782b0064p-4 : inexact-ok
+= erfc upward intel96 0xd.03d06p-4 : 0x3.fff91a7d782b0068p-4 : inexact-ok
+= erfc downward m68k96 0xd.03d06p-4 : 0x3.fff91a7d782b0064p-4 : inexact-ok
+= erfc tonearest m68k96 0xd.03d06p-4 : 0x3.fff91a7d782b0064p-4 : inexact-ok
+= erfc towardzero m68k96 0xd.03d06p-4 : 0x3.fff91a7d782b0064p-4 : inexact-ok
+= erfc upward m68k96 0xd.03d06p-4 : 0x3.fff91a7d782b0068p-4 : inexact-ok
+= erfc downward binary128 0xd.03d06p-4 : 0x3.fff91a7d782b006458655c2be87cp-4 : inexact-ok
+= erfc tonearest binary128 0xd.03d06p-4 : 0x3.fff91a7d782b006458655c2be87cp-4 : inexact-ok
+= erfc towardzero binary128 0xd.03d06p-4 : 0x3.fff91a7d782b006458655c2be87cp-4 : inexact-ok
+= erfc upward binary128 0xd.03d06p-4 : 0x3.fff91a7d782b006458655c2be87ep-4 : inexact-ok
+= erfc downward ibm128 0xd.03d06p-4 : 0x3.fff91a7d782b006458655c2be8p-4 : inexact-ok
+= erfc tonearest ibm128 0xd.03d06p-4 : 0x3.fff91a7d782b006458655c2be8p-4 : inexact-ok
+= erfc towardzero ibm128 0xd.03d06p-4 : 0x3.fff91a7d782b006458655c2be8p-4 : inexact-ok
+= erfc upward ibm128 0xd.03d06p-4 : 0x3.fff91a7d782b006458655c2be9p-4 : inexact-ok
 erfc min
 = erfc downward binary32 0x4p-128 : 0xf.fffffp-4 : inexact-ok
 = erfc tonearest binary32 0x4p-128 : 0x1p+0 : inexact-ok
diff --git a/math/auto-libm-test-out-exp b/math/auto-libm-test-out-exp
index 399f5b6b5d..38d2c52ac7 100644
--- a/math/auto-libm-test-out-exp
+++ b/math/auto-libm-test-out-exp
@@ -4844,3 +4844,28 @@ exp -0x6.58b64p-4
 = exp tonearest ibm128 -0x6.58b64p-4 : 0xa.c2d2580088709f3262612e0cb8p-4 : inexact-ok
 = exp towardzero ibm128 -0x6.58b64p-4 : 0xa.c2d2580088709f3262612e0cb8p-4 : inexact-ok
 = exp upward ibm128 -0x6.58b64p-4 : 0xa.c2d2580088709f3262612e0cbcp-4 : inexact-ok
+exp 0x1.fefe02p-16
+= exp downward binary32 0x1.fefe02p-16 : 0x1.0001fep+0 : inexact-ok
+= exp tonearest binary32 0x1.fefe02p-16 : 0x1.0001fep+0 : inexact-ok
+= exp towardzero binary32 0x1.fefe02p-16 : 0x1.0001fep+0 : inexact-ok
+= exp upward binary32 0x1.fefe02p-16 : 0x1.0002p+0 : inexact-ok
+= exp downward binary64 0x1.fefe02p-16 : 0x1.0001fefffffddp+0 : inexact-ok
+= exp tonearest binary64 0x1.fefe02p-16 : 0x1.0001fefffffdep+0 : inexact-ok
+= exp towardzero binary64 0x1.fefe02p-16 : 0x1.0001fefffffddp+0 : inexact-ok
+= exp upward binary64 0x1.fefe02p-16 : 0x1.0001fefffffdep+0 : inexact-ok
+= exp downward intel96 0x1.fefe02p-16 : 0x1.0001fefffffdd952p+0 : inexact-ok
+= exp tonearest intel96 0x1.fefe02p-16 : 0x1.0001fefffffdd954p+0 : inexact-ok
+= exp towardzero intel96 0x1.fefe02p-16 : 0x1.0001fefffffdd952p+0 : inexact-ok
+= exp upward intel96 0x1.fefe02p-16 : 0x1.0001fefffffdd954p+0 : inexact-ok
+= exp downward m68k96 0x1.fefe02p-16 : 0x1.0001fefffffdd952p+0 : inexact-ok
+= exp tonearest m68k96 0x1.fefe02p-16 : 0x1.0001fefffffdd954p+0 : inexact-ok
+= exp towardzero m68k96 0x1.fefe02p-16 : 0x1.0001fefffffdd952p+0 : inexact-ok
+= exp upward m68k96 0x1.fefe02p-16 : 0x1.0001fefffffdd954p+0 : inexact-ok
+= exp downward binary128 0x1.fefe02p-16 : 0x1.0001fefffffdd953027f9648616fp+0 : inexact-ok
+= exp tonearest binary128 0x1.fefe02p-16 : 0x1.0001fefffffdd953027f9648617p+0 : inexact-ok
+= exp towardzero binary128 0x1.fefe02p-16 : 0x1.0001fefffffdd953027f9648616fp+0 : inexact-ok
+= exp upward binary128 0x1.fefe02p-16 : 0x1.0001fefffffdd953027f9648617p+0 : inexact-ok
+= exp downward ibm128 0x1.fefe02p-16 : 0x1.0001fefffffdd953027f964861p+0 : inexact-ok
+= exp tonearest ibm128 0x1.fefe02p-16 : 0x1.0001fefffffdd953027f9648618p+0 : inexact-ok
+= exp towardzero ibm128 0x1.fefe02p-16 : 0x1.0001fefffffdd953027f964861p+0 : inexact-ok
+= exp upward ibm128 0x1.fefe02p-16 : 0x1.0001fefffffdd953027f9648618p+0 : inexact-ok
diff --git a/math/auto-libm-test-out-exp10 b/math/auto-libm-test-out-exp10
index 4ce495d78c..d078b36467 100644
--- a/math/auto-libm-test-out-exp10
+++ b/math/auto-libm-test-out-exp10
@@ -3620,6 +3620,31 @@ exp10 -0x1.343793004f503231a589bac27c38p+12
 = exp10 tonearest ibm128 -0x1.343793004f503231a589bac27c8p+12 : 0x0p+0 : inexact-ok underflow errno-erange
 = exp10 towardzero ibm128 -0x1.343793004f503231a589bac27c8p+12 : 0x0p+0 : xfail:ibm128-libgcc inexact-ok underflow errno-erange
 = exp10 upward ibm128 -0x1.343793004f503231a589bac27c8p+12 : 0x4p-1076 : xfail:ibm128-libgcc inexact-ok underflow errno-erange-ok
+exp10 -0xa.6f431p+0
+= exp10 downward binary32 -0xa.6f431p+0 : 0x2.86b328p-36 : inexact-ok
+= exp10 tonearest binary32 -0xa.6f431p+0 : 0x2.86b32cp-36 : inexact-ok
+= exp10 towardzero binary32 -0xa.6f431p+0 : 0x2.86b328p-36 : inexact-ok
+= exp10 upward binary32 -0xa.6f431p+0 : 0x2.86b32cp-36 : inexact-ok
+= exp10 downward binary64 -0xa.6f431p+0 : 0x2.86b32a000000cp-36 : inexact-ok
+= exp10 tonearest binary64 -0xa.6f431p+0 : 0x2.86b32a000000ep-36 : inexact-ok
+= exp10 towardzero binary64 -0xa.6f431p+0 : 0x2.86b32a000000cp-36 : inexact-ok
+= exp10 upward binary64 -0xa.6f431p+0 : 0x2.86b32a000000ep-36 : inexact-ok
+= exp10 downward intel96 -0xa.6f431p+0 : 0x2.86b32a000000da34p-36 : inexact-ok
+= exp10 tonearest intel96 -0xa.6f431p+0 : 0x2.86b32a000000da34p-36 : inexact-ok
+= exp10 towardzero intel96 -0xa.6f431p+0 : 0x2.86b32a000000da34p-36 : inexact-ok
+= exp10 upward intel96 -0xa.6f431p+0 : 0x2.86b32a000000da38p-36 : inexact-ok
+= exp10 downward m68k96 -0xa.6f431p+0 : 0x2.86b32a000000da34p-36 : inexact-ok
+= exp10 tonearest m68k96 -0xa.6f431p+0 : 0x2.86b32a000000da34p-36 : inexact-ok
+= exp10 towardzero m68k96 -0xa.6f431p+0 : 0x2.86b32a000000da34p-36 : inexact-ok
+= exp10 upward m68k96 -0xa.6f431p+0 : 0x2.86b32a000000da38p-36 : inexact-ok
+= exp10 downward binary128 -0xa.6f431p+0 : 0x2.86b32a000000da34970abbb69d3ap-36 : inexact-ok
+= exp10 tonearest binary128 -0xa.6f431p+0 : 0x2.86b32a000000da34970abbb69d3ap-36 : inexact-ok
+= exp10 towardzero binary128 -0xa.6f431p+0 : 0x2.86b32a000000da34970abbb69d3ap-36 : inexact-ok
+= exp10 upward binary128 -0xa.6f431p+0 : 0x2.86b32a000000da34970abbb69d3cp-36 : inexact-ok
+= exp10 downward ibm128 -0xa.6f431p+0 : 0x2.86b32a000000da34970abbb69dp-36 : inexact-ok
+= exp10 tonearest ibm128 -0xa.6f431p+0 : 0x2.86b32a000000da34970abbb69dp-36 : inexact-ok
+= exp10 towardzero ibm128 -0xa.6f431p+0 : 0x2.86b32a000000da34970abbb69dp-36 : inexact-ok
+= exp10 upward ibm128 -0xa.6f431p+0 : 0x2.86b32a000000da34970abbb69ep-36 : inexact-ok
 exp10 min
 = exp10 downward binary32 0x4p-128 : 0x1p+0 : inexact-ok
 = exp10 tonearest binary32 0x4p-128 : 0x1p+0 : inexact-ok
diff --git a/math/auto-libm-test-out-j0 b/math/auto-libm-test-out-j0
index dd66299f55..2b19908948 100644
--- a/math/auto-libm-test-out-j0
+++ b/math/auto-libm-test-out-j0
@@ -1334,3 +1334,28 @@ j0 0x1p16383
 = j0 tonearest ibm128 0xf.ffffffffffffbffffffffffffcp+1020 : -0xb.a80d0ee91ce259a722e1f01904p-516 : inexact-ok
 = j0 towardzero ibm128 0xf.ffffffffffffbffffffffffffcp+1020 : -0xb.a80d0ee91ce259a722e1f019p-516 : inexact-ok
 = j0 upward ibm128 0xf.ffffffffffffbffffffffffffcp+1020 : -0xb.a80d0ee91ce259a722e1f019p-516 : inexact-ok
+j0 0x2.602774p+0
+= j0 downward binary32 0x2.602774p+0 : 0x3.e83778p-8 : inexact-ok
+= j0 tonearest binary32 0x2.602774p+0 : 0x3.e83778p-8 : inexact-ok
+= j0 towardzero binary32 0x2.602774p+0 : 0x3.e83778p-8 : inexact-ok
+= j0 upward binary32 0x2.602774p+0 : 0x3.e8377cp-8 : inexact-ok
+= j0 downward binary64 0x2.602774p+0 : 0x3.e83779fe1991p-8 : inexact-ok
+= j0 tonearest binary64 0x2.602774p+0 : 0x3.e83779fe19912p-8 : inexact-ok
+= j0 towardzero binary64 0x2.602774p+0 : 0x3.e83779fe1991p-8 : inexact-ok
+= j0 upward binary64 0x2.602774p+0 : 0x3.e83779fe19912p-8 : inexact-ok
+= j0 downward intel96 0x2.602774p+0 : 0x3.e83779fe19911fa8p-8 : inexact-ok
+= j0 tonearest intel96 0x2.602774p+0 : 0x3.e83779fe19911fa8p-8 : inexact-ok
+= j0 towardzero intel96 0x2.602774p+0 : 0x3.e83779fe19911fa8p-8 : inexact-ok
+= j0 upward intel96 0x2.602774p+0 : 0x3.e83779fe19911facp-8 : inexact-ok
+= j0 downward m68k96 0x2.602774p+0 : 0x3.e83779fe19911fa8p-8 : inexact-ok
+= j0 tonearest m68k96 0x2.602774p+0 : 0x3.e83779fe19911fa8p-8 : inexact-ok
+= j0 towardzero m68k96 0x2.602774p+0 : 0x3.e83779fe19911fa8p-8 : inexact-ok
+= j0 upward m68k96 0x2.602774p+0 : 0x3.e83779fe19911facp-8 : inexact-ok
+= j0 downward binary128 0x2.602774p+0 : 0x3.e83779fe19911fa806cee83ab7p-8 : inexact-ok
+= j0 tonearest binary128 0x2.602774p+0 : 0x3.e83779fe19911fa806cee83ab7p-8 : inexact-ok
+= j0 towardzero binary128 0x2.602774p+0 : 0x3.e83779fe19911fa806cee83ab7p-8 : inexact-ok
+= j0 upward binary128 0x2.602774p+0 : 0x3.e83779fe19911fa806cee83ab702p-8 : inexact-ok
+= j0 downward ibm128 0x2.602774p+0 : 0x3.e83779fe19911fa806cee83ab7p-8 : inexact-ok
+= j0 tonearest ibm128 0x2.602774p+0 : 0x3.e83779fe19911fa806cee83ab7p-8 : inexact-ok
+= j0 towardzero ibm128 0x2.602774p+0 : 0x3.e83779fe19911fa806cee83ab7p-8 : inexact-ok
+= j0 upward ibm128 0x2.602774p+0 : 0x3.e83779fe19911fa806cee83ab8p-8 : inexact-ok
diff --git a/math/auto-libm-test-out-j1 b/math/auto-libm-test-out-j1
index db6896c8d9..52a4e407c8 100644
--- a/math/auto-libm-test-out-j1
+++ b/math/auto-libm-test-out-j1
@@ -968,6 +968,31 @@ j1 0x1p-10000
 = j1 tonearest binary128 0x1p-10000 : 0x8p-10004 : inexact-ok
 = j1 towardzero binary128 0x1p-10000 : 0x7.fffffffffffffffffffffffffffcp-10004 : inexact-ok
 = j1 upward binary128 0x1p-10000 : 0x8p-10004 : inexact-ok
+j1 0x3.ae4b2p+0
+= j1 downward binary32 0x3.ae4b2p+0 : 0xf.d085cp-8 : inexact-ok
+= j1 tonearest binary32 0x3.ae4b2p+0 : 0xf.d085cp-8 : inexact-ok
+= j1 towardzero binary32 0x3.ae4b2p+0 : 0xf.d085cp-8 : inexact-ok
+= j1 upward binary32 0x3.ae4b2p+0 : 0xf.d085dp-8 : inexact-ok
+= j1 downward binary64 0x3.ae4b2p+0 : 0xf.d085c66e86f3p-8 : inexact-ok
+= j1 tonearest binary64 0x3.ae4b2p+0 : 0xf.d085c66e86f3p-8 : inexact-ok
+= j1 towardzero binary64 0x3.ae4b2p+0 : 0xf.d085c66e86f3p-8 : inexact-ok
+= j1 upward binary64 0x3.ae4b2p+0 : 0xf.d085c66e86f38p-8 : inexact-ok
+= j1 downward intel96 0x3.ae4b2p+0 : 0xf.d085c66e86f3026p-8 : inexact-ok
+= j1 tonearest intel96 0x3.ae4b2p+0 : 0xf.d085c66e86f3026p-8 : inexact-ok
+= j1 towardzero intel96 0x3.ae4b2p+0 : 0xf.d085c66e86f3026p-8 : inexact-ok
+= j1 upward intel96 0x3.ae4b2p+0 : 0xf.d085c66e86f3027p-8 : inexact-ok
+= j1 downward m68k96 0x3.ae4b2p+0 : 0xf.d085c66e86f3026p-8 : inexact-ok
+= j1 tonearest m68k96 0x3.ae4b2p+0 : 0xf.d085c66e86f3026p-8 : inexact-ok
+= j1 towardzero m68k96 0x3.ae4b2p+0 : 0xf.d085c66e86f3026p-8 : inexact-ok
+= j1 upward m68k96 0x3.ae4b2p+0 : 0xf.d085c66e86f3027p-8 : inexact-ok
+= j1 downward binary128 0x3.ae4b2p+0 : 0xf.d085c66e86f30267f22d6f787d2p-8 : inexact-ok
+= j1 tonearest binary128 0x3.ae4b2p+0 : 0xf.d085c66e86f30267f22d6f787d2p-8 : inexact-ok
+= j1 towardzero binary128 0x3.ae4b2p+0 : 0xf.d085c66e86f30267f22d6f787d2p-8 : inexact-ok
+= j1 upward binary128 0x3.ae4b2p+0 : 0xf.d085c66e86f30267f22d6f787d28p-8 : inexact-ok
+= j1 downward ibm128 0x3.ae4b2p+0 : 0xf.d085c66e86f30267f22d6f787cp-8 : inexact-ok
+= j1 tonearest ibm128 0x3.ae4b2p+0 : 0xf.d085c66e86f30267f22d6f787cp-8 : inexact-ok
+= j1 towardzero ibm128 0x3.ae4b2p+0 : 0xf.d085c66e86f30267f22d6f787cp-8 : inexact-ok
+= j1 upward ibm128 0x3.ae4b2p+0 : 0xf.d085c66e86f30267f22d6f788p-8 : inexact-ok
 j1 min
 = j1 downward binary32 0x4p-128 : 0x1.fffff8p-128 : inexact-ok underflow errno-erange-ok
 = j1 tonearest binary32 0x4p-128 : 0x2p-128 : inexact-ok underflow errno-erange-ok
diff --git a/math/auto-libm-test-out-lgamma b/math/auto-libm-test-out-lgamma
index e685783636..36665b8560 100644
--- a/math/auto-libm-test-out-lgamma
+++ b/math/auto-libm-test-out-lgamma
@@ -2201,6 +2201,31 @@ lgamma -0x1p-16494
 = lgamma tonearest binary128 -0x4p-16496 : 0x2.ca8c50440f005913a49acbd2c4e8p+12 -1 : inexact-ok
 = lgamma towardzero binary128 -0x4p-16496 : 0x2.ca8c50440f005913a49acbd2c4e6p+12 -1 : inexact-ok
 = lgamma upward binary128 -0x4p-16496 : 0x2.ca8c50440f005913a49acbd2c4e8p+12 -1 : inexact-ok
+lgamma -0x3.ec4298p+0
+= lgamma downward binary32 -0x3.ec4298p+0 : -0x7.d809fp-4 1 : inexact-ok
+= lgamma tonearest binary32 -0x3.ec4298p+0 : -0x7.d809fp-4 1 : inexact-ok
+= lgamma towardzero binary32 -0x3.ec4298p+0 : -0x7.d809e8p-4 1 : inexact-ok
+= lgamma upward binary32 -0x3.ec4298p+0 : -0x7.d809e8p-4 1 : inexact-ok
+= lgamma downward binary64 -0x3.ec4298p+0 : -0x7.d809ecd340fc4p-4 1 : inexact-ok
+= lgamma tonearest binary64 -0x3.ec4298p+0 : -0x7.d809ecd340fcp-4 1 : inexact-ok
+= lgamma towardzero binary64 -0x3.ec4298p+0 : -0x7.d809ecd340fcp-4 1 : inexact-ok
+= lgamma upward binary64 -0x3.ec4298p+0 : -0x7.d809ecd340fcp-4 1 : inexact-ok
+= lgamma downward intel96 -0x3.ec4298p+0 : -0x7.d809ecd340fc16ep-4 1 : inexact-ok
+= lgamma tonearest intel96 -0x3.ec4298p+0 : -0x7.d809ecd340fc16d8p-4 1 : inexact-ok
+= lgamma towardzero intel96 -0x3.ec4298p+0 : -0x7.d809ecd340fc16d8p-4 1 : inexact-ok
+= lgamma upward intel96 -0x3.ec4298p+0 : -0x7.d809ecd340fc16d8p-4 1 : inexact-ok
+= lgamma downward m68k96 -0x3.ec4298p+0 : -0x7.d809ecd340fc16ep-4 1 : inexact-ok
+= lgamma tonearest m68k96 -0x3.ec4298p+0 : -0x7.d809ecd340fc16d8p-4 1 : inexact-ok
+= lgamma towardzero m68k96 -0x3.ec4298p+0 : -0x7.d809ecd340fc16d8p-4 1 : inexact-ok
+= lgamma upward m68k96 -0x3.ec4298p+0 : -0x7.d809ecd340fc16d8p-4 1 : inexact-ok
+= lgamma downward binary128 -0x3.ec4298p+0 : -0x7.d809ecd340fc16da6722ad116694p-4 1 : inexact-ok
+= lgamma tonearest binary128 -0x3.ec4298p+0 : -0x7.d809ecd340fc16da6722ad116694p-4 1 : inexact-ok
+= lgamma towardzero binary128 -0x3.ec4298p+0 : -0x7.d809ecd340fc16da6722ad11669p-4 1 : inexact-ok
+= lgamma upward binary128 -0x3.ec4298p+0 : -0x7.d809ecd340fc16da6722ad11669p-4 1 : inexact-ok
+= lgamma downward ibm128 -0x3.ec4298p+0 : -0x7.d809ecd340fc16da6722ad1168p-4 1 : inexact-ok
+= lgamma tonearest ibm128 -0x3.ec4298p+0 : -0x7.d809ecd340fc16da6722ad1166p-4 1 : inexact-ok
+= lgamma towardzero ibm128 -0x3.ec4298p+0 : -0x7.d809ecd340fc16da6722ad1166p-4 1 : inexact-ok
+= lgamma upward ibm128 -0x3.ec4298p+0 : -0x7.d809ecd340fc16da6722ad1166p-4 1 : inexact-ok
 lgamma 0x3.12be0cp+120
 = lgamma downward binary32 0x3.12be0cp+120 : 0xf.ffff1p+124 1 : inexact-ok
 = lgamma tonearest binary32 0x3.12be0cp+120 : 0xf.ffff1p+124 1 : inexact-ok
diff --git a/math/auto-libm-test-out-sin b/math/auto-libm-test-out-sin
index 4826063340..be9afb2bdb 100644
--- a/math/auto-libm-test-out-sin
+++ b/math/auto-libm-test-out-sin
@@ -3118,6 +3118,31 @@ sin 0x3.042d88p+0
 = sin tonearest ibm128 0x3.042d88p+0 : 0x1.ffc6da9f1ffed895f9fa424ba9p-4 : inexact-ok
 = sin towardzero ibm128 0x3.042d88p+0 : 0x1.ffc6da9f1ffed895f9fa424ba9p-4 : inexact-ok
 = sin upward ibm128 0x3.042d88p+0 : 0x1.ffc6da9f1ffed895f9fa424ba98p-4 : inexact-ok
+sin 0x1.d12ed2p-12
+= sin downward binary32 0x1.d12ed2p-12 : 0x1.d12edp-12 : inexact-ok
+= sin tonearest binary32 0x1.d12ed2p-12 : 0x1.d12edp-12 : inexact-ok
+= sin towardzero binary32 0x1.d12ed2p-12 : 0x1.d12edp-12 : inexact-ok
+= sin upward binary32 0x1.d12ed2p-12 : 0x1.d12ed2p-12 : inexact-ok
+= sin downward binary64 0x1.d12ed2p-12 : 0x1.d12ed0fffffdfp-12 : inexact-ok
+= sin tonearest binary64 0x1.d12ed2p-12 : 0x1.d12ed0fffffep-12 : inexact-ok
+= sin towardzero binary64 0x1.d12ed2p-12 : 0x1.d12ed0fffffdfp-12 : inexact-ok
+= sin upward binary64 0x1.d12ed2p-12 : 0x1.d12ed0fffffep-12 : inexact-ok
+= sin downward intel96 0x1.d12ed2p-12 : 0x1.d12ed0fffffdfe0ep-12 : inexact-ok
+= sin tonearest intel96 0x1.d12ed2p-12 : 0x1.d12ed0fffffdfe1p-12 : inexact-ok
+= sin towardzero intel96 0x1.d12ed2p-12 : 0x1.d12ed0fffffdfe0ep-12 : inexact-ok
+= sin upward intel96 0x1.d12ed2p-12 : 0x1.d12ed0fffffdfe1p-12 : inexact-ok
+= sin downward m68k96 0x1.d12ed2p-12 : 0x1.d12ed0fffffdfe0ep-12 : inexact-ok
+= sin tonearest m68k96 0x1.d12ed2p-12 : 0x1.d12ed0fffffdfe1p-12 : inexact-ok
+= sin towardzero m68k96 0x1.d12ed2p-12 : 0x1.d12ed0fffffdfe0ep-12 : inexact-ok
+= sin upward m68k96 0x1.d12ed2p-12 : 0x1.d12ed0fffffdfe1p-12 : inexact-ok
+= sin downward binary128 0x1.d12ed2p-12 : 0x1.d12ed0fffffdfe0f0008c8b28232p-12 : inexact-ok
+= sin tonearest binary128 0x1.d12ed2p-12 : 0x1.d12ed0fffffdfe0f0008c8b28233p-12 : inexact-ok
+= sin towardzero binary128 0x1.d12ed2p-12 : 0x1.d12ed0fffffdfe0f0008c8b28232p-12 : inexact-ok
+= sin upward binary128 0x1.d12ed2p-12 : 0x1.d12ed0fffffdfe0f0008c8b28233p-12 : inexact-ok
+= sin downward ibm128 0x1.d12ed2p-12 : 0x1.d12ed0fffffdfe0f0008c8b282p-12 : inexact-ok
+= sin tonearest ibm128 0x1.d12ed2p-12 : 0x1.d12ed0fffffdfe0f0008c8b282p-12 : inexact-ok
+= sin towardzero ibm128 0x1.d12ed2p-12 : 0x1.d12ed0fffffdfe0f0008c8b282p-12 : inexact-ok
+= sin upward ibm128 0x1.d12ed2p-12 : 0x1.d12ed0fffffdfe0f0008c8b2828p-12 : inexact-ok
 sin max
 = sin downward binary32 0xf.fffffp+124 : -0x8.599b4p-4 : inexact-ok
 = sin tonearest binary32 0xf.fffffp+124 : -0x8.599b3p-4 : inexact-ok
diff --git a/math/auto-libm-test-out-tgamma b/math/auto-libm-test-out-tgamma
index cb12b2b1b3..a3f4f8efbe 100644
--- a/math/auto-libm-test-out-tgamma
+++ b/math/auto-libm-test-out-tgamma
@@ -27303,3 +27303,28 @@ tgamma -0xd.cbf53d0e7d06p+0
 = tgamma tonearest ibm128 -0xd.cbf53d0e7d06p+0 : 0x7.2508c022ac5a1f121d3ba32c5ap-36 : inexact-ok
 = tgamma towardzero ibm128 -0xd.cbf53d0e7d06p+0 : 0x7.2508c022ac5a1f121d3ba32c58p-36 : inexact-ok
 = tgamma upward ibm128 -0xd.cbf53d0e7d06p+0 : 0x7.2508c022ac5a1f121d3ba32c5ap-36 : inexact-ok
+tgamma -0x3.0aa534p+0
+= tgamma downward binary32 -0x3.0aa534p+0 : 0x3.d05ef8p+0 : inexact-ok
+= tgamma tonearest binary32 -0x3.0aa534p+0 : 0x3.d05efcp+0 : inexact-ok
+= tgamma towardzero binary32 -0x3.0aa534p+0 : 0x3.d05ef8p+0 : inexact-ok
+= tgamma upward binary32 -0x3.0aa534p+0 : 0x3.d05efcp+0 : inexact-ok
+= tgamma downward binary64 -0x3.0aa534p+0 : 0x3.d05efb28d49ccp+0 : inexact-ok
+= tgamma tonearest binary64 -0x3.0aa534p+0 : 0x3.d05efb28d49ccp+0 : inexact-ok
+= tgamma towardzero binary64 -0x3.0aa534p+0 : 0x3.d05efb28d49ccp+0 : inexact-ok
+= tgamma upward binary64 -0x3.0aa534p+0 : 0x3.d05efb28d49cep+0 : inexact-ok
+= tgamma downward intel96 -0x3.0aa534p+0 : 0x3.d05efb28d49cc498p+0 : inexact-ok
+= tgamma tonearest intel96 -0x3.0aa534p+0 : 0x3.d05efb28d49cc49cp+0 : inexact-ok
+= tgamma towardzero intel96 -0x3.0aa534p+0 : 0x3.d05efb28d49cc498p+0 : inexact-ok
+= tgamma upward intel96 -0x3.0aa534p+0 : 0x3.d05efb28d49cc49cp+0 : inexact-ok
+= tgamma downward m68k96 -0x3.0aa534p+0 : 0x3.d05efb28d49cc498p+0 : inexact-ok
+= tgamma tonearest m68k96 -0x3.0aa534p+0 : 0x3.d05efb28d49cc49cp+0 : inexact-ok
+= tgamma towardzero m68k96 -0x3.0aa534p+0 : 0x3.d05efb28d49cc498p+0 : inexact-ok
+= tgamma upward m68k96 -0x3.0aa534p+0 : 0x3.d05efb28d49cc49cp+0 : inexact-ok
+= tgamma downward binary128 -0x3.0aa534p+0 : 0x3.d05efb28d49cc49b798cfd0f0a28p+0 : inexact-ok
+= tgamma tonearest binary128 -0x3.0aa534p+0 : 0x3.d05efb28d49cc49b798cfd0f0a28p+0 : inexact-ok
+= tgamma towardzero binary128 -0x3.0aa534p+0 : 0x3.d05efb28d49cc49b798cfd0f0a28p+0 : inexact-ok
+= tgamma upward binary128 -0x3.0aa534p+0 : 0x3.d05efb28d49cc49b798cfd0f0a2ap+0 : inexact-ok
+= tgamma downward ibm128 -0x3.0aa534p+0 : 0x3.d05efb28d49cc49b798cfd0f0ap+0 : inexact-ok
+= tgamma tonearest ibm128 -0x3.0aa534p+0 : 0x3.d05efb28d49cc49b798cfd0f0ap+0 : inexact-ok
+= tgamma towardzero ibm128 -0x3.0aa534p+0 : 0x3.d05efb28d49cc49b798cfd0f0ap+0 : inexact-ok
+= tgamma upward ibm128 -0x3.0aa534p+0 : 0x3.d05efb28d49cc49b798cfd0f0bp+0 : inexact-ok
diff --git a/math/auto-libm-test-out-y0 b/math/auto-libm-test-out-y0
index cc5158ed6b..8ebb585170 100644
--- a/math/auto-libm-test-out-y0
+++ b/math/auto-libm-test-out-y0
@@ -795,6 +795,31 @@ y0 0x1p-10000
 = y0 tonearest binary128 0x1p-10000 : -0x1.13cc92aab9d385d1d0f2693cb631p+12 : inexact-ok
 = y0 towardzero binary128 0x1p-10000 : -0x1.13cc92aab9d385d1d0f2693cb631p+12 : inexact-ok
 = y0 upward binary128 0x1p-10000 : -0x1.13cc92aab9d385d1d0f2693cb631p+12 : inexact-ok
+y0 0xd.3432bp-4
+= y0 downward binary32 0xd.3432bp-4 : -0xf.fdd88p-8 : inexact-ok
+= y0 tonearest binary32 0xd.3432bp-4 : -0xf.fdd87p-8 : inexact-ok
+= y0 towardzero binary32 0xd.3432bp-4 : -0xf.fdd87p-8 : inexact-ok
+= y0 upward binary32 0xd.3432bp-4 : -0xf.fdd87p-8 : inexact-ok
+= y0 downward binary64 0xd.3432bp-4 : -0xf.fdd871793bc78p-8 : inexact-ok
+= y0 tonearest binary64 0xd.3432bp-4 : -0xf.fdd871793bc7p-8 : inexact-ok
+= y0 towardzero binary64 0xd.3432bp-4 : -0xf.fdd871793bc7p-8 : inexact-ok
+= y0 upward binary64 0xd.3432bp-4 : -0xf.fdd871793bc7p-8 : inexact-ok
+= y0 downward intel96 0xd.3432bp-4 : -0xf.fdd871793bc71fap-8 : inexact-ok
+= y0 tonearest intel96 0xd.3432bp-4 : -0xf.fdd871793bc71f9p-8 : inexact-ok
+= y0 towardzero intel96 0xd.3432bp-4 : -0xf.fdd871793bc71f9p-8 : inexact-ok
+= y0 upward intel96 0xd.3432bp-4 : -0xf.fdd871793bc71f9p-8 : inexact-ok
+= y0 downward m68k96 0xd.3432bp-4 : -0xf.fdd871793bc71fap-8 : inexact-ok
+= y0 tonearest m68k96 0xd.3432bp-4 : -0xf.fdd871793bc71f9p-8 : inexact-ok
+= y0 towardzero m68k96 0xd.3432bp-4 : -0xf.fdd871793bc71f9p-8 : inexact-ok
+= y0 upward m68k96 0xd.3432bp-4 : -0xf.fdd871793bc71f9p-8 : inexact-ok
+= y0 downward binary128 0xd.3432bp-4 : -0xf.fdd871793bc71f92d6b137b44118p-8 : inexact-ok
+= y0 tonearest binary128 0xd.3432bp-4 : -0xf.fdd871793bc71f92d6b137b44118p-8 : inexact-ok
+= y0 towardzero binary128 0xd.3432bp-4 : -0xf.fdd871793bc71f92d6b137b4411p-8 : inexact-ok
+= y0 upward binary128 0xd.3432bp-4 : -0xf.fdd871793bc71f92d6b137b4411p-8 : inexact-ok
+= y0 downward ibm128 0xd.3432bp-4 : -0xf.fdd871793bc71f92d6b137b444p-8 : inexact-ok
+= y0 tonearest ibm128 0xd.3432bp-4 : -0xf.fdd871793bc71f92d6b137b44p-8 : inexact-ok
+= y0 towardzero ibm128 0xd.3432bp-4 : -0xf.fdd871793bc71f92d6b137b44p-8 : inexact-ok
+= y0 upward ibm128 0xd.3432bp-4 : -0xf.fdd871793bc71f92d6b137b44p-8 : inexact-ok
 y0 min
 = y0 downward binary32 0x4p-128 : -0x3.7ac89cp+4 : inexact-ok
 = y0 tonearest binary32 0x4p-128 : -0x3.7ac89cp+4 : inexact-ok
diff --git a/sysdeps/i386/i686/fpu/multiarch/libm-test-ulps b/sysdeps/i386/i686/fpu/multiarch/libm-test-ulps
index d293214fbc..670a8c370a 100644
--- a/sysdeps/i386/i686/fpu/multiarch/libm-test-ulps
+++ b/sysdeps/i386/i686/fpu/multiarch/libm-test-ulps
@@ -766,7 +766,7 @@ ldouble: 2
 
 Function: "cosh":
 double: 1
-float: 1
+float: 2
 float128: 1
 ldouble: 2
 
@@ -1125,6 +1125,7 @@ ldouble: 5
 
 Function: "exp":
 double: 1
+float: 1
 float128: 1
 ldouble: 1
 
@@ -1250,7 +1251,7 @@ ldouble: 1
 
 Function: "j0":
 double: 2
-float: 2
+float: 5
 float128: 2
 ldouble: 2
 
@@ -1270,13 +1271,13 @@ Function: "j0_upward":
 double: 3
 float: 3
 float128: 5
-ldouble: 4
+ldouble: 6
 
 Function: "j1":
 double: 2
-float: 2
+float: 5
 float128: 4
-ldouble: 1
+ldouble: 5
 
 Function: "j1_downward":
 double: 3
@@ -1575,13 +1576,13 @@ ldouble: 5
 
 Function: "tgamma_downward":
 double: 6
-float: 5
+float: 7
 float128: 5
 ldouble: 5
 
 Function: "tgamma_towardzero":
 double: 6
-float: 5
+float: 7
 float128: 5
 ldouble: 5
 
@@ -1607,37 +1608,37 @@ Function: "y0_towardzero":
 double: 3
 float: 3
 float128: 3
-ldouble: 5
+ldouble: 6
 
 Function: "y0_upward":
 double: 3
 float: 5
 float128: 3
-ldouble: 3
+ldouble: 5
 
 Function: "y1":
 double: 3
 float: 2
-float128: 2
-ldouble: 2
+float128: 5
+ldouble: 3
 
 Function: "y1_downward":
 double: 3
-float: 4
-float128: 4
+float: 5
+float128: 5
 ldouble: 7
 
 Function: "y1_towardzero":
 double: 3
-float: 2
-float128: 2
+float: 4
+float128: 6
 ldouble: 5
 
 Function: "y1_upward":
 double: 7
 float: 3
-float128: 5
-ldouble: 7
+float128: 6
+ldouble: 9
 
 Function: "yn":
 double: 3
diff --git a/sysdeps/x86_64/fpu/libm-test-ulps b/sysdeps/x86_64/fpu/libm-test-ulps
index 7dc9252bc9..196e60d0b9 100644
--- a/sysdeps/x86_64/fpu/libm-test-ulps
+++ b/sysdeps/x86_64/fpu/libm-test-ulps
@@ -73,7 +73,7 @@ ldouble: 1
 
 Function: "asinh":
 double: 1
-float: 1
+float: 2
 float128: 3
 ldouble: 3
 
@@ -761,6 +761,7 @@ ldouble: 1
 
 Function: "cos":
 double: 1
+float: 1
 float128: 1
 ldouble: 1
 
@@ -804,7 +805,7 @@ float: 1
 
 Function: "cosh":
 double: 1
-float: 1
+float: 2
 float128: 1
 ldouble: 2
 
@@ -1135,7 +1136,7 @@ ldouble: 1
 
 Function: "erfc":
 double: 3
-float: 2
+float: 3
 float128: 2
 ldouble: 3
 
@@ -1158,11 +1159,13 @@ float128: 5
 ldouble: 5
 
 Function: "exp":
+float: 1
 float128: 1
 ldouble: 1
 
 Function: "exp10":
 double: 2
+float: 1
 float128: 2
 ldouble: 1
 
@@ -1269,22 +1272,22 @@ ldouble: 4
 
 Function: "gamma":
 double: 4
-float: 4
+float: 7
 ldouble: 4
 
 Function: "gamma_downward":
 double: 5
-float: 4
+float: 7
 ldouble: 7
 
 Function: "gamma_towardzero":
 double: 5
-float: 4
+float: 6
 ldouble: 7
 
 Function: "gamma_upward":
 double: 5
-float: 5
+float: 6
 ldouble: 6
 
 Function: "hypot":
@@ -1309,7 +1312,7 @@ ldouble: 1
 
 Function: "j0":
 double: 2
-float: 2
+float: 8
 float128: 2
 ldouble: 2
 
@@ -1320,26 +1323,26 @@ float128: 4
 ldouble: 4
 
 Function: "j0_towardzero":
-double: 3
-float: 2
+double: 4
+float: 5
 float128: 2
 ldouble: 5
 
 Function: "j0_upward":
-double: 3
-float: 2
+double: 4
+float: 5
 float128: 5
-ldouble: 4
+ldouble: 6
 
 Function: "j1":
-double: 1
-float: 2
+double: 2
+float: 9
 float128: 4
-ldouble: 1
+ldouble: 5
 
 Function: "j1_downward":
 double: 3
-float: 3
+float: 5
 float128: 4
 ldouble: 4
 
@@ -1381,25 +1384,25 @@ ldouble: 5
 
 Function: "lgamma":
 double: 4
-float: 4
+float: 7
 float128: 5
 ldouble: 4
 
 Function: "lgamma_downward":
 double: 5
-float: 4
+float: 7
 float128: 8
 ldouble: 7
 
 Function: "lgamma_towardzero":
 double: 5
-float: 4
+float: 6
 float128: 5
 ldouble: 7
 
 Function: "lgamma_upward":
 double: 5
-float: 5
+float: 6
 float128: 8
 ldouble: 6
 
@@ -1562,6 +1565,7 @@ float: 3
 
 Function: "sin":
 double: 1
+float: 1
 float128: 1
 ldouble: 1
 
@@ -1719,37 +1723,37 @@ ldouble: 4
 
 Function: "tgamma":
 double: 5
-float: 5
+float: 8
 float128: 4
 ldouble: 5
 
 Function: "tgamma_downward":
 double: 5
-float: 5
+float: 7
 float128: 5
 ldouble: 5
 
 Function: "tgamma_towardzero":
 double: 5
-float: 5
+float: 7
 float128: 5
 ldouble: 5
 
 Function: "tgamma_upward":
 double: 5
-float: 5
+float: 8
 float128: 4
 ldouble: 5
 
 Function: "y0":
-double: 2
-float: 1
+double: 3
+float: 8
 float128: 3
 ldouble: 1
 
 Function: "y0_downward":
 double: 3
-float: 4
+float: 6
 float128: 4
 ldouble: 5
 
@@ -1757,37 +1761,37 @@ Function: "y0_towardzero":
 double: 3
 float: 3
 float128: 3
-ldouble: 5
+ldouble: 6
 
 Function: "y0_upward":
 double: 3
-float: 5
+float: 6
 float128: 3
-ldouble: 3
+ldouble: 5
 
 Function: "y1":
-double: 3
-float: 2
-float128: 2
-ldouble: 2
+double: 6
+float: 9
+float128: 5
+ldouble: 3
 
 Function: "y1_downward":
 double: 3
 float: 2
-float128: 4
+float128: 5
 ldouble: 7
 
 Function: "y1_towardzero":
-double: 3
-float: 2
-float128: 2
+double: 4
+float: 5
+float128: 6
 ldouble: 5
 
 Function: "y1_upward":
 double: 7
-float: 2
-float128: 5
-ldouble: 7
+float: 9
+float128: 6
+ldouble: 9
 
 Function: "yn":
 double: 3
-- 
2.21.1


^ permalink raw reply	[flat|nested] 6+ messages in thread

* Re: math: Add inputs that yield larger errors for float type
  2020-04-01  1:47     ` Carlos O'Donell
@ 2020-04-01  8:40       ` paul zimmermann
  2020-04-01 12:28         ` Carlos O'Donell
  0 siblings, 1 reply; 6+ messages in thread
From: paul zimmermann @ 2020-04-01  8:40 UTC (permalink / raw)
  To: Carlos O'Donell; +Cc: joseph, libc-alpha

       Dear Carlos,

I'm fine with pushing the patch without the y1 value. One might get failures
(i.e., ulp errors > 9) on other systems.

Best regards,
Paul

PS: I'm using gcc 9.3.0.


> From: Carlos O'Donell <carlos@redhat.com>
> Date: Tue, 31 Mar 2020 21:47:00 -0400
> 
> On 3/31/20 4:37 PM, Joseph Myers wrote:
> > On Tue, 31 Mar 2020, Carlos O'Donell via Libc-alpha wrote:
> > 
> >> I'd like to see Joseph give this quick review also before committing.
> > 
> > This patch is OK.
> >>
> >> You don't say why you limit j*/y* functions to ULP <=9, but I expect the
> > 
> > The libm-test machinery refuses to accept a larger ULP value in a 
> > libm-test-ulps file.  So any input that produces a larger ULP value 
> > results in a test FAIL.  And we have Bugzilla to track known issues rather 
> > than leaving FAILs in the testsuite.
> > 
> 
> Paul,
> 
> The changes trigger higher ULPs on my test system and one failure for y1.
> 
> Things pass if I drop the y1 value e.g. 0x1.f7e5dcp+0.
> 
> I don't think we can reliably add y1.
> 
> I can push your patch without the y1 value, tell me if that works for you.
> 
> See the attached patch.
> 
> I'm using gcc version 9.2.1 20190827 (Red Hat 9.2.1-1) (GCC), and the y1
> test seems sensitive to compilers.
> 
> testing double (without inline functions)
> Failure: Test: y1_downward (0x1.f7e5dcp+0)
> Result:
>  is:         -1.2497917621721319e-01  -0x1.ffea2a288b10ep-4
>  should be:  -1.2497917621721299e-01  -0x1.ffea2a288b0ffp-4
>  difference:  2.0816681711721685e-16   0x1.e000000000000p-53
>  ulp       :  15.0000
>  max.ulp   :  3.0000
> Failure: Test: y1_upward (0x1.f7e5dcp+0)
> Result:
>  is:         -1.2497917621721281e-01  -0x1.ffea2a288b0f3p-4
>  should be:  -1.2497917621721296e-01  -0x1.ffea2a288b0fep-4
>  difference:  1.5265566588595903e-16   0x1.6000000000000p-53
>  ulp       :  11.0000
>  max.ulp   :  7.0000
> 
> Test suite completed:
>   172 test cases plus 168 tests for exception flags and
>     168 tests for errno executed.
>   2 errors occurred.
> 
> testing float (without inline functions)
> Failure: Test: y1_downward (0x1.f7e5dcp+0)
> Result:
>  is:         -1.24979288e-01  -0x1.ffea48p-4
>  should be:  -1.24979184e-01  -0x1.ffea2cp-4
>  difference:  1.04308128e-07   0x1.c00000p-24
>  ulp       :  14.0000
>  max.ulp   :  2.0000
> 
> Test suite completed:
>   144 test cases plus 140 tests for exception flags and
>     140 tests for errno executed.
>   1 errors occurred.
> 
> testing _Float32 (without inline functions)
> Failure: Test: y1_downward (0x1.f7e5dcp+0)
> Result:
>  is:         -1.24979288e-01  -0x1.ffea48p-4
>  should be:  -1.24979184e-01  -0x1.ffea2cp-4
>  difference:  1.04308128e-07   0x1.c00000p-24
>  ulp       :  14.0000
>  max.ulp   :  2.0000
> 
> Test suite completed:
>   144 test cases plus 140 tests for exception flags and
>     140 tests for errno executed.
>   1 errors occurred.
> 
> testing _Float32x (without inline functions)
> Failure: Test: y1_downward (0x1.f7e5dcp+0)
> Result:
>  is:         -1.2497917621721319e-01  -0x1.ffea2a288b10ep-4
>  should be:  -1.2497917621721299e-01  -0x1.ffea2a288b0ffp-4
>  difference:  2.0816681711721685e-16   0x1.e000000000000p-53
>  ulp       :  15.0000
>  max.ulp   :  3.0000
> Failure: Test: y1_upward (0x1.f7e5dcp+0)
> Result:
>  is:         -1.2497917621721281e-01  -0x1.ffea2a288b0f3p-4
>  should be:  -1.2497917621721296e-01  -0x1.ffea2a288b0fep-4
>  difference:  1.5265566588595903e-16   0x1.6000000000000p-53
>  ulp       :  11.0000
>  max.ulp   :  7.0000
> 
> Test suite completed:
>   172 test cases plus 168 tests for exception flags and
>     168 tests for errno executed.
>   2 errors occurred.
> 
> testing _Float64 (without inline functions)
> Failure: Test: y1_downward (0x1.f7e5dcp+0)
> Result:
>  is:         -1.2497917621721319e-01  -0x1.ffea2a288b10ep-4
>  should be:  -1.2497917621721299e-01  -0x1.ffea2a288b0ffp-4
>  difference:  2.0816681711721685e-16   0x1.e000000000000p-53
>  ulp       :  15.0000
>  max.ulp   :  3.0000
> Failure: Test: y1_upward (0x1.f7e5dcp+0)
> Result:
>  is:         -1.2497917621721281e-01  -0x1.ffea2a288b0f3p-4
>  should be:  -1.2497917621721296e-01  -0x1.ffea2a288b0fep-4
>  difference:  1.5265566588595903e-16   0x1.6000000000000p-53
>  ulp       :  11.0000
>  max.ulp   :  7.0000
> 
> Test suite completed:
>   172 test cases plus 168 tests for exception flags and
>     168 tests for errno executed.
>   2 errors occurred.
> 
> testing _Float64x (without inline functions)
> Failure: Test: y1_downward (0x1.f7e5dcp+0)
> Result:
>  is:         -1.24979176217212976465e-01  -0xf.ff515144587f5550p-7
>  should be:  -1.24979176217212976384e-01  -0xf.ff515144587f5490p-7
>  difference:  8.13151629364128325505e-20   0xc.0000000000000000p-67
>  ulp       :  12.0000
>  max.ulp   :  7.0000
> 
> Test suite completed:
>   196 test cases plus 192 tests for exception flags and
>     192 tests for errno executed.
>   1 errors occurred.
> 
> testing long double (without inline functions)
> Failure: Test: y1_downward (0x1.f7e5dcp+0)
> Result:
>  is:         -1.24979176217212976465e-01  -0xf.ff515144587f5550p-7
>  should be:  -1.24979176217212976384e-01  -0xf.ff515144587f5490p-7
>  difference:  8.13151629364128325505e-20   0xc.0000000000000000p-67
>  ulp       :  12.0000
>  max.ulp   :  7.0000
> 
> Test suite completed:
>   196 test cases plus 192 tests for exception flags and
>     192 tests for errno executed.
>   1 errors occurred.
> 
> 
> -- 
> Cheers,
> Carlos.
> 
> [2:text/x-patch Show Save:0001-math-Add-inputs-that-yield-larger-errors-for-float-t.patch (39kB)]
> 

^ permalink raw reply	[flat|nested] 6+ messages in thread

* Re: math: Add inputs that yield larger errors for float type
  2020-04-01  8:40       ` paul zimmermann
@ 2020-04-01 12:28         ` Carlos O'Donell
  0 siblings, 0 replies; 6+ messages in thread
From: Carlos O'Donell @ 2020-04-01 12:28 UTC (permalink / raw)
  To: paul zimmermann; +Cc: joseph, libc-alpha

On 4/1/20 4:40 AM, paul zimmermann wrote:
>        Dear Carlos,
> 
> I'm fine with pushing the patch without the y1 value. One might get failures
> (i.e., ulp errors > 9) on other systems.
Pushed.

We'll see how it goes for other machines and update the ULPs accordingly.

-- 
Cheers,
Carlos.


^ permalink raw reply	[flat|nested] 6+ messages in thread

end of thread, other threads:[~2020-04-01 12:28 UTC | newest]

Thread overview: 6+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2020-03-30 14:10 math: Add inputs that yield larger errors for float type paul zimmermann
2020-03-31 19:30 ` Carlos O'Donell
2020-03-31 20:37   ` Joseph Myers
2020-04-01  1:47     ` Carlos O'Donell
2020-04-01  8:40       ` paul zimmermann
2020-04-01 12:28         ` Carlos O'Donell

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).