]> git.ipfire.org Git - thirdparty/glibc.git/commitdiff
math: Use coshf from CORE-MATH
authorAdhemerval Zanella <adhemerval.zanella@linaro.org>
Tue, 19 Nov 2024 13:40:07 +0000 (10:40 -0300)
committerAdhemerval Zanella <adhemerval.zanella@linaro.org>
Wed, 18 Dec 2024 20:24:43 +0000 (17:24 -0300)
The CORE-MATH implementation is correctly rounded (for any rounding mode),
although it should worse performance than current one.  The current
implementation performance comes mainly from the internal usage of
the optimize expf implementation, and shows a maximum ULPs of 2 for
FE_TONEAREST and 3 for other rounding modes.

The code was adapted to glibc style and to use the definition of
math_config.h (to handle errno, overflow, and underflow).

Benchtest on x64_64 (Ryzen 9 5900X, gcc 14.2.1), aarch64 (Neoverse-N1,
gcc 13.3.1), and powerpc (POWER10, gcc 13.2.1):

Latency                      master        patched   improvement
x86_64                      40.6995        49.0737       -20.58%
x86_64v2                    40.5841        44.3604        -9.30%
x86_64v3                    39.3879        39.7502        -0.92%
i686                       112.3380       129.8570       -15.59%
aarch64 (Neoverse)          18.6914        17.0946         8.54%
power10                     11.1343        9.3245         16.25%

reciprocal-throughput        master        patched   improvement
x86_64                      18.6471        24.1077       -29.28%
x86_64v2                    17.7501        20.2946       -14.34%
x86_64v3                    17.8262        17.1877         3.58%
i686                        64.1454        86.5645       -34.95%
aarch64 (Neoverse)          9.77226        12.2314       -25.16%
power10                      4.0200        5.3316        -32.63%

Signed-off-by: Alexei Sibidanov <sibid@uvic.ca>
Signed-off-by: Paul Zimmermann <Paul.Zimmermann@inria.fr>
Signed-off-by: Adhemerval Zanella <adhemerval.zanella@linaro.org>
Reviewed-by: DJ Delorie <dj@redhat.com>
27 files changed:
SHARED-FILES
sysdeps/aarch64/libm-test-ulps
sysdeps/alpha/fpu/libm-test-ulps
sysdeps/arc/fpu/libm-test-ulps
sysdeps/arc/nofpu/libm-test-ulps
sysdeps/arm/libm-test-ulps
sysdeps/csky/fpu/libm-test-ulps
sysdeps/csky/nofpu/libm-test-ulps
sysdeps/hppa/fpu/libm-test-ulps
sysdeps/i386/fpu/libm-test-ulps
sysdeps/i386/i686/fpu/multiarch/libm-test-ulps
sysdeps/ieee754/flt-32/e_atan2f.c
sysdeps/ieee754/flt-32/e_coshf.c
sysdeps/loongarch/lp64/libm-test-ulps
sysdeps/microblaze/libm-test-ulps
sysdeps/mips/mips32/libm-test-ulps
sysdeps/mips/mips64/libm-test-ulps
sysdeps/or1k/fpu/libm-test-ulps
sysdeps/or1k/nofpu/libm-test-ulps
sysdeps/powerpc/fpu/libm-test-ulps
sysdeps/powerpc/nofpu/libm-test-ulps
sysdeps/riscv/nofpu/libm-test-ulps
sysdeps/riscv/rvd/libm-test-ulps
sysdeps/s390/fpu/libm-test-ulps
sysdeps/sh/libm-test-ulps
sysdeps/sparc/fpu/libm-test-ulps
sysdeps/x86_64/fpu/libm-test-ulps

index d32c837b469dc8a889cefff39d5eb8983cb677fd..320e0b3be95ae4217362c97c8111a4ed977860d3 100644 (file)
@@ -322,3 +322,7 @@ sysdeps/ieee754/flt-32/e_atanhf.c:
   (src/binary32/atanh/atanhf.c in CORE-MATH)
   - The code was adapted to use glibc code style and internal
     functions to handle errno, overflow, and underflow.
