brintos

brintos / llvm-project-archived public Read only

0
0
Text · 34.0 KiB · 53abbfe Raw
582 lines · c
1//===-- Common constants for math functions ---------------------*- 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_COMMON_CONSTANTS_H10#define LLVM_LIBC_SRC___SUPPORT_MATH_COMMON_CONSTANTS_H11 12#include "src/__support/macros/config.h"13#include "src/__support/number_pair.h"14 15namespace LIBC_NAMESPACE_DECL {16 17namespace common_constants_internal {18 19// log(2) generated by Sollya with:20// > a = 2^-43 * nearestint(2^43*log(2));21// LSB = 2^-43 is chosen so that e_x * LOG_2_HI is exact for -1075 < e_x < 1024.22static constexpr double LOG_2_HI = 0x1.62e42fefa38p-1; // LSB = 2^-4323// > b = round(log10(2) - a, D, RN);24static constexpr double LOG_2_LO = 0x1.ef35793c7673p-45; // LSB = 2^-9725 26// Minimax polynomial for (log(1 + x) - x)/x^2, generated by sollya with:27// > P = fpminimax((log(1 + x) - x)/x^2, 5, [|D...|], [-2^-8, 2^-7]);28constexpr double LOG_COEFFS[6] = {-0x1.fffffffffffffp-2, 0x1.5555555554a9bp-2,29                                  -0x1.0000000094567p-2, 0x1.99999dcc9823cp-3,30                                  -0x1.55550ac2e537ap-3, 0x1.21a02c4e624d7p-3};31 32// Range reduction constants for logarithms.33// r(0) = 1, r(127) = 0.534// r(k) = 2^-8 * ceil(2^8 * (1 - 2^-8) / (1 + k*2^-7))35// The constants are chosen so that v = fma(r, m_x, -1) is exact in single36// precision, and -2^-8 <= v < 2^-7.37// TODO(lntue): Add reference to how the constants are derived after the38// resulting paper is ready.39alignas(8) static constexpr float R[128] = {40    0x1p0,     0x1.fcp-1, 0x1.f8p-1, 0x1.f4p-1, 0x1.fp-1,  0x1.ecp-1, 0x1.e8p-1,41    0x1.e4p-1, 0x1.ep-1,  0x1.dep-1, 0x1.dap-1, 0x1.d6p-1, 0x1.d4p-1, 0x1.dp-1,42    0x1.ccp-1, 0x1.cap-1, 0x1.c6p-1, 0x1.c4p-1, 0x1.cp-1,  0x1.bep-1, 0x1.bap-1,43    0x1.b8p-1, 0x1.b4p-1, 0x1.b2p-1, 0x1.aep-1, 0x1.acp-1, 0x1.a8p-1, 0x1.a6p-1,44    0x1.a4p-1, 0x1.ap-1,  0x1.9ep-1, 0x1.9cp-1, 0x1.98p-1, 0x1.96p-1, 0x1.94p-1,45    0x1.92p-1, 0x1.9p-1,  0x1.8cp-1, 0x1.8ap-1, 0x1.88p-1, 0x1.86p-1, 0x1.84p-1,46    0x1.8p-1,  0x1.7ep-1, 0x1.7cp-1, 0x1.7ap-1, 0x1.78p-1, 0x1.76p-1, 0x1.74p-1,47    0x1.72p-1, 0x1.7p-1,  0x1.6ep-1, 0x1.6cp-1, 0x1.6ap-1, 0x1.68p-1, 0x1.66p-1,48    0x1.64p-1, 0x1.62p-1, 0x1.6p-1,  0x1.5ep-1, 0x1.5cp-1, 0x1.5ap-1, 0x1.58p-1,49    0x1.56p-1, 0x1.54p-1, 0x1.54p-1, 0x1.52p-1, 0x1.5p-1,  0x1.4ep-1, 0x1.4cp-1,50    0x1.4ap-1, 0x1.4ap-1, 0x1.48p-1, 0x1.46p-1, 0x1.44p-1, 0x1.42p-1, 0x1.4p-1,51    0x1.4p-1,  0x1.3ep-1, 0x1.3cp-1, 0x1.3ap-1, 0x1.3ap-1, 0x1.38p-1, 0x1.36p-1,52    0x1.34p-1, 0x1.34p-1, 0x1.32p-1, 0x1.3p-1,  0x1.3p-1,  0x1.2ep-1, 0x1.2cp-1,53    0x1.2cp-1, 0x1.2ap-1, 0x1.28p-1, 0x1.28p-1, 0x1.26p-1, 0x1.24p-1, 0x1.24p-1,54    0x1.22p-1, 0x1.2p-1,  0x1.2p-1,  0x1.1ep-1, 0x1.1cp-1, 0x1.1cp-1, 0x1.1ap-1,55    0x1.1ap-1, 0x1.18p-1, 0x1.16p-1, 0x1.16p-1, 0x1.14p-1, 0x1.14p-1, 0x1.12p-1,56    0x1.1p-1,  0x1.1p-1,  0x1.0ep-1, 0x1.0ep-1, 0x1.0cp-1, 0x1.0cp-1, 0x1.0ap-1,57    0x1.0ap-1, 0x1.08p-1, 0x1.08p-1, 0x1.06p-1, 0x1.06p-1, 0x1.04p-1, 0x1.04p-1,58    0x1.02p-1, 0x1.0p-1};59 60static constexpr double RD[128] = {61    0x1p0,     0x1.fcp-1, 0x1.f8p-1, 0x1.f4p-1, 0x1.fp-1,  0x1.ecp-1, 0x1.e8p-1,62    0x1.e4p-1, 0x1.ep-1,  0x1.dep-1, 0x1.dap-1, 0x1.d6p-1, 0x1.d4p-1, 0x1.dp-1,63    0x1.ccp-1, 0x1.cap-1, 0x1.c6p-1, 0x1.c4p-1, 0x1.cp-1,  0x1.bep-1, 0x1.bap-1,64    0x1.b8p-1, 0x1.b4p-1, 0x1.b2p-1, 0x1.aep-1, 0x1.acp-1, 0x1.a8p-1, 0x1.a6p-1,65    0x1.a4p-1, 0x1.ap-1,  0x1.9ep-1, 0x1.9cp-1, 0x1.98p-1, 0x1.96p-1, 0x1.94p-1,66    0x1.92p-1, 0x1.9p-1,  0x1.8cp-1, 0x1.8ap-1, 0x1.88p-1, 0x1.86p-1, 0x1.84p-1,67    0x1.8p-1,  0x1.7ep-1, 0x1.7cp-1, 0x1.7ap-1, 0x1.78p-1, 0x1.76p-1, 0x1.74p-1,68    0x1.72p-1, 0x1.7p-1,  0x1.6ep-1, 0x1.6cp-1, 0x1.6ap-1, 0x1.68p-1, 0x1.66p-1,69    0x1.64p-1, 0x1.62p-1, 0x1.6p-1,  0x1.5ep-1, 0x1.5cp-1, 0x1.5ap-1, 0x1.58p-1,70    0x1.56p-1, 0x1.54p-1, 0x1.54p-1, 0x1.52p-1, 0x1.5p-1,  0x1.4ep-1, 0x1.4cp-1,71    0x1.4ap-1, 0x1.4ap-1, 0x1.48p-1, 0x1.46p-1, 0x1.44p-1, 0x1.42p-1, 0x1.4p-1,72    0x1.4p-1,  0x1.3ep-1, 0x1.3cp-1, 0x1.3ap-1, 0x1.3ap-1, 0x1.38p-1, 0x1.36p-1,73    0x1.34p-1, 0x1.34p-1, 0x1.32p-1, 0x1.3p-1,  0x1.3p-1,  0x1.2ep-1, 0x1.2cp-1,74    0x1.2cp-1, 0x1.2ap-1, 0x1.28p-1, 0x1.28p-1, 0x1.26p-1, 0x1.24p-1, 0x1.24p-1,75    0x1.22p-1, 0x1.2p-1,  0x1.2p-1,  0x1.1ep-1, 0x1.1cp-1, 0x1.1cp-1, 0x1.1ap-1,76    0x1.1ap-1, 0x1.18p-1, 0x1.16p-1, 0x1.16p-1, 0x1.14p-1, 0x1.14p-1, 0x1.12p-1,77    0x1.1p-1,  0x1.1p-1,  0x1.0ep-1, 0x1.0ep-1, 0x1.0cp-1, 0x1.0cp-1, 0x1.0ap-1,78    0x1.0ap-1, 0x1.08p-1, 0x1.08p-1, 0x1.06p-1, 0x1.06p-1, 0x1.04p-1, 0x1.04p-1,79    0x1.02p-1, 0x1.0p-1};80 81// Compensated constants for exact logarithm range reduction when FMA is not82// available.83// Generated by Sollya with the formula: CD[i] = RD[i]*(1 + i*2^-7) - 184// for RD[i] defined on the table above.85static constexpr double CD[128] = {86    0.0,        -0x1p-14,   -0x1p-12,   -0x1.2p-11,  -0x1p-10,   -0x1.9p-10,87    -0x1.2p-9,  -0x1.88p-9, -0x1p-8,    -0x1.9p-11,  -0x1.fp-10, -0x1.9cp-9,88    -0x1p-12,   -0x1.cp-10, -0x1.bp-9,  -0x1.5p-11,  -0x1.4p-9,  0x1p-14,89    -0x1p-9,    0x1.ap-12,  -0x1.ep-10, 0x1.8p-12,   -0x1.1p-9,  -0x1p-15,90    -0x1.6p-9,  -0x1.ap-11, -0x1.ep-9,  -0x1.f8p-10, -0x1p-12,   -0x1.cp-9,91    -0x1.fp-10, -0x1.cp-12, -0x1p-8,    -0x1.54p-9,  -0x1.6p-10, -0x1.4p-13,92    0x1p-10,    -0x1.88p-9, -0x1.08p-9, -0x1.2p-10,  -0x1p-12,   0x1.2p-11,93    -0x1p-8,    -0x1.acp-9, -0x1.6p-9,  -0x1.1cp-9,  -0x1.cp-10, -0x1.58p-10,94    -0x1p-10,   -0x1.7p-11, -0x1p-11,   -0x1.6p-12,  -0x1p-12,   -0x1.cp-13,95    -0x1p-12,   -0x1.6p-12, -0x1p-11,   -0x1.7p-11,  -0x1p-10,   -0x1.58p-10,96    -0x1.cp-10, -0x1.1cp-9, -0x1.6p-9,  -0x1.acp-9,  -0x1p-8,    0x1.5p-10,97    0x1.2p-11,  -0x1p-12,   -0x1.2p-10, -0x1.08p-9,  -0x1.88p-9, 0x1.0cp-9,98    0x1p-10,    -0x1.4p-13, -0x1.6p-10, -0x1.54p-9,  -0x1p-8,    0x1p-10,99    -0x1.cp-12, -0x1.fp-10, -0x1.cp-9,  0x1.68p-10,  -0x1p-12,   -0x1.f8p-10,100    -0x1.ep-9,  0x1.1p-10,  -0x1.ap-11, -0x1.6p-9,   0x1p-9,     -0x1p-15,101    -0x1.1p-9,  0x1.48p-9,  0x1.8p-12,  -0x1.ep-10,  0x1.6p-9,   0x1.ap-12,102    -0x1p-9,    0x1.48p-9,  0x1p-14,    -0x1.4p-9,   0x1p-9,     -0x1.5p-11,103    -0x1.bp-9,  0x1.1p-10,  -0x1.cp-10, 0x1.54p-9,   -0x1p-12,   -0x1.9cp-9,104    0x1.2p-10,  -0x1.fp-10, 0x1.3p-9,   -0x1.9p-11,  -0x1p-8,    0x1p-12,105    -0x1.88p-9, 0x1.28p-10, -0x1.2p-9,  0x1.fp-10,   -0x1.9p-10, 0x1.4cp-9,106    -0x1p-10,   0x1.9p-9,   -0x1.2p-11, 0x1.c4p-9,   -0x1p-12,   0x1.e8p-9,107    -0x1p-14,   -0x1p-8,108};109 110static constexpr double LOG_R[128] = {111    0x0.0000000000000p0,  0x1.010157588de71p-7, 0x1.0205658935847p-6,112    0x1.8492528c8cabfp-6, 0x1.0415d89e74444p-5, 0x1.466aed42de3eap-5,113    0x1.894aa149fb343p-5, 0x1.ccb73cdddb2ccp-5, 0x1.08598b59e3a07p-4,114    0x1.1973bd1465567p-4, 0x1.3bdf5a7d1ee64p-4, 0x1.5e95a4d9791cbp-4,115    0x1.700d30aeac0e1p-4, 0x1.9335e5d594989p-4, 0x1.b6ac88dad5b1cp-4,116    0x1.c885801bc4b23p-4, 0x1.ec739830a112p-4,  0x1.fe89139dbd566p-4,117    0x1.1178e8227e47cp-3, 0x1.1aa2b7e23f72ap-3, 0x1.2d1610c86813ap-3,118    0x1.365fcb0159016p-3, 0x1.4913d8333b561p-3, 0x1.527e5e4a1b58dp-3,119    0x1.6574ebe8c133ap-3, 0x1.6f0128b756abcp-3, 0x1.823c16551a3c2p-3,120    0x1.8beafeb38fe8cp-3, 0x1.95a5adcf7017fp-3, 0x1.a93ed3c8ad9e3p-3,121    0x1.b31d8575bce3dp-3, 0x1.bd087383bd8adp-3, 0x1.d1037f2655e7bp-3,122    0x1.db13db0d4894p-3,  0x1.e530effe71012p-3, 0x1.ef5ade4dcffe6p-3,123    0x1.f991c6cb3b379p-3, 0x1.07138604d5862p-2, 0x1.0c42d676162e3p-2,124    0x1.1178e8227e47cp-2, 0x1.16b5ccbacfb73p-2, 0x1.1bf99635a6b95p-2,125    0x1.269621134db92p-2, 0x1.2bef07cdc9354p-2, 0x1.314f1e1d35ce4p-2,126    0x1.36b6776be1117p-2, 0x1.3c25277333184p-2, 0x1.419b423d5e8c7p-2,127    0x1.4718dc271c41bp-2, 0x1.4c9e09e172c3cp-2, 0x1.522ae0738a3d8p-2,128    0x1.57bf753c8d1fbp-2, 0x1.5d5bddf595f3p-2,  0x1.630030b3aac49p-2,129    0x1.68ac83e9c6a14p-2, 0x1.6e60ee6af1972p-2, 0x1.741d876c67bb1p-2,130    0x1.79e26687cfb3ep-2, 0x1.7fafa3bd8151cp-2, 0x1.85855776dcbfbp-2,131    0x1.8b639a88b2df5p-2, 0x1.914a8635bf68ap-2, 0x1.973a3431356aep-2,132    0x1.9d32bea15ed3bp-2, 0x1.a33440224fa79p-2, 0x1.a33440224fa79p-2,133    0x1.a93ed3c8ad9e3p-2, 0x1.af5295248cddp-2,  0x1.b56fa04462909p-2,134    0x1.bb9611b80e2fbp-2, 0x1.c1c60693fa39ep-2, 0x1.c1c60693fa39ep-2,135    0x1.c7ff9c74554c9p-2, 0x1.ce42f18064743p-2, 0x1.d490246defa6bp-2,136    0x1.dae75484c9616p-2, 0x1.e148a1a2726cep-2, 0x1.e148a1a2726cep-2,137    0x1.e7b42c3ddad73p-2, 0x1.ee2a156b413e5p-2, 0x1.f4aa7ee03192dp-2,138    0x1.f4aa7ee03192dp-2, 0x1.fb358af7a4884p-2, 0x1.00e5ae5b207abp-1,139    0x1.04360be7603adp-1, 0x1.04360be7603adp-1, 0x1.078bf0533c568p-1,140    0x1.0ae76e2d054fap-1, 0x1.0ae76e2d054fap-1, 0x1.0e4898611cce1p-1,141    0x1.11af823c75aa8p-1, 0x1.11af823c75aa8p-1, 0x1.151c3f6f29612p-1,142    0x1.188ee40f23ca6p-1, 0x1.188ee40f23ca6p-1, 0x1.1c07849ae6007p-1,143    0x1.1f8635fc61659p-1, 0x1.1f8635fc61659p-1, 0x1.230b0d8bebc98p-1,144    0x1.269621134db92p-1, 0x1.269621134db92p-1, 0x1.2a2786d0ec107p-1,145    0x1.2dbf557b0df43p-1, 0x1.2dbf557b0df43p-1, 0x1.315da4434068bp-1,146    0x1.315da4434068bp-1, 0x1.35028ad9d8c86p-1, 0x1.38ae2171976e7p-1,147    0x1.38ae2171976e7p-1, 0x1.3c6080c36bfb5p-1, 0x1.3c6080c36bfb5p-1,148    0x1.4019c2125ca93p-1, 0x1.43d9ff2f923c5p-1, 0x1.43d9ff2f923c5p-1,149    0x1.47a1527e8a2d3p-1, 0x1.47a1527e8a2d3p-1, 0x1.4b6fd6f970c1fp-1,150    0x1.4b6fd6f970c1fp-1, 0x1.4f45a835a4e19p-1, 0x1.4f45a835a4e19p-1,151    0x1.5322e26867857p-1, 0x1.5322e26867857p-1, 0x1.5707a26bb8c66p-1,152    0x1.5707a26bb8c66p-1, 0x1.5af405c3649ep-1,  0x1.5af405c3649ep-1,153    0x1.5ee82aa24192p-1,  0x0.000000000000p0};154 155static constexpr double LOG2_R[128] = {156    0x0.0000000000000p+0, 0x1.72c7ba20f7327p-7, 0x1.743ee861f3556p-6,157    0x1.184b8e4c56af8p-5, 0x1.77394c9d958d5p-5, 0x1.d6ebd1f1febfep-5,158    0x1.1bb32a600549dp-4, 0x1.4c560fe68af88p-4, 0x1.7d60496cfbb4cp-4,159    0x1.960caf9abb7cap-4, 0x1.c7b528b70f1c5p-4, 0x1.f9c95dc1d1165p-4,160    0x1.097e38ce60649p-3, 0x1.22dadc2ab3497p-3, 0x1.3c6fb650cde51p-3,161    0x1.494f863b8df35p-3, 0x1.633a8bf437ce1p-3, 0x1.7046031c79f85p-3,162    0x1.8a8980abfbd32p-3, 0x1.97c1cb13c7ec1p-3, 0x1.b2602497d5346p-3,163    0x1.bfc67a7fff4ccp-3, 0x1.dac22d3e441d3p-3, 0x1.e857d3d361368p-3,164    0x1.01d9bbcfa61d4p-2, 0x1.08bce0d95fa38p-2, 0x1.169c05363f158p-2,165    0x1.1d982c9d52708p-2, 0x1.249cd2b13cd6cp-2, 0x1.32bfee370ee68p-2,166    0x1.39de8e1559f6fp-2, 0x1.4106017c3eca3p-2, 0x1.4f6fbb2cec598p-2,167    0x1.56b22e6b578e5p-2, 0x1.5dfdcf1eeae0ep-2, 0x1.6552b49986277p-2,168    0x1.6cb0f6865c8eap-2, 0x1.7b89f02cf2aadp-2, 0x1.8304d90c11fd3p-2,169    0x1.8a8980abfbd32p-2, 0x1.921800924dd3bp-2, 0x1.99b072a96c6b2p-2,170    0x1.a8ff971810a5ep-2, 0x1.b0b67f4f4681p-2,  0x1.b877c57b1b07p-2,171    0x1.c043859e2fdb3p-2, 0x1.c819dc2d45fe4p-2, 0x1.cffae611ad12bp-2,172    0x1.d7e6c0abc3579p-2, 0x1.dfdd89d586e2bp-2, 0x1.e7df5fe538ab3p-2,173    0x1.efec61b011f85p-2, 0x1.f804ae8d0cd02p-2, 0x1.0014332be0033p-1,174    0x1.042bd4b9a7c99p-1, 0x1.08494c66b8efp-1,  0x1.0c6caaf0c5597p-1,175    0x1.1096015dee4dap-1, 0x1.14c560fe68af9p-1, 0x1.18fadb6e2d3c2p-1,176    0x1.1d368296b5255p-1, 0x1.217868b0c37e8p-1, 0x1.25c0a0463bebp-1,177    0x1.2a0f3c340705cp-1, 0x1.2e644fac04fd8p-1, 0x1.2e644fac04fd8p-1,178    0x1.32bfee370ee68p-1, 0x1.37222bb70747cp-1, 0x1.3b8b1c68fa6edp-1,179    0x1.3ffad4e74f1d6p-1, 0x1.44716a2c08262p-1, 0x1.44716a2c08262p-1,180    0x1.48eef19317991p-1, 0x1.4d7380dcc422dp-1, 0x1.51ff2e30214bcp-1,181    0x1.5692101d9b4a6p-1, 0x1.5b2c3da19723bp-1, 0x1.5b2c3da19723bp-1,182    0x1.5fcdce2727ddbp-1, 0x1.6476d98ad990ap-1, 0x1.6927781d932a8p-1,183    0x1.6927781d932a8p-1, 0x1.6ddfc2a78fc63p-1, 0x1.729fd26b707c8p-1,184    0x1.7767c12967a45p-1, 0x1.7767c12967a45p-1, 0x1.7c37a9227e7fbp-1,185    0x1.810fa51bf65fdp-1, 0x1.810fa51bf65fdp-1, 0x1.85efd062c656dp-1,186    0x1.8ad846cf369a4p-1, 0x1.8ad846cf369a4p-1, 0x1.8fc924c89ac84p-1,187    0x1.94c287492c4dbp-1, 0x1.94c287492c4dbp-1, 0x1.99c48be2063c8p-1,188    0x1.9ecf50bf43f13p-1, 0x1.9ecf50bf43f13p-1, 0x1.a3e2f4ac43f6p-1,189    0x1.a8ff971810a5ep-1, 0x1.a8ff971810a5ep-1, 0x1.ae255819f022dp-1,190    0x1.b35458761d479p-1, 0x1.b35458761d479p-1, 0x1.b88cb9a2ab521p-1,191    0x1.b88cb9a2ab521p-1, 0x1.bdce9dcc96187p-1, 0x1.c31a27dd00b4ap-1,192    0x1.c31a27dd00b4ap-1, 0x1.c86f7b7ea4a89p-1, 0x1.c86f7b7ea4a89p-1,193    0x1.cdcebd2373995p-1, 0x1.d338120a6dd9dp-1, 0x1.d338120a6dd9dp-1,194    0x1.d8aba045b01c8p-1, 0x1.d8aba045b01c8p-1, 0x1.de298ec0bac0dp-1,195    0x1.de298ec0bac0dp-1, 0x1.e3b20546f554ap-1, 0x1.e3b20546f554ap-1,196    0x1.e9452c8a71028p-1, 0x1.e9452c8a71028p-1, 0x1.eee32e2aeccbfp-1,197    0x1.eee32e2aeccbfp-1, 0x1.f48c34bd1e96fp-1, 0x1.f48c34bd1e96fp-1,198    0x1.fa406bd2443dfp-1, 0x1.0000000000000p0};199 200// Generated by Sollya with:201// for i from 0 to 127 do {202//     r = 2^-8 * ceil( 2^8 * (1 - 2^(-8)) / (1 + i*2^-7) );203//     b = nearestint(log(r)*2^43) * 2^-43;204//     c = round(log(r) - b, D, RN);205//     print("{", -c, ",", -b, "},");206//   };207// We replace LOG_R[0] with log10(1.0) == 0.0208alignas(16) static constexpr NumberPair<double> LOG_R_DD[128] = {209    {0.0, 0.0},210    {-0x1.0c76b999d2be8p-46, 0x1.010157589p-7},211    {-0x1.3dc5b06e2f7d2p-45, 0x1.0205658938p-6},212    {-0x1.aa0ba325a0c34p-45, 0x1.8492528c9p-6},213    {0x1.111c05cf1d753p-47, 0x1.0415d89e74p-5},214    {-0x1.c167375bdfd28p-45, 0x1.466aed42ep-5},215    {-0x1.97995d05a267dp-46, 0x1.894aa149fcp-5},216    {-0x1.a68f247d82807p-46, 0x1.ccb73cdddcp-5},217    {-0x1.7e5dd7009902cp-46, 0x1.08598b59e4p-4},218    {-0x1.5325d560d9e9bp-45, 0x1.1973bd1466p-4},219    {0x1.cc85ea5db4ed7p-45, 0x1.3bdf5a7d1ep-4},220    {-0x1.c69063c5d1d1ep-45, 0x1.5e95a4d97ap-4},221    {0x1.c1e8da99ded32p-49, 0x1.700d30aeacp-4},222    {0x1.3115c3abd47dap-45, 0x1.9335e5d594p-4},223    {-0x1.390802bf768e5p-46, 0x1.b6ac88dad6p-4},224    {0x1.646d1c65aacd3p-45, 0x1.c885801bc4p-4},225    {-0x1.dc068afe645ep-45, 0x1.ec739830a2p-4},226    {-0x1.534d64fa10afdp-45, 0x1.fe89139dbep-4},227    {0x1.1ef78ce2d07f2p-45, 0x1.1178e8227ep-3},228    {0x1.ca78e44389934p-45, 0x1.1aa2b7e23fp-3},229    {0x1.39d6ccb81b4a1p-47, 0x1.2d1610c868p-3},230    {0x1.62fa8234b7289p-51, 0x1.365fcb0159p-3},231    {0x1.5837954fdb678p-45, 0x1.4913d8333bp-3},232    {0x1.633e8e5697dc7p-45, 0x1.527e5e4a1bp-3},233    {0x1.9cf8b2c3c2e78p-46, 0x1.6574ebe8c1p-3},234    {-0x1.5118de59c21e1p-45, 0x1.6f0128b757p-3},235    {0x1.e0ddb9a631e83p-46, 0x1.823c16551ap-3},236    {-0x1.73d54aae92cd1p-47, 0x1.8beafeb39p-3},237    {0x1.7f22858a0ff6fp-47, 0x1.95a5adcf7p-3},238    {-0x1.8724350562169p-45, 0x1.a93ed3c8aep-3},239    {-0x1.c358d4eace1aap-47, 0x1.b31d8575bdp-3},240    {-0x1.d4bc4595412b6p-45, 0x1.bd087383bep-3},241    {-0x1.84a7e75b6f6e4p-47, 0x1.d1037f2656p-3},242    {-0x1.aff2af715b035p-45, 0x1.db13db0d49p-3},243    {0x1.212276041f43p-51, 0x1.e530effe71p-3},244    {-0x1.a211565bb8e11p-51, 0x1.ef5ade4ddp-3},245    {0x1.bcbecca0cdf3p-46, 0x1.f991c6cb3bp-3},246    {0x1.89cdb16ed4e91p-48, 0x1.07138604d58p-2},247    {0x1.7188b163ceae9p-45, 0x1.0c42d67616p-2},248    {-0x1.c210e63a5f01cp-45, 0x1.1178e8227e8p-2},249    {0x1.b9acdf7a51681p-45, 0x1.16b5ccbacf8p-2},250    {0x1.ca6ed5147bdb7p-45, 0x1.1bf99635a68p-2},251    {0x1.c93c1df5bb3b6p-45, 0x1.269621134d8p-2},252    {0x1.a9cfa4a5004f4p-45, 0x1.2bef07cdc9p-2},253    {-0x1.8e27ad3213cb8p-45, 0x1.314f1e1d36p-2},254    {0x1.16ecdb0f177c8p-46, 0x1.36b6776be1p-2},255    {0x1.83b54b606bd5cp-46, 0x1.3c25277333p-2},256    {0x1.8e436ec90e09dp-47, 0x1.419b423d5e8p-2},257    {-0x1.f27ce0967d675p-45, 0x1.4718dc271c8p-2},258    {-0x1.e20891b0ad8a4p-45, 0x1.4c9e09e173p-2},259    {0x1.ebe708164c759p-45, 0x1.522ae0738ap-2},260    {0x1.fadedee5d40efp-46, 0x1.57bf753c8dp-2},261    {-0x1.a0b2a08a465dcp-47, 0x1.5d5bddf596p-2},262    {-0x1.db623e731aep-45, 0x1.630030b3abp-2},263    {0x1.0a0d32756ebap-45, 0x1.68ac83e9c68p-2},264    {0x1.721657c222d87p-46, 0x1.6e60ee6af18p-2},265    {0x1.d8b0949dc60b3p-45, 0x1.741d876c678p-2},266    {0x1.9ec7d2efd1778p-45, 0x1.79e26687cf8p-2},267    {-0x1.72090c812566ap-45, 0x1.7fafa3bd818p-2},268    {0x1.fd56f3333778ap-45, 0x1.85855776dc8p-2},269    {-0x1.05ae1e5e7047p-45, 0x1.8b639a88b3p-2},270    {-0x1.766b52ee6307dp-46, 0x1.914a8635bf8p-2},271    {-0x1.52313a502d9fp-46, 0x1.973a3431358p-2},272    {-0x1.6279e10d0c0bp-45, 0x1.9d32bea15fp-2},273    {0x1.3c6457f9d79f5p-45, 0x1.a33440224f8p-2},274    {0x1.3c6457f9d79f5p-45, 0x1.a33440224f8p-2},275    {0x1.e36f2bea77a5dp-46, 0x1.a93ed3c8ad8p-2},276    {-0x1.17cc552774458p-45, 0x1.af5295248dp-2},277    {0x1.095252d841995p-46, 0x1.b56fa044628p-2},278    {0x1.7d85bf40a666dp-45, 0x1.bb9611b80ep-2},279    {0x1.cec807fe8e18p-45, 0x1.c1c60693fap-2},280    {0x1.cec807fe8e18p-45, 0x1.c1c60693fap-2},281    {-0x1.9b6ddc15249aep-45, 0x1.c7ff9c74558p-2},282    {-0x1.797c33ec7a6bp-47, 0x1.ce42f180648p-2},283    {0x1.35bafe9a767a8p-45, 0x1.d490246def8p-2},284    {-0x1.ea42d60dc616ap-46, 0x1.dae75484c98p-2},285    {-0x1.326b207322938p-46, 0x1.e148a1a2728p-2},286    {-0x1.326b207322938p-46, 0x1.e148a1a2728p-2},287    {-0x1.465505372bd08p-45, 0x1.e7b42c3ddbp-2},288    {0x1.f27f45a470251p-45, 0x1.ee2a156b41p-2},289    {0x1.2cde56f014a8bp-46, 0x1.f4aa7ee0318p-2},290    {0x1.2cde56f014a8bp-46, 0x1.f4aa7ee0318p-2},291    {0x1.085fa3c164935p-47, 0x1.fb358af7a48p-2},292    {-0x1.53ba3b1727b1cp-47, 0x1.00e5ae5b208p-1},293    {-0x1.4c45fe79539ep-47, 0x1.04360be7604p-1},294    {-0x1.4c45fe79539ep-47, 0x1.04360be7604p-1},295    {0x1.6812241edf5fdp-45, 0x1.078bf0533c4p-1},296    {0x1.f486b887e7e27p-46, 0x1.0ae76e2d054p-1},297    {0x1.f486b887e7e27p-46, 0x1.0ae76e2d054p-1},298    {0x1.c299807801742p-46, 0x1.0e4898611ccp-1},299    {-0x1.58647bb9ddcb2p-45, 0x1.11af823c75cp-1},300    {-0x1.58647bb9ddcb2p-45, 0x1.11af823c75cp-1},301    {-0x1.edd97a293ae49p-45, 0x1.151c3f6f298p-1},302    {0x1.4cc4ef8ab465p-46, 0x1.188ee40f23cp-1},303    {0x1.4cc4ef8ab465p-46, 0x1.188ee40f23cp-1},304    {0x1.cacdeed70e667p-51, 0x1.1c07849ae6p-1},305    {-0x1.a7242c9fe81d3p-45, 0x1.1f8635fc618p-1},306    {-0x1.a7242c9fe81d3p-45, 0x1.1f8635fc618p-1},307    {0x1.2fc066e48667bp-46, 0x1.230b0d8bebcp-1},308    {-0x1.b61f10522625p-47, 0x1.269621134dcp-1},309    {-0x1.b61f10522625p-47, 0x1.269621134dcp-1},310    {0x1.06d2be797882dp-45, 0x1.2a2786d0ecp-1},311    {-0x1.7a6e507b9dc11p-46, 0x1.2dbf557b0ep-1},312    {-0x1.7a6e507b9dc11p-46, 0x1.2dbf557b0ep-1},313    {-0x1.74e93c5a0ed9cp-45, 0x1.315da443408p-1},314    {-0x1.74e93c5a0ed9cp-45, 0x1.315da443408p-1},315    {0x1.0b83f9527e6acp-46, 0x1.35028ad9d8cp-1},316    {-0x1.18b7abb5569a4p-45, 0x1.38ae2171978p-1},317    {-0x1.18b7abb5569a4p-45, 0x1.38ae2171978p-1},318    {-0x1.2b7367cfe13c2p-47, 0x1.3c6080c36cp-1},319    {-0x1.2b7367cfe13c2p-47, 0x1.3c6080c36cp-1},320    {-0x1.6ce7930f0c74cp-45, 0x1.4019c2125ccp-1},321    {-0x1.d984f481051f7p-48, 0x1.43d9ff2f924p-1},322    {-0x1.d984f481051f7p-48, 0x1.43d9ff2f924p-1},323    {-0x1.2cb6af94d60aap-45, 0x1.47a1527e8a4p-1},324    {-0x1.2cb6af94d60aap-45, 0x1.47a1527e8a4p-1},325    {0x1.f7115ed4c541cp-49, 0x1.4b6fd6f970cp-1},326    {0x1.f7115ed4c541cp-49, 0x1.4b6fd6f970cp-1},327    {-0x1.e6c516d93b8fbp-45, 0x1.4f45a835a5p-1},328    {-0x1.e6c516d93b8fbp-45, 0x1.4f45a835a5p-1},329    {0x1.5ccc45d257531p-47, 0x1.5322e268678p-1},330    {0x1.5ccc45d257531p-47, 0x1.5322e268678p-1},331    {0x1.9980bff3303ddp-47, 0x1.5707a26bb8cp-1},332    {0x1.9980bff3303ddp-47, 0x1.5707a26bb8cp-1},333    {0x1.dfa63ac10c9fbp-45, 0x1.5af405c3648p-1},334    {0x1.dfa63ac10c9fbp-45, 0x1.5af405c3648p-1},335    {0x1.202380cda46bep-45, 0x1.5ee82aa2418p-1},336    {0.0, 0.0},337};338 339// Logarithm range reduction - Step 2:340//   r(k) = 2^-16 round(2^16 / (1 + k*2^-14)) for k = -2^6 .. 2^7.341// Output range:342//   [-0x1.3ffcp-15, 0x1.3e3dp-15]343// We store S2[i] = 2^16 (r(i - 2^6) - 1).344alignas(8) static constexpr int S2[193] = {345    0x101,  0xfd,   0xf9,   0xf5,   0xf1,   0xed,   0xe9,   0xe5,   0xe1,346    0xdd,   0xd9,   0xd5,   0xd1,   0xcd,   0xc9,   0xc5,   0xc1,   0xbd,347    0xb9,   0xb4,   0xb0,   0xac,   0xa8,   0xa4,   0xa0,   0x9c,   0x98,348    0x94,   0x90,   0x8c,   0x88,   0x84,   0x80,   0x7c,   0x78,   0x74,349    0x70,   0x6c,   0x68,   0x64,   0x60,   0x5c,   0x58,   0x54,   0x50,350    0x4c,   0x48,   0x44,   0x40,   0x3c,   0x38,   0x34,   0x30,   0x2c,351    0x28,   0x24,   0x20,   0x1c,   0x18,   0x14,   0x10,   0xc,    0x8,352    0x4,    0x0,    -0x4,   -0x8,   -0xc,   -0x10,  -0x14,  -0x18,  -0x1c,353    -0x20,  -0x24,  -0x28,  -0x2c,  -0x30,  -0x34,  -0x38,  -0x3c,  -0x40,354    -0x44,  -0x48,  -0x4c,  -0x50,  -0x54,  -0x58,  -0x5c,  -0x60,  -0x64,355    -0x68,  -0x6c,  -0x70,  -0x74,  -0x78,  -0x7c,  -0x80,  -0x84,  -0x88,356    -0x8c,  -0x90,  -0x94,  -0x98,  -0x9c,  -0xa0,  -0xa4,  -0xa8,  -0xac,357    -0xb0,  -0xb4,  -0xb7,  -0xbb,  -0xbf,  -0xc3,  -0xc7,  -0xcb,  -0xcf,358    -0xd3,  -0xd7,  -0xdb,  -0xdf,  -0xe3,  -0xe7,  -0xeb,  -0xef,  -0xf3,359    -0xf7,  -0xfb,  -0xff,  -0x103, -0x107, -0x10b, -0x10f, -0x113, -0x117,360    -0x11b, -0x11f, -0x123, -0x127, -0x12b, -0x12f, -0x133, -0x137, -0x13a,361    -0x13e, -0x142, -0x146, -0x14a, -0x14e, -0x152, -0x156, -0x15a, -0x15e,362    -0x162, -0x166, -0x16a, -0x16e, -0x172, -0x176, -0x17a, -0x17e, -0x182,363    -0x186, -0x18a, -0x18e, -0x192, -0x195, -0x199, -0x19d, -0x1a1, -0x1a5,364    -0x1a9, -0x1ad, -0x1b1, -0x1b5, -0x1b9, -0x1bd, -0x1c1, -0x1c5, -0x1c9,365    -0x1cd, -0x1d1, -0x1d5, -0x1d9, -0x1dd, -0x1e0, -0x1e4, -0x1e8, -0x1ec,366    -0x1f0, -0x1f4, -0x1f8, -0x1fc};367 368static constexpr double R2[193] = {369    0x1.0101p0,  0x1.00fdp0,  0x1.00f9p0,  0x1.00f5p0,  0x1.00f1p0,370    0x1.00edp0,  0x1.00e9p0,  0x1.00e5p0,  0x1.00e1p0,  0x1.00ddp0,371    0x1.00d9p0,  0x1.00d5p0,  0x1.00d1p0,  0x1.00cdp0,  0x1.00c9p0,372    0x1.00c5p0,  0x1.00c1p0,  0x1.00bdp0,  0x1.00b9p0,  0x1.00b4p0,373    0x1.00bp0,   0x1.00acp0,  0x1.00a8p0,  0x1.00a4p0,  0x1.00ap0,374    0x1.009cp0,  0x1.0098p0,  0x1.0094p0,  0x1.009p0,   0x1.008cp0,375    0x1.0088p0,  0x1.0084p0,  0x1.008p0,   0x1.007cp0,  0x1.0078p0,376    0x1.0074p0,  0x1.007p0,   0x1.006cp0,  0x1.0068p0,  0x1.0064p0,377    0x1.006p0,   0x1.005cp0,  0x1.0058p0,  0x1.0054p0,  0x1.005p0,378    0x1.004cp0,  0x1.0048p0,  0x1.0044p0,  0x1.004p0,   0x1.003cp0,379    0x1.0038p0,  0x1.0034p0,  0x1.003p0,   0x1.002cp0,  0x1.0028p0,380    0x1.0024p0,  0x1.002p0,   0x1.001cp0,  0x1.0018p0,  0x1.0014p0,381    0x1.001p0,   0x1.000cp0,  0x1.0008p0,  0x1.0004p0,  0x1p0,382    0x1.fff8p-1, 0x1.fffp-1,  0x1.ffe8p-1, 0x1.ffep-1,  0x1.ffd8p-1,383    0x1.ffdp-1,  0x1.ffc8p-1, 0x1.ffcp-1,  0x1.ffb8p-1, 0x1.ffbp-1,384    0x1.ffa8p-1, 0x1.ffap-1,  0x1.ff98p-1, 0x1.ff9p-1,  0x1.ff88p-1,385    0x1.ff8p-1,  0x1.ff78p-1, 0x1.ff7p-1,  0x1.ff68p-1, 0x1.ff6p-1,386    0x1.ff58p-1, 0x1.ff5p-1,  0x1.ff48p-1, 0x1.ff4p-1,  0x1.ff38p-1,387    0x1.ff3p-1,  0x1.ff28p-1, 0x1.ff2p-1,  0x1.ff18p-1, 0x1.ff1p-1,388    0x1.ff08p-1, 0x1.ffp-1,   0x1.fef8p-1, 0x1.fefp-1,  0x1.fee8p-1,389    0x1.feep-1,  0x1.fed8p-1, 0x1.fedp-1,  0x1.fec8p-1, 0x1.fecp-1,390    0x1.feb8p-1, 0x1.febp-1,  0x1.fea8p-1, 0x1.feap-1,  0x1.fe98p-1,391    0x1.fe92p-1, 0x1.fe8ap-1, 0x1.fe82p-1, 0x1.fe7ap-1, 0x1.fe72p-1,392    0x1.fe6ap-1, 0x1.fe62p-1, 0x1.fe5ap-1, 0x1.fe52p-1, 0x1.fe4ap-1,393    0x1.fe42p-1, 0x1.fe3ap-1, 0x1.fe32p-1, 0x1.fe2ap-1, 0x1.fe22p-1,394    0x1.fe1ap-1, 0x1.fe12p-1, 0x1.fe0ap-1, 0x1.fe02p-1, 0x1.fdfap-1,395    0x1.fdf2p-1, 0x1.fdeap-1, 0x1.fde2p-1, 0x1.fddap-1, 0x1.fdd2p-1,396    0x1.fdcap-1, 0x1.fdc2p-1, 0x1.fdbap-1, 0x1.fdb2p-1, 0x1.fdaap-1,397    0x1.fda2p-1, 0x1.fd9ap-1, 0x1.fd92p-1, 0x1.fd8cp-1, 0x1.fd84p-1,398    0x1.fd7cp-1, 0x1.fd74p-1, 0x1.fd6cp-1, 0x1.fd64p-1, 0x1.fd5cp-1,399    0x1.fd54p-1, 0x1.fd4cp-1, 0x1.fd44p-1, 0x1.fd3cp-1, 0x1.fd34p-1,400    0x1.fd2cp-1, 0x1.fd24p-1, 0x1.fd1cp-1, 0x1.fd14p-1, 0x1.fd0cp-1,401    0x1.fd04p-1, 0x1.fcfcp-1, 0x1.fcf4p-1, 0x1.fcecp-1, 0x1.fce4p-1,402    0x1.fcdcp-1, 0x1.fcd6p-1, 0x1.fccep-1, 0x1.fcc6p-1, 0x1.fcbep-1,403    0x1.fcb6p-1, 0x1.fcaep-1, 0x1.fca6p-1, 0x1.fc9ep-1, 0x1.fc96p-1,404    0x1.fc8ep-1, 0x1.fc86p-1, 0x1.fc7ep-1, 0x1.fc76p-1, 0x1.fc6ep-1,405    0x1.fc66p-1, 0x1.fc5ep-1, 0x1.fc56p-1, 0x1.fc4ep-1, 0x1.fc46p-1,406    0x1.fc4p-1,  0x1.fc38p-1, 0x1.fc3p-1,  0x1.fc28p-1, 0x1.fc2p-1,407    0x1.fc18p-1, 0x1.fc1p-1,  0x1.fc08p-1,408};409 410// Logarithm range reduction - Step 3:411//   r(k) = 2^-21 round(2^21 / (1 + k*2^-21)) for k = -80 .. 80.412// Output range:413//   [-0x1.01928p-22 , 0x1p-22]414// We store S[i] = 2^21 (r(i - 80) - 1).415alignas(8) static constexpr int S3[161] = {416    0x50,  0x4f,  0x4e,  0x4d,  0x4c,  0x4b,  0x4a,  0x49,  0x48,  0x47,  0x46,417    0x45,  0x44,  0x43,  0x42,  0x41,  0x40,  0x3f,  0x3e,  0x3d,  0x3c,  0x3b,418    0x3a,  0x39,  0x38,  0x37,  0x36,  0x35,  0x34,  0x33,  0x32,  0x31,  0x30,419    0x2f,  0x2e,  0x2d,  0x2c,  0x2b,  0x2a,  0x29,  0x28,  0x27,  0x26,  0x25,420    0x24,  0x23,  0x22,  0x21,  0x20,  0x1f,  0x1e,  0x1d,  0x1c,  0x1b,  0x1a,421    0x19,  0x18,  0x17,  0x16,  0x15,  0x14,  0x13,  0x12,  0x11,  0x10,  0xf,422    0xe,   0xd,   0xc,   0xb,   0xa,   0x9,   0x8,   0x7,   0x6,   0x5,   0x4,423    0x3,   0x2,   0x1,   0x0,   -0x1,  -0x2,  -0x3,  -0x4,  -0x5,  -0x6,  -0x7,424    -0x8,  -0x9,  -0xa,  -0xb,  -0xc,  -0xd,  -0xe,  -0xf,  -0x10, -0x11, -0x12,425    -0x13, -0x14, -0x15, -0x16, -0x17, -0x18, -0x19, -0x1a, -0x1b, -0x1c, -0x1d,426    -0x1e, -0x1f, -0x20, -0x21, -0x22, -0x23, -0x24, -0x25, -0x26, -0x27, -0x28,427    -0x29, -0x2a, -0x2b, -0x2c, -0x2d, -0x2e, -0x2f, -0x30, -0x31, -0x32, -0x33,428    -0x34, -0x35, -0x36, -0x37, -0x38, -0x39, -0x3a, -0x3b, -0x3c, -0x3d, -0x3e,429    -0x3f, -0x40, -0x41, -0x42, -0x43, -0x44, -0x45, -0x46, -0x47, -0x48, -0x49,430    -0x4a, -0x4b, -0x4c, -0x4d, -0x4e, -0x4f, -0x50,431};432 433// Logarithm range reduction - Step 4434//   r(k) = 2^-28 round(2^28 / (1 + k*2^-28)) for k = -65 .. 64.435// Output range:436//   [-0x1.0002143p-29 , 0x1p-29]437// We store S[i] = 2^28 (r(i - 65) - 1).438alignas(8) static constexpr int S4[130] = {439    0x41,  0x40,  0x3f,  0x3e,  0x3d,  0x3c,  0x3b,  0x3a,  0x39,  0x38,  0x37,440    0x36,  0x35,  0x34,  0x33,  0x32,  0x31,  0x30,  0x2f,  0x2e,  0x2d,  0x2c,441    0x2b,  0x2a,  0x29,  0x28,  0x27,  0x26,  0x25,  0x24,  0x23,  0x22,  0x21,442    0x20,  0x1f,  0x1e,  0x1d,  0x1c,  0x1b,  0x1a,  0x19,  0x18,  0x17,  0x16,443    0x15,  0x14,  0x13,  0x12,  0x11,  0x10,  0xf,   0xe,   0xd,   0xc,   0xb,444    0xa,   0x9,   0x8,   0x7,   0x6,   0x5,   0x4,   0x3,   0x2,   0x1,   0x0,445    -0x1,  -0x2,  -0x3,  -0x4,  -0x5,  -0x6,  -0x7,  -0x8,  -0x9,  -0xa,  -0xb,446    -0xc,  -0xd,  -0xe,  -0xf,  -0x10, -0x11, -0x12, -0x13, -0x14, -0x15, -0x16,447    -0x17, -0x18, -0x19, -0x1a, -0x1b, -0x1c, -0x1d, -0x1e, -0x1f, -0x20, -0x21,448    -0x22, -0x23, -0x24, -0x25, -0x26, -0x27, -0x28, -0x29, -0x2a, -0x2b, -0x2c,449    -0x2d, -0x2e, -0x2f, -0x30, -0x31, -0x32, -0x33, -0x34, -0x35, -0x36, -0x37,450    -0x38, -0x39, -0x3a, -0x3b, -0x3c, -0x3d, -0x3e, -0x3f, -0x40,451};452 453// Lookup table for exp(m) with m = -104, ..., 89.454//   -104 = floor(log(single precision's min denormal))455//     89 = ceil(log(single precision's max normal))456// Table is generated with Sollya as follow:457// > display = hexadecimal;458// > for i from -104 to 89 do { D(exp(i)); };459static constexpr double EXP_M1[195] = {460    0x1.f1e6b68529e33p-151, 0x1.525be4e4e601dp-149, 0x1.cbe0a45f75eb1p-148,461    0x1.3884e838aea68p-146, 0x1.a8c1f14e2af5dp-145, 0x1.20a717e64a9bdp-143,462    0x1.8851d84118908p-142, 0x1.0a9bdfb02d240p-140, 0x1.6a5bea046b42ep-139,463    0x1.ec7f3b269efa8p-138, 0x1.4eafb87eab0f2p-136, 0x1.c6e2d05bbc000p-135,464    0x1.35208867c2683p-133, 0x1.a425b317eeacdp-132, 0x1.1d8508fa8246ap-130,465    0x1.840fbc08fdc8ap-129, 0x1.07b7112bc1ffep-127, 0x1.666d0dad2961dp-126,466    0x1.e726c3f64d0fep-125, 0x1.4b0dc07cabf98p-123, 0x1.c1f2daf3b6a46p-122,467    0x1.31c5957a47de2p-120, 0x1.9f96445648b9fp-119, 0x1.1a6baeadb4fd1p-117,468    0x1.7fd974d372e45p-116, 0x1.04da4d1452919p-114, 0x1.62891f06b3450p-113,469    0x1.e1dd273aa8a4ap-112, 0x1.4775e0840bfddp-110, 0x1.bd109d9d94bdap-109,470    0x1.2e73f53fba844p-107, 0x1.9b138170d6bfep-106, 0x1.175af0cf60ec5p-104,471    0x1.7baee1bffa80bp-103, 0x1.02057d1245cebp-101, 0x1.5eafffb34ba31p-100,472    0x1.dca23bae16424p-99,  0x1.43e7fc88b8056p-97,  0x1.b83bf23a9a9ebp-96,473    0x1.2b2b8dd05b318p-94,  0x1.969d47321e4ccp-93,  0x1.1452b7723aed2p-91,474    0x1.778fe2497184cp-90,  0x1.fe7116182e9ccp-89,  0x1.5ae191a99585ap-87,475    0x1.d775d87da854dp-86,  0x1.4063f8cc8bb98p-84,  0x1.b374b315f87c1p-83,476    0x1.27ec458c65e3cp-81,  0x1.923372c67a074p-80,  0x1.1152eaeb73c08p-78,477    0x1.737c5645114b5p-77,  0x1.f8e6c24b5592ep-76,  0x1.571db733a9d61p-74,478    0x1.d257d547e083fp-73,  0x1.3ce9b9de78f85p-71,  0x1.aebabae3a41b5p-70,479    0x1.24b6031b49bdap-68,  0x1.8dd5e1bb09d7ep-67,  0x1.0e5b73d1ff53dp-65,480    0x1.6f741de1748ecp-64,  0x1.f36bd37f42f3ep-63,  0x1.536452ee2f75cp-61,481    0x1.cd480a1b74820p-60,  0x1.39792499b1a24p-58,  0x1.aa0de4bf35b38p-57,482    0x1.2188ad6ae3303p-55,  0x1.898471fca6055p-54,  0x1.0b6c3afdde064p-52,483    0x1.6b7719a59f0e0p-51,  0x1.ee001eed62aa0p-50,  0x1.4fb547c775da8p-48,484    0x1.c8464f7616468p-47,  0x1.36121e24d3bbap-45,  0x1.a56e0c2ac7f75p-44,485    0x1.1e642baeb84a0p-42,  0x1.853f01d6d53bap-41,  0x1.0885298767e9ap-39,486    0x1.67852a7007e42p-38,  0x1.e8a37a45fc32ep-37,  0x1.4c1078fe9228ap-35,487    0x1.c3527e433fab1p-34,  0x1.32b48bf117da2p-32,  0x1.a0db0d0ddb3ecp-31,488    0x1.1b48655f37267p-29,  0x1.81056ff2c5772p-28,  0x1.05a628c699fa1p-26,489    0x1.639e3175a689dp-25,  0x1.e355bbaee85cbp-24,  0x1.4875ca227ec38p-22,490    0x1.be6c6fdb01612p-21,  0x1.2f6053b981d98p-19,  0x1.9c54c3b43bc8bp-18,491    0x1.18354238f6764p-16,  0x1.7cd79b5647c9bp-15,  0x1.02cf22526545ap-13,492    0x1.5fc21041027adp-12,  0x1.de16b9c24a98fp-11,  0x1.44e51f113d4d6p-9,493    0x1.b993fe00d5376p-8,   0x1.2c155b8213cf4p-6,   0x1.97db0ccceb0afp-5,494    0x1.152aaa3bf81ccp-3,   0x1.78b56362cef38p-2,   0x1.0000000000000p+0,495    0x1.5bf0a8b145769p+1,   0x1.d8e64b8d4ddaep+2,   0x1.415e5bf6fb106p+4,496    0x1.b4c902e273a58p+5,   0x1.28d389970338fp+7,   0x1.936dc5690c08fp+8,497    0x1.122885aaeddaap+10,  0x1.749ea7d470c6ep+11,  0x1.fa7157c470f82p+12,498    0x1.5829dcf950560p+14,  0x1.d3c4488ee4f7fp+15,  0x1.3de1654d37c9ap+17,499    0x1.b00b5916ac955p+18,  0x1.259ac48bf05d7p+20,  0x1.8f0ccafad2a87p+21,500    0x1.0f2ebd0a80020p+23,  0x1.709348c0ea4f9p+24,  0x1.f4f22091940bdp+25,501    0x1.546d8f9ed26e1p+27,  0x1.ceb088b68e804p+28,  0x1.3a6e1fd9eecfdp+30,502    0x1.ab5adb9c43600p+31,  0x1.226af33b1fdc1p+33,  0x1.8ab7fb5475fb7p+34,503    0x1.0c3d3920962c9p+36,  0x1.6c932696a6b5dp+37,  0x1.ef822f7f6731dp+38,504    0x1.50bba3796379ap+40,  0x1.c9aae4631c056p+41,  0x1.370470aec28edp+43,505    0x1.a6b765d8cdf6dp+44,  0x1.1f43fcc4b662cp+46,  0x1.866f34a725782p+47,506    0x1.0953e2f3a1ef7p+49,  0x1.689e221bc8d5bp+50,  0x1.ea215a1d20d76p+51,507    0x1.4d13fbb1a001ap+53,  0x1.c4b334617cc67p+54,  0x1.33a43d282a519p+56,508    0x1.a220d397972ebp+57,  0x1.1c25c88df6862p+59,  0x1.8232558201159p+60,509    0x1.0672a3c9eb871p+62,  0x1.64b41c6d37832p+63,  0x1.e4cf766fe49bep+64,510    0x1.49767bc0483e3p+66,  0x1.bfc951eb8bb76p+67,  0x1.304d6aeca254bp+69,511    0x1.9d97010884251p+70,  0x1.19103e4080b45p+72,  0x1.7e013cd114461p+73,512    0x1.03996528e074cp+75,  0x1.60d4f6fdac731p+76,  0x1.df8c5af17ba3bp+77,513    0x1.45e3076d61699p+79,  0x1.baed16a6e0da7p+80,  0x1.2cffdfebde1a1p+82,514    0x1.9919cabefcb69p+83,  0x1.160345c9953e3p+85,  0x1.79dbc9dc53c66p+86,515    0x1.00c810d464097p+88,  0x1.5d009394c5c27p+89,  0x1.da57de8f107a8p+90,516    0x1.425982cf597cdp+92,  0x1.b61e5ca3a5e31p+93,  0x1.29bb825dfcf87p+95,517    0x1.94a90db0d6fe2p+96,  0x1.12fec759586fdp+98,  0x1.75c1dc469e3afp+99,518    0x1.fbfd219c43b04p+100, 0x1.5936d44e1a146p+102, 0x1.d531d8a7ee79cp+103,519    0x1.3ed9d24a2d51bp+105, 0x1.b15cfe5b6e17bp+106, 0x1.268038c2c0e00p+108,520    0x1.9044a73545d48p+109, 0x1.1002ab6218b38p+111, 0x1.71b3540cbf921p+112,521    0x1.f6799ea9c414ap+113, 0x1.55779b984f3ebp+115, 0x1.d01a210c44aa4p+116,522    0x1.3b63da8e91210p+118, 0x1.aca8d6b0116b8p+119, 0x1.234de9e0c74e9p+121,523    0x1.8bec7503ca477p+122, 0x1.0d0eda9796b90p+124, 0x1.6db0118477245p+125,524    0x1.f1056dc7bf22dp+126, 0x1.51c2cc3433801p+128, 0x1.cb108ffbec164p+129,525};526 527// Lookup table for exp(m * 2^(-7)) with m = 0, ..., 127.528// Table is generated with Sollya as follow:529// > display = hexadecimal;530// > for i from 0 to 127 do { D(exp(i / 128)); };531static constexpr double EXP_M2[128] = {532    0x1.0000000000000p0, 0x1.0202015600446p0, 0x1.04080ab55de39p0,533    0x1.06122436410ddp0, 0x1.08205601127edp0, 0x1.0a32a84e9c1f6p0,534    0x1.0c49236829e8cp0, 0x1.0e63cfa7ab09dp0, 0x1.1082b577d34edp0,535    0x1.12a5dd543ccc5p0, 0x1.14cd4fc989cd6p0, 0x1.16f9157587069p0,536    0x1.192937074e0cdp0, 0x1.1b5dbd3f68122p0, 0x1.1d96b0eff0e79p0,537    0x1.1fd41afcba45ep0, 0x1.2216045b6f5cdp0, 0x1.245c7613b8a9bp0,538    0x1.26a7793f60164p0, 0x1.28f7170a755fdp0, 0x1.2b4b58b372c79p0,539    0x1.2da4478b620c7p0, 0x1.3001ecf601af7p0, 0x1.32645269ea829p0,540    0x1.34cb8170b5835p0, 0x1.373783a722012p0, 0x1.39a862bd3c106p0,541    0x1.3c1e2876834aap0, 0x1.3e98deaa11dccp0, 0x1.41188f42c3e32p0,542    0x1.439d443f5f159p0, 0x1.462707b2bac21p0, 0x1.48b5e3c3e8186p0,543    0x1.4b49e2ae5ac67p0, 0x1.4de30ec211e60p0, 0x1.50817263c13cdp0,544    0x1.5325180cfacf7p0, 0x1.55ce0a4c58c7cp0, 0x1.587c53c5a7af0p0,545    0x1.5b2fff3210fd9p0, 0x1.5de9176045ff5p0, 0x1.60a7a734ab0e8p0,546    0x1.636bb9a983258p0, 0x1.663559cf1bc7cp0, 0x1.690492cbf9433p0,547    0x1.6bd96fdd034a2p0, 0x1.6eb3fc55b1e76p0, 0x1.719443a03acb9p0,548    0x1.747a513dbef6ap0, 0x1.776630c678bc1p0, 0x1.7a57ede9ea23ep0,549    0x1.7d4f946f0ba8dp0, 0x1.804d30347b546p0, 0x1.8350cd30ac390p0,550    0x1.865a7772164c5p0, 0x1.896a3b1f66a0ep0, 0x1.8c802477b0010p0,551    0x1.8f9c3fd29beafp0, 0x1.92be99a09bf00p0, 0x1.95e73e6b1b75ep0,552    0x1.99163ad4b1dccp0, 0x1.9c4b9b995509bp0, 0x1.9f876d8e8c566p0,553    0x1.a2c9bda3a3e78p0, 0x1.a61298e1e069cp0, 0x1.a9620c6cb3374p0,554    0x1.acb82581eee54p0, 0x1.b014f179fc3b8p0, 0x1.b3787dc80f95fp0,555    0x1.b6e2d7fa5eb18p0, 0x1.ba540dba56e56p0, 0x1.bdcc2cccd3c85p0,556    0x1.c14b431256446p0, 0x1.c4d15e873c193p0, 0x1.c85e8d43f7cd0p0,557    0x1.cbf2dd7d490f2p0, 0x1.cf8e5d84758a9p0, 0x1.d3311bc7822b4p0,558    0x1.d6db26d16cd67p0, 0x1.da8c8d4a66969p0, 0x1.de455df80e3c0p0,559    0x1.e205a7bdab73ep0, 0x1.e5cd799c6a54ep0, 0x1.e99ce2b397649p0,560    0x1.ed73f240dc142p0, 0x1.f152b7a07bb76p0, 0x1.f539424d90f5ep0,561    0x1.f927a1e24bb76p0, 0x1.fd1de6182f8c9p0, 0x1.008e0f64294abp1,562    0x1.02912df5ce72ap1, 0x1.049856cd84339p1, 0x1.06a39207f0a09p1,563    0x1.08b2e7d2035cfp1, 0x1.0ac6606916501p1, 0x1.0cde041b0e9aep1,564    0x1.0ef9db467dcf8p1, 0x1.1119ee5ac36b6p1, 0x1.133e45d82e952p1,565    0x1.1566ea50201d7p1, 0x1.1793e4652cc50p1, 0x1.19c53ccb3fc6bp1,566    0x1.1bfafc47bda73p1, 0x1.1e352bb1a74adp1, 0x1.2073d3f1bd518p1,567    0x1.22b6fe02a3b9cp1, 0x1.24feb2f105cb8p1, 0x1.274afbdbba4a6p1,568    0x1.299be1f3e7f1cp1, 0x1.2bf16e7d2a38cp1, 0x1.2e4baacdb6614p1,569    0x1.30aaa04e80d05p1, 0x1.330e587b62b28p1, 0x1.3576dce33feadp1,570    0x1.37e437282d4eep1, 0x1.3a5670ff972edp1, 0x1.3ccd9432682b4p1,571    0x1.3f49aa9d30590p1, 0x1.41cabe304cb34p1, 0x1.4450d8f00edd4p1,572    0x1.46dc04f4e5338p1, 0x1.496c4c6b832dap1, 0x1.4c01b9950a111p1,573    0x1.4e9c56c731f5dp1, 0x1.513c2e6c731d7p1, 0x1.53e14b042f9cap1,574    0x1.568bb722dd593p1, 0x1.593b7d72305bbp1,575};576 577} // namespace common_constants_internal578 579} // namespace LIBC_NAMESPACE_DECL580 581#endif // LLVM_LIBC_SRC___SUPPORT_MATH_COMMON_CONSTANTS_H582