diff --git a/SHARED-FILES b/SHARED-FILES index d32c837b46..320e0b3be9 100644 --- a/SHARED-FILES +++ b/SHARED-FILES @@ -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. diff --git a/sysdeps/aarch64/libm-test-ulps b/sysdeps/aarch64/libm-test-ulps index 09f7f1c4eb..54793bdc60 100644 --- a/sysdeps/aarch64/libm-test-ulps +++ b/sysdeps/aarch64/libm-test-ulps @@ -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": diff --git a/sysdeps/alpha/fpu/libm-test-ulps b/sysdeps/alpha/fpu/libm-test-ulps index af11a87641..5eeb6ae3b3 100644 --- a/sysdeps/alpha/fpu/libm-test-ulps +++ b/sysdeps/alpha/fpu/libm-test-ulps @@ -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": diff --git a/sysdeps/arc/fpu/libm-test-ulps b/sysdeps/arc/fpu/libm-test-ulps index ef93b0bb21..d7945e601e 100644 --- a/sysdeps/arc/fpu/libm-test-ulps +++ b/sysdeps/arc/fpu/libm-test-ulps @@ -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 diff --git a/sysdeps/arc/nofpu/libm-test-ulps b/sysdeps/arc/nofpu/libm-test-ulps index 0d2e660e09..ca7cfb7fa4 100644 --- a/sysdeps/arc/nofpu/libm-test-ulps +++ b/sysdeps/arc/nofpu/libm-test-ulps @@ -123,7 +123,6 @@ float: 1 Function: "cosh": double: 2 -float: 2 Function: Real part of "cpow": double: 2 diff --git a/sysdeps/arm/libm-test-ulps b/sysdeps/arm/libm-test-ulps index bf16818d71..4ce30d0daf 100644 --- a/sysdeps/arm/libm-test-ulps +++ b/sysdeps/arm/libm-test-ulps @@ -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 diff --git a/sysdeps/csky/fpu/libm-test-ulps b/sysdeps/csky/fpu/libm-test-ulps index f1b62e3da4..d8aad8c4ba 100644 --- a/sysdeps/csky/fpu/libm-test-ulps +++ b/sysdeps/csky/fpu/libm-test-ulps @@ -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 diff --git a/sysdeps/csky/nofpu/libm-test-ulps b/sysdeps/csky/nofpu/libm-test-ulps index 9c2bfc6a4a..8ecb31b9a4 100644 --- a/sysdeps/csky/nofpu/libm-test-ulps +++ b/sysdeps/csky/nofpu/libm-test-ulps @@ -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 diff --git a/sysdeps/hppa/fpu/libm-test-ulps b/sysdeps/hppa/fpu/libm-test-ulps index f20c59bb17..f8ad653769 100644 --- a/sysdeps/hppa/fpu/libm-test-ulps +++ b/sysdeps/hppa/fpu/libm-test-ulps @@ -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 diff --git a/sysdeps/i386/fpu/libm-test-ulps b/sysdeps/i386/fpu/libm-test-ulps index de9b783cba..865176cfc2 100644 --- a/sysdeps/i386/fpu/libm-test-ulps +++ b/sysdeps/i386/fpu/libm-test-ulps @@ -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 diff --git a/sysdeps/i386/i686/fpu/multiarch/libm-test-ulps b/sysdeps/i386/i686/fpu/multiarch/libm-test-ulps index 253dcc5ba5..ac3799e1b8 100644 --- a/sysdeps/i386/i686/fpu/multiarch/libm-test-ulps +++ b/sysdeps/i386/i686/fpu/multiarch/libm-test-ulps @@ -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 diff --git a/sysdeps/ieee754/flt-32/e_atan2f.c b/sysdeps/ieee754/flt-32/e_atan2f.c index 6c7bebc24b..82a0151293 100644 --- a/sysdeps/ieee754/flt-32/e_atan2f.c +++ b/sysdeps/ieee754/flt-32/e_atan2f.c @@ -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) diff --git a/sysdeps/ieee754/flt-32/e_coshf.c b/sysdeps/ieee754/flt-32/e_coshf.c index 052d387e42..602d2b413f 100644 --- a/sysdeps/ieee754/flt-32/e_coshf.c +++ b/sysdeps/ieee754/flt-32/e_coshf.c @@ -1,63 +1,117 @@ -/* 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 #include -#include -#include #include - -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) diff --git a/sysdeps/loongarch/lp64/libm-test-ulps b/sysdeps/loongarch/lp64/libm-test-ulps index 1e1a289169..930399cea7 100644 --- a/sysdeps/loongarch/lp64/libm-test-ulps +++ b/sysdeps/loongarch/lp64/libm-test-ulps @@ -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": diff --git a/sysdeps/microblaze/libm-test-ulps b/sysdeps/microblaze/libm-test-ulps index 77018f4f72..4814a60c55 100644 --- a/sysdeps/microblaze/libm-test-ulps +++ b/sysdeps/microblaze/libm-test-ulps @@ -118,7 +118,6 @@ float: 1 Function: "cosh": double: 1 -float: 1 Function: Real part of "cpow": double: 2 diff --git a/sysdeps/mips/mips32/libm-test-ulps b/sysdeps/mips/mips32/libm-test-ulps index 2191d57515..3f96870ac6 100644 --- a/sysdeps/mips/mips32/libm-test-ulps +++ b/sysdeps/mips/mips32/libm-test-ulps @@ -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 diff --git a/sysdeps/mips/mips64/libm-test-ulps b/sysdeps/mips/mips64/libm-test-ulps index 7d789b90ad..095ba5500d 100644 --- a/sysdeps/mips/mips64/libm-test-ulps +++ b/sysdeps/mips/mips64/libm-test-ulps @@ -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": diff --git a/sysdeps/or1k/fpu/libm-test-ulps b/sysdeps/or1k/fpu/libm-test-ulps index 357d0a6946..5553317139 100644 --- a/sysdeps/or1k/fpu/libm-test-ulps +++ b/sysdeps/or1k/fpu/libm-test-ulps @@ -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 diff --git a/sysdeps/or1k/nofpu/libm-test-ulps b/sysdeps/or1k/nofpu/libm-test-ulps index ac488ab117..3ae42e23ba 100644 --- a/sysdeps/or1k/nofpu/libm-test-ulps +++ b/sysdeps/or1k/nofpu/libm-test-ulps @@ -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 diff --git a/sysdeps/powerpc/fpu/libm-test-ulps b/sysdeps/powerpc/fpu/libm-test-ulps index 4165161ca4..e17674546f 100644 --- a/sysdeps/powerpc/fpu/libm-test-ulps +++ b/sysdeps/powerpc/fpu/libm-test-ulps @@ -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 diff --git a/sysdeps/powerpc/nofpu/libm-test-ulps b/sysdeps/powerpc/nofpu/libm-test-ulps index b13e465745..4d34e06205 100644 --- a/sysdeps/powerpc/nofpu/libm-test-ulps +++ b/sysdeps/powerpc/nofpu/libm-test-ulps @@ -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": diff --git a/sysdeps/riscv/nofpu/libm-test-ulps b/sysdeps/riscv/nofpu/libm-test-ulps index dc78136bc6..4943c1b08b 100644 --- a/sysdeps/riscv/nofpu/libm-test-ulps +++ b/sysdeps/riscv/nofpu/libm-test-ulps @@ -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": diff --git a/sysdeps/riscv/rvd/libm-test-ulps b/sysdeps/riscv/rvd/libm-test-ulps index 9477c4a101..bf6478fe7d 100644 --- a/sysdeps/riscv/rvd/libm-test-ulps +++ b/sysdeps/riscv/rvd/libm-test-ulps @@ -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": diff --git a/sysdeps/s390/fpu/libm-test-ulps b/sysdeps/s390/fpu/libm-test-ulps index d7be586adb..3b927676fb 100644 --- a/sysdeps/s390/fpu/libm-test-ulps +++ b/sysdeps/s390/fpu/libm-test-ulps @@ -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": diff --git a/sysdeps/sh/libm-test-ulps b/sysdeps/sh/libm-test-ulps index 4b308af5f5..b24ceaa903 100644 --- a/sysdeps/sh/libm-test-ulps +++ b/sysdeps/sh/libm-test-ulps @@ -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 diff --git a/sysdeps/sparc/fpu/libm-test-ulps b/sysdeps/sparc/fpu/libm-test-ulps index 324fd213d4..703797a1cb 100644 --- a/sysdeps/sparc/fpu/libm-test-ulps +++ b/sysdeps/sparc/fpu/libm-test-ulps @@ -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": diff --git a/sysdeps/x86_64/fpu/libm-test-ulps b/sysdeps/x86_64/fpu/libm-test-ulps index 8c1fafe747..62ddd1a431 100644 --- a/sysdeps/x86_64/fpu/libm-test-ulps +++ b/sysdeps/x86_64/fpu/libm-test-ulps @@ -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