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