| //===-- Common constants for acoshf function --------------------*- C++ -*-===// |
| // |
| // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. |
| // See https://llvm.org/LICENSE.txt for license information. |
| // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception |
| // |
| //===----------------------------------------------------------------------===// |
| |
| #ifndef LLVM_LIBC_SRC___SUPPORT_MATH_ACOSH_FLOAT_CONSTANTS_H |
| #define LLVM_LIBC_SRC___SUPPORT_MATH_ACOSH_FLOAT_CONSTANTS_H |
| |
| #include "src/__support/macros/attributes.h" |
| #include "src/__support/macros/config.h" |
| |
| namespace LIBC_NAMESPACE_DECL { |
| |
| namespace acoshf_internal { |
| |
| // Look up table for log range reduction: |
| // r(0) = 1 |
| // r(63) = 0.5 |
| // > for i from 1 to 62 do { |
| // r = 2^-7 * ceil(2^7 * (1 - 2^-7) / (1 + i * 2^-6)); |
| // print(r, ","); |
| // }; |
| LIBC_INLINE_VAR constexpr double R_LOG[64] = { |
| 0x1.0p+0, 0x1.f8p-1, 0x1.fp-1, 0x1.e8p-1, 0x1.ep-1, 0x1.d8p-1, 0x1.d4p-1, |
| 0x1.ccp-1, 0x1.c4p-1, 0x1.cp-1, 0x1.b8p-1, 0x1.b4p-1, 0x1.acp-1, 0x1.a8p-1, |
| 0x1.a4p-1, 0x1.9cp-1, 0x1.98p-1, 0x1.94p-1, 0x1.9p-1, 0x1.88p-1, 0x1.84p-1, |
| 0x1.8p-1, 0x1.7cp-1, 0x1.78p-1, 0x1.74p-1, 0x1.7p-1, 0x1.6cp-1, 0x1.68p-1, |
| 0x1.64p-1, 0x1.6p-1, 0x1.5cp-1, 0x1.58p-1, 0x1.54p-1, 0x1.5p-1, 0x1.4cp-1, |
| 0x1.4cp-1, 0x1.48p-1, 0x1.44p-1, 0x1.4p-1, 0x1.3cp-1, 0x1.3cp-1, 0x1.38p-1, |
| 0x1.34p-1, 0x1.3p-1, 0x1.3p-1, 0x1.2cp-1, 0x1.28p-1, 0x1.28p-1, 0x1.24p-1, |
| 0x1.2p-1, 0x1.2p-1, 0x1.1cp-1, 0x1.1cp-1, 0x1.18p-1, 0x1.14p-1, 0x1.14p-1, |
| 0x1.1p-1, 0x1.1p-1, 0x1.0cp-1, 0x1.0cp-1, 0x1.08p-1, 0x1.08p-1, 0x1.04p-1, |
| 0x1.0p-1}; |
| |
| // Compensated constants for exact logarithm range reduction when FMA is not |
| // available. |
| // Generated by Sollya with the formula: CD[i] = RD[i]*(1 + i*2^-6) - 1 |
| // for RD[i] defined on the table above. |
| LIBC_INLINE_VAR constexpr double C_LOG[64] = { |
| 0.0, -0x1p-12, -0x1p-10, -0x1.2p-9, -0x1p-8, -0x1.9p-8, |
| -0x1p-12, -0x1.bp-9, -0x1.cp-8, -0x1p-9, -0x1.ap-8, -0x1.1p-9, |
| -0x1.ep-8, -0x1.ep-9, -0x1p-12, -0x1.b8p-8, -0x1p-8, -0x1.6p-10, |
| 0x1p-10, -0x1.dp-8, -0x1.6p-8, -0x1p-8, -0x1.6p-9, -0x1.cp-10, |
| -0x1p-10, -0x1p-11, -0x1p-12, -0x1p-12, -0x1p-11, -0x1p-10, |
| -0x1.cp-10, -0x1.6p-9, -0x1p-8, -0x1.6p-8, -0x1.dp-8, 0x1.9p-9, |
| 0x1p-10, -0x1.6p-10, -0x1p-8, -0x1.b8p-8, 0x1.8p-9, -0x1p-12, |
| -0x1.ep-9, -0x1.ep-8, 0x1p-9, -0x1.1p-9, -0x1.ap-8, 0x1.6p-9, |
| -0x1p-9, -0x1.cp-8, 0x1p-9, -0x1.bp-9, 0x1.6p-8, -0x1p-12, |
| -0x1.9p-8, 0x1.3p-9, -0x1p-8, 0x1.2p-8, -0x1.2p-9, 0x1.88p-8, |
| -0x1p-10, 0x1.dp-8, -0x1p-12, -0x1.0p-7}; |
| |
| // Lookup table for log(r) = log(1 + n*2^(-7)) where n = 0..127. |
| LIBC_INLINE_VAR constexpr double LOG_R[64] = { |
| 0x0.0000000000000p+0, 0x1.0205658935847p-6, |
| 0x1.0415d89e74444p-5, 0x1.894aa149fb343p-5, |
| 0x1.08598b59e3a07p-4, 0x1.4d3115d207eacp-4, |
| 0x1.700d30aeac0e1p-4, 0x1.b6ac88dad5b1cp-4, |
| 0x1.fe89139dbd566p-4, 0x1.1178e8227e47cp-3, |
| 0x1.365fcb0159016p-3, 0x1.4913d8333b561p-3, |
| 0x1.6f0128b756abcp-3, 0x1.823c16551a3c2p-3, |
| 0x1.95a5adcf7017fp-3, 0x1.bd087383bd8adp-3, |
| 0x1.d1037f2655e7bp-3, 0x1.e530effe71012p-3, |
| 0x1.f991c6cb3b379p-3, 0x1.1178e8227e47cp-2, |
| 0x1.1bf99635a6b95p-2, 0x1.269621134db92p-2, |
| 0x1.314f1e1d35ce4p-2, 0x1.3c25277333184p-2, |
| 0x1.4718dc271c41bp-2, 0x1.522ae0738a3d8p-2, |
| 0x1.5d5bddf595f3p-2, 0x1.68ac83e9c6a14p-2, |
| 0x1.741d876c67bb1p-2, 0x1.7fafa3bd8151cp-2, |
| 0x1.8b639a88b2df5p-2, 0x1.973a3431356aep-2, |
| 0x1.a33440224fa79p-2, 0x1.af5295248cddp-2, |
| 0x1.bb9611b80e2fbp-2, 0x1.bb9611b80e2fbp-2, |
| 0x1.c7ff9c74554c9p-2, 0x1.d490246defa6bp-2, |
| 0x1.e148a1a2726cep-2, 0x1.ee2a156b413e5p-2, |
| 0x1.ee2a156b413e5p-2, 0x1.fb358af7a4884p-2, |
| 0x1.04360be7603adp-1, 0x1.0ae76e2d054fap-1, |
| 0x1.0ae76e2d054fap-1, 0x1.11af823c75aa8p-1, |
| 0x1.188ee40f23ca6p-1, 0x1.188ee40f23ca6p-1, |
| 0x1.1f8635fc61659p-1, 0x1.269621134db92p-1, |
| 0x1.269621134db92p-1, 0x1.2dbf557b0df43p-1, |
| 0x1.2dbf557b0df43p-1, 0x1.35028ad9d8c86p-1, |
| 0x1.3c6080c36bfb5p-1, 0x1.3c6080c36bfb5p-1, |
| 0x1.43d9ff2f923c5p-1, 0x1.43d9ff2f923c5p-1, |
| 0x1.4b6fd6f970c1fp-1, 0x1.4b6fd6f970c1fp-1, |
| 0x1.5322e26867857p-1, 0x1.5322e26867857p-1, |
| 0x1.5af405c3649ep-1, 0.0}; |
| |
| } // namespace acoshf_internal |
| |
| } // namespace LIBC_NAMESPACE_DECL |
| |
| #endif // LLVM_LIBC_SRC___SUPPORT_MATH_ACOSH_FLOAT_CONSTANTS_H |