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