brintos

brintos / llvm-project-archived public Read only

0
0
Text · 16.2 KiB · 7fa3e40 Raw
353 lines · c
1//===-- Range reduction for double precision sin/cos/tan w/ FMA -*- 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_FMA_H10#define LLVM_LIBC_SRC___SUPPORT_MATH_RANGE_REDUCTION_DOUBLE_FMA_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/macros/config.h"17#include "src/__support/math/range_reduction_double_common.h"18 19namespace LIBC_NAMESPACE_DECL {20 21namespace math {22 23namespace range_reduction_double_internal {24 25using LIBC_NAMESPACE::fputil::DoubleDouble;26 27LIBC_INLINE unsigned LargeRangeReduction::fast(double x, DoubleDouble &u) {28  using FPBits = typename fputil::FPBits<double>;29  FPBits xbits(x);30 31  int x_e_m62 = xbits.get_biased_exponent() - (FPBits::EXP_BIAS + 62);32  idx = static_cast<unsigned>((x_e_m62 >> 4) + 3);33  // Scale x down by 2^(-(16 * (idx - 3))34  xbits.set_biased_exponent((x_e_m62 & 15) + FPBits::EXP_BIAS + 62);35  // 2^62 <= |x_reduced| < 2^(62 + 16) = 2^7836  x_reduced = xbits.get_val();37  // x * c_hi = ph.hi + ph.lo exactly.38  DoubleDouble ph = fputil::exact_mult<double, SPLIT>(39      x_reduced, ONE_TWENTY_EIGHT_OVER_PI[idx][0]);40  // x * c_mid = pm.hi + pm.lo exactly.41  DoubleDouble pm = fputil::exact_mult<double, SPLIT>(42      x_reduced, ONE_TWENTY_EIGHT_OVER_PI[idx][1]);43  // x * c_lo = pl.hi + pl.lo exactly.44  DoubleDouble pl = fputil::exact_mult<double, SPLIT>(45      x_reduced, ONE_TWENTY_EIGHT_OVER_PI[idx][2]);46  // Extract integral parts and fractional parts of (ph.lo + pm.hi).47  double sum_hi = ph.lo + pm.hi;48  double kd = fputil::nearest_integer(sum_hi);49 50  // x * 128/pi mod 1 ~ y_hi + y_mid + y_lo51  y_hi = (ph.lo - kd) + pm.hi; // Exact52  y_mid = fputil::exact_add(pm.lo, pl.hi);53  y_lo = pl.lo;54 55  // y_l = x * c_lo_2 + pl.lo56  double y_l =57      fputil::multiply_add(x_reduced, ONE_TWENTY_EIGHT_OVER_PI[idx][3], y_lo);58  DoubleDouble y = fputil::exact_add(y_hi, y_mid.hi);59  y.lo += (y_mid.lo + y_l);60 61  // Digits of pi/128, generated by Sollya with:62  // > a = round(pi/128, D, RN);63  // > b = round(pi/128 - a, D, RN);64  constexpr DoubleDouble PI_OVER_128_DD = {0x1.1a62633145c07p-60,65                                           0x1.921fb54442d18p-6};66 67  // Error bound: with {a} denote the fractional part of a, i.e.:68  //   {a} = a - round(a)69  // Then,70  //   | {x * 128/pi} - (y_hi + y_lo) | <=  ulp(ulp(y_hi)) <= 2^-10571  //   | {x mod pi/128} - (u.hi + u.lo) | < 2 * 2^-6 * 2^-105 = 2^-11072  u = fputil::quick_mult<SPLIT>(y, PI_OVER_128_DD);73 74  return static_cast<unsigned>(static_cast<int64_t>(kd));75}76 77// Lookup table for sin(k * pi / 128) with k = 0, ..., 255.78// Table is generated with Sollya as follow:79// > display = hexadecimal;80// > for k from 0 to 255 do {81//     a = D(sin(k * pi/128)); };82//     b = D(sin(k * pi/128) - a);83//     print("{", b, ",", a, "},");84//   };85LIBC_INLINE constexpr DoubleDouble SIN_K_PI_OVER_128[] = {86    {0, 0},87    {-0x1.b1d63091a013p-64, 0x1.92155f7a3667ep-6},88    {-0x1.912bd0d569a9p-61, 0x1.91f65f10dd814p-5},89    {-0x1.9a088a8bf6b2cp-59, 0x1.2d52092ce19f6p-4},90    {-0x1.e2718d26ed688p-60, 0x1.917a6bc29b42cp-4},91    {0x1.a2704729ae56dp-59, 0x1.f564e56a9730ep-4},92    {0x1.13000a89a11ep-58, 0x1.2c8106e8e613ap-3},93    {0x1.531ff779ddac6p-57, 0x1.5e214448b3fc6p-3},94    {-0x1.26d19b9ff8d82p-57, 0x1.8f8b83c69a60bp-3},95    {-0x1.af1439e521935p-62, 0x1.c0b826a7e4f63p-3},96    {-0x1.42deef11da2c4p-57, 0x1.f19f97b215f1bp-3},97    {0x1.824c20ab7aa9ap-56, 0x1.111d262b1f677p-2},98    {-0x1.5d28da2c4612dp-56, 0x1.294062ed59f06p-2},99    {0x1.0c97c4afa2518p-56, 0x1.4135c94176601p-2},100    {-0x1.efdc0d58cf62p-62, 0x1.58f9a75ab1fddp-2},101    {-0x1.44b19e0864c5dp-56, 0x1.7088530fa459fp-2},102    {-0x1.72cedd3d5a61p-57, 0x1.87de2a6aea963p-2},103    {0x1.6da81290bdbabp-57, 0x1.9ef7943a8ed8ap-2},104    {0x1.5b362cb974183p-57, 0x1.b5d1009e15ccp-2},105    {0x1.6850e59c37f8fp-58, 0x1.cc66e9931c45ep-2},106    {0x1.e0d891d3c6841p-58, 0x1.e2b5d3806f63bp-2},107    {-0x1.2ec1fc1b776b8p-60, 0x1.f8ba4dbf89abap-2},108    {-0x1.a5a014347406cp-55, 0x1.073879922ffeep-1},109    {-0x1.ef23b69abe4f1p-55, 0x1.11eb3541b4b23p-1},110    {0x1.b25dd267f66p-55, 0x1.1c73b39ae68c8p-1},111    {-0x1.5da743ef3770cp-55, 0x1.26d054cdd12dfp-1},112    {-0x1.efcc626f74a6fp-57, 0x1.30ff7fce17035p-1},113    {0x1.e3e25e3954964p-56, 0x1.3affa292050b9p-1},114    {0x1.8076a2cfdc6b3p-57, 0x1.44cf325091dd6p-1},115    {0x1.3c293edceb327p-57, 0x1.4e6cabbe3e5e9p-1},116    {-0x1.75720992bfbb2p-55, 0x1.57d69348cecap-1},117    {-0x1.251b352ff2a37p-56, 0x1.610b7551d2cdfp-1},118    {-0x1.bdd3413b26456p-55, 0x1.6a09e667f3bcdp-1},119    {0x1.0d4ef0f1d915cp-55, 0x1.72d0837efff96p-1},120    {-0x1.0f537acdf0ad7p-56, 0x1.7b5df226aafafp-1},121    {-0x1.6f420f8ea3475p-56, 0x1.83b0e0bff976ep-1},122    {-0x1.2c5e12ed1336dp-55, 0x1.8bc806b151741p-1},123    {0x1.3d419a920df0bp-55, 0x1.93a22499263fbp-1},124    {-0x1.30ee286712474p-55, 0x1.9b3e047f38741p-1},125    {-0x1.128bb015df175p-56, 0x1.a29a7a0462782p-1},126    {0x1.9f630e8b6dac8p-60, 0x1.a9b66290ea1a3p-1},127    {-0x1.926da300ffccep-55, 0x1.b090a581502p-1},128    {-0x1.bc69f324e6d61p-55, 0x1.b728345196e3ep-1},129    {-0x1.825a732ac700ap-55, 0x1.bd7c0ac6f952ap-1},130    {-0x1.6e0b1757c8d07p-56, 0x1.c38b2f180bdb1p-1},131    {-0x1.2fb761e946603p-58, 0x1.c954b213411f5p-1},132    {-0x1.e7b6bb5ab58aep-58, 0x1.ced7af43cc773p-1},133    {-0x1.4ef5295d25af2p-55, 0x1.d4134d14dc93ap-1},134    {0x1.457e610231ac2p-56, 0x1.d906bcf328d46p-1},135    {0x1.83c37c6107db3p-55, 0x1.ddb13b6ccc23cp-1},136    {-0x1.014c76c126527p-55, 0x1.e212104f686e5p-1},137    {-0x1.16b56f2847754p-57, 0x1.e6288ec48e112p-1},138    {0x1.760b1e2e3f81ep-55, 0x1.e9f4156c62ddap-1},139    {0x1.e82c791f59cc2p-56, 0x1.ed740e7684963p-1},140    {0x1.52c7adc6b4989p-56, 0x1.f0a7efb9230d7p-1},141    {-0x1.d7bafb51f72e6p-56, 0x1.f38f3ac64e589p-1},142    {0x1.562172a361fd3p-56, 0x1.f6297cff75cbp-1},143    {0x1.ab256778ffcb6p-56, 0x1.f8764fa714ba9p-1},144    {-0x1.7a0a8ca13571fp-55, 0x1.fa7557f08a517p-1},145    {0x1.1ec8668ecaceep-55, 0x1.fc26470e19fd3p-1},146    {-0x1.87df6378811c7p-55, 0x1.fd88da3d12526p-1},147    {0x1.521ecd0c67e35p-57, 0x1.fe9cdad01883ap-1},148    {-0x1.c57bc2e24aa15p-57, 0x1.ff621e3796d7ep-1},149    {-0x1.1354d4556e4cbp-55, 0x1.ffd886084cd0dp-1},150    {0, 1},151#ifndef LIBC_MATH_HAS_SMALL_TABLES152    {-0x1.1354d4556e4cbp-55, 0x1.ffd886084cd0dp-1},153    {-0x1.c57bc2e24aa15p-57, 0x1.ff621e3796d7ep-1},154    {0x1.521ecd0c67e35p-57, 0x1.fe9cdad01883ap-1},155    {-0x1.87df6378811c7p-55, 0x1.fd88da3d12526p-1},156    {0x1.1ec8668ecaceep-55, 0x1.fc26470e19fd3p-1},157    {-0x1.7a0a8ca13571fp-55, 0x1.fa7557f08a517p-1},158    {0x1.ab256778ffcb6p-56, 0x1.f8764fa714ba9p-1},159    {0x1.562172a361fd3p-56, 0x1.f6297cff75cbp-1},160    {-0x1.d7bafb51f72e6p-56, 0x1.f38f3ac64e589p-1},161    {0x1.52c7adc6b4989p-56, 0x1.f0a7efb9230d7p-1},162    {0x1.e82c791f59cc2p-56, 0x1.ed740e7684963p-1},163    {0x1.760b1e2e3f81ep-55, 0x1.e9f4156c62ddap-1},164    {-0x1.16b56f2847754p-57, 0x1.e6288ec48e112p-1},165    {-0x1.014c76c126527p-55, 0x1.e212104f686e5p-1},166    {0x1.83c37c6107db3p-55, 0x1.ddb13b6ccc23cp-1},167    {0x1.457e610231ac2p-56, 0x1.d906bcf328d46p-1},168    {-0x1.4ef5295d25af2p-55, 0x1.d4134d14dc93ap-1},169    {-0x1.e7b6bb5ab58aep-58, 0x1.ced7af43cc773p-1},170    {-0x1.2fb761e946603p-58, 0x1.c954b213411f5p-1},171    {-0x1.6e0b1757c8d07p-56, 0x1.c38b2f180bdb1p-1},172    {-0x1.825a732ac700ap-55, 0x1.bd7c0ac6f952ap-1},173    {-0x1.bc69f324e6d61p-55, 0x1.b728345196e3ep-1},174    {-0x1.926da300ffccep-55, 0x1.b090a581502p-1},175    {0x1.9f630e8b6dac8p-60, 0x1.a9b66290ea1a3p-1},176    {-0x1.128bb015df175p-56, 0x1.a29a7a0462782p-1},177    {-0x1.30ee286712474p-55, 0x1.9b3e047f38741p-1},178    {0x1.3d419a920df0bp-55, 0x1.93a22499263fbp-1},179    {-0x1.2c5e12ed1336dp-55, 0x1.8bc806b151741p-1},180    {-0x1.6f420f8ea3475p-56, 0x1.83b0e0bff976ep-1},181    {-0x1.0f537acdf0ad7p-56, 0x1.7b5df226aafafp-1},182    {0x1.0d4ef0f1d915cp-55, 0x1.72d0837efff96p-1},183    {-0x1.bdd3413b26456p-55, 0x1.6a09e667f3bcdp-1},184    {-0x1.251b352ff2a37p-56, 0x1.610b7551d2cdfp-1},185    {-0x1.75720992bfbb2p-55, 0x1.57d69348cecap-1},186    {0x1.3c293edceb327p-57, 0x1.4e6cabbe3e5e9p-1},187    {0x1.8076a2cfdc6b3p-57, 0x1.44cf325091dd6p-1},188    {0x1.e3e25e3954964p-56, 0x1.3affa292050b9p-1},189    {-0x1.efcc626f74a6fp-57, 0x1.30ff7fce17035p-1},190    {-0x1.5da743ef3770cp-55, 0x1.26d054cdd12dfp-1},191    {0x1.b25dd267f66p-55, 0x1.1c73b39ae68c8p-1},192    {-0x1.ef23b69abe4f1p-55, 0x1.11eb3541b4b23p-1},193    {-0x1.a5a014347406cp-55, 0x1.073879922ffeep-1},194    {-0x1.2ec1fc1b776b8p-60, 0x1.f8ba4dbf89abap-2},195    {0x1.e0d891d3c6841p-58, 0x1.e2b5d3806f63bp-2},196    {0x1.6850e59c37f8fp-58, 0x1.cc66e9931c45ep-2},197    {0x1.5b362cb974183p-57, 0x1.b5d1009e15ccp-2},198    {0x1.6da81290bdbabp-57, 0x1.9ef7943a8ed8ap-2},199    {-0x1.72cedd3d5a61p-57, 0x1.87de2a6aea963p-2},200    {-0x1.44b19e0864c5dp-56, 0x1.7088530fa459fp-2},201    {-0x1.efdc0d58cf62p-62, 0x1.58f9a75ab1fddp-2},202    {0x1.0c97c4afa2518p-56, 0x1.4135c94176601p-2},203    {-0x1.5d28da2c4612dp-56, 0x1.294062ed59f06p-2},204    {0x1.824c20ab7aa9ap-56, 0x1.111d262b1f677p-2},205    {-0x1.42deef11da2c4p-57, 0x1.f19f97b215f1bp-3},206    {-0x1.af1439e521935p-62, 0x1.c0b826a7e4f63p-3},207    {-0x1.26d19b9ff8d82p-57, 0x1.8f8b83c69a60bp-3},208    {0x1.531ff779ddac6p-57, 0x1.5e214448b3fc6p-3},209    {0x1.13000a89a11ep-58, 0x1.2c8106e8e613ap-3},210    {0x1.a2704729ae56dp-59, 0x1.f564e56a9730ep-4},211    {-0x1.e2718d26ed688p-60, 0x1.917a6bc29b42cp-4},212    {-0x1.9a088a8bf6b2cp-59, 0x1.2d52092ce19f6p-4},213    {-0x1.912bd0d569a9p-61, 0x1.91f65f10dd814p-5},214    {-0x1.b1d63091a013p-64, 0x1.92155f7a3667ep-6},215    {0, 0},216    {0x1.b1d63091a013p-64, -0x1.92155f7a3667ep-6},217    {0x1.912bd0d569a9p-61, -0x1.91f65f10dd814p-5},218    {0x1.9a088a8bf6b2cp-59, -0x1.2d52092ce19f6p-4},219    {0x1.e2718d26ed688p-60, -0x1.917a6bc29b42cp-4},220    {-0x1.a2704729ae56dp-59, -0x1.f564e56a9730ep-4},221    {-0x1.13000a89a11ep-58, -0x1.2c8106e8e613ap-3},222    {-0x1.531ff779ddac6p-57, -0x1.5e214448b3fc6p-3},223    {0x1.26d19b9ff8d82p-57, -0x1.8f8b83c69a60bp-3},224    {0x1.af1439e521935p-62, -0x1.c0b826a7e4f63p-3},225    {0x1.42deef11da2c4p-57, -0x1.f19f97b215f1bp-3},226    {-0x1.824c20ab7aa9ap-56, -0x1.111d262b1f677p-2},227    {0x1.5d28da2c4612dp-56, -0x1.294062ed59f06p-2},228    {-0x1.0c97c4afa2518p-56, -0x1.4135c94176601p-2},229    {0x1.efdc0d58cf62p-62, -0x1.58f9a75ab1fddp-2},230    {0x1.44b19e0864c5dp-56, -0x1.7088530fa459fp-2},231    {0x1.72cedd3d5a61p-57, -0x1.87de2a6aea963p-2},232    {-0x1.6da81290bdbabp-57, -0x1.9ef7943a8ed8ap-2},233    {-0x1.5b362cb974183p-57, -0x1.b5d1009e15ccp-2},234    {-0x1.6850e59c37f8fp-58, -0x1.cc66e9931c45ep-2},235    {-0x1.e0d891d3c6841p-58, -0x1.e2b5d3806f63bp-2},236    {0x1.2ec1fc1b776b8p-60, -0x1.f8ba4dbf89abap-2},237    {0x1.a5a014347406cp-55, -0x1.073879922ffeep-1},238    {0x1.ef23b69abe4f1p-55, -0x1.11eb3541b4b23p-1},239    {-0x1.b25dd267f66p-55, -0x1.1c73b39ae68c8p-1},240    {0x1.5da743ef3770cp-55, -0x1.26d054cdd12dfp-1},241    {0x1.efcc626f74a6fp-57, -0x1.30ff7fce17035p-1},242    {-0x1.e3e25e3954964p-56, -0x1.3affa292050b9p-1},243    {-0x1.8076a2cfdc6b3p-57, -0x1.44cf325091dd6p-1},244    {-0x1.3c293edceb327p-57, -0x1.4e6cabbe3e5e9p-1},245    {0x1.75720992bfbb2p-55, -0x1.57d69348cecap-1},246    {0x1.251b352ff2a37p-56, -0x1.610b7551d2cdfp-1},247    {0x1.bdd3413b26456p-55, -0x1.6a09e667f3bcdp-1},248    {-0x1.0d4ef0f1d915cp-55, -0x1.72d0837efff96p-1},249    {0x1.0f537acdf0ad7p-56, -0x1.7b5df226aafafp-1},250    {0x1.6f420f8ea3475p-56, -0x1.83b0e0bff976ep-1},251    {0x1.2c5e12ed1336dp-55, -0x1.8bc806b151741p-1},252    {-0x1.3d419a920df0bp-55, -0x1.93a22499263fbp-1},253    {0x1.30ee286712474p-55, -0x1.9b3e047f38741p-1},254    {0x1.128bb015df175p-56, -0x1.a29a7a0462782p-1},255    {-0x1.9f630e8b6dac8p-60, -0x1.a9b66290ea1a3p-1},256    {0x1.926da300ffccep-55, -0x1.b090a581502p-1},257    {0x1.bc69f324e6d61p-55, -0x1.b728345196e3ep-1},258    {0x1.825a732ac700ap-55, -0x1.bd7c0ac6f952ap-1},259    {0x1.6e0b1757c8d07p-56, -0x1.c38b2f180bdb1p-1},260    {0x1.2fb761e946603p-58, -0x1.c954b213411f5p-1},261    {0x1.e7b6bb5ab58aep-58, -0x1.ced7af43cc773p-1},262    {0x1.4ef5295d25af2p-55, -0x1.d4134d14dc93ap-1},263    {-0x1.457e610231ac2p-56, -0x1.d906bcf328d46p-1},264    {-0x1.83c37c6107db3p-55, -0x1.ddb13b6ccc23cp-1},265    {0x1.014c76c126527p-55, -0x1.e212104f686e5p-1},266    {0x1.16b56f2847754p-57, -0x1.e6288ec48e112p-1},267    {-0x1.760b1e2e3f81ep-55, -0x1.e9f4156c62ddap-1},268    {-0x1.e82c791f59cc2p-56, -0x1.ed740e7684963p-1},269    {-0x1.52c7adc6b4989p-56, -0x1.f0a7efb9230d7p-1},270    {0x1.d7bafb51f72e6p-56, -0x1.f38f3ac64e589p-1},271    {-0x1.562172a361fd3p-56, -0x1.f6297cff75cbp-1},272    {-0x1.ab256778ffcb6p-56, -0x1.f8764fa714ba9p-1},273    {0x1.7a0a8ca13571fp-55, -0x1.fa7557f08a517p-1},274    {-0x1.1ec8668ecaceep-55, -0x1.fc26470e19fd3p-1},275    {0x1.87df6378811c7p-55, -0x1.fd88da3d12526p-1},276    {-0x1.521ecd0c67e35p-57, -0x1.fe9cdad01883ap-1},277    {0x1.c57bc2e24aa15p-57, -0x1.ff621e3796d7ep-1},278    {0x1.1354d4556e4cbp-55, -0x1.ffd886084cd0dp-1},279    {0, -1},280    {0x1.1354d4556e4cbp-55, -0x1.ffd886084cd0dp-1},281    {0x1.c57bc2e24aa15p-57, -0x1.ff621e3796d7ep-1},282    {-0x1.521ecd0c67e35p-57, -0x1.fe9cdad01883ap-1},283    {0x1.87df6378811c7p-55, -0x1.fd88da3d12526p-1},284    {-0x1.1ec8668ecaceep-55, -0x1.fc26470e19fd3p-1},285    {0x1.7a0a8ca13571fp-55, -0x1.fa7557f08a517p-1},286    {-0x1.ab256778ffcb6p-56, -0x1.f8764fa714ba9p-1},287    {-0x1.562172a361fd3p-56, -0x1.f6297cff75cbp-1},288    {0x1.d7bafb51f72e6p-56, -0x1.f38f3ac64e589p-1},289    {-0x1.52c7adc6b4989p-56, -0x1.f0a7efb9230d7p-1},290    {-0x1.e82c791f59cc2p-56, -0x1.ed740e7684963p-1},291    {-0x1.760b1e2e3f81ep-55, -0x1.e9f4156c62ddap-1},292    {0x1.16b56f2847754p-57, -0x1.e6288ec48e112p-1},293    {0x1.014c76c126527p-55, -0x1.e212104f686e5p-1},294    {-0x1.83c37c6107db3p-55, -0x1.ddb13b6ccc23cp-1},295    {-0x1.457e610231ac2p-56, -0x1.d906bcf328d46p-1},296    {0x1.4ef5295d25af2p-55, -0x1.d4134d14dc93ap-1},297    {0x1.e7b6bb5ab58aep-58, -0x1.ced7af43cc773p-1},298    {0x1.2fb761e946603p-58, -0x1.c954b213411f5p-1},299    {0x1.6e0b1757c8d07p-56, -0x1.c38b2f180bdb1p-1},300    {0x1.825a732ac700ap-55, -0x1.bd7c0ac6f952ap-1},301    {0x1.bc69f324e6d61p-55, -0x1.b728345196e3ep-1},302    {0x1.926da300ffccep-55, -0x1.b090a581502p-1},303    {-0x1.9f630e8b6dac8p-60, -0x1.a9b66290ea1a3p-1},304    {0x1.128bb015df175p-56, -0x1.a29a7a0462782p-1},305    {0x1.30ee286712474p-55, -0x1.9b3e047f38741p-1},306    {-0x1.3d419a920df0bp-55, -0x1.93a22499263fbp-1},307    {0x1.2c5e12ed1336dp-55, -0x1.8bc806b151741p-1},308    {0x1.6f420f8ea3475p-56, -0x1.83b0e0bff976ep-1},309    {0x1.0f537acdf0ad7p-56, -0x1.7b5df226aafafp-1},310    {-0x1.0d4ef0f1d915cp-55, -0x1.72d0837efff96p-1},311    {0x1.bdd3413b26456p-55, -0x1.6a09e667f3bcdp-1},312    {0x1.251b352ff2a37p-56, -0x1.610b7551d2cdfp-1},313    {0x1.75720992bfbb2p-55, -0x1.57d69348cecap-1},314    {-0x1.3c293edceb327p-57, -0x1.4e6cabbe3e5e9p-1},315    {-0x1.8076a2cfdc6b3p-57, -0x1.44cf325091dd6p-1},316    {-0x1.e3e25e3954964p-56, -0x1.3affa292050b9p-1},317    {0x1.efcc626f74a6fp-57, -0x1.30ff7fce17035p-1},318    {0x1.5da743ef3770cp-55, -0x1.26d054cdd12dfp-1},319    {-0x1.b25dd267f66p-55, -0x1.1c73b39ae68c8p-1},320    {0x1.ef23b69abe4f1p-55, -0x1.11eb3541b4b23p-1},321    {0x1.a5a014347406cp-55, -0x1.073879922ffeep-1},322    {0x1.2ec1fc1b776b8p-60, -0x1.f8ba4dbf89abap-2},323    {-0x1.e0d891d3c6841p-58, -0x1.e2b5d3806f63bp-2},324    {-0x1.6850e59c37f8fp-58, -0x1.cc66e9931c45ep-2},325    {-0x1.5b362cb974183p-57, -0x1.b5d1009e15ccp-2},326    {-0x1.6da81290bdbabp-57, -0x1.9ef7943a8ed8ap-2},327    {0x1.72cedd3d5a61p-57, -0x1.87de2a6aea963p-2},328    {0x1.44b19e0864c5dp-56, -0x1.7088530fa459fp-2},329    {0x1.efdc0d58cf62p-62, -0x1.58f9a75ab1fddp-2},330    {-0x1.0c97c4afa2518p-56, -0x1.4135c94176601p-2},331    {0x1.5d28da2c4612dp-56, -0x1.294062ed59f06p-2},332    {-0x1.824c20ab7aa9ap-56, -0x1.111d262b1f677p-2},333    {0x1.42deef11da2c4p-57, -0x1.f19f97b215f1bp-3},334    {0x1.af1439e521935p-62, -0x1.c0b826a7e4f63p-3},335    {0x1.26d19b9ff8d82p-57, -0x1.8f8b83c69a60bp-3},336    {-0x1.531ff779ddac6p-57, -0x1.5e214448b3fc6p-3},337    {-0x1.13000a89a11ep-58, -0x1.2c8106e8e613ap-3},338    {-0x1.a2704729ae56dp-59, -0x1.f564e56a9730ep-4},339    {0x1.e2718d26ed688p-60, -0x1.917a6bc29b42cp-4},340    {0x1.9a088a8bf6b2cp-59, -0x1.2d52092ce19f6p-4},341    {0x1.912bd0d569a9p-61, -0x1.91f65f10dd814p-5},342    {0x1.b1d63091a013p-64, -0x1.92155f7a3667ep-6},343#endif // !LIBC_MATH_HAS_SMALL_TABLES344};345 346} // namespace range_reduction_double_internal347 348} // namespace math349 350} // namespace LIBC_NAMESPACE_DECL351 352#endif // LLVM_LIBC_SRC___SUPPORT_MATH_RANGE_REDUCTION_DOUBLE_FMA_H353