brintos

brintos / llvm-project-archived public Read only

0
0
Text · 16.4 KiB · 3990b9b Raw
356 lines · c
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-exception6//7//===----------------------------------------------------------------------===//8 9#ifndef LLVM_LIBC_SRC___SUPPORT_MATH_RANGE_REDUCTION_DOUBLE_NOFMA_H10#define LLVM_LIBC_SRC___SUPPORT_MATH_RANGE_REDUCTION_DOUBLE_NOFMA_H11 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 21namespace LIBC_NAMESPACE_DECL {22 23namespace math {24 25namespace range_reduction_double_internal {26 27using fputil::DoubleDouble;28 29LIBC_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^7838  x_reduced = xbits.get_val();39  // x * c_hi = ph.hi + ph.lo exactly.40  DoubleDouble x_split = fputil::split(x_reduced);41  DoubleDouble ph = fputil::exact_mult<double, SPLIT>(42      x_split, x_reduced, 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      x_split, x_reduced, 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      x_split, x_reduced, 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(sum_hi);52 53  // x * 128/pi mod 1 ~ y_hi + y_mid + y_lo54  y_hi = (ph.lo - kd) + pm.hi; // Exact55  y_mid = fputil::exact_add(pm.lo, pl.hi);56  y_lo = pl.lo;57 58  // y_l = x * c_lo_2 + pl.lo59  double y_l =60      fputil::multiply_add(x_reduced, ONE_TWENTY_EIGHT_OVER_PI[idx][3], y_lo);61  DoubleDouble y = fputil::exact_add(y_hi, 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 = {0x1.1a62633145c07p-60,68                                           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^-10574  //   | {x mod pi/128} - (u.hi + u.lo) | < 2 * 2^-6 * 2^-105 = 2^-11075  u = fputil::quick_mult<SPLIT>(y, 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//   };88LIBC_INLINE constexpr DoubleDouble SIN_K_PI_OVER_128[] = {89    {0, 0},90    {0x1.f938a73db97fbp-58, 0x1.92155f7a3667cp-6},91    {-0x1.912bd0d569a9p-61, 0x1.91f65f10dd814p-5},92    {0x1.ccbeeeae8129ap-56, 0x1.2d52092ce19f4p-4},93    {-0x1.e2718d26ed688p-60, 0x1.917a6bc29b42cp-4},94    {-0x1.cbb1f71aca352p-56, 0x1.f564e56a9731p-4},95    {-0x1.dd9ffeaecbdc4p-55, 0x1.2c8106e8e613cp-3},96    {-0x1.ab3802218894fp-55, 0x1.5e214448b3fc8p-3},97    {-0x1.49b466e7fe36p-55, 0x1.8f8b83c69a60cp-3},98    {-0x1.035e2873ca432p-55, 0x1.c0b826a7e4f64p-3},99    {-0x1.50b7bbc4768b1p-55, 0x1.f19f97b215f1cp-3},100    {-0x1.3ed9efaa42ab3p-55, 0x1.111d262b1f678p-2},101    {0x1.a8b5c974ee7b5p-54, 0x1.294062ed59f04p-2},102    {0x1.4325f12be8946p-54, 0x1.4135c941766p-2},103    {0x1.fc2047e54e614p-55, 0x1.58f9a75ab1fdcp-2},104    {-0x1.512c678219317p-54, 0x1.7088530fa45ap-2},105    {-0x1.2e59dba7ab4c2p-54, 0x1.87de2a6aea964p-2},106    {-0x1.d24afdade848bp-54, 0x1.9ef7943a8ed8cp-2},107    {0x1.5b362cb974183p-57, 0x1.b5d1009e15ccp-2},108    {-0x1.e97af1a63c807p-54, 0x1.cc66e9931c46p-2},109    {-0x1.c3e4edc5872f8p-55, 0x1.e2b5d3806f63cp-2},110    {0x1.fb44f80f92225p-54, 0x1.f8ba4dbf89ab8p-2},111    {0x1.9697faf2e2fe5p-53, 0x1.073879922ffecp-1},112    {-0x1.7bc8eda6af93cp-53, 0x1.11eb3541b4b24p-1},113    {0x1.b25dd267f66p-55, 0x1.1c73b39ae68c8p-1},114    {-0x1.5769d0fbcddc3p-53, 0x1.26d054cdd12ep-1},115    {0x1.c20673b2116b2p-54, 0x1.30ff7fce17034p-1},116    {0x1.3c7c4bc72a92cp-53, 0x1.3affa292050b8p-1},117    {-0x1.e7f895d302395p-53, 0x1.44cf325091dd8p-1},118    {0x1.13c293edceb32p-53, 0x1.4e6cabbe3e5e8p-1},119    {-0x1.75720992bfbb2p-55, 0x1.57d69348cecap-1},120    {-0x1.24a366a5fe547p-53, 0x1.610b7551d2cep-1},121    {0x1.21165f626cdd5p-54, 0x1.6a09e667f3bccp-1},122    {-0x1.bcac43c389ba9p-53, 0x1.72d0837efff98p-1},123    {-0x1.21ea6f59be15bp-53, 0x1.7b5df226aafbp-1},124    {0x1.d217be0e2b971p-53, 0x1.83b0e0bff976cp-1},125    {0x1.69d0f6897664ap-54, 0x1.8bc806b15174p-1},126    {-0x1.615f32b6f907ap-54, 0x1.93a22499263fcp-1},127    {0x1.6788ebcc76dc6p-54, 0x1.9b3e047f3874p-1},128    {0x1.ddae89fd441d1p-53, 0x1.a29a7a046278p-1},129    {-0x1.f98273c5d2495p-54, 0x1.a9b66290ea1a4p-1},130    {-0x1.926da300ffccep-55, 0x1.b090a581502p-1},131    {0x1.90e58336c64a8p-53, 0x1.b728345196e3cp-1},132    {0x1.9f6963354e3fep-53, 0x1.bd7c0ac6f9528p-1},133    {0x1.a47d3a2a0dcbep-54, 0x1.c38b2f180bdbp-1},134    {0x1.ed0489e16b9ap-54, 0x1.c954b213411f4p-1},135    {-0x1.0f3db5dad5ac5p-53, 0x1.ced7af43cc774p-1},136    {0x1.ac42b5a8b6943p-53, 0x1.d4134d14dc938p-1},137    {-0x1.d75033dfb9ca8p-53, 0x1.d906bcf328d48p-1},138    {0x1.83c37c6107db3p-55, 0x1.ddb13b6ccc23cp-1},139    {0x1.7f59c49f6cd6dp-54, 0x1.e212104f686e4p-1},140    {0x1.ee94a90d7b88bp-53, 0x1.e6288ec48e11p-1},141    {-0x1.a27d3874701f9p-53, 0x1.e9f4156c62ddcp-1},142    {-0x1.85f4e1b8298dp-54, 0x1.ed740e7684964p-1},143    {-0x1.ab4e148e52d9ep-54, 0x1.f0a7efb9230d8p-1},144    {0x1.8a11412b82346p-54, 0x1.f38f3ac64e588p-1},145    {0x1.562172a361fd3p-56, 0x1.f6297cff75cbp-1},146    {0x1.3564acef1ff97p-53, 0x1.f8764fa714ba8p-1},147    {-0x1.5e82a3284d5c8p-53, 0x1.fa7557f08a518p-1},148    {-0x1.709bccb89a989p-54, 0x1.fc26470e19fd4p-1},149    {0x1.9e082721dfb8ep-53, 0x1.fd88da3d12524p-1},150    {-0x1.eade132f3981dp-53, 0x1.fe9cdad01883cp-1},151    {0x1.e3a843d1db55fp-53, 0x1.ff621e3796d7cp-1},152    {0x1.765595d548d9ap-54, 0x1.ffd886084cd0cp-1},153    {0, 1},154#ifndef LIBC_MATH_HAS_SMALL_TABLES155    {0x1.765595d548d9ap-54, 0x1.ffd886084cd0cp-1},156    {0x1.e3a843d1db55fp-53, 0x1.ff621e3796d7cp-1},157    {-0x1.eade132f3981dp-53, 0x1.fe9cdad01883cp-1},158    {0x1.9e082721dfb8ep-53, 0x1.fd88da3d12524p-1},159    {-0x1.709bccb89a989p-54, 0x1.fc26470e19fd4p-1},160    {-0x1.5e82a3284d5c8p-53, 0x1.fa7557f08a518p-1},161    {0x1.3564acef1ff97p-53, 0x1.f8764fa714ba8p-1},162    {0x1.562172a361fd3p-56, 0x1.f6297cff75cbp-1},163    {0x1.8a11412b82346p-54, 0x1.f38f3ac64e588p-1},164    {-0x1.ab4e148e52d9ep-54, 0x1.f0a7efb9230d8p-1},165    {-0x1.85f4e1b8298dp-54, 0x1.ed740e7684964p-1},166    {-0x1.a27d3874701f9p-53, 0x1.e9f4156c62ddcp-1},167    {0x1.ee94a90d7b88bp-53, 0x1.e6288ec48e11p-1},168    {0x1.7f59c49f6cd6dp-54, 0x1.e212104f686e4p-1},169    {0x1.83c37c6107db3p-55, 0x1.ddb13b6ccc23cp-1},170    {-0x1.d75033dfb9ca8p-53, 0x1.d906bcf328d48p-1},171    {0x1.ac42b5a8b6943p-53, 0x1.d4134d14dc938p-1},172    {-0x1.0f3db5dad5ac5p-53, 0x1.ced7af43cc774p-1},173    {0x1.ed0489e16b9ap-54, 0x1.c954b213411f4p-1},174    {0x1.a47d3a2a0dcbep-54, 0x1.c38b2f180bdbp-1},175    {0x1.9f6963354e3fep-53, 0x1.bd7c0ac6f9528p-1},176    {0x1.90e58336c64a8p-53, 0x1.b728345196e3cp-1},177    {-0x1.926da300ffccep-55, 0x1.b090a581502p-1},178    {-0x1.f98273c5d2495p-54, 0x1.a9b66290ea1a4p-1},179    {0x1.ddae89fd441d1p-53, 0x1.a29a7a046278p-1},180    {0x1.6788ebcc76dc6p-54, 0x1.9b3e047f3874p-1},181    {-0x1.615f32b6f907ap-54, 0x1.93a22499263fcp-1},182    {0x1.69d0f6897664ap-54, 0x1.8bc806b15174p-1},183    {0x1.d217be0e2b971p-53, 0x1.83b0e0bff976cp-1},184    {-0x1.21ea6f59be15bp-53, 0x1.7b5df226aafbp-1},185    {-0x1.bcac43c389ba9p-53, 0x1.72d0837efff98p-1},186    {0x1.21165f626cdd5p-54, 0x1.6a09e667f3bccp-1},187    {-0x1.24a366a5fe547p-53, 0x1.610b7551d2cep-1},188    {-0x1.75720992bfbb2p-55, 0x1.57d69348cecap-1},189    {0x1.13c293edceb32p-53, 0x1.4e6cabbe3e5e8p-1},190    {-0x1.e7f895d302395p-53, 0x1.44cf325091dd8p-1},191    {0x1.3c7c4bc72a92cp-53, 0x1.3affa292050b8p-1},192    {0x1.c20673b2116b2p-54, 0x1.30ff7fce17034p-1},193    {-0x1.5769d0fbcddc3p-53, 0x1.26d054cdd12ep-1},194    {0x1.b25dd267f66p-55, 0x1.1c73b39ae68c8p-1},195    {-0x1.7bc8eda6af93cp-53, 0x1.11eb3541b4b24p-1},196    {0x1.9697faf2e2fe5p-53, 0x1.073879922ffecp-1},197    {0x1.fb44f80f92225p-54, 0x1.f8ba4dbf89ab8p-2},198    {-0x1.c3e4edc5872f8p-55, 0x1.e2b5d3806f63cp-2},199    {-0x1.e97af1a63c807p-54, 0x1.cc66e9931c46p-2},200    {0x1.5b362cb974183p-57, 0x1.b5d1009e15ccp-2},201    {-0x1.d24afdade848bp-54, 0x1.9ef7943a8ed8cp-2},202    {-0x1.2e59dba7ab4c2p-54, 0x1.87de2a6aea964p-2},203    {-0x1.512c678219317p-54, 0x1.7088530fa45ap-2},204    {0x1.fc2047e54e614p-55, 0x1.58f9a75ab1fdcp-2},205    {0x1.4325f12be8946p-54, 0x1.4135c941766p-2},206    {0x1.a8b5c974ee7b5p-54, 0x1.294062ed59f04p-2},207    {-0x1.3ed9efaa42ab3p-55, 0x1.111d262b1f678p-2},208    {-0x1.50b7bbc4768b1p-55, 0x1.f19f97b215f1cp-3},209    {-0x1.035e2873ca432p-55, 0x1.c0b826a7e4f64p-3},210    {-0x1.49b466e7fe36p-55, 0x1.8f8b83c69a60cp-3},211    {-0x1.ab3802218894fp-55, 0x1.5e214448b3fc8p-3},212    {-0x1.dd9ffeaecbdc4p-55, 0x1.2c8106e8e613cp-3},213    {-0x1.cbb1f71aca352p-56, 0x1.f564e56a9731p-4},214    {-0x1.e2718d26ed688p-60, 0x1.917a6bc29b42cp-4},215    {0x1.ccbeeeae8129ap-56, 0x1.2d52092ce19f4p-4},216    {-0x1.912bd0d569a9p-61, 0x1.91f65f10dd814p-5},217    {0x1.f938a73db97fbp-58, 0x1.92155f7a3667cp-6},218    {0, 0},219    {-0x1.f938a73db97fbp-58, -0x1.92155f7a3667cp-6},220    {0x1.912bd0d569a9p-61, -0x1.91f65f10dd814p-5},221    {-0x1.ccbeeeae8129ap-56, -0x1.2d52092ce19f4p-4},222    {0x1.e2718d26ed688p-60, -0x1.917a6bc29b42cp-4},223    {0x1.cbb1f71aca352p-56, -0x1.f564e56a9731p-4},224    {0x1.dd9ffeaecbdc4p-55, -0x1.2c8106e8e613cp-3},225    {0x1.ab3802218894fp-55, -0x1.5e214448b3fc8p-3},226    {0x1.49b466e7fe36p-55, -0x1.8f8b83c69a60cp-3},227    {0x1.035e2873ca432p-55, -0x1.c0b826a7e4f64p-3},228    {0x1.50b7bbc4768b1p-55, -0x1.f19f97b215f1cp-3},229    {0x1.3ed9efaa42ab3p-55, -0x1.111d262b1f678p-2},230    {-0x1.a8b5c974ee7b5p-54, -0x1.294062ed59f04p-2},231    {-0x1.4325f12be8946p-54, -0x1.4135c941766p-2},232    {-0x1.fc2047e54e614p-55, -0x1.58f9a75ab1fdcp-2},233    {0x1.512c678219317p-54, -0x1.7088530fa45ap-2},234    {0x1.2e59dba7ab4c2p-54, -0x1.87de2a6aea964p-2},235    {0x1.d24afdade848bp-54, -0x1.9ef7943a8ed8cp-2},236    {-0x1.5b362cb974183p-57, -0x1.b5d1009e15ccp-2},237    {0x1.e97af1a63c807p-54, -0x1.cc66e9931c46p-2},238    {0x1.c3e4edc5872f8p-55, -0x1.e2b5d3806f63cp-2},239    {-0x1.fb44f80f92225p-54, -0x1.f8ba4dbf89ab8p-2},240    {-0x1.9697faf2e2fe5p-53, -0x1.073879922ffecp-1},241    {0x1.7bc8eda6af93cp-53, -0x1.11eb3541b4b24p-1},242    {-0x1.b25dd267f66p-55, -0x1.1c73b39ae68c8p-1},243    {0x1.5769d0fbcddc3p-53, -0x1.26d054cdd12ep-1},244    {-0x1.c20673b2116b2p-54, -0x1.30ff7fce17034p-1},245    {-0x1.3c7c4bc72a92cp-53, -0x1.3affa292050b8p-1},246    {0x1.e7f895d302395p-53, -0x1.44cf325091dd8p-1},247    {-0x1.13c293edceb32p-53, -0x1.4e6cabbe3e5e8p-1},248    {0x1.75720992bfbb2p-55, -0x1.57d69348cecap-1},249    {0x1.24a366a5fe547p-53, -0x1.610b7551d2cep-1},250    {-0x1.21165f626cdd5p-54, -0x1.6a09e667f3bccp-1},251    {0x1.bcac43c389ba9p-53, -0x1.72d0837efff98p-1},252    {0x1.21ea6f59be15bp-53, -0x1.7b5df226aafbp-1},253    {-0x1.d217be0e2b971p-53, -0x1.83b0e0bff976cp-1},254    {-0x1.69d0f6897664ap-54, -0x1.8bc806b15174p-1},255    {0x1.615f32b6f907ap-54, -0x1.93a22499263fcp-1},256    {-0x1.6788ebcc76dc6p-54, -0x1.9b3e047f3874p-1},257    {-0x1.ddae89fd441d1p-53, -0x1.a29a7a046278p-1},258    {0x1.f98273c5d2495p-54, -0x1.a9b66290ea1a4p-1},259    {0x1.926da300ffccep-55, -0x1.b090a581502p-1},260    {-0x1.90e58336c64a8p-53, -0x1.b728345196e3cp-1},261    {-0x1.9f6963354e3fep-53, -0x1.bd7c0ac6f9528p-1},262    {-0x1.a47d3a2a0dcbep-54, -0x1.c38b2f180bdbp-1},263    {-0x1.ed0489e16b9ap-54, -0x1.c954b213411f4p-1},264    {0x1.0f3db5dad5ac5p-53, -0x1.ced7af43cc774p-1},265    {-0x1.ac42b5a8b6943p-53, -0x1.d4134d14dc938p-1},266    {0x1.d75033dfb9ca8p-53, -0x1.d906bcf328d48p-1},267    {-0x1.83c37c6107db3p-55, -0x1.ddb13b6ccc23cp-1},268    {-0x1.7f59c49f6cd6dp-54, -0x1.e212104f686e4p-1},269    {-0x1.ee94a90d7b88bp-53, -0x1.e6288ec48e11p-1},270    {0x1.a27d3874701f9p-53, -0x1.e9f4156c62ddcp-1},271    {0x1.85f4e1b8298dp-54, -0x1.ed740e7684964p-1},272    {0x1.ab4e148e52d9ep-54, -0x1.f0a7efb9230d8p-1},273    {-0x1.8a11412b82346p-54, -0x1.f38f3ac64e588p-1},274    {-0x1.562172a361fd3p-56, -0x1.f6297cff75cbp-1},275    {-0x1.3564acef1ff97p-53, -0x1.f8764fa714ba8p-1},276    {0x1.5e82a3284d5c8p-53, -0x1.fa7557f08a518p-1},277    {0x1.709bccb89a989p-54, -0x1.fc26470e19fd4p-1},278    {-0x1.9e082721dfb8ep-53, -0x1.fd88da3d12524p-1},279    {0x1.eade132f3981dp-53, -0x1.fe9cdad01883cp-1},280    {-0x1.e3a843d1db55fp-53, -0x1.ff621e3796d7cp-1},281    {-0x1.765595d548d9ap-54, -0x1.ffd886084cd0cp-1},282    {0, -1},283    {-0x1.765595d548d9ap-54, -0x1.ffd886084cd0cp-1},284    {-0x1.e3a843d1db55fp-53, -0x1.ff621e3796d7cp-1},285    {0x1.eade132f3981dp-53, -0x1.fe9cdad01883cp-1},286    {-0x1.9e082721dfb8ep-53, -0x1.fd88da3d12524p-1},287    {0x1.709bccb89a989p-54, -0x1.fc26470e19fd4p-1},288    {0x1.5e82a3284d5c8p-53, -0x1.fa7557f08a518p-1},289    {-0x1.3564acef1ff97p-53, -0x1.f8764fa714ba8p-1},290    {-0x1.562172a361fd3p-56, -0x1.f6297cff75cbp-1},291    {-0x1.8a11412b82346p-54, -0x1.f38f3ac64e588p-1},292    {0x1.ab4e148e52d9ep-54, -0x1.f0a7efb9230d8p-1},293    {0x1.85f4e1b8298dp-54, -0x1.ed740e7684964p-1},294    {0x1.a27d3874701f9p-53, -0x1.e9f4156c62ddcp-1},295    {-0x1.ee94a90d7b88bp-53, -0x1.e6288ec48e11p-1},296    {-0x1.7f59c49f6cd6dp-54, -0x1.e212104f686e4p-1},297    {-0x1.83c37c6107db3p-55, -0x1.ddb13b6ccc23cp-1},298    {0x1.d75033dfb9ca8p-53, -0x1.d906bcf328d48p-1},299    {-0x1.ac42b5a8b6943p-53, -0x1.d4134d14dc938p-1},300    {0x1.0f3db5dad5ac5p-53, -0x1.ced7af43cc774p-1},301    {-0x1.ed0489e16b9ap-54, -0x1.c954b213411f4p-1},302    {-0x1.a47d3a2a0dcbep-54, -0x1.c38b2f180bdbp-1},303    {-0x1.9f6963354e3fep-53, -0x1.bd7c0ac6f9528p-1},304    {-0x1.90e58336c64a8p-53, -0x1.b728345196e3cp-1},305    {0x1.926da300ffccep-55, -0x1.b090a581502p-1},306    {0x1.f98273c5d2495p-54, -0x1.a9b66290ea1a4p-1},307    {-0x1.ddae89fd441d1p-53, -0x1.a29a7a046278p-1},308    {-0x1.6788ebcc76dc6p-54, -0x1.9b3e047f3874p-1},309    {0x1.615f32b6f907ap-54, -0x1.93a22499263fcp-1},310    {-0x1.69d0f6897664ap-54, -0x1.8bc806b15174p-1},311    {-0x1.d217be0e2b971p-53, -0x1.83b0e0bff976cp-1},312    {0x1.21ea6f59be15bp-53, -0x1.7b5df226aafbp-1},313    {0x1.bcac43c389ba9p-53, -0x1.72d0837efff98p-1},314    {-0x1.21165f626cdd5p-54, -0x1.6a09e667f3bccp-1},315    {0x1.24a366a5fe547p-53, -0x1.610b7551d2cep-1},316    {0x1.75720992bfbb2p-55, -0x1.57d69348cecap-1},317    {-0x1.13c293edceb32p-53, -0x1.4e6cabbe3e5e8p-1},318    {0x1.e7f895d302395p-53, -0x1.44cf325091dd8p-1},319    {-0x1.3c7c4bc72a92cp-53, -0x1.3affa292050b8p-1},320    {-0x1.c20673b2116b2p-54, -0x1.30ff7fce17034p-1},321    {0x1.5769d0fbcddc3p-53, -0x1.26d054cdd12ep-1},322    {-0x1.b25dd267f66p-55, -0x1.1c73b39ae68c8p-1},323    {0x1.7bc8eda6af93cp-53, -0x1.11eb3541b4b24p-1},324    {-0x1.9697faf2e2fe5p-53, -0x1.073879922ffecp-1},325    {-0x1.fb44f80f92225p-54, -0x1.f8ba4dbf89ab8p-2},326    {0x1.c3e4edc5872f8p-55, -0x1.e2b5d3806f63cp-2},327    {0x1.e97af1a63c807p-54, -0x1.cc66e9931c46p-2},328    {-0x1.5b362cb974183p-57, -0x1.b5d1009e15ccp-2},329    {0x1.d24afdade848bp-54, -0x1.9ef7943a8ed8cp-2},330    {0x1.2e59dba7ab4c2p-54, -0x1.87de2a6aea964p-2},331    {0x1.512c678219317p-54, -0x1.7088530fa45ap-2},332    {-0x1.fc2047e54e614p-55, -0x1.58f9a75ab1fdcp-2},333    {-0x1.4325f12be8946p-54, -0x1.4135c941766p-2},334    {-0x1.a8b5c974ee7b5p-54, -0x1.294062ed59f04p-2},335    {0x1.3ed9efaa42ab3p-55, -0x1.111d262b1f678p-2},336    {0x1.50b7bbc4768b1p-55, -0x1.f19f97b215f1cp-3},337    {0x1.035e2873ca432p-55, -0x1.c0b826a7e4f64p-3},338    {0x1.49b466e7fe36p-55, -0x1.8f8b83c69a60cp-3},339    {0x1.ab3802218894fp-55, -0x1.5e214448b3fc8p-3},340    {0x1.dd9ffeaecbdc4p-55, -0x1.2c8106e8e613cp-3},341    {0x1.cbb1f71aca352p-56, -0x1.f564e56a9731p-4},342    {0x1.e2718d26ed688p-60, -0x1.917a6bc29b42cp-4},343    {-0x1.ccbeeeae8129ap-56, -0x1.2d52092ce19f4p-4},344    {0x1.912bd0d569a9p-61, -0x1.91f65f10dd814p-5},345    {-0x1.f938a73db97fbp-58, -0x1.92155f7a3667cp-6},346#endif // !LIBC_MATH_HAS_SMALL_TABLES347};348 349} // namespace range_reduction_double_internal350 351} // namespace math352 353} // namespace LIBC_NAMESPACE_DECL354 355#endif // LLVM_LIBC_SRC___SUPPORT_MATH_RANGE_REDUCTION_DOUBLE_NOFMA_H356