+sysdeps/ieee754/flt-32/e_coshf.c:
+  (src/binary32/cosh/coshf.c in CORE-MATH)
+  - the code was adapted to use glibc code style and internal
+    functions to handle errno, overflow, and underflow.
index 09f7f1c4ebef4652b3f8ecf9ece867d3425f8f64..54793bdc6043208a3f7a4d68c297d104488d6eb1 100644 (file)
@@ -774,7 +774,6 @@ ldouble: 2
 
 Function: "cosh":
 double: 2
-float: 2
 ldouble: 2
 
 Function: "cosh_advsimd":
@@ -783,7 +782,6 @@ float: 2
 
 Function: "cosh_downward":
 double: 3
-float: 1
 ldouble: 3
 
 Function: "cosh_sve":
@@ -792,12 +790,10 @@ float: 2
 
 Function: "cosh_towardzero":
 double: 3
-float: 1
 ldouble: 3
 
 Function: "cosh_upward":
 double: 2
-float: 2
 ldouble: 3
 
 Function: "cospi":
index af11a876412c5ce6940c42589b9ca54597b8c080..5eeb6ae3b39adce4becc53a73400f17dc0a92c3f 100644 (file)
@@ -621,22 +621,18 @@ ldouble: 2
 
 Function: "cosh":
 double: 2
-float: 2
 ldouble: 2
 
 Function: "cosh_downward":
 double: 3
-float: 1
 ldouble: 3
 
 Function: "cosh_towardzero":
 double: 3
-float: 1
 ldouble: 3
 
 Function: "cosh_upward":
 double: 2
-float: 2
 ldouble: 3
 
 Function: Real part of "cpow":
index ef93b0bb2111f203be21301f2874fb0ba82def97..d7945e601e9395013581c1b629d4bd125fef1546 100644 (file)
@@ -493,19 +493,15 @@ float: 2
 
 Function: "cosh":
 double: 3
-float: 3
 
 Function: "cosh_downward":
 double: 3
-float: 1
 
 Function: "cosh_towardzero":
 double: 3
-float: 1
 
 Function: "cosh_upward":
 double: 3
-float: 2
 
 Function: Real part of "cpow":
 double: 9
index 0d2e660e097dbb1e640c6a2dcc0c4aa02eef4b67..ca7cfb7fa4a526575e1235814dd35cd4bdce6732 100644 (file)
@@ -123,7 +123,6 @@ float: 1
 
 Function: "cosh":
 double: 2
-float: 2
 
 Function: Real part of "cpow":
 double: 2
index bf16818d719f87836ae2aa848f64b1e552ad2b1f..4ce30d0daf1de5fe32bf0845750053cba89b92ba 100644 (file)
@@ -84,8 +84,6 @@ float: 1
 Function: "atan":
 double: 1
 
-Function: "atan2":
-
 Function: "atan2_downward":
 double: 1
 
@@ -553,19 +551,15 @@ float: 2
 
 Function: "cosh":
 double: 2
-float: 2
 
 Function: "cosh_downward":
 double: 3
-float: 1
 
 Function: "cosh_towardzero":
 double: 3
-float: 1
 
 Function: "cosh_upward":
 double: 2
-float: 2
 
 Function: "cospi":
 double: 1
@@ -750,7 +744,7 @@ float: 2
 
 Function: Real part of "ctanh_downward":
 double: 4
-float: 2
+float: 3
 
 Function: Imaginary part of "ctanh_downward":
 double: 6
index f1b62e3da4501132704810d4655c2e7bfc6ab3ba..d8aad8c4bad43336f7719f450d011396176c5511 100644 (file)
@@ -485,19 +485,15 @@ float: 1
 
 Function: "cosh":
 double: 2
