1//===-- Common constants for acoshf function --------------------*- C++ -*-===//
2//
3// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
4// See https://llvm.org/LICENSE.txt for license information.
5// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
6//
7//===----------------------------------------------------------------------===//
8
9#ifndef LLVM_LIBC_SRC___SUPPORT_MATH_ACOSH_FLOAT_CONSTANTS_H
10#define LLVM_LIBC_SRC___SUPPORT_MATH_ACOSH_FLOAT_CONSTANTS_H
11
12#include "src/__support/macros/attributes.h"
13#include "src/__support/macros/config.h"
14
15namespace LIBC_NAMESPACE_DECL {
16
17namespace acoshf_internal {
18
19// Look up table for log range reduction:
20// r(0) = 1
21// r(63) = 0.5
22// > for i from 1 to 62 do {
23// r = 2^-7 * ceil(2^7 * (1 - 2^-7) / (1 + i * 2^-6));
24// print(r, ",");
25// };
26LIBC_INLINE_VAR constexpr double R_LOG[64] = {
27 0x1.0p+0, 0x1.f8p-1, 0x1.fp-1, 0x1.e8p-1, 0x1.ep-1, 0x1.d8p-1, 0x1.d4p-1,
28 0x1.ccp-1, 0x1.c4p-1, 0x1.cp-1, 0x1.b8p-1, 0x1.b4p-1, 0x1.acp-1, 0x1.a8p-1,
29 0x1.a4p-1, 0x1.9cp-1, 0x1.98p-1, 0x1.94p-1, 0x1.9p-1, 0x1.88p-1, 0x1.84p-1,
30 0x1.8p-1, 0x1.7cp-1, 0x1.78p-1, 0x1.74p-1, 0x1.7p-1, 0x1.6cp-1, 0x1.68p-1,
31 0x1.64p-1, 0x1.6p-1, 0x1.5cp-1, 0x1.58p-1, 0x1.54p-1, 0x1.5p-1, 0x1.4cp-1,
32 0x1.4cp-1, 0x1.48p-1, 0x1.44p-1, 0x1.4p-1, 0x1.3cp-1, 0x1.3cp-1, 0x1.38p-1,
33 0x1.34p-1, 0x1.3p-1, 0x1.3p-1, 0x1.2cp-1, 0x1.28p-1, 0x1.28p-1, 0x1.24p-1,
34 0x1.2p-1, 0x1.2p-1, 0x1.1cp-1, 0x1.1cp-1, 0x1.18p-1, 0x1.14p-1, 0x1.14p-1,
35 0x1.1p-1, 0x1.1p-1, 0x1.0cp-1, 0x1.0cp-1, 0x1.08p-1, 0x1.08p-1, 0x1.04p-1,
36 0x1.0p-1};
37
38// Compensated constants for exact logarithm range reduction when FMA is not
39// available.
40// Generated by Sollya with the formula: CD[i] = RD[i]*(1 + i*2^-6) - 1
41// for RD[i] defined on the table above.
42LIBC_INLINE_VAR constexpr double C_LOG[64] = {
43 0.0, -0x1p-12, -0x1p-10, -0x1.2p-9, -0x1p-8, -0x1.9p-8,
44 -0x1p-12, -0x1.bp-9, -0x1.cp-8, -0x1p-9, -0x1.ap-8, -0x1.1p-9,
45 -0x1.ep-8, -0x1.ep-9, -0x1p-12, -0x1.b8p-8, -0x1p-8, -0x1.6p-10,
46 0x1p-10, -0x1.dp-8, -0x1.6p-8, -0x1p-8, -0x1.6p-9, -0x1.cp-10,
47 -0x1p-10, -0x1p-11, -0x1p-12, -0x1p-12, -0x1p-11, -0x1p-10,
48 -0x1.cp-10, -0x1.6p-9, -0x1p-8, -0x1.6p-8, -0x1.dp-8, 0x1.9p-9,
49 0x1p-10, -0x1.6p-10, -0x1p-8, -0x1.b8p-8, 0x1.8p-9, -0x1p-12,
50 -0x1.ep-9, -0x1.ep-8, 0x1p-9, -0x1.1p-9, -0x1.ap-8, 0x1.6p-9,
51 -0x1p-9, -0x1.cp-8, 0x1p-9, -0x1.bp-9, 0x1.6p-8, -0x1p-12,
52 -0x1.9p-8, 0x1.3p-9, -0x1p-8, 0x1.2p-8, -0x1.2p-9, 0x1.88p-8,
53 -0x1p-10, 0x1.dp-8, -0x1p-12, -0x1.0p-7};
54
55// Lookup table for log(r) = log(1 + n*2^(-7)) where n = 0..127.
56LIBC_INLINE_VAR constexpr double LOG_R[64] = {
57 0x0.0000000000000p+0, 0x1.0205658935847p-6,
58 0x1.0415d89e74444p-5, 0x1.894aa149fb343p-5,
59 0x1.08598b59e3a07p-4, 0x1.4d3115d207eacp-4,
60 0x1.700d30aeac0e1p-4, 0x1.b6ac88dad5b1cp-4,
61 0x1.fe89139dbd566p-4, 0x1.1178e8227e47cp-3,
62 0x1.365fcb0159016p-3, 0x1.4913d8333b561p-3,
63 0x1.6f0128b756abcp-3, 0x1.823c16551a3c2p-3,
64 0x1.95a5adcf7017fp-3, 0x1.bd087383bd8adp-3,
65 0x1.d1037f2655e7bp-3, 0x1.e530effe71012p-3,
66 0x1.f991c6cb3b379p-3, 0x1.1178e8227e47cp-2,
67 0x1.1bf99635a6b95p-2, 0x1.269621134db92p-2,
68 0x1.314f1e1d35ce4p-2, 0x1.3c25277333184p-2,
69 0x1.4718dc271c41bp-2, 0x1.522ae0738a3d8p-2,
70 0x1.5d5bddf595f3p-2, 0x1.68ac83e9c6a14p-2,
71 0x1.741d876c67bb1p-2, 0x1.7fafa3bd8151cp-2,
72 0x1.8b639a88b2df5p-2, 0x1.973a3431356aep-2,
73 0x1.a33440224fa79p-2, 0x1.af5295248cddp-2,
74 0x1.bb9611b80e2fbp-2, 0x1.bb9611b80e2fbp-2,
75 0x1.c7ff9c74554c9p-2, 0x1.d490246defa6bp-2,
76 0x1.e148a1a2726cep-2, 0x1.ee2a156b413e5p-2,
77 0x1.ee2a156b413e5p-2, 0x1.fb358af7a4884p-2,
78 0x1.04360be7603adp-1, 0x1.0ae76e2d054fap-1,
79 0x1.0ae76e2d054fap-1, 0x1.11af823c75aa8p-1,
80 0x1.188ee40f23ca6p-1, 0x1.188ee40f23ca6p-1,
81 0x1.1f8635fc61659p-1, 0x1.269621134db92p-1,
82 0x1.269621134db92p-1, 0x1.2dbf557b0df43p-1,
83 0x1.2dbf557b0df43p-1, 0x1.35028ad9d8c86p-1,
84 0x1.3c6080c36bfb5p-1, 0x1.3c6080c36bfb5p-1,
85 0x1.43d9ff2f923c5p-1, 0x1.43d9ff2f923c5p-1,
86 0x1.4b6fd6f970c1fp-1, 0x1.4b6fd6f970c1fp-1,
87 0x1.5322e26867857p-1, 0x1.5322e26867857p-1,
88 0x1.5af405c3649ep-1, 0.0};
89
90} // namespace acoshf_internal
91
92} // namespace LIBC_NAMESPACE_DECL
93
94#endif // LLVM_LIBC_SRC___SUPPORT_MATH_ACOSH_FLOAT_CONSTANTS_H
95