| 1 | //===-- Range reduction for double precision sin/cos/tan --------*- 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_RANGE_REDUCTION_DOUBLE_NOFMA_H |
| 10 | #define LLVM_LIBC_SRC___SUPPORT_MATH_RANGE_REDUCTION_DOUBLE_NOFMA_H |
| 11 | |
| 12 | #include "src/__support/FPUtil/FPBits.h" |
| 13 | #include "src/__support/FPUtil/double_double.h" |
| 14 | #include "src/__support/FPUtil/multiply_add.h" |
| 15 | #include "src/__support/FPUtil/nearest_integer.h" |
| 16 | #include "src/__support/common.h" |
| 17 | #include "src/__support/macros/config.h" |
| 18 | #include "src/__support/macros/optimization.h" |
| 19 | #include "src/__support/math/range_reduction_double_common.h" |
| 20 | |
| 21 | namespace LIBC_NAMESPACE_DECL { |
| 22 | |
| 23 | namespace math { |
| 24 | |
| 25 | namespace range_reduction_double_internal { |
| 26 | |
| 27 | using fputil::DoubleDouble; |
| 28 | |
| 29 | LIBC_INLINE unsigned LargeRangeReduction::fast(double x, DoubleDouble &u) { |
| 30 | using FPBits = typename fputil::FPBits<double>; |
| 31 | FPBits xbits(x); |
| 32 | |
| 33 | int x_e_m62 = xbits.get_biased_exponent() - (FPBits::EXP_BIAS + 62); |
| 34 | idx = static_cast<unsigned>((x_e_m62 >> 4) + 3); |
| 35 | // Scale x down by 2^(-(16 * (idx - 3)) |
| 36 | xbits.set_biased_exponent((x_e_m62 & 15) + FPBits::EXP_BIAS + 62); |
| 37 | // 2^62 <= |x_reduced| < 2^(62 + 16) = 2^78 |
| 38 | x_reduced = xbits.get_val(); |
| 39 | // x * c_hi = ph.hi + ph.lo exactly. |
| 40 | DoubleDouble x_split = fputil::split(a: x_reduced); |
| 41 | DoubleDouble ph = fputil::exact_mult<double, SPLIT>( |
| 42 | as: x_split, a: x_reduced, b: ONE_TWENTY_EIGHT_OVER_PI[idx][0]); |
| 43 | // x * c_mid = pm.hi + pm.lo exactly. |
| 44 | DoubleDouble pm = fputil::exact_mult<double, SPLIT>( |
| 45 | as: x_split, a: x_reduced, b: ONE_TWENTY_EIGHT_OVER_PI[idx][1]); |
| 46 | // x * c_lo = pl.hi + pl.lo exactly. |
| 47 | DoubleDouble pl = fputil::exact_mult<double, SPLIT>( |
| 48 | as: x_split, a: x_reduced, b: ONE_TWENTY_EIGHT_OVER_PI[idx][2]); |
| 49 | // Extract integral parts and fractional parts of (ph.lo + pm.hi). |
| 50 | double sum_hi = ph.lo + pm.hi; |
| 51 | double kd = fputil::nearest_integer(x: sum_hi); |
| 52 | |
| 53 | // x * 128/pi mod 1 ~ y_hi + y_mid + y_lo |
| 54 | y_hi = (ph.lo - kd) + pm.hi; // Exact |
| 55 | y_mid = fputil::exact_add(a: pm.lo, b: pl.hi); |
| 56 | y_lo = pl.lo; |
| 57 | |
| 58 | // y_l = x * c_lo_2 + pl.lo |
| 59 | double y_l = |
| 60 | fputil::multiply_add(x: x_reduced, y: ONE_TWENTY_EIGHT_OVER_PI[idx][3], z: y_lo); |
| 61 | DoubleDouble y = fputil::exact_add(a: y_hi, b: y_mid.hi); |
| 62 | y.lo += (y_mid.lo + y_l); |
| 63 | |
| 64 | // Digits of pi/128, generated by Sollya with: |
| 65 | // > a = round(pi/128, D, RN); |
| 66 | // > b = round(pi/128 - a, D, RN); |
| 67 | constexpr DoubleDouble PI_OVER_128_DD = {.lo: 0x1.1a62633145c07p-60, |
| 68 | .hi: 0x1.921fb54442d18p-6}; |
| 69 | |
| 70 | // Error bound: with {a} denote the fractional part of a, i.e.: |
| 71 | // {a} = a - round(a) |
| 72 | // Then, |
| 73 | // | {x * 128/pi} - (y_hi + y_lo) | <= ulp(ulp(y_hi)) <= 2^-105 |
| 74 | // | {x mod pi/128} - (u.hi + u.lo) | < 2 * 2^-6 * 2^-105 = 2^-110 |
| 75 | u = fputil::quick_mult<SPLIT>(a: y, b: PI_OVER_128_DD); |
| 76 | |
| 77 | return static_cast<unsigned>(static_cast<int64_t>(kd)); |
| 78 | } |
| 79 | |
| 80 | // Lookup table for sin(k * pi / 128) with k = 0, ..., 255. |
| 81 | // Table is generated with Sollya as follow: |
| 82 | // > display = hexadecimal; |
| 83 | // > for k from 0 to 255 do { |
| 84 | // a = round(sin(k * pi/128), 51, RN); |
| 85 | // b = round(sin(k * pi/128) - a, D, RN); |
| 86 | // print("{", b, ",", a, "},"); |
| 87 | // }; |
| 88 | LIBC_INLINE_VAR constexpr DoubleDouble SIN_K_PI_OVER_128[] = { |
| 89 | {.lo: 0, .hi: 0}, |
| 90 | {.lo: 0x1.f938a73db97fbp-58, .hi: 0x1.92155f7a3667cp-6}, |
| 91 | {.lo: -0x1.912bd0d569a9p-61, .hi: 0x1.91f65f10dd814p-5}, |
| 92 | {.lo: 0x1.ccbeeeae8129ap-56, .hi: 0x1.2d52092ce19f4p-4}, |
| 93 | {.lo: -0x1.e2718d26ed688p-60, .hi: 0x1.917a6bc29b42cp-4}, |
| 94 | {.lo: -0x1.cbb1f71aca352p-56, .hi: 0x1.f564e56a9731p-4}, |
| 95 | {.lo: -0x1.dd9ffeaecbdc4p-55, .hi: 0x1.2c8106e8e613cp-3}, |
| 96 | {.lo: -0x1.ab3802218894fp-55, .hi: 0x1.5e214448b3fc8p-3}, |
| 97 | {.lo: -0x1.49b466e7fe36p-55, .hi: 0x1.8f8b83c69a60cp-3}, |
| 98 | {.lo: -0x1.035e2873ca432p-55, .hi: 0x1.c0b826a7e4f64p-3}, |
| 99 | {.lo: -0x1.50b7bbc4768b1p-55, .hi: 0x1.f19f97b215f1cp-3}, |
| 100 | {.lo: -0x1.3ed9efaa42ab3p-55, .hi: 0x1.111d262b1f678p-2}, |
| 101 | {.lo: 0x1.a8b5c974ee7b5p-54, .hi: 0x1.294062ed59f04p-2}, |
| 102 | {.lo: 0x1.4325f12be8946p-54, .hi: 0x1.4135c941766p-2}, |
| 103 | {.lo: 0x1.fc2047e54e614p-55, .hi: 0x1.58f9a75ab1fdcp-2}, |
| 104 | {.lo: -0x1.512c678219317p-54, .hi: 0x1.7088530fa45ap-2}, |
| 105 | {.lo: -0x1.2e59dba7ab4c2p-54, .hi: 0x1.87de2a6aea964p-2}, |
| 106 | {.lo: -0x1.d24afdade848bp-54, .hi: 0x1.9ef7943a8ed8cp-2}, |
| 107 | {.lo: 0x1.5b362cb974183p-57, .hi: 0x1.b5d1009e15ccp-2}, |
| 108 | {.lo: -0x1.e97af1a63c807p-54, .hi: 0x1.cc66e9931c46p-2}, |
| 109 | {.lo: -0x1.c3e4edc5872f8p-55, .hi: 0x1.e2b5d3806f63cp-2}, |
| 110 | {.lo: 0x1.fb44f80f92225p-54, .hi: 0x1.f8ba4dbf89ab8p-2}, |
| 111 | {.lo: 0x1.9697faf2e2fe5p-53, .hi: 0x1.073879922ffecp-1}, |
| 112 | {.lo: -0x1.7bc8eda6af93cp-53, .hi: 0x1.11eb3541b4b24p-1}, |
| 113 | {.lo: 0x1.b25dd267f66p-55, .hi: 0x1.1c73b39ae68c8p-1}, |
| 114 | {.lo: -0x1.5769d0fbcddc3p-53, .hi: 0x1.26d054cdd12ep-1}, |
| 115 | {.lo: 0x1.c20673b2116b2p-54, .hi: 0x1.30ff7fce17034p-1}, |
| 116 | {.lo: 0x1.3c7c4bc72a92cp-53, .hi: 0x1.3affa292050b8p-1}, |
| 117 | {.lo: -0x1.e7f895d302395p-53, .hi: 0x1.44cf325091dd8p-1}, |
| 118 | {.lo: 0x1.13c293edceb32p-53, .hi: 0x1.4e6cabbe3e5e8p-1}, |
| 119 | {.lo: -0x1.75720992bfbb2p-55, .hi: 0x1.57d69348cecap-1}, |
| 120 | {.lo: -0x1.24a366a5fe547p-53, .hi: 0x1.610b7551d2cep-1}, |
| 121 | {.lo: 0x1.21165f626cdd5p-54, .hi: 0x1.6a09e667f3bccp-1}, |
| 122 | {.lo: -0x1.bcac43c389ba9p-53, .hi: 0x1.72d0837efff98p-1}, |
| 123 | {.lo: -0x1.21ea6f59be15bp-53, .hi: 0x1.7b5df226aafbp-1}, |
| 124 | {.lo: 0x1.d217be0e2b971p-53, .hi: 0x1.83b0e0bff976cp-1}, |
| 125 | {.lo: 0x1.69d0f6897664ap-54, .hi: 0x1.8bc806b15174p-1}, |
| 126 | {.lo: -0x1.615f32b6f907ap-54, .hi: 0x1.93a22499263fcp-1}, |
| 127 | {.lo: 0x1.6788ebcc76dc6p-54, .hi: 0x1.9b3e047f3874p-1}, |
| 128 | {.lo: 0x1.ddae89fd441d1p-53, .hi: 0x1.a29a7a046278p-1}, |
| 129 | {.lo: -0x1.f98273c5d2495p-54, .hi: 0x1.a9b66290ea1a4p-1}, |
| 130 | {.lo: -0x1.926da300ffccep-55, .hi: 0x1.b090a581502p-1}, |
| 131 | {.lo: 0x1.90e58336c64a8p-53, .hi: 0x1.b728345196e3cp-1}, |
| 132 | {.lo: 0x1.9f6963354e3fep-53, .hi: 0x1.bd7c0ac6f9528p-1}, |
| 133 | {.lo: 0x1.a47d3a2a0dcbep-54, .hi: 0x1.c38b2f180bdbp-1}, |
| 134 | {.lo: 0x1.ed0489e16b9ap-54, .hi: 0x1.c954b213411f4p-1}, |
| 135 | {.lo: -0x1.0f3db5dad5ac5p-53, .hi: 0x1.ced7af43cc774p-1}, |
| 136 | {.lo: 0x1.ac42b5a8b6943p-53, .hi: 0x1.d4134d14dc938p-1}, |
| 137 | {.lo: -0x1.d75033dfb9ca8p-53, .hi: 0x1.d906bcf328d48p-1}, |
| 138 | {.lo: 0x1.83c37c6107db3p-55, .hi: 0x1.ddb13b6ccc23cp-1}, |
| 139 | {.lo: 0x1.7f59c49f6cd6dp-54, .hi: 0x1.e212104f686e4p-1}, |
| 140 | {.lo: 0x1.ee94a90d7b88bp-53, .hi: 0x1.e6288ec48e11p-1}, |
| 141 | {.lo: -0x1.a27d3874701f9p-53, .hi: 0x1.e9f4156c62ddcp-1}, |
| 142 | {.lo: -0x1.85f4e1b8298dp-54, .hi: 0x1.ed740e7684964p-1}, |
| 143 | {.lo: -0x1.ab4e148e52d9ep-54, .hi: 0x1.f0a7efb9230d8p-1}, |
| 144 | {.lo: 0x1.8a11412b82346p-54, .hi: 0x1.f38f3ac64e588p-1}, |
| 145 | {.lo: 0x1.562172a361fd3p-56, .hi: 0x1.f6297cff75cbp-1}, |
| 146 | {.lo: 0x1.3564acef1ff97p-53, .hi: 0x1.f8764fa714ba8p-1}, |
| 147 | {.lo: -0x1.5e82a3284d5c8p-53, .hi: 0x1.fa7557f08a518p-1}, |
| 148 | {.lo: -0x1.709bccb89a989p-54, .hi: 0x1.fc26470e19fd4p-1}, |
| 149 | {.lo: 0x1.9e082721dfb8ep-53, .hi: 0x1.fd88da3d12524p-1}, |
| 150 | {.lo: -0x1.eade132f3981dp-53, .hi: 0x1.fe9cdad01883cp-1}, |
| 151 | {.lo: 0x1.e3a843d1db55fp-53, .hi: 0x1.ff621e3796d7cp-1}, |
| 152 | {.lo: 0x1.765595d548d9ap-54, .hi: 0x1.ffd886084cd0cp-1}, |
| 153 | {.lo: 0, .hi: 1}, |
| 154 | #ifndef LIBC_MATH_HAS_SMALL_TABLES |
| 155 | {.lo: 0x1.765595d548d9ap-54, .hi: 0x1.ffd886084cd0cp-1}, |
| 156 | {.lo: 0x1.e3a843d1db55fp-53, .hi: 0x1.ff621e3796d7cp-1}, |
| 157 | {.lo: -0x1.eade132f3981dp-53, .hi: 0x1.fe9cdad01883cp-1}, |
| 158 | {.lo: 0x1.9e082721dfb8ep-53, .hi: 0x1.fd88da3d12524p-1}, |
| 159 | {.lo: -0x1.709bccb89a989p-54, .hi: 0x1.fc26470e19fd4p-1}, |
| 160 | {.lo: -0x1.5e82a3284d5c8p-53, .hi: 0x1.fa7557f08a518p-1}, |
| 161 | {.lo: 0x1.3564acef1ff97p-53, .hi: 0x1.f8764fa714ba8p-1}, |
| 162 | {.lo: 0x1.562172a361fd3p-56, .hi: 0x1.f6297cff75cbp-1}, |
| 163 | {.lo: 0x1.8a11412b82346p-54, .hi: 0x1.f38f3ac64e588p-1}, |
| 164 | {.lo: -0x1.ab4e148e52d9ep-54, .hi: 0x1.f0a7efb9230d8p-1}, |
| 165 | {.lo: -0x1.85f4e1b8298dp-54, .hi: 0x1.ed740e7684964p-1}, |
| 166 | {.lo: -0x1.a27d3874701f9p-53, .hi: 0x1.e9f4156c62ddcp-1}, |
| 167 | {.lo: 0x1.ee94a90d7b88bp-53, .hi: 0x1.e6288ec48e11p-1}, |
| 168 | {.lo: 0x1.7f59c49f6cd6dp-54, .hi: 0x1.e212104f686e4p-1}, |
| 169 | {.lo: 0x1.83c37c6107db3p-55, .hi: 0x1.ddb13b6ccc23cp-1}, |
| 170 | {.lo: -0x1.d75033dfb9ca8p-53, .hi: 0x1.d906bcf328d48p-1}, |
| 171 | {.lo: 0x1.ac42b5a8b6943p-53, .hi: 0x1.d4134d14dc938p-1}, |
| 172 | {.lo: -0x1.0f3db5dad5ac5p-53, .hi: 0x1.ced7af43cc774p-1}, |
| 173 | {.lo: 0x1.ed0489e16b9ap-54, .hi: 0x1.c954b213411f4p-1}, |
| 174 | {.lo: 0x1.a47d3a2a0dcbep-54, .hi: 0x1.c38b2f180bdbp-1}, |
| 175 | {.lo: 0x1.9f6963354e3fep-53, .hi: 0x1.bd7c0ac6f9528p-1}, |
| 176 | {.lo: 0x1.90e58336c64a8p-53, .hi: 0x1.b728345196e3cp-1}, |
| 177 | {.lo: -0x1.926da300ffccep-55, .hi: 0x1.b090a581502p-1}, |
| 178 | {.lo: -0x1.f98273c5d2495p-54, .hi: 0x1.a9b66290ea1a4p-1}, |
| 179 | {.lo: 0x1.ddae89fd441d1p-53, .hi: 0x1.a29a7a046278p-1}, |
| 180 | {.lo: 0x1.6788ebcc76dc6p-54, .hi: 0x1.9b3e047f3874p-1}, |
| 181 | {.lo: -0x1.615f32b6f907ap-54, .hi: 0x1.93a22499263fcp-1}, |
| 182 | {.lo: 0x1.69d0f6897664ap-54, .hi: 0x1.8bc806b15174p-1}, |
| 183 | {.lo: 0x1.d217be0e2b971p-53, .hi: 0x1.83b0e0bff976cp-1}, |
| 184 | {.lo: -0x1.21ea6f59be15bp-53, .hi: 0x1.7b5df226aafbp-1}, |
| 185 | {.lo: -0x1.bcac43c389ba9p-53, .hi: 0x1.72d0837efff98p-1}, |
| 186 | {.lo: 0x1.21165f626cdd5p-54, .hi: 0x1.6a09e667f3bccp-1}, |
| 187 | {.lo: -0x1.24a366a5fe547p-53, .hi: 0x1.610b7551d2cep-1}, |
| 188 | {.lo: -0x1.75720992bfbb2p-55, .hi: 0x1.57d69348cecap-1}, |
| 189 | {.lo: 0x1.13c293edceb32p-53, .hi: 0x1.4e6cabbe3e5e8p-1}, |
| 190 | {.lo: -0x1.e7f895d302395p-53, .hi: 0x1.44cf325091dd8p-1}, |
| 191 | {.lo: 0x1.3c7c4bc72a92cp-53, .hi: 0x1.3affa292050b8p-1}, |
| 192 | {.lo: 0x1.c20673b2116b2p-54, .hi: 0x1.30ff7fce17034p-1}, |
| 193 | {.lo: -0x1.5769d0fbcddc3p-53, .hi: 0x1.26d054cdd12ep-1}, |
| 194 | {.lo: 0x1.b25dd267f66p-55, .hi: 0x1.1c73b39ae68c8p-1}, |
| 195 | {.lo: -0x1.7bc8eda6af93cp-53, .hi: 0x1.11eb3541b4b24p-1}, |
| 196 | {.lo: 0x1.9697faf2e2fe5p-53, .hi: 0x1.073879922ffecp-1}, |
| 197 | {.lo: 0x1.fb44f80f92225p-54, .hi: 0x1.f8ba4dbf89ab8p-2}, |
| 198 | {.lo: -0x1.c3e4edc5872f8p-55, .hi: 0x1.e2b5d3806f63cp-2}, |
| 199 | {.lo: -0x1.e97af1a63c807p-54, .hi: 0x1.cc66e9931c46p-2}, |
| 200 | {.lo: 0x1.5b362cb974183p-57, .hi: 0x1.b5d1009e15ccp-2}, |
| 201 | {.lo: -0x1.d24afdade848bp-54, .hi: 0x1.9ef7943a8ed8cp-2}, |
| 202 | {.lo: -0x1.2e59dba7ab4c2p-54, .hi: 0x1.87de2a6aea964p-2}, |
| 203 | {.lo: -0x1.512c678219317p-54, .hi: 0x1.7088530fa45ap-2}, |
| 204 | {.lo: 0x1.fc2047e54e614p-55, .hi: 0x1.58f9a75ab1fdcp-2}, |
| 205 | {.lo: 0x1.4325f12be8946p-54, .hi: 0x1.4135c941766p-2}, |
| 206 | {.lo: 0x1.a8b5c974ee7b5p-54, .hi: 0x1.294062ed59f04p-2}, |
| 207 | {.lo: -0x1.3ed9efaa42ab3p-55, .hi: 0x1.111d262b1f678p-2}, |
| 208 | {.lo: -0x1.50b7bbc4768b1p-55, .hi: 0x1.f19f97b215f1cp-3}, |
| 209 | {.lo: -0x1.035e2873ca432p-55, .hi: 0x1.c0b826a7e4f64p-3}, |
| 210 | {.lo: -0x1.49b466e7fe36p-55, .hi: 0x1.8f8b83c69a60cp-3}, |
| 211 | {.lo: -0x1.ab3802218894fp-55, .hi: 0x1.5e214448b3fc8p-3}, |
| 212 | {.lo: -0x1.dd9ffeaecbdc4p-55, .hi: 0x1.2c8106e8e613cp-3}, |
| 213 | {.lo: -0x1.cbb1f71aca352p-56, .hi: 0x1.f564e56a9731p-4}, |
| 214 | {.lo: -0x1.e2718d26ed688p-60, .hi: 0x1.917a6bc29b42cp-4}, |
| 215 | {.lo: 0x1.ccbeeeae8129ap-56, .hi: 0x1.2d52092ce19f4p-4}, |
| 216 | {.lo: -0x1.912bd0d569a9p-61, .hi: 0x1.91f65f10dd814p-5}, |
| 217 | {.lo: 0x1.f938a73db97fbp-58, .hi: 0x1.92155f7a3667cp-6}, |
| 218 | {.lo: 0, .hi: 0}, |
| 219 | {.lo: -0x1.f938a73db97fbp-58, .hi: -0x1.92155f7a3667cp-6}, |
| 220 | {.lo: 0x1.912bd0d569a9p-61, .hi: -0x1.91f65f10dd814p-5}, |
| 221 | {.lo: -0x1.ccbeeeae8129ap-56, .hi: -0x1.2d52092ce19f4p-4}, |
| 222 | {.lo: 0x1.e2718d26ed688p-60, .hi: -0x1.917a6bc29b42cp-4}, |
| 223 | {.lo: 0x1.cbb1f71aca352p-56, .hi: -0x1.f564e56a9731p-4}, |
| 224 | {.lo: 0x1.dd9ffeaecbdc4p-55, .hi: -0x1.2c8106e8e613cp-3}, |
| 225 | {.lo: 0x1.ab3802218894fp-55, .hi: -0x1.5e214448b3fc8p-3}, |
| 226 | {.lo: 0x1.49b466e7fe36p-55, .hi: -0x1.8f8b83c69a60cp-3}, |
| 227 | {.lo: 0x1.035e2873ca432p-55, .hi: -0x1.c0b826a7e4f64p-3}, |
| 228 | {.lo: 0x1.50b7bbc4768b1p-55, .hi: -0x1.f19f97b215f1cp-3}, |
| 229 | {.lo: 0x1.3ed9efaa42ab3p-55, .hi: -0x1.111d262b1f678p-2}, |
| 230 | {.lo: -0x1.a8b5c974ee7b5p-54, .hi: -0x1.294062ed59f04p-2}, |
| 231 | {.lo: -0x1.4325f12be8946p-54, .hi: -0x1.4135c941766p-2}, |
| 232 | {.lo: -0x1.fc2047e54e614p-55, .hi: -0x1.58f9a75ab1fdcp-2}, |
| 233 | {.lo: 0x1.512c678219317p-54, .hi: -0x1.7088530fa45ap-2}, |
| 234 | {.lo: 0x1.2e59dba7ab4c2p-54, .hi: -0x1.87de2a6aea964p-2}, |
| 235 | {.lo: 0x1.d24afdade848bp-54, .hi: -0x1.9ef7943a8ed8cp-2}, |
| 236 | {.lo: -0x1.5b362cb974183p-57, .hi: -0x1.b5d1009e15ccp-2}, |
| 237 | {.lo: 0x1.e97af1a63c807p-54, .hi: -0x1.cc66e9931c46p-2}, |
| 238 | {.lo: 0x1.c3e4edc5872f8p-55, .hi: -0x1.e2b5d3806f63cp-2}, |
| 239 | {.lo: -0x1.fb44f80f92225p-54, .hi: -0x1.f8ba4dbf89ab8p-2}, |
| 240 | {.lo: -0x1.9697faf2e2fe5p-53, .hi: -0x1.073879922ffecp-1}, |
| 241 | {.lo: 0x1.7bc8eda6af93cp-53, .hi: -0x1.11eb3541b4b24p-1}, |
| 242 | {.lo: -0x1.b25dd267f66p-55, .hi: -0x1.1c73b39ae68c8p-1}, |
| 243 | {.lo: 0x1.5769d0fbcddc3p-53, .hi: -0x1.26d054cdd12ep-1}, |
| 244 | {.lo: -0x1.c20673b2116b2p-54, .hi: -0x1.30ff7fce17034p-1}, |
| 245 | {.lo: -0x1.3c7c4bc72a92cp-53, .hi: -0x1.3affa292050b8p-1}, |
| 246 | {.lo: 0x1.e7f895d302395p-53, .hi: -0x1.44cf325091dd8p-1}, |
| 247 | {.lo: -0x1.13c293edceb32p-53, .hi: -0x1.4e6cabbe3e5e8p-1}, |
| 248 | {.lo: 0x1.75720992bfbb2p-55, .hi: -0x1.57d69348cecap-1}, |
| 249 | {.lo: 0x1.24a366a5fe547p-53, .hi: -0x1.610b7551d2cep-1}, |
| 250 | {.lo: -0x1.21165f626cdd5p-54, .hi: -0x1.6a09e667f3bccp-1}, |
| 251 | {.lo: 0x1.bcac43c389ba9p-53, .hi: -0x1.72d0837efff98p-1}, |
| 252 | {.lo: 0x1.21ea6f59be15bp-53, .hi: -0x1.7b5df226aafbp-1}, |
| 253 | {.lo: -0x1.d217be0e2b971p-53, .hi: -0x1.83b0e0bff976cp-1}, |
| 254 | {.lo: -0x1.69d0f6897664ap-54, .hi: -0x1.8bc806b15174p-1}, |
| 255 | {.lo: 0x1.615f32b6f907ap-54, .hi: -0x1.93a22499263fcp-1}, |
| 256 | {.lo: -0x1.6788ebcc76dc6p-54, .hi: -0x1.9b3e047f3874p-1}, |
| 257 | {.lo: -0x1.ddae89fd441d1p-53, .hi: -0x1.a29a7a046278p-1}, |
| 258 | {.lo: 0x1.f98273c5d2495p-54, .hi: -0x1.a9b66290ea1a4p-1}, |
| 259 | {.lo: 0x1.926da300ffccep-55, .hi: -0x1.b090a581502p-1}, |
| 260 | {.lo: -0x1.90e58336c64a8p-53, .hi: -0x1.b728345196e3cp-1}, |
| 261 | {.lo: -0x1.9f6963354e3fep-53, .hi: -0x1.bd7c0ac6f9528p-1}, |
| 262 | {.lo: -0x1.a47d3a2a0dcbep-54, .hi: -0x1.c38b2f180bdbp-1}, |
| 263 | {.lo: -0x1.ed0489e16b9ap-54, .hi: -0x1.c954b213411f4p-1}, |
| 264 | {.lo: 0x1.0f3db5dad5ac5p-53, .hi: -0x1.ced7af43cc774p-1}, |
| 265 | {.lo: -0x1.ac42b5a8b6943p-53, .hi: -0x1.d4134d14dc938p-1}, |
| 266 | {.lo: 0x1.d75033dfb9ca8p-53, .hi: -0x1.d906bcf328d48p-1}, |
| 267 | {.lo: -0x1.83c37c6107db3p-55, .hi: -0x1.ddb13b6ccc23cp-1}, |
| 268 | {.lo: -0x1.7f59c49f6cd6dp-54, .hi: -0x1.e212104f686e4p-1}, |
| 269 | {.lo: -0x1.ee94a90d7b88bp-53, .hi: -0x1.e6288ec48e11p-1}, |
| 270 | {.lo: 0x1.a27d3874701f9p-53, .hi: -0x1.e9f4156c62ddcp-1}, |
| 271 | {.lo: 0x1.85f4e1b8298dp-54, .hi: -0x1.ed740e7684964p-1}, |
| 272 | {.lo: 0x1.ab4e148e52d9ep-54, .hi: -0x1.f0a7efb9230d8p-1}, |
| 273 | {.lo: -0x1.8a11412b82346p-54, .hi: -0x1.f38f3ac64e588p-1}, |
| 274 | {.lo: -0x1.562172a361fd3p-56, .hi: -0x1.f6297cff75cbp-1}, |
| 275 | {.lo: -0x1.3564acef1ff97p-53, .hi: -0x1.f8764fa714ba8p-1}, |
| 276 | {.lo: 0x1.5e82a3284d5c8p-53, .hi: -0x1.fa7557f08a518p-1}, |
| 277 | {.lo: 0x1.709bccb89a989p-54, .hi: -0x1.fc26470e19fd4p-1}, |
| 278 | {.lo: -0x1.9e082721dfb8ep-53, .hi: -0x1.fd88da3d12524p-1}, |
| 279 | {.lo: 0x1.eade132f3981dp-53, .hi: -0x1.fe9cdad01883cp-1}, |
| 280 | {.lo: -0x1.e3a843d1db55fp-53, .hi: -0x1.ff621e3796d7cp-1}, |
| 281 | {.lo: -0x1.765595d548d9ap-54, .hi: -0x1.ffd886084cd0cp-1}, |
| 282 | {.lo: 0, .hi: -1}, |
| 283 | {.lo: -0x1.765595d548d9ap-54, .hi: -0x1.ffd886084cd0cp-1}, |
| 284 | {.lo: -0x1.e3a843d1db55fp-53, .hi: -0x1.ff621e3796d7cp-1}, |
| 285 | {.lo: 0x1.eade132f3981dp-53, .hi: -0x1.fe9cdad01883cp-1}, |
| 286 | {.lo: -0x1.9e082721dfb8ep-53, .hi: -0x1.fd88da3d12524p-1}, |
| 287 | {.lo: 0x1.709bccb89a989p-54, .hi: -0x1.fc26470e19fd4p-1}, |
| 288 | {.lo: 0x1.5e82a3284d5c8p-53, .hi: -0x1.fa7557f08a518p-1}, |
| 289 | {.lo: -0x1.3564acef1ff97p-53, .hi: -0x1.f8764fa714ba8p-1}, |
| 290 | {.lo: -0x1.562172a361fd3p-56, .hi: -0x1.f6297cff75cbp-1}, |
| 291 | {.lo: -0x1.8a11412b82346p-54, .hi: -0x1.f38f3ac64e588p-1}, |
| 292 | {.lo: 0x1.ab4e148e52d9ep-54, .hi: -0x1.f0a7efb9230d8p-1}, |
| 293 | {.lo: 0x1.85f4e1b8298dp-54, .hi: -0x1.ed740e7684964p-1}, |
| 294 | {.lo: 0x1.a27d3874701f9p-53, .hi: -0x1.e9f4156c62ddcp-1}, |
| 295 | {.lo: -0x1.ee94a90d7b88bp-53, .hi: -0x1.e6288ec48e11p-1}, |
| 296 | {.lo: -0x1.7f59c49f6cd6dp-54, .hi: -0x1.e212104f686e4p-1}, |
| 297 | {.lo: -0x1.83c37c6107db3p-55, .hi: -0x1.ddb13b6ccc23cp-1}, |
| 298 | {.lo: 0x1.d75033dfb9ca8p-53, .hi: -0x1.d906bcf328d48p-1}, |
| 299 | {.lo: -0x1.ac42b5a8b6943p-53, .hi: -0x1.d4134d14dc938p-1}, |
| 300 | {.lo: 0x1.0f3db5dad5ac5p-53, .hi: -0x1.ced7af43cc774p-1}, |
| 301 | {.lo: -0x1.ed0489e16b9ap-54, .hi: -0x1.c954b213411f4p-1}, |
| 302 | {.lo: -0x1.a47d3a2a0dcbep-54, .hi: -0x1.c38b2f180bdbp-1}, |
| 303 | {.lo: -0x1.9f6963354e3fep-53, .hi: -0x1.bd7c0ac6f9528p-1}, |
| 304 | {.lo: -0x1.90e58336c64a8p-53, .hi: -0x1.b728345196e3cp-1}, |
| 305 | {.lo: 0x1.926da300ffccep-55, .hi: -0x1.b090a581502p-1}, |
| 306 | {.lo: 0x1.f98273c5d2495p-54, .hi: -0x1.a9b66290ea1a4p-1}, |
| 307 | {.lo: -0x1.ddae89fd441d1p-53, .hi: -0x1.a29a7a046278p-1}, |
| 308 | {.lo: -0x1.6788ebcc76dc6p-54, .hi: -0x1.9b3e047f3874p-1}, |
| 309 | {.lo: 0x1.615f32b6f907ap-54, .hi: -0x1.93a22499263fcp-1}, |
| 310 | {.lo: -0x1.69d0f6897664ap-54, .hi: -0x1.8bc806b15174p-1}, |
| 311 | {.lo: -0x1.d217be0e2b971p-53, .hi: -0x1.83b0e0bff976cp-1}, |
| 312 | {.lo: 0x1.21ea6f59be15bp-53, .hi: -0x1.7b5df226aafbp-1}, |
| 313 | {.lo: 0x1.bcac43c389ba9p-53, .hi: -0x1.72d0837efff98p-1}, |
| 314 | {.lo: -0x1.21165f626cdd5p-54, .hi: -0x1.6a09e667f3bccp-1}, |
| 315 | {.lo: 0x1.24a366a5fe547p-53, .hi: -0x1.610b7551d2cep-1}, |
| 316 | {.lo: 0x1.75720992bfbb2p-55, .hi: -0x1.57d69348cecap-1}, |
| 317 | {.lo: -0x1.13c293edceb32p-53, .hi: -0x1.4e6cabbe3e5e8p-1}, |
| 318 | {.lo: 0x1.e7f895d302395p-53, .hi: -0x1.44cf325091dd8p-1}, |
| 319 | {.lo: -0x1.3c7c4bc72a92cp-53, .hi: -0x1.3affa292050b8p-1}, |
| 320 | {.lo: -0x1.c20673b2116b2p-54, .hi: -0x1.30ff7fce17034p-1}, |
| 321 | {.lo: 0x1.5769d0fbcddc3p-53, .hi: -0x1.26d054cdd12ep-1}, |
| 322 | {.lo: -0x1.b25dd267f66p-55, .hi: -0x1.1c73b39ae68c8p-1}, |
| 323 | {.lo: 0x1.7bc8eda6af93cp-53, .hi: -0x1.11eb3541b4b24p-1}, |
| 324 | {.lo: -0x1.9697faf2e2fe5p-53, .hi: -0x1.073879922ffecp-1}, |
| 325 | {.lo: -0x1.fb44f80f92225p-54, .hi: -0x1.f8ba4dbf89ab8p-2}, |
| 326 | {.lo: 0x1.c3e4edc5872f8p-55, .hi: -0x1.e2b5d3806f63cp-2}, |
| 327 | {.lo: 0x1.e97af1a63c807p-54, .hi: -0x1.cc66e9931c46p-2}, |
| 328 | {.lo: -0x1.5b362cb974183p-57, .hi: -0x1.b5d1009e15ccp-2}, |
| 329 | {.lo: 0x1.d24afdade848bp-54, .hi: -0x1.9ef7943a8ed8cp-2}, |
| 330 | {.lo: 0x1.2e59dba7ab4c2p-54, .hi: -0x1.87de2a6aea964p-2}, |
| 331 | {.lo: 0x1.512c678219317p-54, .hi: -0x1.7088530fa45ap-2}, |
| 332 | {.lo: -0x1.fc2047e54e614p-55, .hi: -0x1.58f9a75ab1fdcp-2}, |
| 333 | {.lo: -0x1.4325f12be8946p-54, .hi: -0x1.4135c941766p-2}, |
| 334 | {.lo: -0x1.a8b5c974ee7b5p-54, .hi: -0x1.294062ed59f04p-2}, |
| 335 | {.lo: 0x1.3ed9efaa42ab3p-55, .hi: -0x1.111d262b1f678p-2}, |
| 336 | {.lo: 0x1.50b7bbc4768b1p-55, .hi: -0x1.f19f97b215f1cp-3}, |
| 337 | {.lo: 0x1.035e2873ca432p-55, .hi: -0x1.c0b826a7e4f64p-3}, |
| 338 | {.lo: 0x1.49b466e7fe36p-55, .hi: -0x1.8f8b83c69a60cp-3}, |
| 339 | {.lo: 0x1.ab3802218894fp-55, .hi: -0x1.5e214448b3fc8p-3}, |
| 340 | {.lo: 0x1.dd9ffeaecbdc4p-55, .hi: -0x1.2c8106e8e613cp-3}, |
| 341 | {.lo: 0x1.cbb1f71aca352p-56, .hi: -0x1.f564e56a9731p-4}, |
| 342 | {.lo: 0x1.e2718d26ed688p-60, .hi: -0x1.917a6bc29b42cp-4}, |
| 343 | {.lo: -0x1.ccbeeeae8129ap-56, .hi: -0x1.2d52092ce19f4p-4}, |
| 344 | {.lo: 0x1.912bd0d569a9p-61, .hi: -0x1.91f65f10dd814p-5}, |
| 345 | {.lo: -0x1.f938a73db97fbp-58, .hi: -0x1.92155f7a3667cp-6}, |
| 346 | #endif // !LIBC_MATH_HAS_SMALL_TABLES |
| 347 | }; |
| 348 | |
| 349 | } // namespace range_reduction_double_internal |
| 350 | |
| 351 | } // namespace math |
| 352 | |
| 353 | } // namespace LIBC_NAMESPACE_DECL |
| 354 | |
| 355 | #endif // LLVM_LIBC_SRC___SUPPORT_MATH_RANGE_REDUCTION_DOUBLE_NOFMA_H |
| 356 | |