-float: 2
 
 Function: "cosh_downward":
 double: 3
-float: 1
 
 Function: "cosh_towardzero":
 double: 3
-float: 1
 
 Function: "cosh_upward":
 double: 2
-float: 2
 
 Function: Real part of "cpow":
 double: 2
index 9c2bfc6a4a3ef362ae2c000876ef9133997f08e1..8ecb31b9a46247655d46995b0ede71734d96ae2a 100644 (file)
@@ -483,19 +483,15 @@ float: 2
 
 Function: "cosh":
 double: 2
-float: 2
 
 Function: "cosh_downward":
 double: 1
-float: 1
 
 Function: "cosh_towardzero":
 double: 1
-float: 1
 
 Function: "cosh_upward":
 double: 1
-float: 2
 
 Function: Real part of "cpow":
 double: 2
index f20c59bb17415724e675d618331a0cd654d0eca7..f8ad653769fea5789ac715f064205e287bbc2560 100644 (file)
@@ -563,19 +563,15 @@ float: 2
 
 Function: "cosh":
 double: 2
-float: 2
 
 Function: "cosh_downward":
 double: 3
-float: 1
 
 Function: "cosh_towardzero":
 double: 3
-float: 1
 
 Function: "cosh_upward":
 double: 2
-float: 2
 
 Function: "cospi":
 double: 1
index de9b783cba9155711acaab502db88982d63e168f..865176cfc2dd3603108a52c50d11c4dbda565645 100644 (file)
@@ -850,25 +850,21 @@ ldouble: 2
 
 Function: "cosh":
 double: 1
-float: 2
 float128: 2
 ldouble: 3
 
 Function: "cosh_downward":
 double: 3
-float: 1
 float128: 3
 ldouble: 3
 
 Function: "cosh_towardzero":
 double: 3
-float: 1
 float128: 3
 ldouble: 3
 
 Function: "cosh_upward":
 double: 4
-float: 2
 float128: 3
 ldouble: 3
 
index 253dcc5ba5c8e362d9d3274eed9b599009e21a57..ac3799e1b89a7810801c2acb60fa8aa07119cd80 100644 (file)
@@ -850,25 +850,21 @@ ldouble: 2
 
 Function: "cosh":
 double: 1
-float: 2
 float128: 2
 ldouble: 3
 
 Function: "cosh_downward":
 double: 3
-float: 1
 float128: 3
 ldouble: 3
 
 Function: "cosh_towardzero":
 double: 3
-float: 1
 float128: 3
 ldouble: 3
 
 Function: "cosh_upward":
 double: 4
-float: 2
 float128: 3
 ldouble: 3
 
