math: Add inputs that yield larger errors for float type

Carlos O'Donell carlos@redhat.com
Tue Mar 31 19:30:04 GMT 2020


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.



More information about the Libc-alpha mailing list