index 6c7bebc24ba4933fc41ef1dd2cf42911f9797f6d..82a0151293cda9cf89d6a18b6f8b35d4fdaeddd4 100644 (file)
@@ -130,9 +130,9 @@ __ieee754_atan2f (float y, float x)
       if (yinf & xinf)
        {
          if (ux >> 31)
-           return 0x1.2d97c7f3321d2p+1 * sgn[uy >> 31];
+           return 0x1.2d97c7f3321d2p+1 * sgn[uy >> 31]; /* +/-3pi/4 */
          else
-           return 0x1.921fb54442d18p-1 * sgn[uy >> 31];
+           return 0x1.921fb54442d18p-1 * sgn[uy >> 31]; /* +/-pi/4 */
        }
       if (xinf)
        {
@@ -146,7 +146,7 @@ __ieee754_atan2f (float y, float x)
     }
   if (__glibc_unlikely (ay == 0))
     {
-      if (__glibc_unlikely (!(ay | ax)))
+      if (__glibc_unlikely (!ax))
        {
          uint32_t i = (uy >> 31) * 4 + (ux >> 31) * 2;
          if (ux >> 31)
index 052d387e42217aeaf5c6cc9f8ab9faca4e561104..602d2b413fce05831b8f88c1195a9f197d5e6fc5 100644 (file)
-/* e_coshf.c -- float version of e_cosh.c.
- */
+/* Correctly-rounded hyperbolic cosine function for binary32 value.
 
-/*
- * ====================================================
- * Copyright (C) 1993 by Sun Microsystems, Inc. All rights reserved.
- *
- * Developed at SunPro, a Sun Microsystems, Inc. business.
- * Permission to use, copy, modify, and distribute this
- * software is freely granted, provided that this notice
- * is preserved.
- * ====================================================
- */
+Copyright (c) 2022-2024 Alexei Sibidanov.
 
+The original version of this file was copied from the CORE-MATH
+project (file src/binary32/cosh/coshf.c, revision 5c58ea1).
+
+Permission is hereby granted, free of charge, to any person obtaining a copy
+of this software and associated documentation files (the "Software"), to deal
+in the Software without restriction, including without limitation the rights
+to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
+copies of the Software, and to permit persons to whom the Software is
+furnished to do so, subject to the following conditions:
+
+The above copyright notice and this permission notice shall be included in all
+copies or substantial portions of the Software.
+
+THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
+AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
+SOFTWARE.
+*/
+
+#include <stdint.h>
 #include <math.h>
-#include <math-narrow-eval.h>
-#include <math_private.h>
 #include <libm-alias-finite.h>
-
-static const float huge = 1.0e30;
-static const float one = 1.0, half=0.5;
+#include "math_config.h"
 
 float
 __ieee754_coshf (float x)
 {
-       float t,w;
-       int32_t ix;
-
-       GET_FLOAT_WORD(ix,x);
-       ix &= 0x7fffffff;
-
-    /* |x| in [0,22] */
-       if (ix < 0x41b00000) {
-           /* |x| in [0,0.5*ln2], return 1+expm1(|x|)^2/(2*exp(|x|)) */
-               if(ix<0x3eb17218) {
-                   if (ix<0x24000000) return one;      /* cosh(tiny) = 1 */
-                   t = __expm1f(fabsf(x));
-                   w = one+t;
-                   return one+(t*t)/(w+w);
-               }
-
-           /* |x| in [0.5*ln2,22], return (exp(|x|)+1/exp(|x|)/2; */
-               t = __ieee754_expf(fabsf(x));
-               return half*t+half/t;
+  static const double c[] =
+    {
+      1, 0x1.62e42fef4c4e7p-6, 0x1.ebfd1b232f475p-13, 0x1.c6b19384ecd93p-20
+    };
+  static const double ch[] =
+    {
+      1,                     0x1.62e42fefa39efp-6,  0x1.ebfbdff82c58fp-13,
+      0x1.c6b08d702e0edp-20, 0x1.3b2ab6fb92e5ep-27, 0x1.5d886e6d54203p-35,
+      0x1.430976b8ce6efp-43
+    };
+  static const uint64_t tb[] =
+    {
+      0x3fe0000000000000, 0x3fe059b0d3158574, 0x3fe0b5586cf9890f,
+      0x3fe11301d0125b51, 0x3fe172b83c7d517b, 0x3fe1d4873168b9aa,
+      0x3fe2387a6e756238, 0x3fe29e9df51fdee1, 0x3fe306fe0a31b715,
+      0x3fe371a7373aa9cb, 0x3fe3dea64c123422, 0x3fe44e086061892d,
+      0x3fe4bfdad5362a27, 0x3fe5342b569d4f82, 0x3fe5ab07dd485429,
+      0x3fe6247eb03a5585, 0x3fe6a09e667f3bcd, 0x3fe71f75e8ec5f74,
+      0x3fe7a11473eb0187, 0x3fe82589994cce13, 0x3fe8ace5422aa0db,
+      0x3fe93737b0cdc5e5, 0x3fe9c49182a3f090, 0x3fea5503b23e255d,
+      0x3feae89f995ad3ad, 0x3feb7f76f2fb5e47, 0x3fec199bdd85529c,
+      0x3fecb720dcef9069, 0x3fed5818dcfba487, 0x3fedfc97337b9b5f,
+      0x3feea4afa2a490da, 0x3fef50765b6e4540
+    };
+  const double iln2 = 0x1.71547652b82fep+5;
+  double z = x;
+  uint32_t ax = asuint (x) << 1;
+  if (__glibc_unlikely (ax > 0x8565a9f8u))
+    { /* |x| >~ 89.4 */
+      if (ax >= 0xff000000u)
+       {
+         if (ax << 8)
+           return x + x;  /* nan */
+         return INFINITY; /* +-inf */
        }
-
-    /* |x| in [22, log(maxdouble)] return half*exp(|x|) */
-       if (ix < 0x42b17180)  return half*__ieee754_expf(fabsf(x));
-
-    /* |x| in [log(maxdouble), overflowthresold] */
-       if (ix<=0x42b2d4fc) {
-           w = __ieee754_expf(half*fabsf(x));
-           t = half*w;
-           return t*w;
+      return __math_oflowf (0);
+    }
+  if (__glibc_unlikely (ax < 0x7c000000u))
+    { /* |x| < 0.125 */
+      if (__glibc_unlikely (ax < 0x74000000u))
+       {                                          /* |x| < 0x1p-11 */
+         if (__glibc_unlikely (ax < 0x66000000u)) /* |x| < 0x1p-24 */
+           return fmaf (fabsf (x), 0x1p-25, 1.0f);
+         return (0.5f * x) * x + 1.0f;
        }
-
-    /* x is INF or NaN */
-       if(ix>=0x7f800000) return x*x;
-
-    /* |x| > overflowthresold, cosh(x) overflow */
-       return math_narrow_eval (huge*huge);
+      static const double cp[] =
+       {
+         0x1.fffffffffffe3p-2,  0x1.55555555723cfp-5,
+         0x1.6c16bee4a5986p-10, 0x1.a0483fc0328f7p-16
+       };
+      double z2 = z * z;
+      double z4 = z2 * z2;
+      return 1.0 + z2 * ((cp[0] + z2 * cp[1]) + z4 * (cp[2] + z2 * (cp[3])));
+    }
+  double a = iln2 * z;
+  double ia = roundeven_finite (a);
+  double h = a - ia;
+  double h2 = h * h;
+  int64_t jp = asuint64 (ia + 0x1.8p52);
+  int64_t jm = -jp;
+  double sp = asdouble (tb[jp & 31] + ((jp >> 5) << 52));
+  double sm = asdouble (tb[jm & 31] + ((jm >> 5) << 52));
+  double te = c[0] + h2 * c[2];
+  double to = (c[1] + h2 * c[3]);
+  double rp = sp * (te + h * to);
+  double rm = sm * (te - h * to);
+  double r = rp + rm;
+  float ub = r;
+  double lb = r - 1.45e-10 * r;
+  if (__glibc_unlikely (ub != lb))
+    {
+      const double iln2h = 0x1.7154765p+5;
+      const double iln2l = 0x1.5c17f0bbbe88p-26;
+      h = (iln2h * z - ia) + iln2l * z;
+      h2 = h * h;
+      te = ch[0] + h2 * ch[2] + (h2 * h2) * (ch[4] + h2 * ch[6]);
+      to = ch[1] + h2 * (ch[3] + h2 * ch[5]);
+      r = sp * (te + h * to) + sm * (te - h * to);
+      ub = r;
+    }
+  return ub;
 }
 libm_alias_finite (__ieee754_coshf, __coshf)
index 1e1a2891693530aadb5f517b93e0c76159b032fc..930399cea712e504658a0ebd5a2edc2bb741dedc 100644 (file)
@@ -621,22 +621,18 @@ ldouble: 2
 
 Function: "cosh":
 double: 2
-float: 2
 ldouble: 2
 
 Function: "cosh_downward":
 double: 3
-float: 1
 ldouble: 3
 
 Function: "cosh_towardzero":
 double: 3
-float: 1
 ldouble: 3
 
 Function: "cosh_upward":
 double: 2
-float: 2
 ldouble: 3
 
 Function: Real part of "cpow":
index 77018f4f722f423d17300ba68dd5c87b703abdeb..4814a60c555f9bcd052b760c6a6ea73950e25a90 100644 (file)
@@ -118,7 +118,6 @@ float: 1
 
 Function: "cosh":
 double: 1
-float: 1
 
 Function: Real part of "cpow":
 double: 2
index 2191d575153895009b0a14c5b9b67b105e03473c..3f96870ac6a6979c3506c00bfdf28fe9c01af675 100644 (file)
@@ -489,19 +489,15 @@ float: 2
 
 Function: "cosh":
 double: 2
-float: 2
 
 Function: "cosh_downward":
 double: 3
-float: 1
 
 Function: "cosh_towardzero":
 double: 3
-float: 1
 
 Function: "cosh_upward":
 double: 2
-float: 2
 
 Function: Real part of "cpow":
 double: 2
index 7d789b90ade9d80382d7e820f290379c9a21e01e..095ba5500ddb395891dafb6947fbdd9675e32665 100644 (file)
@@ -621,22 +621,18 @@ ldouble: 2
 
 Function: "cosh":
 double: 2
-float: 2
 ldouble: 2
 
 Function: "cosh_downward":
 double: 3
-float: 1
 ldouble: 3
 
 Function: "cosh_towardzero":
 double: 3
-float: 1
 ldouble: 3
 
 Function: "cosh_upward":
 double: 2
-float: 2
 ldouble: 3
 
 Function: Real part of "cpow":
index 357d0a69463486258b0ca675d6b5d42dd786265f..5553317139c408cd0c7c026eae0fb14bbd1a6ca0 100644 (file)
@@ -489,19 +489,15 @@ float: 1
 
 Function: "cosh":
 double: 2
-float: 2
 
 Function: "cosh_downward":
 double: 3
-float: 1
 
 Function: "cosh_towardzero":
 double: 3
-float: 1
 
 Function: "cosh_upward":
 double: 2
-float: 2
 
 Function: Real part of "cpow":
 double: 2
index ac488ab117e57c5ac0315053d26d38af6ca242c6..3ae42e23ba2daea55e68c1dfca011d33a0e12f62 100644 (file)
@@ -505,19 +505,15 @@ float: 1
 
 Function: "cosh":
 double: 2
-float: 2
 
 Function: "cosh_downward":
 double: 2
-float: 1
 
 Function: "cosh_towardzero":
 double: 2
-float: 1
 
 Function: "cosh_upward":
 double: 2
-float: 2
 
 Function: "cospi":
 double: 1
index 4165161ca414b2beb06c668703bcb6c81a6a2122..e17674546f0f1585cb80229a9bfd1d321684895a 100644 (file)
@@ -854,25 +854,21 @@ ldouble: 5
 
 Function: "cosh":
 double: 2
-float: 2
 float128: 2
 ldouble: 3
 
 Function: "cosh_downward":
 double: 3
-float: 1
 float128: 3
 ldouble: 6
 
 Function: "cosh_towardzero":
 double: 3
-float: 1
 float128: 3
 ldouble: 6
 
 Function: "cosh_upward":
 double: 2
-float: 2
 float128: 3
 ldouble: 2
 
index b13e465745c2ee527fa93ab7ca97f9a60fe5399d..4d34e06205343a26b410e997c4e7bd44e3abe9fe 100644 (file)
@@ -625,22 +625,18 @@ ldouble: 5
 
 Function: "cosh":
 double: 2
-float: 2
 ldouble: 3
 
 Function: "cosh_downward":
 double: 3
-float: 1
 ldouble: 6
 
 Function: "cosh_towardzero":
 double: 3
-float: 1
 ldouble: 6
 
 Function: "cosh_upward":
 double: 2
-float: 2
 ldouble: 2
 
 Function: Real part of "cpow":
index dc78136bc6e04149c0de27a92786843e879f32e9..4943c1b08bd8625ac293d09e49c3cc9b2ab00955 100644 (file)
@@ -618,22 +618,18 @@ ldouble: 2
 
 Function: "cosh":
 double: 2
-float: 2
 ldouble: 2
 
 Function: "cosh_downward":
 double: 1
-float: 1
 ldouble: 2
 
 Function: "cosh_towardzero":
 double: 1
-float: 1
 ldouble: 2
 
 Function: "cosh_upward":
 double: 1
-float: 2
 ldouble: 3
 
 Function: Real part of "cpow":
index 9477c4a1015974adf62bff9a018f6becec516641..bf6478fe7dd976e81b61032a2bc4d9c609fcc33e 100644 (file)
@@ -621,22 +621,18 @@ ldouble: 2
 
 Function: "cosh":
 double: 2
-float: 2
 ldouble: 2
 
 Function: "cosh_downward":
 double: 3
-float: 1
 ldouble: 3
 
 Function: "cosh_towardzero":
 double: 3
-float: 1
 ldouble: 3
 
 Function: "cosh_upward":
 double: 2
-float: 2
 ldouble: 3
 
 Function: Real part of "cpow":
index d7be586adbdb5054e2b1b45936401ac04fbc4259..3b927676fb2527d238bfd1bceebcec3ca6915470 100644 (file)
@@ -621,22 +621,18 @@ ldouble: 2
 
 Function: "cosh":
 double: 2
-float: 2
 ldouble: 2
 
 Function: "cosh_downward":
 double: 3
-float: 1
 ldouble: 3
 
 Function: "cosh_towardzero":
 double: 3
-float: 1
 ldouble: 3
 
 Function: "cosh_upward":
 double: 2
-float: 2
 ldouble: 3
 
 Function: "cospi":
index 4b308af5f5669eb72f65d8aed0f8e8bbaff505ef..b24ceaa90313aa4af7319e112d932deb809f1973 100644 (file)
@@ -241,11 +241,9 @@ float: 1
 
 Function: "cosh":
 double: 2
-float: 2
 
 Function: "cosh_towardzero":
 double: 3
-float: 1
 
 Function: Real part of "cpow":
 double: 2
index 324fd213d4366f284c535efa3b45800cbbdf5b84..703797a1cb0d2a7fbed6c0c0cfeb0eb40519db0d 100644 (file)
@@ -621,22 +621,18 @@ ldouble: 2
 
 Function: "cosh":
 double: 2
-float: 2
 ldouble: 2
 
 Function: "cosh_downward":
 double: 3
-float: 1
 ldouble: 3
 
 Function: "cosh_towardzero":
 double: 3
-float: 1
 ldouble: 3
 
 Function: "cosh_upward":
 double: 2
-float: 2
 ldouble: 3
 
 Function: "cospi":
index 8c1fafe747763ca2ef2f2d463d5286945bb3fb70..62ddd1a43135866b2df968b378a9ab3badcf49f1 100644 (file)
@@ -1026,25 +1026,21 @@ float: 1
 
 Function: "cosh":
 double: 2
-float: 2
 float128: 2
 ldouble: 3
 
 Function: "cosh_downward":
 double: 3
-float: 1
 float128: 3
 ldouble: 3
 
 Function: "cosh_towardzero":
 double: 3
-float: 1
 float128: 3
 ldouble: 3
 
 Function: "cosh_upward":
 double: 2
-float: 2
 float128: 3
 ldouble: 3
 
@@ -1342,7 +1338,7 @@ ldouble: 2
 
 Function: Real part of "ctanh_downward":
 double: 4
-float: 2
+float: 3
 float128: 5
 ldouble: 4