From 6bcea9f09a5635d3c977a1d3223f1f05b93cc936 Mon Sep 17 00:00:00 2001 From: Sayed Awad Date: Mon, 27 Jul 2026 11:52:51 +0300 Subject: [PATCH 1/2] BUG: Fix f64 trig accuracy; match SVML rounding DAGs - Extended path: restructure final reconstruction to follow SVML's per-precision rounding DAG (f32/f64 pair the sin/cos correction terms differently) and regenerate approx.h so sigma is a signed power of two, keeping sigma*r exact - Low path: give f64 cosine its own minimax fit matching __svml_cos_d_la and keep its fast path up to ~8388607*pi - Non-FMA f64: add SplitMul (exact head product via 26-bit split) to replace the FMA product-error idiom in the high/extended paths and reduce with a descending 4-word pi/16, restoring sub-ULP accuracy - Correct trig polynomial/scale/threshold commentsit log --- npsr/hwy.h | 18 +- npsr/lut-inl.h | 1 + npsr/trig/data/approx.h | 2032 ++++++++++++++++++------------------ npsr/trig/data/constants.h | 2 +- npsr/trig/extended-inl.h | 41 +- npsr/trig/high-inl.h | 73 +- npsr/trig/inl.h | 25 +- npsr/trig/low-inl.h | 34 +- 8 files changed, 1152 insertions(+), 1074 deletions(-) diff --git a/npsr/hwy.h b/npsr/hwy.h index cf821b7..aa8310d 100644 --- a/npsr/hwy.h +++ b/npsr/hwy.h @@ -32,7 +32,23 @@ using hn::TFromV; using hn::VFromD; constexpr bool kNativeFMA = HWY_NATIVE_FMA != 0; -inline HWY_ATTR void DummyToSuppressUnusedWarning() {} +// Dekker split product for targets without native FMA, where the +// `MulSub(a, b, a*b)` error idiom degenerates to zero. Masking to 26-bit heads +// makes `head` exact, so a*b == head + rest (rest rounded at ~2^-105). +template )> +NPSR_INTRIN void SplitMul(V a, V b, V& head, V& rest) { + using namespace hn; + const DFromV d; + const RebindToUnsigned du; + const V mask = BitCast(d, Set(du, 0xFFFFFFFFF8000000u)); + const V a_hi = And(a, mask); + const V a_lo = Sub(a, a_hi); + const V b_hi = And(b, mask); + const V b_lo = Sub(b, b_hi); + head = Mul(a_hi, b_hi); + rest = MulAdd(a_hi, b_lo, Mul(a_lo, b)); +} + } // namespace npsr::HWY_NAMESPACE HWY_AFTER_NAMESPACE(); diff --git a/npsr/lut-inl.h b/npsr/lut-inl.h index b9e1cdf..97905ee 100644 --- a/npsr/lut-inl.h +++ b/npsr/lut-inl.h @@ -5,6 +5,7 @@ #define NPSR_LUT_INL_H_ #endif +#include #include #include "npsr/hwy.h" diff --git a/npsr/trig/data/approx.h b/npsr/trig/data/approx.h index 43a1d01..5dec837 100644 --- a/npsr/trig/data/approx.h +++ b/npsr/trig/data/approx.h @@ -40,16 +40,16 @@ template <> inline constexpr float kSinApproxTable[] = -0x1.09441cp-2f, 0x1p0f, 0x1.57d694p-1f, -0x1.6e626cp-26f, -0x1.1a5efap-2f, 0x1p0f, 0x1.610b76p-1f, -0x1.5c5a64p-26f, -0x1.2bec34p-2f, 0x1p0f, 0x1.6a09e6p-1f, 0x1.9fcef4p-27f, --0x1.3de916p-2f, 0x1p0f, 0x1.72d084p-1f, -0x1.02000ep-26f, --0x1.5052dap-2f, 0x1p0f, 0x1.7b5df2p-1f, 0x1.3557d8p-28f, --0x1.6326a8p-2f, 0x1p0f, 0x1.83b0ep-1f, 0x1.7ff2eep-26f, --0x1.76619cp-2f, 0x1p0f, 0x1.8bc806p-1f, 0x1.62a2e8p-26f, --0x1.8a00bap-2f, 0x1p0f, 0x1.93a224p-1f, 0x1.324c8p-26f, --0x1.9e01p-2f, 0x1p0f, 0x1.9b3e04p-1f, 0x1.fce1dp-27f, --0x1.b25f56p-2f, 0x1p0f, 0x1.a29a7ap-1f, 0x1.189e08p-31f, --0x1.c71898p-2f, 0x1p0f, 0x1.a9b662p-1f, 0x1.21d434p-26f, --0x1.dc2996p-2f, 0x1p0f, 0x1.b090a6p-1f, -0x1.fabf8p-27f, --0x1.f18f0cp-2f, 0x1p0f, 0x1.b72834p-1f, 0x1.465b9p-27f, +0x1.842dd6p-3f, 0x1p-1f, 0x1.72d084p-1f, -0x1.02000ep-26f, +0x1.5f5a4ep-3f, 0x1p-1f, 0x1.7b5df2p-1f, 0x1.3557d8p-28f, +0x1.39b2aep-3f, 0x1p-1f, 0x1.83b0ep-1f, 0x1.7ff2eep-26f, +0x1.133ccap-3f, 0x1p-1f, 0x1.8bc806p-1f, 0x1.62a2e8p-26f, +0x1.d7fd14p-4f, 0x1p-1f, 0x1.93a224p-1f, 0x1.324c8p-26f, +0x1.87fbfep-4f, 0x1p-1f, 0x1.9b3e04p-1f, 0x1.fce1dp-27f, +0x1.3682a6p-4f, 0x1p-1f, 0x1.a29a7ap-1f, 0x1.189e08p-31f, +0x1.c73b3ap-5f, 0x1p-1f, 0x1.a9b662p-1f, 0x1.21d434p-26f, +0x1.1eb354p-5f, 0x1p-1f, 0x1.b090a6p-1f, -0x1.fabf8p-27f, +0x1.ce1e64p-7f, 0x1p-1f, 0x1.b72834p-1f, 0x1.465b9p-27f, -0x1.d16c9p-8f, 0x1p-1f, 0x1.bd7c0ap-1f, 0x1.8df2a6p-26f, -0x1.d4a2c8p-6f, 0x1p-1f, 0x1.c38b3p-1f, -0x1.cfe84ap-26f, -0x1.9cc8b4p-5f, 0x1p-1f, 0x1.c954b2p-1f, 0x1.3411f4p-29f, @@ -57,163 +57,163 @@ template <> inline constexpr float kSinApproxTable[] = -0x1.8421bp-4f, 0x1p-1f, 0x1.d4134ep-1f, -0x1.d646d8p-26f, -0x1.e08756p-4f, 0x1p-1f, 0x1.d906bcp-1f, 0x1.e651a8p-26f, -0x1.1eef5ap-3f, 0x1p-1f, 0x1.ddb13cp-1f, -0x1.2667b8p-26f, --0x1.4e0cb2p-3f, 0x1p-1f, 0x1.e2121p-1f, 0x1.3da1bap-27f, --0x1.7d946ep-3f, 0x1p-1f, 0x1.e6288ep-1f, 0x1.891c22p-26f, --0x1.ad7f3ap-3f, 0x1p-1f, 0x1.e9f416p-1f, -0x1.273a44p-26f, --0x1.ddc5b4p-3f, 0x1p-1f, 0x1.ed740ep-1f, 0x1.da1258p-27f, +0x1.63e69ep-4f, 0x1p-2f, 0x1.e2121p-1f, 0x1.3da1bap-27f, +0x1.04d726p-4f, 0x1p-2f, 0x1.e6288ep-1f, 0x1.891c22p-26f, +0x1.4a0318p-5f, 0x1p-2f, 0x1.e9f416p-1f, -0x1.273a44p-26f, +0x1.11d262p-6f, 0x1p-2f, 0x1.ed740ep-1f, 0x1.da1258p-27f, -0x1.cc0d0ap-8f, 0x1p-2f, 0x1.f0a7fp-1f, -0x1.1b73cap-27f, -0x1.fa3ecap-6f, 0x1p-2f, 0x1.f38f3ap-1f, 0x1.8c9cb2p-26f, -0x1.c1d1fp-5f, 0x1p-2f, 0x1.f6297cp-1f, 0x1.feeb96p-26f, --0x1.43bd78p-4f, 0x1p-2f, 0x1.f8765p-1f, -0x1.63ad16p-27f, --0x1.a6fdf2p-4f, 0x1p-2f, 0x1.fa7558p-1f, -0x1.eeb5d2p-30f, +0x1.788512p-5f, 0x1p-3f, 0x1.f8765p-1f, -0x1.63ad16p-27f, +0x1.640838p-6f, 0x1p-3f, 0x1.fa7558p-1f, -0x1.eeb5d2p-30f, -0x1.536352p-9f, 0x1p-3f, 0x1.fc2648p-1f, -0x1.e3cc06p-26f, -0x1.ba165p-6f, 0x1p-3f, 0x1.fd88dap-1f, 0x1.e89292p-28f, --0x1.a55beep-5f, 0x1p-3f, 0x1.fe9cdap-1f, 0x1.a03108p-26f, +0x1.6a904ap-7f, 0x1p-4f, 0x1.fe9cdap-1f, 0x1.a03108p-26f, -0x1.b82684p-7f, 0x1p-4f, 0x1.ff621ep-1f, 0x1.bcb6bep-28f, -0x1.b7aa82p-8f, 0x1p-5f, 0x1.ffd886p-1f, 0x1.099a1ap-30f, 0.0f, 0.0f, 0x1p0f, 0.0f, --0x1.003242p5f, 0x1p5f, 0x1.ffd886p-1f, 0x1.099a1ap-30f, --0x1.00c8fcp4f, 0x1p4f, 0x1.ff621ep-1f, 0x1.bcb6bep-28f, --0x1.025aa4p3f, 0x1p3f, 0x1.fe9cdap-1f, 0x1.a03108p-26f, --0x1.0322f4p3f, 0x1p3f, 0x1.fd88dap-1f, 0x1.e89292p-28f, --0x1.03eacap3f, 0x1p3f, 0x1.fc2648p-1f, -0x1.e3cc06p-26f, --0x1.096408p2f, 0x1p2f, 0x1.fa7558p-1f, -0x1.eeb5d2p-30f, --0x1.0af10ap2f, 0x1p2f, 0x1.f8765p-1f, -0x1.63ad16p-27f, --0x1.0c7c5cp2f, 0x1p2f, 0x1.f6297cp-1f, 0x1.feeb96p-26f, --0x1.0e05c2p2f, 0x1p2f, 0x1.f38f3ap-1f, 0x1.8c9cb2p-26f, --0x1.0f8cfcp2f, 0x1p2f, 0x1.f0a7fp-1f, -0x1.1b73cap-27f, --0x1.2223a4p1f, 0x1p1f, 0x1.ed740ep-1f, 0x1.da1258p-27f, --0x1.25280cp1f, 0x1p1f, 0x1.e9f416p-1f, -0x1.273a44p-26f, --0x1.2826bap1f, 0x1p1f, 0x1.e6288ep-1f, 0x1.891c22p-26f, --0x1.2b1f34p1f, 0x1p1f, 0x1.e2121p-1f, 0x1.3da1bap-27f, --0x1.2e110ap1f, 0x1p1f, 0x1.ddb13cp-1f, -0x1.2667b8p-26f, --0x1.30fbc6p1f, 0x1p1f, 0x1.d906bcp-1f, 0x1.e651a8p-26f, --0x1.33def2p1f, 0x1p1f, 0x1.d4134ep-1f, -0x1.d646d8p-26f, --0x1.36ba2p1f, 0x1p1f, 0x1.ced7bp-1f, -0x1.786712p-26f, --0x1.398cdep1f, 0x1p1f, 0x1.c954b2p-1f, 0x1.3411f4p-29f, --0x1.3c56bap1f, 0x1p1f, 0x1.c38b3p-1f, -0x1.cfe84ap-26f, --0x1.3f174ap1f, 0x1p1f, 0x1.bd7c0ap-1f, 0x1.8df2a6p-26f, --0x1.839c3cp0f, 0x1p0f, 0x1.b72834p-1f, 0x1.465b9p-27f, --0x1.88f59ap0f, 0x1p0f, 0x1.b090a6p-1f, -0x1.fabf8p-27f, --0x1.8e39dap0f, 0x1p0f, 0x1.a9b662p-1f, 0x1.21d434p-26f, --0x1.93682ap0f, 0x1p0f, 0x1.a29a7ap-1f, 0x1.189e08p-31f, --0x1.987fcp0f, 0x1p0f, 0x1.9b3e04p-1f, 0x1.fce1dp-27f, --0x1.9d7fd2p0f, 0x1p0f, 0x1.93a224p-1f, 0x1.324c8p-26f, --0x1.a2679ap0f, 0x1p0f, 0x1.8bc806p-1f, 0x1.62a2e8p-26f, --0x1.a73656p0f, 0x1p0f, 0x1.83b0ep-1f, 0x1.7ff2eep-26f, --0x1.abeb4ap0f, 0x1p0f, 0x1.7b5df2p-1f, 0x1.3557d8p-28f, --0x1.b085bap0f, 0x1p0f, 0x1.72d084p-1f, -0x1.02000ep-26f, --0x1.b504f4p0f, 0x1p0f, 0x1.6a09e6p-1f, 0x1.9fcef4p-27f, --0x1.b96842p0f, 0x1p0f, 0x1.610b76p-1f, -0x1.5c5a64p-26f, --0x1.bdaefap0f, 0x1p0f, 0x1.57d694p-1f, -0x1.6e626cp-26f, --0x1.c1d87p0f, 0x1p0f, 0x1.4e6cacp-1f, -0x1.070686p-27f, --0x1.c5e404p0f, 0x1p0f, 0x1.44cf32p-1f, 0x1.424776p-27f, --0x1.c9d112p0f, 0x1p0f, 0x1.3affa2p-1f, 0x1.240a18p-26f, --0x1.cd9f02p0f, 0x1p0f, 0x1.30ff8p-1f, -0x1.8f47e6p-28f, --0x1.d14d3ep0f, 0x1p0f, 0x1.26d054p-1f, 0x1.9ba25cp-26f, --0x1.d4db32p0f, 0x1p0f, 0x1.1c73b4p-1f, -0x1.9465cep-27f, --0x1.d84852p0f, 0x1p0f, 0x1.11eb36p-1f, -0x1.7c969cp-26f, --0x1.db941ap0f, 0x1p0f, 0x1.07387ap-1f, -0x1.b74004p-27f, --0x1.debe06p0f, 0x1p0f, 0x1.f8ba4ep-2f, -0x1.01d952p-28f, --0x1.e1c598p0f, 0x1p0f, 0x1.e2b5d4p-2f, -0x1.fe4272p-28f, --0x1.e4aa5ap0f, 0x1p0f, 0x1.cc66eap-2f, -0x1.b38ee8p-28f, --0x1.e76bd8p0f, 0x1p0f, 0x1.b5d1p-2f, 0x1.3c2b98p-27f, --0x1.ea09a6p0f, 0x1p0f, 0x1.9ef794p-2f, 0x1.d476c6p-29f, --0x1.ec835ep0f, 0x1p0f, 0x1.87de2ap-2f, 0x1.abaa58p-28f, --0x1.eed89ep0f, 0x1p0f, 0x1.708854p-2f, -0x1.e0b74cp-27f, --0x1.f10908p0f, 0x1p0f, 0x1.58f9a8p-2f, -0x1.4a9c04p-27f, --0x1.f31448p0f, 0x1p0f, 0x1.4135cap-2f, -0x1.7d134p-27f, --0x1.f4fa0ap0f, 0x1p0f, 0x1.294062p-2f, 0x1.dab3ep-27f, --0x1.f6ba08p0f, 0x1p0f, 0x1.111d26p-2f, 0x1.58fb3cp-29f, --0x1.f853f8p0f, 0x1p0f, 0x1.f19f98p-3f, -0x1.37a83ap-29f, --0x1.f9c79ep0f, 0x1p0f, 0x1.c0b826p-3f, 0x1.4fc9ecp-28f, --0x1.fb14bep0f, 0x1p0f, 0x1.8f8b84p-3f, -0x1.cb2cfap-30f, --0x1.fc3b28p0f, 0x1p0f, 0x1.5e2144p-3f, 0x1.22cff2p-29f, --0x1.fd3aacp0f, 0x1p0f, 0x1.2c8106p-3f, 0x1.d1cc28p-28f, --0x1.fe1324p0f, 0x1p0f, 0x1.f564e6p-4f, -0x1.2ad19ep-29f, --0x1.fec46ep0f, 0x1p0f, 0x1.917a6cp-4f, -0x1.eb25eap-31f, --0x1.ff4e6ep0f, 0x1p0f, 0x1.2d520ap-4f, -0x1.a63cc2p-29f, --0x1.ffb11p0f, 0x1p0f, 0x1.91f66p-5f, -0x1.de44fep-30f, --0x1.ffec44p0f, 0x1p0f, 0x1.92156p-6f, -0x1.0b933p-31f, --0x1p1f, 0x1p0f, 0.0f, 0.0f, --0x1.ffec44p0f, 0x1p0f, -0x1.92156p-6f, 0x1.0b933p-31f, --0x1.ffb11p0f, 0x1p0f, -0x1.91f66p-5f, 0x1.de44fep-30f, --0x1.ff4e6ep0f, 0x1p0f, -0x1.2d520ap-4f, 0x1.a63cc2p-29f, --0x1.fec46ep0f, 0x1p0f, -0x1.917a6cp-4f, 0x1.eb25eap-31f, --0x1.fe1324p0f, 0x1p0f, -0x1.f564e6p-4f, 0x1.2ad19ep-29f, --0x1.fd3aacp0f, 0x1p0f, -0x1.2c8106p-3f, -0x1.d1cc28p-28f, --0x1.fc3b28p0f, 0x1p0f, -0x1.5e2144p-3f, -0x1.22cff2p-29f, --0x1.fb14bep0f, 0x1p0f, -0x1.8f8b84p-3f, 0x1.cb2cfap-30f, --0x1.f9c79ep0f, 0x1p0f, -0x1.c0b826p-3f, -0x1.4fc9ecp-28f, --0x1.f853f8p0f, 0x1p0f, -0x1.f19f98p-3f, 0x1.37a83ap-29f, --0x1.f6ba08p0f, 0x1p0f, -0x1.111d26p-2f, -0x1.58fb3cp-29f, --0x1.f4fa0ap0f, 0x1p0f, -0x1.294062p-2f, -0x1.dab3ep-27f, --0x1.f31448p0f, 0x1p0f, -0x1.4135cap-2f, 0x1.7d134p-27f, --0x1.f10908p0f, 0x1p0f, -0x1.58f9a8p-2f, 0x1.4a9c04p-27f, --0x1.eed89ep0f, 0x1p0f, -0x1.708854p-2f, 0x1.e0b74cp-27f, --0x1.ec835ep0f, 0x1p0f, -0x1.87de2ap-2f, -0x1.abaa58p-28f, --0x1.ea09a6p0f, 0x1p0f, -0x1.9ef794p-2f, -0x1.d476c6p-29f, --0x1.e76bd8p0f, 0x1p0f, -0x1.b5d1p-2f, -0x1.3c2b98p-27f, --0x1.e4aa5ap0f, 0x1p0f, -0x1.cc66eap-2f, 0x1.b38ee8p-28f, --0x1.e1c598p0f, 0x1p0f, -0x1.e2b5d4p-2f, 0x1.fe4272p-28f, --0x1.debe06p0f, 0x1p0f, -0x1.f8ba4ep-2f, 0x1.01d952p-28f, --0x1.db941ap0f, 0x1p0f, -0x1.07387ap-1f, 0x1.b74004p-27f, --0x1.d84852p0f, 0x1p0f, -0x1.11eb36p-1f, 0x1.7c969cp-26f, --0x1.d4db32p0f, 0x1p0f, -0x1.1c73b4p-1f, 0x1.9465cep-27f, --0x1.d14d3ep0f, 0x1p0f, -0x1.26d054p-1f, -0x1.9ba25cp-26f, --0x1.cd9f02p0f, 0x1p0f, -0x1.30ff8p-1f, 0x1.8f47e6p-28f, --0x1.c9d112p0f, 0x1p0f, -0x1.3affa2p-1f, -0x1.240a18p-26f, --0x1.c5e404p0f, 0x1p0f, -0x1.44cf32p-1f, -0x1.424776p-27f, --0x1.c1d87p0f, 0x1p0f, -0x1.4e6cacp-1f, 0x1.070686p-27f, --0x1.bdaefap0f, 0x1p0f, -0x1.57d694p-1f, 0x1.6e626cp-26f, --0x1.b96842p0f, 0x1p0f, -0x1.610b76p-1f, 0x1.5c5a64p-26f, --0x1.b504f4p0f, 0x1p0f, -0x1.6a09e6p-1f, -0x1.9fcef4p-27f, --0x1.b085bap0f, 0x1p0f, -0x1.72d084p-1f, 0x1.02000ep-26f, --0x1.abeb4ap0f, 0x1p0f, -0x1.7b5df2p-1f, -0x1.3557d8p-28f, --0x1.a73656p0f, 0x1p0f, -0x1.83b0ep-1f, -0x1.7ff2eep-26f, --0x1.a2679ap0f, 0x1p0f, -0x1.8bc806p-1f, -0x1.62a2e8p-26f, --0x1.9d7fd2p0f, 0x1p0f, -0x1.93a224p-1f, -0x1.324c8p-26f, --0x1.987fcp0f, 0x1p0f, -0x1.9b3e04p-1f, -0x1.fce1dp-27f, --0x1.93682ap0f, 0x1p0f, -0x1.a29a7ap-1f, -0x1.189e08p-31f, --0x1.8e39dap0f, 0x1p0f, -0x1.a9b662p-1f, -0x1.21d434p-26f, --0x1.88f59ap0f, 0x1p0f, -0x1.b090a6p-1f, 0x1.fabf8p-27f, --0x1.839c3cp0f, 0x1p0f, -0x1.b72834p-1f, -0x1.465b9p-27f, --0x1.3f174ap1f, 0x1p1f, -0x1.bd7c0ap-1f, -0x1.8df2a6p-26f, --0x1.3c56bap1f, 0x1p1f, -0x1.c38b3p-1f, 0x1.cfe84ap-26f, --0x1.398cdep1f, 0x1p1f, -0x1.c954b2p-1f, -0x1.3411f4p-29f, --0x1.36ba2p1f, 0x1p1f, -0x1.ced7bp-1f, 0x1.786712p-26f, --0x1.33def2p1f, 0x1p1f, -0x1.d4134ep-1f, 0x1.d646d8p-26f, --0x1.30fbc6p1f, 0x1p1f, -0x1.d906bcp-1f, -0x1.e651a8p-26f, --0x1.2e110ap1f, 0x1p1f, -0x1.ddb13cp-1f, 0x1.2667b8p-26f, --0x1.2b1f34p1f, 0x1p1f, -0x1.e2121p-1f, -0x1.3da1bap-27f, --0x1.2826bap1f, 0x1p1f, -0x1.e6288ep-1f, -0x1.891c22p-26f, --0x1.25280cp1f, 0x1p1f, -0x1.e9f416p-1f, 0x1.273a44p-26f, --0x1.2223a4p1f, 0x1p1f, -0x1.ed740ep-1f, -0x1.da1258p-27f, --0x1.0f8cfcp2f, 0x1p2f, -0x1.f0a7fp-1f, 0x1.1b73cap-27f, --0x1.0e05c2p2f, 0x1p2f, -0x1.f38f3ap-1f, -0x1.8c9cb2p-26f, --0x1.0c7c5cp2f, 0x1p2f, -0x1.f6297cp-1f, -0x1.feeb96p-26f, --0x1.0af10ap2f, 0x1p2f, -0x1.f8765p-1f, 0x1.63ad16p-27f, --0x1.096408p2f, 0x1p2f, -0x1.fa7558p-1f, 0x1.eeb5d2p-30f, --0x1.03eacap3f, 0x1p3f, -0x1.fc2648p-1f, 0x1.e3cc06p-26f, --0x1.0322f4p3f, 0x1p3f, -0x1.fd88dap-1f, -0x1.e89292p-28f, --0x1.025aa4p3f, 0x1p3f, -0x1.fe9cdap-1f, -0x1.a03108p-26f, --0x1.00c8fcp4f, 0x1p4f, -0x1.ff621ep-1f, -0x1.bcb6bep-28f, --0x1.003242p5f, 0x1p5f, -0x1.ffd886p-1f, -0x1.099a1ap-30f, +0x1.b7aa82p-8f, -0x1p-5f, 0x1.ffd886p-1f, 0x1.099a1ap-30f, +0x1.b82684p-7f, -0x1p-4f, 0x1.ff621ep-1f, 0x1.bcb6bep-28f, +-0x1.6a904ap-7f, -0x1p-4f, 0x1.fe9cdap-1f, 0x1.a03108p-26f, +0x1.ba165p-6f, -0x1p-3f, 0x1.fd88dap-1f, 0x1.e89292p-28f, +0x1.536352p-9f, -0x1p-3f, 0x1.fc2648p-1f, -0x1.e3cc06p-26f, +-0x1.640838p-6f, -0x1p-3f, 0x1.fa7558p-1f, -0x1.eeb5d2p-30f, +-0x1.788512p-5f, -0x1p-3f, 0x1.f8765p-1f, -0x1.63ad16p-27f, +0x1.c1d1fp-5f, -0x1p-2f, 0x1.f6297cp-1f, 0x1.feeb96p-26f, +0x1.fa3ecap-6f, -0x1p-2f, 0x1.f38f3ap-1f, 0x1.8c9cb2p-26f, +0x1.cc0d0ap-8f, -0x1p-2f, 0x1.f0a7fp-1f, -0x1.1b73cap-27f, +-0x1.11d262p-6f, -0x1p-2f, 0x1.ed740ep-1f, 0x1.da1258p-27f, +-0x1.4a0318p-5f, -0x1p-2f, 0x1.e9f416p-1f, -0x1.273a44p-26f, +-0x1.04d726p-4f, -0x1p-2f, 0x1.e6288ep-1f, 0x1.891c22p-26f, +-0x1.63e69ep-4f, -0x1p-2f, 0x1.e2121p-1f, 0x1.3da1bap-27f, +0x1.1eef5ap-3f, -0x1p-1f, 0x1.ddb13cp-1f, -0x1.2667b8p-26f, +0x1.e08756p-4f, -0x1p-1f, 0x1.d906bcp-1f, 0x1.e651a8p-26f, +0x1.8421bp-4f, -0x1p-1f, 0x1.d4134ep-1f, -0x1.d646d8p-26f, +0x1.28bbfep-4f, -0x1p-1f, 0x1.ced7bp-1f, -0x1.786712p-26f, +0x1.9cc8b4p-5f, -0x1p-1f, 0x1.c954b2p-1f, 0x1.3411f4p-29f, +0x1.d4a2c8p-6f, -0x1p-1f, 0x1.c38b3p-1f, -0x1.cfe84ap-26f, +0x1.d16c9p-8f, -0x1p-1f, 0x1.bd7c0ap-1f, 0x1.8df2a6p-26f, +-0x1.ce1e64p-7f, -0x1p-1f, 0x1.b72834p-1f, 0x1.465b9p-27f, +-0x1.1eb354p-5f, -0x1p-1f, 0x1.b090a6p-1f, -0x1.fabf8p-27f, +-0x1.c73b3ap-5f, -0x1p-1f, 0x1.a9b662p-1f, 0x1.21d434p-26f, +-0x1.3682a6p-4f, -0x1p-1f, 0x1.a29a7ap-1f, 0x1.189e08p-31f, +-0x1.87fbfep-4f, -0x1p-1f, 0x1.9b3e04p-1f, 0x1.fce1dp-27f, +-0x1.d7fd14p-4f, -0x1p-1f, 0x1.93a224p-1f, 0x1.324c8p-26f, +-0x1.133ccap-3f, -0x1p-1f, 0x1.8bc806p-1f, 0x1.62a2e8p-26f, +-0x1.39b2aep-3f, -0x1p-1f, 0x1.83b0ep-1f, 0x1.7ff2eep-26f, +-0x1.5f5a4ep-3f, -0x1p-1f, 0x1.7b5df2p-1f, 0x1.3557d8p-28f, +-0x1.842dd6p-3f, -0x1p-1f, 0x1.72d084p-1f, -0x1.02000ep-26f, +0x1.2bec34p-2f, -0x1p0f, 0x1.6a09e6p-1f, 0x1.9fcef4p-27f, +0x1.1a5efap-2f, -0x1p0f, 0x1.610b76p-1f, -0x1.5c5a64p-26f, +0x1.09441cp-2f, -0x1p0f, 0x1.57d694p-1f, -0x1.6e626cp-26f, +0x1.f13c7ep-3f, -0x1p0f, 0x1.4e6cacp-1f, -0x1.070686p-27f, +0x1.d0dfe6p-3f, -0x1p0f, 0x1.44cf32p-1f, 0x1.424776p-27f, +0x1.b1776ep-3f, -0x1p0f, 0x1.3affa2p-1f, 0x1.240a18p-26f, +0x1.9307eep-3f, -0x1p0f, 0x1.30ff8p-1f, -0x1.8f47e6p-28f, +0x1.759618p-3f, -0x1p0f, 0x1.26d054p-1f, 0x1.9ba25cp-26f, +0x1.592676p-3f, -0x1p0f, 0x1.1c73b4p-1f, -0x1.9465cep-27f, +0x1.3dbd6ap-3f, -0x1p0f, 0x1.11eb36p-1f, -0x1.7c969cp-26f, +0x1.235f2ep-3f, -0x1p0f, 0x1.07387ap-1f, -0x1.b74004p-27f, +0x1.0a0fd4p-3f, -0x1p0f, 0x1.f8ba4ep-2f, -0x1.01d952p-28f, +0x1.e3a688p-4f, -0x1p0f, 0x1.e2b5d4p-2f, -0x1.fe4272p-28f, +0x1.b55a7p-4f, -0x1p0f, 0x1.cc66eap-2f, -0x1.b38ee8p-28f, +0x1.894286p-4f, -0x1p0f, 0x1.b5d1p-2f, 0x1.3c2b98p-27f, +0x1.5f6598p-4f, -0x1p0f, 0x1.9ef794p-2f, 0x1.d476c6p-29f, +0x1.37ca18p-4f, -0x1p0f, 0x1.87de2ap-2f, 0x1.abaa58p-28f, +0x1.127624p-4f, -0x1p0f, 0x1.708854p-2f, -0x1.e0b74cp-27f, +0x1.dedefcp-5f, -0x1p0f, 0x1.58f9a8p-2f, -0x1.4a9c04p-27f, +0x1.9d7714p-5f, -0x1p0f, 0x1.4135cap-2f, -0x1.7d134p-27f, +0x1.60beaap-5f, -0x1p0f, 0x1.294062p-2f, 0x1.dab3ep-27f, +0x1.28bf18p-5f, -0x1p0f, 0x1.111d26p-2f, 0x1.58fb3cp-29f, +0x1.eb0208p-6f, -0x1p0f, 0x1.f19f98p-3f, -0x1.37a83ap-29f, +0x1.8e18a8p-6f, -0x1p0f, 0x1.c0b826p-3f, 0x1.4fc9ecp-28f, +0x1.3ad06p-6f, -0x1p0f, 0x1.8f8b84p-3f, -0x1.cb2cfap-30f, +0x1.e26c16p-7f, -0x1p0f, 0x1.5e2144p-3f, 0x1.22cff2p-29f, +0x1.62aa04p-7f, -0x1p0f, 0x1.2c8106p-3f, 0x1.d1cc28p-28f, +0x1.ecdc78p-8f, -0x1p0f, 0x1.f564e6p-4f, -0x1.2ad19ep-29f, +0x1.3b92e2p-8f, -0x1p0f, 0x1.917a6cp-4f, -0x1.eb25eap-31f, +0x1.63253p-9f, -0x1p0f, 0x1.2d520ap-4f, -0x1.a63cc2p-29f, +0x1.3bc39p-10f, -0x1p0f, 0x1.91f66p-5f, -0x1.de44fep-30f, +0x1.3bcfbep-12f, -0x1p0f, 0x1.92156p-6f, -0x1.0b933p-31f, +0.0f, -0x1p0f, 0.0f, 0.0f, +0x1.3bcfbep-12f, -0x1p0f, -0x1.92156p-6f, 0x1.0b933p-31f, +0x1.3bc39p-10f, -0x1p0f, -0x1.91f66p-5f, 0x1.de44fep-30f, +0x1.63253p-9f, -0x1p0f, -0x1.2d520ap-4f, 0x1.a63cc2p-29f, +0x1.3b92e2p-8f, -0x1p0f, -0x1.917a6cp-4f, 0x1.eb25eap-31f, +0x1.ecdc78p-8f, -0x1p0f, -0x1.f564e6p-4f, 0x1.2ad19ep-29f, +0x1.62aa04p-7f, -0x1p0f, -0x1.2c8106p-3f, -0x1.d1cc28p-28f, +0x1.e26c16p-7f, -0x1p0f, -0x1.5e2144p-3f, -0x1.22cff2p-29f, +0x1.3ad06p-6f, -0x1p0f, -0x1.8f8b84p-3f, 0x1.cb2cfap-30f, +0x1.8e18a8p-6f, -0x1p0f, -0x1.c0b826p-3f, -0x1.4fc9ecp-28f, +0x1.eb0208p-6f, -0x1p0f, -0x1.f19f98p-3f, 0x1.37a83ap-29f, +0x1.28bf18p-5f, -0x1p0f, -0x1.111d26p-2f, -0x1.58fb3cp-29f, +0x1.60beaap-5f, -0x1p0f, -0x1.294062p-2f, -0x1.dab3ep-27f, +0x1.9d7714p-5f, -0x1p0f, -0x1.4135cap-2f, 0x1.7d134p-27f, +0x1.dedefcp-5f, -0x1p0f, -0x1.58f9a8p-2f, 0x1.4a9c04p-27f, +0x1.127624p-4f, -0x1p0f, -0x1.708854p-2f, 0x1.e0b74cp-27f, +0x1.37ca18p-4f, -0x1p0f, -0x1.87de2ap-2f, -0x1.abaa58p-28f, +0x1.5f6598p-4f, -0x1p0f, -0x1.9ef794p-2f, -0x1.d476c6p-29f, +0x1.894286p-4f, -0x1p0f, -0x1.b5d1p-2f, -0x1.3c2b98p-27f, +0x1.b55a7p-4f, -0x1p0f, -0x1.cc66eap-2f, 0x1.b38ee8p-28f, +0x1.e3a688p-4f, -0x1p0f, -0x1.e2b5d4p-2f, 0x1.fe4272p-28f, +0x1.0a0fd4p-3f, -0x1p0f, -0x1.f8ba4ep-2f, 0x1.01d952p-28f, +0x1.235f2ep-3f, -0x1p0f, -0x1.07387ap-1f, 0x1.b74004p-27f, +0x1.3dbd6ap-3f, -0x1p0f, -0x1.11eb36p-1f, 0x1.7c969cp-26f, +0x1.592676p-3f, -0x1p0f, -0x1.1c73b4p-1f, 0x1.9465cep-27f, +0x1.759618p-3f, -0x1p0f, -0x1.26d054p-1f, -0x1.9ba25cp-26f, +0x1.9307eep-3f, -0x1p0f, -0x1.30ff8p-1f, 0x1.8f47e6p-28f, +0x1.b1776ep-3f, -0x1p0f, -0x1.3affa2p-1f, -0x1.240a18p-26f, +0x1.d0dfe6p-3f, -0x1p0f, -0x1.44cf32p-1f, -0x1.424776p-27f, +0x1.f13c7ep-3f, -0x1p0f, -0x1.4e6cacp-1f, 0x1.070686p-27f, +0x1.09441cp-2f, -0x1p0f, -0x1.57d694p-1f, 0x1.6e626cp-26f, +0x1.1a5efap-2f, -0x1p0f, -0x1.610b76p-1f, 0x1.5c5a64p-26f, +0x1.2bec34p-2f, -0x1p0f, -0x1.6a09e6p-1f, -0x1.9fcef4p-27f, +-0x1.842dd6p-3f, -0x1p-1f, -0x1.72d084p-1f, 0x1.02000ep-26f, +-0x1.5f5a4ep-3f, -0x1p-1f, -0x1.7b5df2p-1f, -0x1.3557d8p-28f, +-0x1.39b2aep-3f, -0x1p-1f, -0x1.83b0ep-1f, -0x1.7ff2eep-26f, +-0x1.133ccap-3f, -0x1p-1f, -0x1.8bc806p-1f, -0x1.62a2e8p-26f, +-0x1.d7fd14p-4f, -0x1p-1f, -0x1.93a224p-1f, -0x1.324c8p-26f, +-0x1.87fbfep-4f, -0x1p-1f, -0x1.9b3e04p-1f, -0x1.fce1dp-27f, +-0x1.3682a6p-4f, -0x1p-1f, -0x1.a29a7ap-1f, -0x1.189e08p-31f, +-0x1.c73b3ap-5f, -0x1p-1f, -0x1.a9b662p-1f, -0x1.21d434p-26f, +-0x1.1eb354p-5f, -0x1p-1f, -0x1.b090a6p-1f, 0x1.fabf8p-27f, +-0x1.ce1e64p-7f, -0x1p-1f, -0x1.b72834p-1f, -0x1.465b9p-27f, +0x1.d16c9p-8f, -0x1p-1f, -0x1.bd7c0ap-1f, -0x1.8df2a6p-26f, +0x1.d4a2c8p-6f, -0x1p-1f, -0x1.c38b3p-1f, 0x1.cfe84ap-26f, +0x1.9cc8b4p-5f, -0x1p-1f, -0x1.c954b2p-1f, -0x1.3411f4p-29f, +0x1.28bbfep-4f, -0x1p-1f, -0x1.ced7bp-1f, 0x1.786712p-26f, +0x1.8421bp-4f, -0x1p-1f, -0x1.d4134ep-1f, 0x1.d646d8p-26f, +0x1.e08756p-4f, -0x1p-1f, -0x1.d906bcp-1f, -0x1.e651a8p-26f, +0x1.1eef5ap-3f, -0x1p-1f, -0x1.ddb13cp-1f, 0x1.2667b8p-26f, +-0x1.63e69ep-4f, -0x1p-2f, -0x1.e2121p-1f, -0x1.3da1bap-27f, +-0x1.04d726p-4f, -0x1p-2f, -0x1.e6288ep-1f, -0x1.891c22p-26f, +-0x1.4a0318p-5f, -0x1p-2f, -0x1.e9f416p-1f, 0x1.273a44p-26f, +-0x1.11d262p-6f, -0x1p-2f, -0x1.ed740ep-1f, -0x1.da1258p-27f, +0x1.cc0d0ap-8f, -0x1p-2f, -0x1.f0a7fp-1f, 0x1.1b73cap-27f, +0x1.fa3ecap-6f, -0x1p-2f, -0x1.f38f3ap-1f, -0x1.8c9cb2p-26f, +0x1.c1d1fp-5f, -0x1p-2f, -0x1.f6297cp-1f, -0x1.feeb96p-26f, +-0x1.788512p-5f, -0x1p-3f, -0x1.f8765p-1f, 0x1.63ad16p-27f, +-0x1.640838p-6f, -0x1p-3f, -0x1.fa7558p-1f, 0x1.eeb5d2p-30f, +0x1.536352p-9f, -0x1p-3f, -0x1.fc2648p-1f, 0x1.e3cc06p-26f, +0x1.ba165p-6f, -0x1p-3f, -0x1.fd88dap-1f, -0x1.e89292p-28f, +-0x1.6a904ap-7f, -0x1p-4f, -0x1.fe9cdap-1f, -0x1.a03108p-26f, +0x1.b82684p-7f, -0x1p-4f, -0x1.ff621ep-1f, -0x1.bcb6bep-28f, +0x1.b7aa82p-8f, -0x1p-5f, -0x1.ffd886p-1f, -0x1.099a1ap-30f, 0.0f, 0.0f, -0x1p0f, 0.0f, -0x1.b7aa82p-8f, 0x1p-5f, -0x1.ffd886p-1f, -0x1.099a1ap-30f, -0x1.b82684p-7f, 0x1p-4f, -0x1.ff621ep-1f, -0x1.bcb6bep-28f, --0x1.a55beep-5f, 0x1p-3f, -0x1.fe9cdap-1f, -0x1.a03108p-26f, +0x1.6a904ap-7f, 0x1p-4f, -0x1.fe9cdap-1f, -0x1.a03108p-26f, -0x1.ba165p-6f, 0x1p-3f, -0x1.fd88dap-1f, -0x1.e89292p-28f, -0x1.536352p-9f, 0x1p-3f, -0x1.fc2648p-1f, 0x1.e3cc06p-26f, --0x1.a6fdf2p-4f, 0x1p-2f, -0x1.fa7558p-1f, 0x1.eeb5d2p-30f, --0x1.43bd78p-4f, 0x1p-2f, -0x1.f8765p-1f, 0x1.63ad16p-27f, +0x1.640838p-6f, 0x1p-3f, -0x1.fa7558p-1f, 0x1.eeb5d2p-30f, +0x1.788512p-5f, 0x1p-3f, -0x1.f8765p-1f, 0x1.63ad16p-27f, -0x1.c1d1fp-5f, 0x1p-2f, -0x1.f6297cp-1f, -0x1.feeb96p-26f, -0x1.fa3ecap-6f, 0x1p-2f, -0x1.f38f3ap-1f, -0x1.8c9cb2p-26f, -0x1.cc0d0ap-8f, 0x1p-2f, -0x1.f0a7fp-1f, 0x1.1b73cap-27f, --0x1.ddc5b4p-3f, 0x1p-1f, -0x1.ed740ep-1f, -0x1.da1258p-27f, --0x1.ad7f3ap-3f, 0x1p-1f, -0x1.e9f416p-1f, 0x1.273a44p-26f, --0x1.7d946ep-3f, 0x1p-1f, -0x1.e6288ep-1f, -0x1.891c22p-26f, --0x1.4e0cb2p-3f, 0x1p-1f, -0x1.e2121p-1f, -0x1.3da1bap-27f, +0x1.11d262p-6f, 0x1p-2f, -0x1.ed740ep-1f, -0x1.da1258p-27f, +0x1.4a0318p-5f, 0x1p-2f, -0x1.e9f416p-1f, 0x1.273a44p-26f, +0x1.04d726p-4f, 0x1p-2f, -0x1.e6288ep-1f, -0x1.891c22p-26f, +0x1.63e69ep-4f, 0x1p-2f, -0x1.e2121p-1f, -0x1.3da1bap-27f, -0x1.1eef5ap-3f, 0x1p-1f, -0x1.ddb13cp-1f, 0x1.2667b8p-26f, -0x1.e08756p-4f, 0x1p-1f, -0x1.d906bcp-1f, -0x1.e651a8p-26f, -0x1.8421bp-4f, 0x1p-1f, -0x1.d4134ep-1f, 0x1.d646d8p-26f, @@ -221,16 +221,16 @@ template <> inline constexpr float kSinApproxTable[] = -0x1.9cc8b4p-5f, 0x1p-1f, -0x1.c954b2p-1f, -0x1.3411f4p-29f, -0x1.d4a2c8p-6f, 0x1p-1f, -0x1.c38b3p-1f, 0x1.cfe84ap-26f, -0x1.d16c9p-8f, 0x1p-1f, -0x1.bd7c0ap-1f, -0x1.8df2a6p-26f, --0x1.f18f0cp-2f, 0x1p0f, -0x1.b72834p-1f, -0x1.465b9p-27f, --0x1.dc2996p-2f, 0x1p0f, -0x1.b090a6p-1f, 0x1.fabf8p-27f, --0x1.c71898p-2f, 0x1p0f, -0x1.a9b662p-1f, -0x1.21d434p-26f, --0x1.b25f56p-2f, 0x1p0f, -0x1.a29a7ap-1f, -0x1.189e08p-31f, --0x1.9e01p-2f, 0x1p0f, -0x1.9b3e04p-1f, -0x1.fce1dp-27f, --0x1.8a00bap-2f, 0x1p0f, -0x1.93a224p-1f, -0x1.324c8p-26f, --0x1.76619cp-2f, 0x1p0f, -0x1.8bc806p-1f, -0x1.62a2e8p-26f, --0x1.6326a8p-2f, 0x1p0f, -0x1.83b0ep-1f, -0x1.7ff2eep-26f, --0x1.5052dap-2f, 0x1p0f, -0x1.7b5df2p-1f, -0x1.3557d8p-28f, --0x1.3de916p-2f, 0x1p0f, -0x1.72d084p-1f, 0x1.02000ep-26f, +0x1.ce1e64p-7f, 0x1p-1f, -0x1.b72834p-1f, -0x1.465b9p-27f, +0x1.1eb354p-5f, 0x1p-1f, -0x1.b090a6p-1f, 0x1.fabf8p-27f, +0x1.c73b3ap-5f, 0x1p-1f, -0x1.a9b662p-1f, -0x1.21d434p-26f, +0x1.3682a6p-4f, 0x1p-1f, -0x1.a29a7ap-1f, -0x1.189e08p-31f, +0x1.87fbfep-4f, 0x1p-1f, -0x1.9b3e04p-1f, -0x1.fce1dp-27f, +0x1.d7fd14p-4f, 0x1p-1f, -0x1.93a224p-1f, -0x1.324c8p-26f, +0x1.133ccap-3f, 0x1p-1f, -0x1.8bc806p-1f, -0x1.62a2e8p-26f, +0x1.39b2aep-3f, 0x1p-1f, -0x1.83b0ep-1f, -0x1.7ff2eep-26f, +0x1.5f5a4ep-3f, 0x1p-1f, -0x1.7b5df2p-1f, -0x1.3557d8p-28f, +0x1.842dd6p-3f, 0x1p-1f, -0x1.72d084p-1f, 0x1.02000ep-26f, -0x1.2bec34p-2f, 0x1p0f, -0x1.6a09e6p-1f, -0x1.9fcef4p-27f, -0x1.1a5efap-2f, 0x1p0f, -0x1.610b76p-1f, 0x1.5c5a64p-26f, -0x1.09441cp-2f, 0x1p0f, -0x1.57d694p-1f, 0x1.6e626cp-26f, @@ -326,33 +326,33 @@ template <> inline constexpr double kSinApproxTable[] = -0x1.d0dfe53aba2fdp-3, 0x1p0, 0x1.44cf325091dd6p-1, 0x1.8076a2p-57, -0x1.e0effc1174505p-3, 0x1p0, 0x1.49a449b9b0939p-1, -0x1.27ee16p-55, -0x1.f13c7d001a249p-3, 0x1p0, 0x1.4e6cabbe3e5e9p-1, 0x1.3c293ep-57, --0x1.00e263951d11fp-2, 0x1p0, 0x1.5328292a35596p-1, -0x1.a12eb8p-56, --0x1.09441bb2aa0a2p-2, 0x1p0, 0x1.57d69348cecap-1, -0x1.757208p-55, --0x1.11c3141f91b3ep-2, 0x1p0, 0x1.5c77bbe65018cp-1, 0x1.069ea8p-55, --0x1.1a5ef902000d3p-2, 0x1p0, 0x1.610b7551d2cdfp-1, -0x1.251b34p-56, --0x1.23177562aaea3p-2, 0x1p0, 0x1.6591925f0783dp-1, 0x1.c3d64ep-55, --0x1.2bec333018867p-2, 0x1p0, 0x1.6a09e667f3bcdp-1, -0x1.bdd34p-55, --0x1.34dcdb41f0f85p-2, 0x1p0, 0x1.6e74454eaa8afp-1, -0x1.dbc03cp-55, --0x1.3de9155c5a642p-2, 0x1p0, 0x1.72d0837efff96p-1, 0x1.0d4efp-55, --0x1.471088335fce7p-2, 0x1p0, 0x1.771e75f037261p-1, 0x1.5cfce8p-56, --0x1.5052d96e626c1p-2, 0x1p0, 0x1.7b5df226aafafp-1, -0x1.0f537ap-56, --0x1.59afadab954d4p-2, 0x1p0, 0x1.7f8ece3571771p-1, -0x1.9c8d8cp-55, --0x1.6326a8838342ep-2, 0x1p0, 0x1.83b0e0bff976ep-1, -0x1.6f420ep-56, --0x1.6cb76c8c9ed8fp-2, 0x1p0, 0x1.87c400fba2ebfp-1, -0x1.2dabcp-55, --0x1.76619b5edc454p-2, 0x1p0, 0x1.8bc806b151741p-1, -0x1.2c5e12p-55, --0x1.8024d59755257p-2, 0x1p0, 0x1.8fbcca3ef940dp-1, -0x1.6dfa98p-57, --0x1.8a00badbf5e8ep-2, 0x1p0, 0x1.93a22499263fbp-1, 0x1.3d419ap-55, --0x1.93f4e9df34c1bp-2, 0x1p0, 0x1.9777ef4c7d742p-1, -0x1.15479ap-55, --0x1.9e010063d1f96p-2, 0x1p0, 0x1.9b3e047f38741p-1, -0x1.30ee28p-55, --0x1.a8249b40a182cp-2, 0x1p0, 0x1.9ef43ef29af94p-1, 0x1.b1dfcap-56, --0x1.b25f56645da43p-2, 0x1p0, 0x1.a29a7a0462782p-1, -0x1.128bbp-56, --0x1.bcb0ccd98294fp-2, 0x1p0, 0x1.a63091b02fae2p-1, -0x1.e91114p-56, --0x1.c71898ca32e6fp-2, 0x1p0, 0x1.a9b66290ea1a3p-1, 0x1.9f630ep-60, --0x1.d19653842496fp-2, 0x1p0, 0x1.ad2bc9e21d511p-1, -0x1.47fbep-55, --0x1.dc29957c969bbp-2, 0x1p0, 0x1.b090a581502p-1, -0x1.926da2p-55, --0x1.e6d1f6544ece3p-2, 0x1p0, 0x1.b3e4d3ef55712p-1, -0x1.eb6b8ap-55, --0x1.f18f0cdba0025p-2, 0x1p0, 0x1.b728345196e3ep-1, -0x1.bc69f2p-55, --0x1.fc606f1678292p-2, 0x1p0, 0x1.ba5aa673590d2p-1, 0x1.7ea4e2p-55, +0x1.fe3b38d5c5dc2p-3, 0x1p-1, 0x1.5328292a35596p-1, -0x1.a12eb8p-56, +0x1.ed77c89aabebbp-3, 0x1p-1, 0x1.57d69348cecap-1, -0x1.757208p-55, +0x1.dc79d7c0dc985p-3, 0x1p-1, 0x1.5c77bbe65018cp-1, 0x1.069ea8p-55, +0x1.cb420dfbffe59p-3, 0x1p-1, 0x1.610b7551d2cdfp-1, -0x1.251b34p-56, +0x1.b9d1153aaa2bap-3, 0x1p-1, 0x1.6591925f0783dp-1, 0x1.c3d64ep-55, +0x1.a827999fcef32p-3, 0x1p-1, 0x1.6a09e667f3bcdp-1, -0x1.bdd34p-55, +0x1.9646497c1e0f6p-3, 0x1p-1, 0x1.6e74454eaa8afp-1, -0x1.dbc03cp-55, +0x1.842dd5474b37bp-3, 0x1p-1, 0x1.72d0837efff96p-1, 0x1.0d4efp-55, +0x1.71deef9940631p-3, 0x1p-1, 0x1.771e75f037261p-1, 0x1.5cfce8p-56, +0x1.5f5a4d233b27fp-3, 0x1p-1, 0x1.7b5df226aafafp-1, -0x1.0f537ap-56, +0x1.4ca0a4a8d5657p-3, 0x1p-1, 0x1.7f8ece3571771p-1, -0x1.9c8d8cp-55, +0x1.39b2aef8f97a4p-3, 0x1p-1, 0x1.83b0e0bff976ep-1, -0x1.6f420ep-56, +0x1.269126e6c24e3p-3, 0x1p-1, 0x1.87c400fba2ebfp-1, -0x1.2dabcp-55, +0x1.133cc94247758p-3, 0x1p-1, 0x1.8bc806b151741p-1, -0x1.2c5e12p-55, +0x1.ff6ca9a2ab6a2p-4, 0x1p-1, 0x1.8fbcca3ef940dp-1, -0x1.6dfa98p-57, +0x1.d7fd1490285cap-4, 0x1p-1, 0x1.93a22499263fbp-1, 0x1.3d419ap-55, +0x1.b02c58832cf96p-4, 0x1p-1, 0x1.9777ef4c7d742p-1, -0x1.15479ap-55, +0x1.87fbfe70b81a7p-4, 0x1p-1, 0x1.9b3e047f38741p-1, -0x1.30ee28p-55, +0x1.5f6d92fd79f5p-4, 0x1p-1, 0x1.9ef43ef29af94p-1, 0x1.b1dfcap-56, +0x1.3682a66e896f5p-4, 0x1p-1, 0x1.a29a7a0462782p-1, -0x1.128bbp-56, +0x1.0d3ccc99f5ac6p-4, 0x1p-1, 0x1.a63091b02fae2p-1, -0x1.e91114p-56, +0x1.c73b39ae68c87p-5, 0x1p-1, 0x1.a9b66290ea1a3p-1, 0x1.9f630ep-60, +0x1.734d63dedb48ap-5, 0x1p-1, 0x1.ad2bc9e21d511p-1, -0x1.47fbep-55, +0x1.1eb3541b4b228p-5, 0x1p-1, 0x1.b090a581502p-1, -0x1.926da2p-55, +0x1.92e09abb131d4p-6, 0x1p-1, 0x1.b3e4d3ef55712p-1, -0x1.eb6b8ap-55, +0x1.ce1e648bffb66p-7, 0x1p-1, 0x1.b728345196e3ep-1, -0x1.bc69f2p-55, +0x1.cfc874c3eb6d9p-9, 0x1p-1, 0x1.ba5aa673590d2p-1, 0x1.7ea4e2p-55, -0x1.d16c901d95181p-8, 0x1p-1, 0x1.bd7c0ac6f952ap-1, -0x1.825a72p-55, -0x1.23e6ad10872a7p-6, 0x1p-1, 0x1.c08c426725549p-1, 0x1.b157fcp-58, -0x1.d4a2c7f909c4ep-6, 0x1p-1, 0x1.c38b2f180bdb1p-1, -0x1.6e0b16p-56, @@ -364,325 +364,325 @@ template <> inline constexpr double kSinApproxTable[] = -0x1.8421af15c49d7p-4, 0x1p-1, 0x1.d4134d14dc93ap-1, -0x1.4ef528p-55, -0x1.b2356710db0a3p-4, 0x1p-1, 0x1.d696173c9e68bp-1, -0x1.e8c61cp-56, -0x1.e087565455a75p-4, 0x1p-1, 0x1.d906bcf328d46p-1, 0x1.457e6p-56, --0x1.078ad9dc46632p-3, 0x1p-1, 0x1.db6526238a09bp-1, -0x1.adee7ep-56, --0x1.1eef59e0b74c3p-3, 0x1p-1, 0x1.ddb13b6ccc23cp-1, 0x1.83c37cp-55, --0x1.367044581b074p-3, 0x1p-1, 0x1.dfeae622dbe2bp-1, -0x1.514ea8p-55, --0x1.4e0cb14a9c046p-3, 0x1p-1, 0x1.e212104f686e5p-1, -0x1.014c76p-55, --0x1.65c3b7b0e312cp-3, 0x1p-1, 0x1.e426a4b2bc17ep-1, 0x1.a87388p-55, --0x1.7d946d7d133fdp-3, 0x1p-1, 0x1.e6288ec48e112p-1, -0x1.16b56ep-57, --0x1.957de7a3cfd5dp-3, 0x1p-1, 0x1.e817bab4cd10dp-1, -0x1.d0afe6p-56, --0x1.ad7f3a254c1f5p-3, 0x1p-1, 0x1.e9f4156c62ddap-1, 0x1.760b1ep-55, --0x1.c597781664984p-3, 0x1p-1, 0x1.ebbd8c8df0b74p-1, 0x1.c6c8c6p-56, --0x1.ddc5b3a9c1311p-3, 0x1p-1, 0x1.ed740e7684963p-1, 0x1.e82c78p-56, --0x1.f608fe39004a4p-3, 0x1p-1, 0x1.ef178a3e473c2p-1, 0x1.6310a6p-55, +0x1.f0ea4c477339cp-4, 0x1p-2, 0x1.db6526238a09bp-1, -0x1.adee7ep-56, +0x1.c2214c3e9167bp-4, 0x1p-2, 0x1.ddb13b6ccc23cp-1, 0x1.83c37cp-55, +0x1.931f774fc9f18p-4, 0x1p-2, 0x1.dfeae622dbe2bp-1, -0x1.514ea8p-55, +0x1.63e69d6ac7f74p-4, 0x1p-2, 0x1.e212104f686e5p-1, -0x1.014c76p-55, +0x1.3478909e39da9p-4, 0x1p-2, 0x1.e426a4b2bc17ep-1, 0x1.a87388p-55, +0x1.04d72505d9805p-4, 0x1p-2, 0x1.e6288ec48e112p-1, -0x1.16b56ep-57, +0x1.aa086170c0a8ep-5, 0x1p-2, 0x1.e817bab4cd10dp-1, -0x1.d0afe6p-56, +0x1.4a03176acf82dp-5, 0x1p-2, 0x1.e9f4156c62ddap-1, 0x1.760b1ep-55, +0x1.d3443f4cdb3ddp-6, 0x1p-2, 0x1.ebbd8c8df0b74p-1, 0x1.c6c8c6p-56, +0x1.11d262b1f6776p-6, 0x1p-2, 0x1.ed740e7684963p-1, 0x1.e82c78p-56, +0x1.3ee038dff6b8p-8, 0x1p-2, 0x1.ef178a3e473c2p-1, 0x1.6310a6p-55, -0x1.cc0d09bd41caap-8, 0x1p-2, 0x1.f0a7efb9230d7p-1, 0x1.52c7acp-56, -0x1.36580d5d5e775p-6, 0x1p-2, 0x1.f2252f7763adap-1, -0x1.20cb8p-55, -0x1.fa3ecac0d84e8p-6, 0x1p-2, 0x1.f38f3ac64e589p-1, -0x1.d7bafap-56, -0x1.5f57f693feebep-5, 0x1p-2, 0x1.f4e603b0b2f2dp-1, -0x1.8ee01ep-56, -0x1.c1d1f0e5967d5p-5, 0x1p-2, 0x1.f6297cff75cbp-1, 0x1.562172p-56, --0x1.1244c435e819dp-4, 0x1p-2, 0x1.f7599a3a12077p-1, 0x1.84f31cp-55, --0x1.43bd776e98073p-4, 0x1p-2, 0x1.f8764fa714ba9p-1, 0x1.ab2566p-56, --0x1.755129dad834cp-4, 0x1p-2, 0x1.f97f924c9099bp-1, -0x1.e2ae0ep-55, --0x1.a6fdf22e33d8cp-4, 0x1p-2, 0x1.fa7557f08a517p-1, -0x1.7a0a8cp-55, --0x1.d8c1e624a1513p-4, 0x1p-2, 0x1.fb5797195d741p-1, 0x1.1bfac6p-56, +0x1.db7677942fcc5p-5, 0x1p-3, 0x1.f7599a3a12077p-1, 0x1.84f31cp-55, +0x1.78851122cff19p-5, 0x1p-3, 0x1.f8764fa714ba9p-1, 0x1.ab2566p-56, +0x1.155dac4a4f967p-5, 0x1p-3, 0x1.f97f924c9099bp-1, -0x1.e2ae0ep-55, +0x1.64083747309d1p-6, 0x1p-3, 0x1.fa7557f08a517p-1, -0x1.7a0a8cp-55, +0x1.39f0cedaf576bp-7, 0x1p-3, 0x1.fb5797195d741p-1, 0x1.1bfac6p-56, -0x1.536352ad19e39p-9, 0x1p-3, 0x1.fc26470e19fd3p-1, 0x1.1ec866p-55, -0x1.e43d1c309e958p-7, 0x1p-3, 0x1.fce15fd6da67bp-1, -0x1.5dd6f8p-56, -0x1.ba1650f592f5p-6, 0x1p-3, 0x1.fd88da3d12526p-1, -0x1.87df62p-55, --0x1.4125feacab7cep-5, 0x1p-3, 0x1.fe1cafcbd5b09p-1, 0x1.a23e32p-57, --0x1.a55beda63cc14p-5, 0x1p-3, 0x1.fe9cdad01883ap-1, 0x1.521eccp-57, +0x1.7db402a6a9063p-6, 0x1p-4, 0x1.fe1cafcbd5b09p-1, 0x1.a23e32p-57, +0x1.6a9049670cfaep-7, 0x1p-4, 0x1.fe9cdad01883ap-1, 0x1.521eccp-57, -0x1.35230c0fbe402p-10, 0x1p-4, 0x1.ff095658e71adp-1, 0x1.01a8cep-55, -0x1.b82683bc89fbp-7, 0x1p-4, 0x1.ff621e3796d7ep-1, -0x1.c57bc2p-57, --0x1.a4f3514d75466p-6, 0x1p-4, 0x1.ffa72effef75dp-1, -0x1.8b4cdcp-55, +0x1.6c32baca2ae69p-8, 0x1p-5, 0x1.ffa72effef75dp-1, -0x1.8b4cdcp-55, -0x1.b7aa821726608p-8, 0x1p-5, 0x1.ffd886084cd0dp-1, -0x1.1354d4p-55, -0x1.b78b80c84e1eep-9, 0x1p-6, 0x1.fff62169b92dbp-1, 0x1.5dda3cp-55, 0.0, 0.0, 0x1p0, 0.0, --0x1.000c90e8fe6f6p6, 0x1p6, 0x1.fff62169b92dbp-1, 0x1.5dda3cp-55, --0x1.003242abef46dp5, 0x1p5, 0x1.ffd886084cd0dp-1, -0x1.1354d4p-55, --0x1.0096c32baca2bp4, 0x1p4, 0x1.ffa72effef75dp-1, -0x1.8b4cdcp-55, --0x1.00c8fb2f886ecp4, 0x1p4, 0x1.ff621e3796d7ep-1, -0x1.c57bc2p-57, --0x1.00fb2b73cfc1p4, 0x1p4, 0x1.ff095658e71adp-1, 0x1.01a8cep-55, --0x1.025aa41259c34p3, 0x1p3, 0x1.fe9cdad01883ap-1, 0x1.521eccp-57, --0x1.02beda0153548p3, 0x1p3, 0x1.fe1cafcbd5b09p-1, 0x1.a23e32p-57, --0x1.0322f4d785368p3, 0x1p3, 0x1.fd88da3d12526p-1, -0x1.87df62p-55, --0x1.0386f0b8f3d86p3, 0x1p3, 0x1.fce15fd6da67bp-1, -0x1.5dd6f8p-56, --0x1.03eac9cad52e6p3, 0x1p3, 0x1.fc26470e19fd3p-1, 0x1.1ec866p-55, --0x1.089cf8676d7acp2, 0x1p2, 0x1.fb5797195d741p-1, 0x1.1bfac6p-56, --0x1.096408374730ap2, 0x1p2, 0x1.fa7557f08a517p-1, -0x1.7a0a8cp-55, --0x1.0a2abb58949f3p2, 0x1p2, 0x1.f97f924c9099bp-1, -0x1.e2ae0ep-55, --0x1.0af10a22459fep2, 0x1p2, 0x1.f8764fa714ba9p-1, 0x1.ab2566p-56, --0x1.0bb6ecef285fap2, 0x1p2, 0x1.f7599a3a12077p-1, 0x1.84f31cp-55, --0x1.0c7c5c1e34d3p2, 0x1p2, 0x1.f6297cff75cbp-1, 0x1.562172p-56, --0x1.0d415012d8023p2, 0x1p2, 0x1.f4e603b0b2f2dp-1, -0x1.8ee01ep-56, --0x1.0e05c1353f27bp2, 0x1p2, 0x1.f38f3ac64e589p-1, -0x1.d7bafap-56, --0x1.0ec9a7f2a2a19p2, 0x1p2, 0x1.f2252f7763adap-1, -0x1.20cb8p-55, --0x1.0f8cfcbd90af9p2, 0x1p2, 0x1.f0a7efb9230d7p-1, 0x1.52c7acp-56, --0x1.209f701c6ffb6p1, 0x1p1, 0x1.ef178a3e473c2p-1, 0x1.6310a6p-55, --0x1.2223a4c563ecfp1, 0x1p1, 0x1.ed740e7684963p-1, 0x1.e82c78p-56, --0x1.23a6887e99b68p1, 0x1p1, 0x1.ebbd8c8df0b74p-1, 0x1.c6c8c6p-56, --0x1.25280c5dab3e1p1, 0x1p1, 0x1.e9f4156c62ddap-1, 0x1.760b1ep-55, --0x1.26a82185c302ap1, 0x1p1, 0x1.e817bab4cd10dp-1, -0x1.d0afe6p-56, --0x1.2826b9282eccp1, 0x1p1, 0x1.e6288ec48e112p-1, -0x1.16b56ep-57, --0x1.29a3c484f1cedp1, 0x1p1, 0x1.e426a4b2bc17ep-1, 0x1.a87388p-55, --0x1.2b1f34eb563fcp1, 0x1p1, 0x1.e212104f686e5p-1, -0x1.014c76p-55, --0x1.2c98fbba7e4f9p1, 0x1p1, 0x1.dfeae622dbe2bp-1, -0x1.514ea8p-55, --0x1.2e110a61f48b4p1, 0x1p1, 0x1.ddb13b6ccc23cp-1, 0x1.83c37cp-55, --0x1.2f8752623b99dp1, 0x1p1, 0x1.db6526238a09bp-1, -0x1.adee7ep-56, --0x1.30fbc54d5d52cp1, 0x1p1, 0x1.d906bcf328d46p-1, 0x1.457e6p-56, --0x1.326e54c77927bp1, 0x1p1, 0x1.d696173c9e68bp-1, -0x1.e8c61cp-56, --0x1.33def28751db1p1, 0x1p1, 0x1.d4134d14dc93ap-1, -0x1.4ef528p-55, --0x1.354d9056da7f9p1, 0x1p1, 0x1.d17e7743e35dcp-1, -0x1.101da2p-58, --0x1.36ba2013c2b98p1, 0x1p1, 0x1.ced7af43cc773p-1, -0x1.e7b6bap-58, --0x1.382493b0023ddp1, 0x1p1, 0x1.cc1f0f3fcfc5cp-1, 0x1.e57612p-56, --0x1.398cdd326388cp1, 0x1p1, 0x1.c954b213411f5p-1, -0x1.2fb76p-58, --0x1.3af2eeb70dc71p1, 0x1p1, 0x1.c678b3488739bp-1, 0x1.d86cacp-57, --0x1.3c56ba700dec7p1, 0x1p1, 0x1.c38b2f180bdb1p-1, -0x1.6e0b16p-56, --0x1.3db832a5def1bp1, 0x1p1, 0x1.c08c426725549p-1, 0x1.b157fcp-58, --0x1.3f1749b7f1357p1, 0x1p1, 0x1.bd7c0ac6f952ap-1, -0x1.825a72p-55, --0x1.80e7e43a61f5bp0, 0x1p0, 0x1.ba5aa673590d2p-1, 0x1.7ea4e2p-55, --0x1.839c3cc917ff7p0, 0x1p0, 0x1.b728345196e3ep-1, -0x1.bc69f2p-55, --0x1.864b826aec4c7p0, 0x1p0, 0x1.b3e4d3ef55712p-1, -0x1.eb6b8ap-55, --0x1.88f59aa0da591p0, 0x1p0, 0x1.b090a581502p-1, -0x1.926da2p-55, --0x1.8b9a6b1ef6da4p0, 0x1p0, 0x1.ad2bc9e21d511p-1, -0x1.47fbep-55, --0x1.8e39d9cd73464p0, 0x1p0, 0x1.a9b66290ea1a3p-1, 0x1.9f630ep-60, --0x1.90d3ccc99f5acp0, 0x1p0, 0x1.a63091b02fae2p-1, -0x1.e91114p-56, --0x1.93682a66e896fp0, 0x1p0, 0x1.a29a7a0462782p-1, -0x1.128bbp-56, --0x1.95f6d92fd79f5p0, 0x1p0, 0x1.9ef43ef29af94p-1, 0x1.b1dfcap-56, --0x1.987fbfe70b81ap0, 0x1p0, 0x1.9b3e047f38741p-1, -0x1.30ee28p-55, --0x1.9b02c58832cf9p0, 0x1p0, 0x1.9777ef4c7d742p-1, -0x1.15479ap-55, --0x1.9d7fd1490285dp0, 0x1p0, 0x1.93a22499263fbp-1, 0x1.3d419ap-55, --0x1.9ff6ca9a2ab6ap0, 0x1p0, 0x1.8fbcca3ef940dp-1, -0x1.6dfa98p-57, --0x1.a267992848eebp0, 0x1p0, 0x1.8bc806b151741p-1, -0x1.2c5e12p-55, --0x1.a4d224dcd849cp0, 0x1p0, 0x1.87c400fba2ebfp-1, -0x1.2dabcp-55, --0x1.a73655df1f2f5p0, 0x1p0, 0x1.83b0e0bff976ep-1, -0x1.6f420ep-56, --0x1.a99414951aacbp0, 0x1p0, 0x1.7f8ece3571771p-1, -0x1.9c8d8cp-55, --0x1.abeb49a46765p0, 0x1p0, 0x1.7b5df226aafafp-1, -0x1.0f537ap-56, --0x1.ae3bddf3280c6p0, 0x1p0, 0x1.771e75f037261p-1, 0x1.5cfce8p-56, --0x1.b085baa8e966fp0, 0x1p0, 0x1.72d0837efff96p-1, 0x1.0d4efp-55, --0x1.b2c8c92f83c1fp0, 0x1p0, 0x1.6e74454eaa8afp-1, -0x1.dbc03cp-55, --0x1.b504f333f9de6p0, 0x1p0, 0x1.6a09e667f3bcdp-1, -0x1.bdd34p-55, --0x1.b73a22a755457p0, 0x1p0, 0x1.6591925f0783dp-1, 0x1.c3d64ep-55, --0x1.b96841bf7ffcbp0, 0x1p0, 0x1.610b7551d2cdfp-1, -0x1.251b34p-56, --0x1.bb8f3af81b931p0, 0x1p0, 0x1.5c77bbe65018cp-1, 0x1.069ea8p-55, --0x1.bdaef913557d7p0, 0x1p0, 0x1.57d69348cecap-1, -0x1.757208p-55, --0x1.bfc7671ab8bb8p0, 0x1p0, 0x1.5328292a35596p-1, -0x1.a12eb8p-56, --0x1.c1d8705ffcbb7p0, 0x1p0, 0x1.4e6cabbe3e5e9p-1, 0x1.3c293ep-57, --0x1.c3e2007dd175fp0, 0x1p0, 0x1.49a449b9b0939p-1, -0x1.27ee16p-55, --0x1.c5e40358a8bap0, 0x1p0, 0x1.44cf325091dd6p-1, 0x1.8076a2p-57, --0x1.c7de651f7ca06p0, 0x1p0, 0x1.3fed9534556d4p-1, 0x1.369166p-55, --0x1.c9d1124c931fep0, 0x1p0, 0x1.3affa292050b9p-1, 0x1.e3e25ep-56, --0x1.cbbbf7a63eba1p0, 0x1p0, 0x1.36058b10659f3p-1, -0x1.1fcb3ap-55, --0x1.cd9f023f9c3ap0, 0x1p0, 0x1.30ff7fce17035p-1, -0x1.efcc62p-57, --0x1.cf7a1f794d7cap0, 0x1p0, 0x1.2bedb25faf3eap-1, -0x1.14981cp-58, --0x1.d14d3d02313c1p0, 0x1p0, 0x1.26d054cdd12dfp-1, -0x1.5da742p-55, --0x1.d31848d817d71p0, 0x1p0, 0x1.21a799933eb59p-1, -0x1.3a7b16p-55, --0x1.d4db3148750d2p0, 0x1p0, 0x1.1c73b39ae68c8p-1, 0x1.b25dd2p-55, --0x1.d695e4f10ea88p0, 0x1p0, 0x1.1734d63dedb49p-1, -0x1.7eef2cp-55, --0x1.d84852c0a81p0, 0x1p0, 0x1.11eb3541b4b23p-1, -0x1.ef23b6p-55, --0x1.d9f269f7aab89p0, 0x1p0, 0x1.0c9704d5d898fp-1, -0x1.8d3d7cp-55, --0x1.db941a28cb71fp0, 0x1p0, 0x1.073879922ffeep-1, -0x1.a5a014p-55, --0x1.dd2d5339ac869p0, 0x1p0, 0x1.01cfc874c3eb7p-1, -0x1.34a35ep-56, --0x1.debe05637ca95p0, 0x1p0, 0x1.f8ba4dbf89abap-2, -0x1.2ec1fcp-60, --0x1.e046213392aa5p0, 0x1p0, 0x1.edc1952ef78d6p-2, -0x1.dd0f7cp-56, --0x1.e1c5978c05ed8p0, 0x1p0, 0x1.e2b5d3806f63bp-2, 0x1.e0d89p-58, --0x1.e33c59a4439cep0, 0x1p0, 0x1.d79775b86e389p-2, 0x1.550ec8p-56, --0x1.e4aa5909a08fap0, 0x1p0, 0x1.cc66e9931c45ep-2, 0x1.6850e4p-58, --0x1.e60f879fe7e2ep0, 0x1p0, 0x1.c1249d8011ee7p-2, -0x1.813aaap-56, --0x1.e76bd7a1e63b9p0, 0x1p0, 0x1.b5d1009e15ccp-2, 0x1.5b362cp-57, --0x1.e8bf3ba1f1aeep0, 0x1p0, 0x1.aa6c82b6d3fcap-2, -0x1.d5f106p-56, --0x1.ea09a68a6e49dp0, 0x1p0, 0x1.9ef7943a8ed8ap-2, 0x1.6da812p-57, --0x1.eb4b0b9e4f345p0, 0x1p0, 0x1.9372a63bc93d7p-2, 0x1.684318p-57, --0x1.ec835e79946a3p0, 0x1p0, 0x1.87de2a6aea963p-2, -0x1.72cedcp-57, --0x1.edb29311c504dp0, 0x1p0, 0x1.7c3a9311dcce7p-2, 0x1.9a3f2p-62, --0x1.eed89db66611ep0, 0x1p0, 0x1.7088530fa459fp-2, -0x1.44b19ep-56, --0x1.eff573116df15p0, 0x1p0, 0x1.64c7ddd3f27c6p-2, 0x1.10d2b4p-58, --0x1.f1090827b4372p0, 0x1p0, 0x1.58f9a75ab1fddp-2, -0x1.efdc0cp-62, --0x1.f21352595e0bfp0, 0x1p0, 0x1.4d1e24278e76ap-2, 0x1.24172p-57, --0x1.f314476247089p0, 0x1p0, 0x1.4135c94176601p-2, 0x1.0c97c4p-56, --0x1.f40bdd5a66886p0, 0x1p0, 0x1.35410c2e18152p-2, -0x1.3cb002p-56, --0x1.f4fa0ab6316edp0, 0x1p0, 0x1.294062ed59f06p-2, -0x1.5d28dap-56, --0x1.f5dec646f85bap0, 0x1p0, 0x1.1d3443f4cdb3ep-2, -0x1.720d4p-57, --0x1.f6ba073b424b2p0, 0x1p0, 0x1.111d262b1f677p-2, 0x1.824c2p-56, --0x1.f78bc51f239e1p0, 0x1p0, 0x1.04fb80e37fdaep-2, -0x1.412cdap-63, --0x1.f853f7dc9186cp0, 0x1p0, 0x1.f19f97b215f1bp-3, -0x1.42deeep-57, --0x1.f91297bbb1d6dp0, 0x1p0, 0x1.d934fe5454311p-3, 0x1.75b922p-57, --0x1.f9c79d63272c4p0, 0x1p0, 0x1.c0b826a7e4f63p-3, -0x1.af1438p-62, --0x1.fa7301d859796p0, 0x1p0, 0x1.a82a025b00451p-3, -0x1.87905ep-57, --0x1.fb14be7fbae58p0, 0x1p0, 0x1.8f8b83c69a60bp-3, -0x1.26d19ap-57, --0x1.fbaccd1d0903cp0, 0x1p0, 0x1.76dd9de50bf31p-3, 0x1.1d5eeep-57, --0x1.fc3b27d38a5d5p0, 0x1p0, 0x1.5e214448b3fc6p-3, 0x1.531ff6p-57, --0x1.fcbfc926484cdp0, 0x1p0, 0x1.45576b1293e5ap-3, -0x1.285a24p-58, --0x1.fd3aabf84528bp0, 0x1p0, 0x1.2c8106e8e613ap-3, 0x1.13000ap-58, --0x1.fdabcb8caeba1p0, 0x1p0, 0x1.139f0cedaf577p-3, -0x1.523434p-57, --0x1.fe1323870cfeap0, 0x1p0, 0x1.f564e56a9730ep-4, 0x1.a27046p-59, --0x1.fe70afeb6d33dp0, 0x1p0, 0x1.c3785c79ec2d5p-4, -0x1.4f39dep-61, --0x1.fec46d1e89293p0, 0x1p0, 0x1.917a6bc29b42cp-4, -0x1.e2718cp-60, --0x1.ff0e57e5ead85p0, 0x1p0, 0x1.5f6d00a9aa419p-4, -0x1.f4022cp-59, --0x1.ff4e6d680c41dp0, 0x1p0, 0x1.2d52092ce19f6p-4, -0x1.9a088ap-59, --0x1.ff84ab2c738d7p0, 0x1p0, 0x1.f656e79f820ep-5, -0x1.2e1ebep-61, --0x1.ffb10f1bcb6bfp0, 0x1p0, 0x1.91f65f10dd814p-5, -0x1.912bdp-61, --0x1.ffd3977ff7baep0, 0x1p0, 0x1.2d865759455cdp-5, 0x1.686f64p-61, --0x1.ffec430426686p0, 0x1p0, 0x1.92155f7a3667ep-6, -0x1.b1d63p-64, --0x1.fffb10b4dc96ep0, 0x1p0, 0x1.921d1fcdec784p-7, 0x1.9878eap-61, --0x1p1, 0x1p0, 0.0, 0.0, --0x1.fffb10b4dc96ep0, 0x1p0, -0x1.921d1fcdec784p-7, -0x1.9878eap-61, --0x1.ffec430426686p0, 0x1p0, -0x1.92155f7a3667ep-6, 0x1.b1d63p-64, --0x1.ffd3977ff7baep0, 0x1p0, -0x1.2d865759455cdp-5, -0x1.686f64p-61, --0x1.ffb10f1bcb6bfp0, 0x1p0, -0x1.91f65f10dd814p-5, 0x1.912bdp-61, --0x1.ff84ab2c738d7p0, 0x1p0, -0x1.f656e79f820ep-5, 0x1.2e1ebep-61, --0x1.ff4e6d680c41dp0, 0x1p0, -0x1.2d52092ce19f6p-4, 0x1.9a088ap-59, --0x1.ff0e57e5ead85p0, 0x1p0, -0x1.5f6d00a9aa419p-4, 0x1.f4022cp-59, --0x1.fec46d1e89293p0, 0x1p0, -0x1.917a6bc29b42cp-4, 0x1.e2718cp-60, --0x1.fe70afeb6d33dp0, 0x1p0, -0x1.c3785c79ec2d5p-4, 0x1.4f39dep-61, --0x1.fe1323870cfeap0, 0x1p0, -0x1.f564e56a9730ep-4, -0x1.a27046p-59, --0x1.fdabcb8caeba1p0, 0x1p0, -0x1.139f0cedaf577p-3, 0x1.523434p-57, --0x1.fd3aabf84528bp0, 0x1p0, -0x1.2c8106e8e613ap-3, -0x1.13000ap-58, --0x1.fcbfc926484cdp0, 0x1p0, -0x1.45576b1293e5ap-3, 0x1.285a24p-58, --0x1.fc3b27d38a5d5p0, 0x1p0, -0x1.5e214448b3fc6p-3, -0x1.531ff6p-57, --0x1.fbaccd1d0903cp0, 0x1p0, -0x1.76dd9de50bf31p-3, -0x1.1d5eeep-57, --0x1.fb14be7fbae58p0, 0x1p0, -0x1.8f8b83c69a60bp-3, 0x1.26d19ap-57, --0x1.fa7301d859796p0, 0x1p0, -0x1.a82a025b00451p-3, 0x1.87905ep-57, --0x1.f9c79d63272c4p0, 0x1p0, -0x1.c0b826a7e4f63p-3, 0x1.af1438p-62, --0x1.f91297bbb1d6dp0, 0x1p0, -0x1.d934fe5454311p-3, -0x1.75b922p-57, --0x1.f853f7dc9186cp0, 0x1p0, -0x1.f19f97b215f1bp-3, 0x1.42deeep-57, --0x1.f78bc51f239e1p0, 0x1p0, -0x1.04fb80e37fdaep-2, 0x1.412cdap-63, --0x1.f6ba073b424b2p0, 0x1p0, -0x1.111d262b1f677p-2, -0x1.824c2p-56, --0x1.f5dec646f85bap0, 0x1p0, -0x1.1d3443f4cdb3ep-2, 0x1.720d4p-57, --0x1.f4fa0ab6316edp0, 0x1p0, -0x1.294062ed59f06p-2, 0x1.5d28dap-56, --0x1.f40bdd5a66886p0, 0x1p0, -0x1.35410c2e18152p-2, 0x1.3cb002p-56, --0x1.f314476247089p0, 0x1p0, -0x1.4135c94176601p-2, -0x1.0c97c4p-56, --0x1.f21352595e0bfp0, 0x1p0, -0x1.4d1e24278e76ap-2, -0x1.24172p-57, --0x1.f1090827b4372p0, 0x1p0, -0x1.58f9a75ab1fddp-2, 0x1.efdc0cp-62, --0x1.eff573116df15p0, 0x1p0, -0x1.64c7ddd3f27c6p-2, -0x1.10d2b4p-58, --0x1.eed89db66611ep0, 0x1p0, -0x1.7088530fa459fp-2, 0x1.44b19ep-56, --0x1.edb29311c504dp0, 0x1p0, -0x1.7c3a9311dcce7p-2, -0x1.9a3f2p-62, --0x1.ec835e79946a3p0, 0x1p0, -0x1.87de2a6aea963p-2, 0x1.72cedcp-57, --0x1.eb4b0b9e4f345p0, 0x1p0, -0x1.9372a63bc93d7p-2, -0x1.684318p-57, --0x1.ea09a68a6e49dp0, 0x1p0, -0x1.9ef7943a8ed8ap-2, -0x1.6da812p-57, --0x1.e8bf3ba1f1aeep0, 0x1p0, -0x1.aa6c82b6d3fcap-2, 0x1.d5f106p-56, --0x1.e76bd7a1e63b9p0, 0x1p0, -0x1.b5d1009e15ccp-2, -0x1.5b362cp-57, --0x1.e60f879fe7e2ep0, 0x1p0, -0x1.c1249d8011ee7p-2, 0x1.813aaap-56, --0x1.e4aa5909a08fap0, 0x1p0, -0x1.cc66e9931c45ep-2, -0x1.6850e4p-58, --0x1.e33c59a4439cep0, 0x1p0, -0x1.d79775b86e389p-2, -0x1.550ec8p-56, --0x1.e1c5978c05ed8p0, 0x1p0, -0x1.e2b5d3806f63bp-2, -0x1.e0d89p-58, --0x1.e046213392aa5p0, 0x1p0, -0x1.edc1952ef78d6p-2, 0x1.dd0f7cp-56, --0x1.debe05637ca95p0, 0x1p0, -0x1.f8ba4dbf89abap-2, 0x1.2ec1fcp-60, --0x1.dd2d5339ac869p0, 0x1p0, -0x1.01cfc874c3eb7p-1, 0x1.34a35ep-56, --0x1.db941a28cb71fp0, 0x1p0, -0x1.073879922ffeep-1, 0x1.a5a014p-55, --0x1.d9f269f7aab89p0, 0x1p0, -0x1.0c9704d5d898fp-1, 0x1.8d3d7cp-55, --0x1.d84852c0a81p0, 0x1p0, -0x1.11eb3541b4b23p-1, 0x1.ef23b6p-55, --0x1.d695e4f10ea88p0, 0x1p0, -0x1.1734d63dedb49p-1, 0x1.7eef2cp-55, --0x1.d4db3148750d2p0, 0x1p0, -0x1.1c73b39ae68c8p-1, -0x1.b25dd2p-55, --0x1.d31848d817d71p0, 0x1p0, -0x1.21a799933eb59p-1, 0x1.3a7b16p-55, --0x1.d14d3d02313c1p0, 0x1p0, -0x1.26d054cdd12dfp-1, 0x1.5da742p-55, --0x1.cf7a1f794d7cap0, 0x1p0, -0x1.2bedb25faf3eap-1, 0x1.14981cp-58, --0x1.cd9f023f9c3ap0, 0x1p0, -0x1.30ff7fce17035p-1, 0x1.efcc62p-57, --0x1.cbbbf7a63eba1p0, 0x1p0, -0x1.36058b10659f3p-1, 0x1.1fcb3ap-55, --0x1.c9d1124c931fep0, 0x1p0, -0x1.3affa292050b9p-1, -0x1.e3e25ep-56, --0x1.c7de651f7ca06p0, 0x1p0, -0x1.3fed9534556d4p-1, -0x1.369166p-55, --0x1.c5e40358a8bap0, 0x1p0, -0x1.44cf325091dd6p-1, -0x1.8076a2p-57, --0x1.c3e2007dd175fp0, 0x1p0, -0x1.49a449b9b0939p-1, 0x1.27ee16p-55, --0x1.c1d8705ffcbb7p0, 0x1p0, -0x1.4e6cabbe3e5e9p-1, -0x1.3c293ep-57, --0x1.bfc7671ab8bb8p0, 0x1p0, -0x1.5328292a35596p-1, 0x1.a12eb8p-56, --0x1.bdaef913557d7p0, 0x1p0, -0x1.57d69348cecap-1, 0x1.757208p-55, --0x1.bb8f3af81b931p0, 0x1p0, -0x1.5c77bbe65018cp-1, -0x1.069ea8p-55, --0x1.b96841bf7ffcbp0, 0x1p0, -0x1.610b7551d2cdfp-1, 0x1.251b34p-56, --0x1.b73a22a755457p0, 0x1p0, -0x1.6591925f0783dp-1, -0x1.c3d64ep-55, --0x1.b504f333f9de6p0, 0x1p0, -0x1.6a09e667f3bcdp-1, 0x1.bdd34p-55, --0x1.b2c8c92f83c1fp0, 0x1p0, -0x1.6e74454eaa8afp-1, 0x1.dbc03cp-55, --0x1.b085baa8e966fp0, 0x1p0, -0x1.72d0837efff96p-1, -0x1.0d4efp-55, --0x1.ae3bddf3280c6p0, 0x1p0, -0x1.771e75f037261p-1, -0x1.5cfce8p-56, --0x1.abeb49a46765p0, 0x1p0, -0x1.7b5df226aafafp-1, 0x1.0f537ap-56, --0x1.a99414951aacbp0, 0x1p0, -0x1.7f8ece3571771p-1, 0x1.9c8d8cp-55, --0x1.a73655df1f2f5p0, 0x1p0, -0x1.83b0e0bff976ep-1, 0x1.6f420ep-56, --0x1.a4d224dcd849cp0, 0x1p0, -0x1.87c400fba2ebfp-1, 0x1.2dabcp-55, --0x1.a267992848eebp0, 0x1p0, -0x1.8bc806b151741p-1, 0x1.2c5e12p-55, --0x1.9ff6ca9a2ab6ap0, 0x1p0, -0x1.8fbcca3ef940dp-1, 0x1.6dfa98p-57, --0x1.9d7fd1490285dp0, 0x1p0, -0x1.93a22499263fbp-1, -0x1.3d419ap-55, --0x1.9b02c58832cf9p0, 0x1p0, -0x1.9777ef4c7d742p-1, 0x1.15479ap-55, --0x1.987fbfe70b81ap0, 0x1p0, -0x1.9b3e047f38741p-1, 0x1.30ee28p-55, --0x1.95f6d92fd79f5p0, 0x1p0, -0x1.9ef43ef29af94p-1, -0x1.b1dfcap-56, --0x1.93682a66e896fp0, 0x1p0, -0x1.a29a7a0462782p-1, 0x1.128bbp-56, --0x1.90d3ccc99f5acp0, 0x1p0, -0x1.a63091b02fae2p-1, 0x1.e91114p-56, --0x1.8e39d9cd73464p0, 0x1p0, -0x1.a9b66290ea1a3p-1, -0x1.9f630ep-60, --0x1.8b9a6b1ef6da4p0, 0x1p0, -0x1.ad2bc9e21d511p-1, 0x1.47fbep-55, --0x1.88f59aa0da591p0, 0x1p0, -0x1.b090a581502p-1, 0x1.926da2p-55, --0x1.864b826aec4c7p0, 0x1p0, -0x1.b3e4d3ef55712p-1, 0x1.eb6b8ap-55, --0x1.839c3cc917ff7p0, 0x1p0, -0x1.b728345196e3ep-1, 0x1.bc69f2p-55, --0x1.80e7e43a61f5bp0, 0x1p0, -0x1.ba5aa673590d2p-1, -0x1.7ea4e2p-55, --0x1.3f1749b7f1357p1, 0x1p1, -0x1.bd7c0ac6f952ap-1, 0x1.825a72p-55, --0x1.3db832a5def1bp1, 0x1p1, -0x1.c08c426725549p-1, -0x1.b157fcp-58, --0x1.3c56ba700dec7p1, 0x1p1, -0x1.c38b2f180bdb1p-1, 0x1.6e0b16p-56, --0x1.3af2eeb70dc71p1, 0x1p1, -0x1.c678b3488739bp-1, -0x1.d86cacp-57, --0x1.398cdd326388cp1, 0x1p1, -0x1.c954b213411f5p-1, 0x1.2fb76p-58, --0x1.382493b0023ddp1, 0x1p1, -0x1.cc1f0f3fcfc5cp-1, -0x1.e57612p-56, --0x1.36ba2013c2b98p1, 0x1p1, -0x1.ced7af43cc773p-1, 0x1.e7b6bap-58, --0x1.354d9056da7f9p1, 0x1p1, -0x1.d17e7743e35dcp-1, 0x1.101da2p-58, --0x1.33def28751db1p1, 0x1p1, -0x1.d4134d14dc93ap-1, 0x1.4ef528p-55, --0x1.326e54c77927bp1, 0x1p1, -0x1.d696173c9e68bp-1, 0x1.e8c61cp-56, --0x1.30fbc54d5d52cp1, 0x1p1, -0x1.d906bcf328d46p-1, -0x1.457e6p-56, --0x1.2f8752623b99dp1, 0x1p1, -0x1.db6526238a09bp-1, 0x1.adee7ep-56, --0x1.2e110a61f48b4p1, 0x1p1, -0x1.ddb13b6ccc23cp-1, -0x1.83c37cp-55, --0x1.2c98fbba7e4f9p1, 0x1p1, -0x1.dfeae622dbe2bp-1, 0x1.514ea8p-55, --0x1.2b1f34eb563fcp1, 0x1p1, -0x1.e212104f686e5p-1, 0x1.014c76p-55, --0x1.29a3c484f1cedp1, 0x1p1, -0x1.e426a4b2bc17ep-1, -0x1.a87388p-55, --0x1.2826b9282eccp1, 0x1p1, -0x1.e6288ec48e112p-1, 0x1.16b56ep-57, --0x1.26a82185c302ap1, 0x1p1, -0x1.e817bab4cd10dp-1, 0x1.d0afe6p-56, --0x1.25280c5dab3e1p1, 0x1p1, -0x1.e9f4156c62ddap-1, -0x1.760b1ep-55, --0x1.23a6887e99b68p1, 0x1p1, -0x1.ebbd8c8df0b74p-1, -0x1.c6c8c6p-56, --0x1.2223a4c563ecfp1, 0x1p1, -0x1.ed740e7684963p-1, -0x1.e82c78p-56, --0x1.209f701c6ffb6p1, 0x1p1, -0x1.ef178a3e473c2p-1, -0x1.6310a6p-55, --0x1.0f8cfcbd90af9p2, 0x1p2, -0x1.f0a7efb9230d7p-1, -0x1.52c7acp-56, --0x1.0ec9a7f2a2a19p2, 0x1p2, -0x1.f2252f7763adap-1, 0x1.20cb8p-55, --0x1.0e05c1353f27bp2, 0x1p2, -0x1.f38f3ac64e589p-1, 0x1.d7bafap-56, --0x1.0d415012d8023p2, 0x1p2, -0x1.f4e603b0b2f2dp-1, 0x1.8ee01ep-56, --0x1.0c7c5c1e34d3p2, 0x1p2, -0x1.f6297cff75cbp-1, -0x1.562172p-56, --0x1.0bb6ecef285fap2, 0x1p2, -0x1.f7599a3a12077p-1, -0x1.84f31cp-55, --0x1.0af10a22459fep2, 0x1p2, -0x1.f8764fa714ba9p-1, -0x1.ab2566p-56, --0x1.0a2abb58949f3p2, 0x1p2, -0x1.f97f924c9099bp-1, 0x1.e2ae0ep-55, --0x1.096408374730ap2, 0x1p2, -0x1.fa7557f08a517p-1, 0x1.7a0a8cp-55, --0x1.089cf8676d7acp2, 0x1p2, -0x1.fb5797195d741p-1, -0x1.1bfac6p-56, --0x1.03eac9cad52e6p3, 0x1p3, -0x1.fc26470e19fd3p-1, -0x1.1ec866p-55, --0x1.0386f0b8f3d86p3, 0x1p3, -0x1.fce15fd6da67bp-1, 0x1.5dd6f8p-56, --0x1.0322f4d785368p3, 0x1p3, -0x1.fd88da3d12526p-1, 0x1.87df62p-55, --0x1.02beda0153548p3, 0x1p3, -0x1.fe1cafcbd5b09p-1, -0x1.a23e32p-57, --0x1.025aa41259c34p3, 0x1p3, -0x1.fe9cdad01883ap-1, -0x1.521eccp-57, --0x1.00fb2b73cfc1p4, 0x1p4, -0x1.ff095658e71adp-1, -0x1.01a8cep-55, --0x1.00c8fb2f886ecp4, 0x1p4, -0x1.ff621e3796d7ep-1, 0x1.c57bc2p-57, --0x1.0096c32baca2bp4, 0x1p4, -0x1.ffa72effef75dp-1, 0x1.8b4cdcp-55, --0x1.003242abef46dp5, 0x1p5, -0x1.ffd886084cd0dp-1, 0x1.1354d4p-55, --0x1.000c90e8fe6f6p6, 0x1p6, -0x1.fff62169b92dbp-1, -0x1.5dda3cp-55, +0x1.b78b80c84e1eep-9, -0x1p-6, 0x1.fff62169b92dbp-1, 0x1.5dda3cp-55, +0x1.b7aa821726608p-8, -0x1p-5, 0x1.ffd886084cd0dp-1, -0x1.1354d4p-55, +-0x1.6c32baca2ae69p-8, -0x1p-5, 0x1.ffa72effef75dp-1, -0x1.8b4cdcp-55, +0x1.b82683bc89fbp-7, -0x1p-4, 0x1.ff621e3796d7ep-1, -0x1.c57bc2p-57, +0x1.35230c0fbe402p-10, -0x1p-4, 0x1.ff095658e71adp-1, 0x1.01a8cep-55, +-0x1.6a9049670cfaep-7, -0x1p-4, 0x1.fe9cdad01883ap-1, 0x1.521eccp-57, +-0x1.7db402a6a9063p-6, -0x1p-4, 0x1.fe1cafcbd5b09p-1, 0x1.a23e32p-57, +0x1.ba1650f592f5p-6, -0x1p-3, 0x1.fd88da3d12526p-1, -0x1.87df62p-55, +0x1.e43d1c309e958p-7, -0x1p-3, 0x1.fce15fd6da67bp-1, -0x1.5dd6f8p-56, +0x1.536352ad19e39p-9, -0x1p-3, 0x1.fc26470e19fd3p-1, 0x1.1ec866p-55, +-0x1.39f0cedaf576bp-7, -0x1p-3, 0x1.fb5797195d741p-1, 0x1.1bfac6p-56, +-0x1.64083747309d1p-6, -0x1p-3, 0x1.fa7557f08a517p-1, -0x1.7a0a8cp-55, +-0x1.155dac4a4f967p-5, -0x1p-3, 0x1.f97f924c9099bp-1, -0x1.e2ae0ep-55, +-0x1.78851122cff19p-5, -0x1p-3, 0x1.f8764fa714ba9p-1, 0x1.ab2566p-56, +-0x1.db7677942fcc5p-5, -0x1p-3, 0x1.f7599a3a12077p-1, 0x1.84f31cp-55, +0x1.c1d1f0e5967d5p-5, -0x1p-2, 0x1.f6297cff75cbp-1, 0x1.562172p-56, +0x1.5f57f693feebep-5, -0x1p-2, 0x1.f4e603b0b2f2dp-1, -0x1.8ee01ep-56, +0x1.fa3ecac0d84e8p-6, -0x1p-2, 0x1.f38f3ac64e589p-1, -0x1.d7bafap-56, +0x1.36580d5d5e775p-6, -0x1p-2, 0x1.f2252f7763adap-1, -0x1.20cb8p-55, +0x1.cc0d09bd41caap-8, -0x1p-2, 0x1.f0a7efb9230d7p-1, 0x1.52c7acp-56, +-0x1.3ee038dff6b8p-8, -0x1p-2, 0x1.ef178a3e473c2p-1, 0x1.6310a6p-55, +-0x1.11d262b1f6776p-6, -0x1p-2, 0x1.ed740e7684963p-1, 0x1.e82c78p-56, +-0x1.d3443f4cdb3ddp-6, -0x1p-2, 0x1.ebbd8c8df0b74p-1, 0x1.c6c8c6p-56, +-0x1.4a03176acf82dp-5, -0x1p-2, 0x1.e9f4156c62ddap-1, 0x1.760b1ep-55, +-0x1.aa086170c0a8ep-5, -0x1p-2, 0x1.e817bab4cd10dp-1, -0x1.d0afe6p-56, +-0x1.04d72505d9805p-4, -0x1p-2, 0x1.e6288ec48e112p-1, -0x1.16b56ep-57, +-0x1.3478909e39da9p-4, -0x1p-2, 0x1.e426a4b2bc17ep-1, 0x1.a87388p-55, +-0x1.63e69d6ac7f74p-4, -0x1p-2, 0x1.e212104f686e5p-1, -0x1.014c76p-55, +-0x1.931f774fc9f18p-4, -0x1p-2, 0x1.dfeae622dbe2bp-1, -0x1.514ea8p-55, +-0x1.c2214c3e9167bp-4, -0x1p-2, 0x1.ddb13b6ccc23cp-1, 0x1.83c37cp-55, +-0x1.f0ea4c477339cp-4, -0x1p-2, 0x1.db6526238a09bp-1, -0x1.adee7ep-56, +0x1.e087565455a75p-4, -0x1p-1, 0x1.d906bcf328d46p-1, 0x1.457e6p-56, +0x1.b2356710db0a3p-4, -0x1p-1, 0x1.d696173c9e68bp-1, -0x1.e8c61cp-56, +0x1.8421af15c49d7p-4, -0x1p-1, 0x1.d4134d14dc93ap-1, -0x1.4ef528p-55, +0x1.564df524b00dap-4, -0x1p-1, 0x1.d17e7743e35dcp-1, -0x1.101da2p-58, +0x1.28bbfd87a8cffp-4, -0x1p-1, 0x1.ced7af43cc773p-1, -0x1.e7b6bap-58, +0x1.f6db13ff708cbp-5, -0x1p-1, 0x1.cc1f0f3fcfc5cp-1, 0x1.e57612p-56, +0x1.9cc8b3671dd0fp-5, -0x1p-1, 0x1.c954b213411f5p-1, -0x1.2fb76p-58, +0x1.4344523c8e3b5p-5, -0x1p-1, 0x1.c678b3488739bp-1, 0x1.d86cacp-57, +0x1.d4a2c7f909c4ep-6, -0x1p-1, 0x1.c38b2f180bdb1p-1, -0x1.6e0b16p-56, +0x1.23e6ad10872a7p-6, -0x1p-1, 0x1.c08c426725549p-1, 0x1.b157fcp-58, +0x1.d16c901d95181p-8, -0x1p-1, 0x1.bd7c0ac6f952ap-1, -0x1.825a72p-55, +-0x1.cfc874c3eb6d9p-9, -0x1p-1, 0x1.ba5aa673590d2p-1, 0x1.7ea4e2p-55, +-0x1.ce1e648bffb66p-7, -0x1p-1, 0x1.b728345196e3ep-1, -0x1.bc69f2p-55, +-0x1.92e09abb131d4p-6, -0x1p-1, 0x1.b3e4d3ef55712p-1, -0x1.eb6b8ap-55, +-0x1.1eb3541b4b228p-5, -0x1p-1, 0x1.b090a581502p-1, -0x1.926da2p-55, +-0x1.734d63dedb48ap-5, -0x1p-1, 0x1.ad2bc9e21d511p-1, -0x1.47fbep-55, +-0x1.c73b39ae68c87p-5, -0x1p-1, 0x1.a9b66290ea1a3p-1, 0x1.9f630ep-60, +-0x1.0d3ccc99f5ac6p-4, -0x1p-1, 0x1.a63091b02fae2p-1, -0x1.e91114p-56, +-0x1.3682a66e896f5p-4, -0x1p-1, 0x1.a29a7a0462782p-1, -0x1.128bbp-56, +-0x1.5f6d92fd79f5p-4, -0x1p-1, 0x1.9ef43ef29af94p-1, 0x1.b1dfcap-56, +-0x1.87fbfe70b81a7p-4, -0x1p-1, 0x1.9b3e047f38741p-1, -0x1.30ee28p-55, +-0x1.b02c58832cf96p-4, -0x1p-1, 0x1.9777ef4c7d742p-1, -0x1.15479ap-55, +-0x1.d7fd1490285cap-4, -0x1p-1, 0x1.93a22499263fbp-1, 0x1.3d419ap-55, +-0x1.ff6ca9a2ab6a2p-4, -0x1p-1, 0x1.8fbcca3ef940dp-1, -0x1.6dfa98p-57, +-0x1.133cc94247758p-3, -0x1p-1, 0x1.8bc806b151741p-1, -0x1.2c5e12p-55, +-0x1.269126e6c24e3p-3, -0x1p-1, 0x1.87c400fba2ebfp-1, -0x1.2dabcp-55, +-0x1.39b2aef8f97a4p-3, -0x1p-1, 0x1.83b0e0bff976ep-1, -0x1.6f420ep-56, +-0x1.4ca0a4a8d5657p-3, -0x1p-1, 0x1.7f8ece3571771p-1, -0x1.9c8d8cp-55, +-0x1.5f5a4d233b27fp-3, -0x1p-1, 0x1.7b5df226aafafp-1, -0x1.0f537ap-56, +-0x1.71deef9940631p-3, -0x1p-1, 0x1.771e75f037261p-1, 0x1.5cfce8p-56, +-0x1.842dd5474b37bp-3, -0x1p-1, 0x1.72d0837efff96p-1, 0x1.0d4efp-55, +-0x1.9646497c1e0f6p-3, -0x1p-1, 0x1.6e74454eaa8afp-1, -0x1.dbc03cp-55, +-0x1.a827999fcef32p-3, -0x1p-1, 0x1.6a09e667f3bcdp-1, -0x1.bdd34p-55, +-0x1.b9d1153aaa2bap-3, -0x1p-1, 0x1.6591925f0783dp-1, 0x1.c3d64ep-55, +-0x1.cb420dfbffe59p-3, -0x1p-1, 0x1.610b7551d2cdfp-1, -0x1.251b34p-56, +-0x1.dc79d7c0dc985p-3, -0x1p-1, 0x1.5c77bbe65018cp-1, 0x1.069ea8p-55, +-0x1.ed77c89aabebbp-3, -0x1p-1, 0x1.57d69348cecap-1, -0x1.757208p-55, +-0x1.fe3b38d5c5dc2p-3, -0x1p-1, 0x1.5328292a35596p-1, -0x1.a12eb8p-56, +0x1.f13c7d001a249p-3, -0x1p0, 0x1.4e6cabbe3e5e9p-1, 0x1.3c293ep-57, +0x1.e0effc1174505p-3, -0x1p0, 0x1.49a449b9b0939p-1, -0x1.27ee16p-55, +0x1.d0dfe53aba2fdp-3, -0x1p0, 0x1.44cf325091dd6p-1, 0x1.8076a2p-57, +0x1.c10cd7041afccp-3, -0x1p0, 0x1.3fed9534556d4p-1, 0x1.369166p-55, +0x1.b1776d9b67013p-3, -0x1p0, 0x1.3affa292050b9p-1, 0x1.e3e25ep-56, +0x1.a22042ce0a2f9p-3, -0x1p0, 0x1.36058b10659f3p-1, -0x1.1fcb3ap-55, +0x1.9307ee031e2fdp-3, -0x1p0, 0x1.30ff7fce17035p-1, -0x1.efcc62p-57, +0x1.842f0435941afp-3, -0x1p0, 0x1.2bedb25faf3eap-1, -0x1.14981cp-58, +0x1.759617ee761f9p-3, -0x1p0, 0x1.26d054cdd12dfp-1, -0x1.5da742p-55, +0x1.673db93f41479p-3, -0x1p0, 0x1.21a799933eb59p-1, -0x1.3a7b16p-55, +0x1.592675bc57974p-3, -0x1p0, 0x1.1c73b39ae68c8p-1, 0x1.b25dd2p-55, +0x1.4b50d8778abbdp-3, -0x1p0, 0x1.1734d63dedb49p-1, -0x1.7eef2cp-55, +0x1.3dbd69fabf802p-3, -0x1p0, 0x1.11eb3541b4b23p-1, -0x1.ef23b6p-55, +0x1.306cb042aa3bap-3, -0x1p0, 0x1.0c9704d5d898fp-1, -0x1.8d3d7cp-55, +0x1.235f2eb9a470ap-3, -0x1p0, 0x1.073879922ffeep-1, -0x1.a5a014p-55, +0x1.169566329bcb7p-3, -0x1p0, 0x1.01cfc874c3eb7p-1, -0x1.34a35ep-56, +0x1.0a0fd4e41ab5ap-3, -0x1p0, 0x1.f8ba4dbf89abap-2, -0x1.2ec1fcp-60, +0x1.fb9decc6d55b8p-4, -0x1p0, 0x1.edc1952ef78d6p-2, -0x1.dd0f7cp-56, +0x1.e3a6873fa1279p-4, -0x1p0, 0x1.e2b5d3806f63bp-2, 0x1.e0d89p-58, +0x1.cc3a65bbc6327p-4, -0x1p0, 0x1.d79775b86e389p-2, 0x1.550ec8p-56, +0x1.b55a6f65f7058p-4, -0x1p0, 0x1.cc66e9931c45ep-2, 0x1.6850e4p-58, +0x1.9f07860181d1ep-4, -0x1p0, 0x1.c1249d8011ee7p-2, -0x1.813aaap-56, +0x1.894285e19c468p-4, -0x1p0, 0x1.b5d1009e15ccp-2, 0x1.5b362cp-57, +0x1.740c45e0e512p-4, -0x1p0, 0x1.aa6c82b6d3fcap-2, -0x1.d5f106p-56, +0x1.5f6597591b633p-4, -0x1p0, 0x1.9ef7943a8ed8ap-2, 0x1.6da812p-57, +0x1.4b4f461b0cbaap-4, -0x1p0, 0x1.9372a63bc93d7p-2, 0x1.684318p-57, +0x1.37ca1866b95cfp-4, -0x1p0, 0x1.87de2a6aea963p-2, -0x1.72cedcp-57, +0x1.24d6cee3afb2ap-4, -0x1p0, 0x1.7c3a9311dcce7p-2, 0x1.9a3f2p-62, +0x1.127624999ee1dp-4, -0x1p0, 0x1.7088530fa459fp-2, -0x1.44b19ep-56, +0x1.00a8cee920eabp-4, -0x1p0, 0x1.64c7ddd3f27c6p-2, 0x1.10d2b4p-58, +0x1.dedefb09791b4p-5, -0x1p0, 0x1.58f9a75ab1fddp-2, -0x1.efdc0cp-62, +0x1.bd95b4d43e819p-5, -0x1p0, 0x1.4d1e24278e76ap-2, 0x1.24172p-57, +0x1.9d7713b71eee1p-5, -0x1p0, 0x1.4135c94176601p-2, 0x1.0c97c4p-56, +0x1.7e8454b32ef34p-5, -0x1p0, 0x1.35410c2e18152p-2, -0x1.3cb002p-56, +0x1.60bea939d225ap-5, -0x1p0, 0x1.294062ed59f06p-2, -0x1.5d28dap-56, +0x1.44273720f48bcp-5, -0x1p0, 0x1.1d3443f4cdb3ep-2, -0x1.720d4p-57, +0x1.28bf1897b69ccp-5, -0x1p0, 0x1.111d262b1f677p-2, 0x1.824c2p-56, +0x1.0e875c1b8c3dap-5, -0x1p0, 0x1.04fb80e37fdaep-2, -0x1.412cdap-63, +0x1.eb0208db9e51bp-6, -0x1p0, 0x1.f19f97b215f1bp-3, -0x1.42deeep-57, +0x1.bb5a11138a4c9p-6, -0x1p0, 0x1.d934fe5454311p-3, 0x1.75b922p-57, +0x1.8e18a73634ee7p-6, -0x1p0, 0x1.c0b826a7e4f63p-3, -0x1.af1438p-62, +0x1.633f89e9a1a66p-6, -0x1p0, 0x1.a82a025b00451p-3, -0x1.87905ep-57, +0x1.3ad06011469fbp-6, -0x1p0, 0x1.8f8b83c69a60bp-3, -0x1.26d19ap-57, +0x1.14ccb8bdbf114p-6, -0x1p0, 0x1.76dd9de50bf31p-3, 0x1.1d5eeep-57, +0x1.e26c163ad15b3p-7, -0x1p0, 0x1.5e214448b3fc6p-3, 0x1.531ff6p-57, +0x1.a01b6cdbd995ep-7, -0x1p0, 0x1.45576b1293e5ap-3, -0x1.285a24p-58, +0x1.62aa03dd6ba58p-7, -0x1p0, 0x1.2c8106e8e613ap-3, 0x1.13000ap-58, +0x1.2a1a39a8a2fb7p-7, -0x1p0, 0x1.139f0cedaf577p-3, -0x1.523434p-57, +0x1.ecdc78f30165cp-8, -0x1p0, 0x1.f564e56a9730ep-4, 0x1.a27046p-59, +0x1.8f501492cc296p-8, -0x1p0, 0x1.c3785c79ec2d5p-4, -0x1.4f39dep-61, +0x1.3b92e176d6d31p-8, -0x1p0, 0x1.917a6bc29b42cp-4, -0x1.e2718cp-60, +0x1.e350342a4f6e6p-9, -0x1p0, 0x1.5f6d00a9aa419p-4, -0x1.f4022cp-59, +0x1.63252fe77c5ebp-9, -0x1p0, 0x1.2d52092ce19f6p-4, -0x1.9a088ap-59, +0x1.ed534e31ca57fp-10, -0x1p0, 0x1.f656e79f820ep-5, -0x1.2e1ebep-61, +0x1.3bc390d250439p-10, -0x1p0, 0x1.91f65f10dd814p-5, -0x1.912bdp-61, +0x1.6344004228d8bp-11, -0x1p0, 0x1.2d865759455cdp-5, 0x1.686f64p-61, +0x1.3bcfbd9979a27p-12, -0x1p0, 0x1.92155f7a3667ep-6, -0x1.b1d63p-64, +0x1.3bd2c8da49511p-14, -0x1p0, 0x1.921d1fcdec784p-7, 0x1.9878eap-61, +0.0, -0x1p0, 0.0, 0.0, +0x1.3bd2c8da49511p-14, -0x1p0, -0x1.921d1fcdec784p-7, -0x1.9878eap-61, +0x1.3bcfbd9979a27p-12, -0x1p0, -0x1.92155f7a3667ep-6, 0x1.b1d63p-64, +0x1.6344004228d8bp-11, -0x1p0, -0x1.2d865759455cdp-5, -0x1.686f64p-61, +0x1.3bc390d250439p-10, -0x1p0, -0x1.91f65f10dd814p-5, 0x1.912bdp-61, +0x1.ed534e31ca57fp-10, -0x1p0, -0x1.f656e79f820ep-5, 0x1.2e1ebep-61, +0x1.63252fe77c5ebp-9, -0x1p0, -0x1.2d52092ce19f6p-4, 0x1.9a088ap-59, +0x1.e350342a4f6e6p-9, -0x1p0, -0x1.5f6d00a9aa419p-4, 0x1.f4022cp-59, +0x1.3b92e176d6d31p-8, -0x1p0, -0x1.917a6bc29b42cp-4, 0x1.e2718cp-60, +0x1.8f501492cc296p-8, -0x1p0, -0x1.c3785c79ec2d5p-4, 0x1.4f39dep-61, +0x1.ecdc78f30165cp-8, -0x1p0, -0x1.f564e56a9730ep-4, -0x1.a27046p-59, +0x1.2a1a39a8a2fb7p-7, -0x1p0, -0x1.139f0cedaf577p-3, 0x1.523434p-57, +0x1.62aa03dd6ba58p-7, -0x1p0, -0x1.2c8106e8e613ap-3, -0x1.13000ap-58, +0x1.a01b6cdbd995ep-7, -0x1p0, -0x1.45576b1293e5ap-3, 0x1.285a24p-58, +0x1.e26c163ad15b3p-7, -0x1p0, -0x1.5e214448b3fc6p-3, -0x1.531ff6p-57, +0x1.14ccb8bdbf114p-6, -0x1p0, -0x1.76dd9de50bf31p-3, -0x1.1d5eeep-57, +0x1.3ad06011469fbp-6, -0x1p0, -0x1.8f8b83c69a60bp-3, 0x1.26d19ap-57, +0x1.633f89e9a1a66p-6, -0x1p0, -0x1.a82a025b00451p-3, 0x1.87905ep-57, +0x1.8e18a73634ee7p-6, -0x1p0, -0x1.c0b826a7e4f63p-3, 0x1.af1438p-62, +0x1.bb5a11138a4c9p-6, -0x1p0, -0x1.d934fe5454311p-3, -0x1.75b922p-57, +0x1.eb0208db9e51bp-6, -0x1p0, -0x1.f19f97b215f1bp-3, 0x1.42deeep-57, +0x1.0e875c1b8c3dap-5, -0x1p0, -0x1.04fb80e37fdaep-2, 0x1.412cdap-63, +0x1.28bf1897b69ccp-5, -0x1p0, -0x1.111d262b1f677p-2, -0x1.824c2p-56, +0x1.44273720f48bcp-5, -0x1p0, -0x1.1d3443f4cdb3ep-2, 0x1.720d4p-57, +0x1.60bea939d225ap-5, -0x1p0, -0x1.294062ed59f06p-2, 0x1.5d28dap-56, +0x1.7e8454b32ef34p-5, -0x1p0, -0x1.35410c2e18152p-2, 0x1.3cb002p-56, +0x1.9d7713b71eee1p-5, -0x1p0, -0x1.4135c94176601p-2, -0x1.0c97c4p-56, +0x1.bd95b4d43e819p-5, -0x1p0, -0x1.4d1e24278e76ap-2, -0x1.24172p-57, +0x1.dedefb09791b4p-5, -0x1p0, -0x1.58f9a75ab1fddp-2, 0x1.efdc0cp-62, +0x1.00a8cee920eabp-4, -0x1p0, -0x1.64c7ddd3f27c6p-2, -0x1.10d2b4p-58, +0x1.127624999ee1dp-4, -0x1p0, -0x1.7088530fa459fp-2, 0x1.44b19ep-56, +0x1.24d6cee3afb2ap-4, -0x1p0, -0x1.7c3a9311dcce7p-2, -0x1.9a3f2p-62, +0x1.37ca1866b95cfp-4, -0x1p0, -0x1.87de2a6aea963p-2, 0x1.72cedcp-57, +0x1.4b4f461b0cbaap-4, -0x1p0, -0x1.9372a63bc93d7p-2, -0x1.684318p-57, +0x1.5f6597591b633p-4, -0x1p0, -0x1.9ef7943a8ed8ap-2, -0x1.6da812p-57, +0x1.740c45e0e512p-4, -0x1p0, -0x1.aa6c82b6d3fcap-2, 0x1.d5f106p-56, +0x1.894285e19c468p-4, -0x1p0, -0x1.b5d1009e15ccp-2, -0x1.5b362cp-57, +0x1.9f07860181d1ep-4, -0x1p0, -0x1.c1249d8011ee7p-2, 0x1.813aaap-56, +0x1.b55a6f65f7058p-4, -0x1p0, -0x1.cc66e9931c45ep-2, -0x1.6850e4p-58, +0x1.cc3a65bbc6327p-4, -0x1p0, -0x1.d79775b86e389p-2, -0x1.550ec8p-56, +0x1.e3a6873fa1279p-4, -0x1p0, -0x1.e2b5d3806f63bp-2, -0x1.e0d89p-58, +0x1.fb9decc6d55b8p-4, -0x1p0, -0x1.edc1952ef78d6p-2, 0x1.dd0f7cp-56, +0x1.0a0fd4e41ab5ap-3, -0x1p0, -0x1.f8ba4dbf89abap-2, 0x1.2ec1fcp-60, +0x1.169566329bcb7p-3, -0x1p0, -0x1.01cfc874c3eb7p-1, 0x1.34a35ep-56, +0x1.235f2eb9a470ap-3, -0x1p0, -0x1.073879922ffeep-1, 0x1.a5a014p-55, +0x1.306cb042aa3bap-3, -0x1p0, -0x1.0c9704d5d898fp-1, 0x1.8d3d7cp-55, +0x1.3dbd69fabf802p-3, -0x1p0, -0x1.11eb3541b4b23p-1, 0x1.ef23b6p-55, +0x1.4b50d8778abbdp-3, -0x1p0, -0x1.1734d63dedb49p-1, 0x1.7eef2cp-55, +0x1.592675bc57974p-3, -0x1p0, -0x1.1c73b39ae68c8p-1, -0x1.b25dd2p-55, +0x1.673db93f41479p-3, -0x1p0, -0x1.21a799933eb59p-1, 0x1.3a7b16p-55, +0x1.759617ee761f9p-3, -0x1p0, -0x1.26d054cdd12dfp-1, 0x1.5da742p-55, +0x1.842f0435941afp-3, -0x1p0, -0x1.2bedb25faf3eap-1, 0x1.14981cp-58, +0x1.9307ee031e2fdp-3, -0x1p0, -0x1.30ff7fce17035p-1, 0x1.efcc62p-57, +0x1.a22042ce0a2f9p-3, -0x1p0, -0x1.36058b10659f3p-1, 0x1.1fcb3ap-55, +0x1.b1776d9b67013p-3, -0x1p0, -0x1.3affa292050b9p-1, -0x1.e3e25ep-56, +0x1.c10cd7041afccp-3, -0x1p0, -0x1.3fed9534556d4p-1, -0x1.369166p-55, +0x1.d0dfe53aba2fdp-3, -0x1p0, -0x1.44cf325091dd6p-1, -0x1.8076a2p-57, +0x1.e0effc1174505p-3, -0x1p0, -0x1.49a449b9b0939p-1, 0x1.27ee16p-55, +0x1.f13c7d001a249p-3, -0x1p0, -0x1.4e6cabbe3e5e9p-1, -0x1.3c293ep-57, +-0x1.fe3b38d5c5dc2p-3, -0x1p-1, -0x1.5328292a35596p-1, 0x1.a12eb8p-56, +-0x1.ed77c89aabebbp-3, -0x1p-1, -0x1.57d69348cecap-1, 0x1.757208p-55, +-0x1.dc79d7c0dc985p-3, -0x1p-1, -0x1.5c77bbe65018cp-1, -0x1.069ea8p-55, +-0x1.cb420dfbffe59p-3, -0x1p-1, -0x1.610b7551d2cdfp-1, 0x1.251b34p-56, +-0x1.b9d1153aaa2bap-3, -0x1p-1, -0x1.6591925f0783dp-1, -0x1.c3d64ep-55, +-0x1.a827999fcef32p-3, -0x1p-1, -0x1.6a09e667f3bcdp-1, 0x1.bdd34p-55, +-0x1.9646497c1e0f6p-3, -0x1p-1, -0x1.6e74454eaa8afp-1, 0x1.dbc03cp-55, +-0x1.842dd5474b37bp-3, -0x1p-1, -0x1.72d0837efff96p-1, -0x1.0d4efp-55, +-0x1.71deef9940631p-3, -0x1p-1, -0x1.771e75f037261p-1, -0x1.5cfce8p-56, +-0x1.5f5a4d233b27fp-3, -0x1p-1, -0x1.7b5df226aafafp-1, 0x1.0f537ap-56, +-0x1.4ca0a4a8d5657p-3, -0x1p-1, -0x1.7f8ece3571771p-1, 0x1.9c8d8cp-55, +-0x1.39b2aef8f97a4p-3, -0x1p-1, -0x1.83b0e0bff976ep-1, 0x1.6f420ep-56, +-0x1.269126e6c24e3p-3, -0x1p-1, -0x1.87c400fba2ebfp-1, 0x1.2dabcp-55, +-0x1.133cc94247758p-3, -0x1p-1, -0x1.8bc806b151741p-1, 0x1.2c5e12p-55, +-0x1.ff6ca9a2ab6a2p-4, -0x1p-1, -0x1.8fbcca3ef940dp-1, 0x1.6dfa98p-57, +-0x1.d7fd1490285cap-4, -0x1p-1, -0x1.93a22499263fbp-1, -0x1.3d419ap-55, +-0x1.b02c58832cf96p-4, -0x1p-1, -0x1.9777ef4c7d742p-1, 0x1.15479ap-55, +-0x1.87fbfe70b81a7p-4, -0x1p-1, -0x1.9b3e047f38741p-1, 0x1.30ee28p-55, +-0x1.5f6d92fd79f5p-4, -0x1p-1, -0x1.9ef43ef29af94p-1, -0x1.b1dfcap-56, +-0x1.3682a66e896f5p-4, -0x1p-1, -0x1.a29a7a0462782p-1, 0x1.128bbp-56, +-0x1.0d3ccc99f5ac6p-4, -0x1p-1, -0x1.a63091b02fae2p-1, 0x1.e91114p-56, +-0x1.c73b39ae68c87p-5, -0x1p-1, -0x1.a9b66290ea1a3p-1, -0x1.9f630ep-60, +-0x1.734d63dedb48ap-5, -0x1p-1, -0x1.ad2bc9e21d511p-1, 0x1.47fbep-55, +-0x1.1eb3541b4b228p-5, -0x1p-1, -0x1.b090a581502p-1, 0x1.926da2p-55, +-0x1.92e09abb131d4p-6, -0x1p-1, -0x1.b3e4d3ef55712p-1, 0x1.eb6b8ap-55, +-0x1.ce1e648bffb66p-7, -0x1p-1, -0x1.b728345196e3ep-1, 0x1.bc69f2p-55, +-0x1.cfc874c3eb6d9p-9, -0x1p-1, -0x1.ba5aa673590d2p-1, -0x1.7ea4e2p-55, +0x1.d16c901d95181p-8, -0x1p-1, -0x1.bd7c0ac6f952ap-1, 0x1.825a72p-55, +0x1.23e6ad10872a7p-6, -0x1p-1, -0x1.c08c426725549p-1, -0x1.b157fcp-58, +0x1.d4a2c7f909c4ep-6, -0x1p-1, -0x1.c38b2f180bdb1p-1, 0x1.6e0b16p-56, +0x1.4344523c8e3b5p-5, -0x1p-1, -0x1.c678b3488739bp-1, -0x1.d86cacp-57, +0x1.9cc8b3671dd0fp-5, -0x1p-1, -0x1.c954b213411f5p-1, 0x1.2fb76p-58, +0x1.f6db13ff708cbp-5, -0x1p-1, -0x1.cc1f0f3fcfc5cp-1, -0x1.e57612p-56, +0x1.28bbfd87a8cffp-4, -0x1p-1, -0x1.ced7af43cc773p-1, 0x1.e7b6bap-58, +0x1.564df524b00dap-4, -0x1p-1, -0x1.d17e7743e35dcp-1, 0x1.101da2p-58, +0x1.8421af15c49d7p-4, -0x1p-1, -0x1.d4134d14dc93ap-1, 0x1.4ef528p-55, +0x1.b2356710db0a3p-4, -0x1p-1, -0x1.d696173c9e68bp-1, 0x1.e8c61cp-56, +0x1.e087565455a75p-4, -0x1p-1, -0x1.d906bcf328d46p-1, -0x1.457e6p-56, +-0x1.f0ea4c477339cp-4, -0x1p-2, -0x1.db6526238a09bp-1, 0x1.adee7ep-56, +-0x1.c2214c3e9167bp-4, -0x1p-2, -0x1.ddb13b6ccc23cp-1, -0x1.83c37cp-55, +-0x1.931f774fc9f18p-4, -0x1p-2, -0x1.dfeae622dbe2bp-1, 0x1.514ea8p-55, +-0x1.63e69d6ac7f74p-4, -0x1p-2, -0x1.e212104f686e5p-1, 0x1.014c76p-55, +-0x1.3478909e39da9p-4, -0x1p-2, -0x1.e426a4b2bc17ep-1, -0x1.a87388p-55, +-0x1.04d72505d9805p-4, -0x1p-2, -0x1.e6288ec48e112p-1, 0x1.16b56ep-57, +-0x1.aa086170c0a8ep-5, -0x1p-2, -0x1.e817bab4cd10dp-1, 0x1.d0afe6p-56, +-0x1.4a03176acf82dp-5, -0x1p-2, -0x1.e9f4156c62ddap-1, -0x1.760b1ep-55, +-0x1.d3443f4cdb3ddp-6, -0x1p-2, -0x1.ebbd8c8df0b74p-1, -0x1.c6c8c6p-56, +-0x1.11d262b1f6776p-6, -0x1p-2, -0x1.ed740e7684963p-1, -0x1.e82c78p-56, +-0x1.3ee038dff6b8p-8, -0x1p-2, -0x1.ef178a3e473c2p-1, -0x1.6310a6p-55, +0x1.cc0d09bd41caap-8, -0x1p-2, -0x1.f0a7efb9230d7p-1, -0x1.52c7acp-56, +0x1.36580d5d5e775p-6, -0x1p-2, -0x1.f2252f7763adap-1, 0x1.20cb8p-55, +0x1.fa3ecac0d84e8p-6, -0x1p-2, -0x1.f38f3ac64e589p-1, 0x1.d7bafap-56, +0x1.5f57f693feebep-5, -0x1p-2, -0x1.f4e603b0b2f2dp-1, 0x1.8ee01ep-56, +0x1.c1d1f0e5967d5p-5, -0x1p-2, -0x1.f6297cff75cbp-1, -0x1.562172p-56, +-0x1.db7677942fcc5p-5, -0x1p-3, -0x1.f7599a3a12077p-1, -0x1.84f31cp-55, +-0x1.78851122cff19p-5, -0x1p-3, -0x1.f8764fa714ba9p-1, -0x1.ab2566p-56, +-0x1.155dac4a4f967p-5, -0x1p-3, -0x1.f97f924c9099bp-1, 0x1.e2ae0ep-55, +-0x1.64083747309d1p-6, -0x1p-3, -0x1.fa7557f08a517p-1, 0x1.7a0a8cp-55, +-0x1.39f0cedaf576bp-7, -0x1p-3, -0x1.fb5797195d741p-1, -0x1.1bfac6p-56, +0x1.536352ad19e39p-9, -0x1p-3, -0x1.fc26470e19fd3p-1, -0x1.1ec866p-55, +0x1.e43d1c309e958p-7, -0x1p-3, -0x1.fce15fd6da67bp-1, 0x1.5dd6f8p-56, +0x1.ba1650f592f5p-6, -0x1p-3, -0x1.fd88da3d12526p-1, 0x1.87df62p-55, +-0x1.7db402a6a9063p-6, -0x1p-4, -0x1.fe1cafcbd5b09p-1, -0x1.a23e32p-57, +-0x1.6a9049670cfaep-7, -0x1p-4, -0x1.fe9cdad01883ap-1, -0x1.521eccp-57, +0x1.35230c0fbe402p-10, -0x1p-4, -0x1.ff095658e71adp-1, -0x1.01a8cep-55, +0x1.b82683bc89fbp-7, -0x1p-4, -0x1.ff621e3796d7ep-1, 0x1.c57bc2p-57, +-0x1.6c32baca2ae69p-8, -0x1p-5, -0x1.ffa72effef75dp-1, 0x1.8b4cdcp-55, +0x1.b7aa821726608p-8, -0x1p-5, -0x1.ffd886084cd0dp-1, 0x1.1354d4p-55, +0x1.b78b80c84e1eep-9, -0x1p-6, -0x1.fff62169b92dbp-1, -0x1.5dda3cp-55, 0.0, 0.0, -0x1p0, 0.0, -0x1.b78b80c84e1eep-9, 0x1p-6, -0x1.fff62169b92dbp-1, -0x1.5dda3cp-55, -0x1.b7aa821726608p-8, 0x1p-5, -0x1.ffd886084cd0dp-1, 0x1.1354d4p-55, --0x1.a4f3514d75466p-6, 0x1p-4, -0x1.ffa72effef75dp-1, 0x1.8b4cdcp-55, +0x1.6c32baca2ae69p-8, 0x1p-5, -0x1.ffa72effef75dp-1, 0x1.8b4cdcp-55, -0x1.b82683bc89fbp-7, 0x1p-4, -0x1.ff621e3796d7ep-1, 0x1.c57bc2p-57, -0x1.35230c0fbe402p-10, 0x1p-4, -0x1.ff095658e71adp-1, -0x1.01a8cep-55, --0x1.a55beda63cc14p-5, 0x1p-3, -0x1.fe9cdad01883ap-1, -0x1.521eccp-57, --0x1.4125feacab7cep-5, 0x1p-3, -0x1.fe1cafcbd5b09p-1, -0x1.a23e32p-57, +0x1.6a9049670cfaep-7, 0x1p-4, -0x1.fe9cdad01883ap-1, -0x1.521eccp-57, +0x1.7db402a6a9063p-6, 0x1p-4, -0x1.fe1cafcbd5b09p-1, -0x1.a23e32p-57, -0x1.ba1650f592f5p-6, 0x1p-3, -0x1.fd88da3d12526p-1, 0x1.87df62p-55, -0x1.e43d1c309e958p-7, 0x1p-3, -0x1.fce15fd6da67bp-1, 0x1.5dd6f8p-56, -0x1.536352ad19e39p-9, 0x1p-3, -0x1.fc26470e19fd3p-1, -0x1.1ec866p-55, --0x1.d8c1e624a1513p-4, 0x1p-2, -0x1.fb5797195d741p-1, -0x1.1bfac6p-56, --0x1.a6fdf22e33d8cp-4, 0x1p-2, -0x1.fa7557f08a517p-1, 0x1.7a0a8cp-55, --0x1.755129dad834cp-4, 0x1p-2, -0x1.f97f924c9099bp-1, 0x1.e2ae0ep-55, --0x1.43bd776e98073p-4, 0x1p-2, -0x1.f8764fa714ba9p-1, -0x1.ab2566p-56, --0x1.1244c435e819dp-4, 0x1p-2, -0x1.f7599a3a12077p-1, -0x1.84f31cp-55, +0x1.39f0cedaf576bp-7, 0x1p-3, -0x1.fb5797195d741p-1, -0x1.1bfac6p-56, +0x1.64083747309d1p-6, 0x1p-3, -0x1.fa7557f08a517p-1, 0x1.7a0a8cp-55, +0x1.155dac4a4f967p-5, 0x1p-3, -0x1.f97f924c9099bp-1, 0x1.e2ae0ep-55, +0x1.78851122cff19p-5, 0x1p-3, -0x1.f8764fa714ba9p-1, -0x1.ab2566p-56, +0x1.db7677942fcc5p-5, 0x1p-3, -0x1.f7599a3a12077p-1, -0x1.84f31cp-55, -0x1.c1d1f0e5967d5p-5, 0x1p-2, -0x1.f6297cff75cbp-1, -0x1.562172p-56, -0x1.5f57f693feebep-5, 0x1p-2, -0x1.f4e603b0b2f2dp-1, 0x1.8ee01ep-56, -0x1.fa3ecac0d84e8p-6, 0x1p-2, -0x1.f38f3ac64e589p-1, 0x1.d7bafap-56, -0x1.36580d5d5e775p-6, 0x1p-2, -0x1.f2252f7763adap-1, 0x1.20cb8p-55, -0x1.cc0d09bd41caap-8, 0x1p-2, -0x1.f0a7efb9230d7p-1, -0x1.52c7acp-56, --0x1.f608fe39004a4p-3, 0x1p-1, -0x1.ef178a3e473c2p-1, -0x1.6310a6p-55, --0x1.ddc5b3a9c1311p-3, 0x1p-1, -0x1.ed740e7684963p-1, -0x1.e82c78p-56, --0x1.c597781664984p-3, 0x1p-1, -0x1.ebbd8c8df0b74p-1, -0x1.c6c8c6p-56, --0x1.ad7f3a254c1f5p-3, 0x1p-1, -0x1.e9f4156c62ddap-1, -0x1.760b1ep-55, --0x1.957de7a3cfd5dp-3, 0x1p-1, -0x1.e817bab4cd10dp-1, 0x1.d0afe6p-56, --0x1.7d946d7d133fdp-3, 0x1p-1, -0x1.e6288ec48e112p-1, 0x1.16b56ep-57, --0x1.65c3b7b0e312cp-3, 0x1p-1, -0x1.e426a4b2bc17ep-1, -0x1.a87388p-55, --0x1.4e0cb14a9c046p-3, 0x1p-1, -0x1.e212104f686e5p-1, 0x1.014c76p-55, --0x1.367044581b074p-3, 0x1p-1, -0x1.dfeae622dbe2bp-1, 0x1.514ea8p-55, --0x1.1eef59e0b74c3p-3, 0x1p-1, -0x1.ddb13b6ccc23cp-1, -0x1.83c37cp-55, --0x1.078ad9dc46632p-3, 0x1p-1, -0x1.db6526238a09bp-1, 0x1.adee7ep-56, +0x1.3ee038dff6b8p-8, 0x1p-2, -0x1.ef178a3e473c2p-1, -0x1.6310a6p-55, +0x1.11d262b1f6776p-6, 0x1p-2, -0x1.ed740e7684963p-1, -0x1.e82c78p-56, +0x1.d3443f4cdb3ddp-6, 0x1p-2, -0x1.ebbd8c8df0b74p-1, -0x1.c6c8c6p-56, +0x1.4a03176acf82dp-5, 0x1p-2, -0x1.e9f4156c62ddap-1, -0x1.760b1ep-55, +0x1.aa086170c0a8ep-5, 0x1p-2, -0x1.e817bab4cd10dp-1, 0x1.d0afe6p-56, +0x1.04d72505d9805p-4, 0x1p-2, -0x1.e6288ec48e112p-1, 0x1.16b56ep-57, +0x1.3478909e39da9p-4, 0x1p-2, -0x1.e426a4b2bc17ep-1, -0x1.a87388p-55, +0x1.63e69d6ac7f74p-4, 0x1p-2, -0x1.e212104f686e5p-1, 0x1.014c76p-55, +0x1.931f774fc9f18p-4, 0x1p-2, -0x1.dfeae622dbe2bp-1, 0x1.514ea8p-55, +0x1.c2214c3e9167bp-4, 0x1p-2, -0x1.ddb13b6ccc23cp-1, -0x1.83c37cp-55, +0x1.f0ea4c477339cp-4, 0x1p-2, -0x1.db6526238a09bp-1, 0x1.adee7ep-56, -0x1.e087565455a75p-4, 0x1p-1, -0x1.d906bcf328d46p-1, -0x1.457e6p-56, -0x1.b2356710db0a3p-4, 0x1p-1, -0x1.d696173c9e68bp-1, 0x1.e8c61cp-56, -0x1.8421af15c49d7p-4, 0x1p-1, -0x1.d4134d14dc93ap-1, 0x1.4ef528p-55, @@ -694,33 +694,33 @@ template <> inline constexpr double kSinApproxTable[] = -0x1.d4a2c7f909c4ep-6, 0x1p-1, -0x1.c38b2f180bdb1p-1, 0x1.6e0b16p-56, -0x1.23e6ad10872a7p-6, 0x1p-1, -0x1.c08c426725549p-1, -0x1.b157fcp-58, -0x1.d16c901d95181p-8, 0x1p-1, -0x1.bd7c0ac6f952ap-1, 0x1.825a72p-55, --0x1.fc606f1678292p-2, 0x1p0, -0x1.ba5aa673590d2p-1, -0x1.7ea4e2p-55, --0x1.f18f0cdba0025p-2, 0x1p0, -0x1.b728345196e3ep-1, 0x1.bc69f2p-55, --0x1.e6d1f6544ece3p-2, 0x1p0, -0x1.b3e4d3ef55712p-1, 0x1.eb6b8ap-55, --0x1.dc29957c969bbp-2, 0x1p0, -0x1.b090a581502p-1, 0x1.926da2p-55, --0x1.d19653842496fp-2, 0x1p0, -0x1.ad2bc9e21d511p-1, 0x1.47fbep-55, --0x1.c71898ca32e6fp-2, 0x1p0, -0x1.a9b66290ea1a3p-1, -0x1.9f630ep-60, --0x1.bcb0ccd98294fp-2, 0x1p0, -0x1.a63091b02fae2p-1, 0x1.e91114p-56, --0x1.b25f56645da43p-2, 0x1p0, -0x1.a29a7a0462782p-1, 0x1.128bbp-56, --0x1.a8249b40a182cp-2, 0x1p0, -0x1.9ef43ef29af94p-1, -0x1.b1dfcap-56, --0x1.9e010063d1f96p-2, 0x1p0, -0x1.9b3e047f38741p-1, 0x1.30ee28p-55, --0x1.93f4e9df34c1bp-2, 0x1p0, -0x1.9777ef4c7d742p-1, 0x1.15479ap-55, --0x1.8a00badbf5e8ep-2, 0x1p0, -0x1.93a22499263fbp-1, -0x1.3d419ap-55, --0x1.8024d59755257p-2, 0x1p0, -0x1.8fbcca3ef940dp-1, 0x1.6dfa98p-57, --0x1.76619b5edc454p-2, 0x1p0, -0x1.8bc806b151741p-1, 0x1.2c5e12p-55, --0x1.6cb76c8c9ed8fp-2, 0x1p0, -0x1.87c400fba2ebfp-1, 0x1.2dabcp-55, --0x1.6326a8838342ep-2, 0x1p0, -0x1.83b0e0bff976ep-1, 0x1.6f420ep-56, --0x1.59afadab954d4p-2, 0x1p0, -0x1.7f8ece3571771p-1, 0x1.9c8d8cp-55, --0x1.5052d96e626c1p-2, 0x1p0, -0x1.7b5df226aafafp-1, 0x1.0f537ap-56, --0x1.471088335fce7p-2, 0x1p0, -0x1.771e75f037261p-1, -0x1.5cfce8p-56, --0x1.3de9155c5a642p-2, 0x1p0, -0x1.72d0837efff96p-1, -0x1.0d4efp-55, --0x1.34dcdb41f0f85p-2, 0x1p0, -0x1.6e74454eaa8afp-1, 0x1.dbc03cp-55, --0x1.2bec333018867p-2, 0x1p0, -0x1.6a09e667f3bcdp-1, 0x1.bdd34p-55, --0x1.23177562aaea3p-2, 0x1p0, -0x1.6591925f0783dp-1, -0x1.c3d64ep-55, --0x1.1a5ef902000d3p-2, 0x1p0, -0x1.610b7551d2cdfp-1, 0x1.251b34p-56, --0x1.11c3141f91b3ep-2, 0x1p0, -0x1.5c77bbe65018cp-1, -0x1.069ea8p-55, --0x1.09441bb2aa0a2p-2, 0x1p0, -0x1.57d69348cecap-1, 0x1.757208p-55, --0x1.00e263951d11fp-2, 0x1p0, -0x1.5328292a35596p-1, 0x1.a12eb8p-56, +0x1.cfc874c3eb6d9p-9, 0x1p-1, -0x1.ba5aa673590d2p-1, -0x1.7ea4e2p-55, +0x1.ce1e648bffb66p-7, 0x1p-1, -0x1.b728345196e3ep-1, 0x1.bc69f2p-55, +0x1.92e09abb131d4p-6, 0x1p-1, -0x1.b3e4d3ef55712p-1, 0x1.eb6b8ap-55, +0x1.1eb3541b4b228p-5, 0x1p-1, -0x1.b090a581502p-1, 0x1.926da2p-55, +0x1.734d63dedb48ap-5, 0x1p-1, -0x1.ad2bc9e21d511p-1, 0x1.47fbep-55, +0x1.c73b39ae68c87p-5, 0x1p-1, -0x1.a9b66290ea1a3p-1, -0x1.9f630ep-60, +0x1.0d3ccc99f5ac6p-4, 0x1p-1, -0x1.a63091b02fae2p-1, 0x1.e91114p-56, +0x1.3682a66e896f5p-4, 0x1p-1, -0x1.a29a7a0462782p-1, 0x1.128bbp-56, +0x1.5f6d92fd79f5p-4, 0x1p-1, -0x1.9ef43ef29af94p-1, -0x1.b1dfcap-56, +0x1.87fbfe70b81a7p-4, 0x1p-1, -0x1.9b3e047f38741p-1, 0x1.30ee28p-55, +0x1.b02c58832cf96p-4, 0x1p-1, -0x1.9777ef4c7d742p-1, 0x1.15479ap-55, +0x1.d7fd1490285cap-4, 0x1p-1, -0x1.93a22499263fbp-1, -0x1.3d419ap-55, +0x1.ff6ca9a2ab6a2p-4, 0x1p-1, -0x1.8fbcca3ef940dp-1, 0x1.6dfa98p-57, +0x1.133cc94247758p-3, 0x1p-1, -0x1.8bc806b151741p-1, 0x1.2c5e12p-55, +0x1.269126e6c24e3p-3, 0x1p-1, -0x1.87c400fba2ebfp-1, 0x1.2dabcp-55, +0x1.39b2aef8f97a4p-3, 0x1p-1, -0x1.83b0e0bff976ep-1, 0x1.6f420ep-56, +0x1.4ca0a4a8d5657p-3, 0x1p-1, -0x1.7f8ece3571771p-1, 0x1.9c8d8cp-55, +0x1.5f5a4d233b27fp-3, 0x1p-1, -0x1.7b5df226aafafp-1, 0x1.0f537ap-56, +0x1.71deef9940631p-3, 0x1p-1, -0x1.771e75f037261p-1, -0x1.5cfce8p-56, +0x1.842dd5474b37bp-3, 0x1p-1, -0x1.72d0837efff96p-1, -0x1.0d4efp-55, +0x1.9646497c1e0f6p-3, 0x1p-1, -0x1.6e74454eaa8afp-1, 0x1.dbc03cp-55, +0x1.a827999fcef32p-3, 0x1p-1, -0x1.6a09e667f3bcdp-1, 0x1.bdd34p-55, +0x1.b9d1153aaa2bap-3, 0x1p-1, -0x1.6591925f0783dp-1, -0x1.c3d64ep-55, +0x1.cb420dfbffe59p-3, 0x1p-1, -0x1.610b7551d2cdfp-1, 0x1.251b34p-56, +0x1.dc79d7c0dc985p-3, 0x1p-1, -0x1.5c77bbe65018cp-1, -0x1.069ea8p-55, +0x1.ed77c89aabebbp-3, 0x1p-1, -0x1.57d69348cecap-1, 0x1.757208p-55, +0x1.fe3b38d5c5dc2p-3, 0x1p-1, -0x1.5328292a35596p-1, 0x1.a12eb8p-56, -0x1.f13c7d001a249p-3, 0x1p0, -0x1.4e6cabbe3e5e9p-1, -0x1.3c293ep-57, -0x1.e0effc1174505p-3, 0x1p0, -0x1.49a449b9b0939p-1, 0x1.27ee16p-55, -0x1.d0dfe53aba2fdp-3, 0x1p0, -0x1.44cf325091dd6p-1, -0x1.8076a2p-57, @@ -785,148 +785,148 @@ template inline constexpr char kCosApproxTable[] = {}; template <> inline constexpr float kCosApproxTable[] = { 0.0f, 0.0f, 0x1p0f, 0.0f, --0x1.003242p5f, 0x1p5f, 0x1.ffd886p-1f, 0x1.099a1ap-30f, --0x1.00c8fcp4f, 0x1p4f, 0x1.ff621ep-1f, 0x1.bcb6bep-28f, --0x1.025aa4p3f, 0x1p3f, 0x1.fe9cdap-1f, 0x1.a03108p-26f, --0x1.0322f4p3f, 0x1p3f, 0x1.fd88dap-1f, 0x1.e89292p-28f, --0x1.03eacap3f, 0x1p3f, 0x1.fc2648p-1f, -0x1.e3cc06p-26f, --0x1.096408p2f, 0x1p2f, 0x1.fa7558p-1f, -0x1.eeb5d2p-30f, --0x1.0af10ap2f, 0x1p2f, 0x1.f8765p-1f, -0x1.63ad16p-27f, --0x1.0c7c5cp2f, 0x1p2f, 0x1.f6297cp-1f, 0x1.feeb96p-26f, --0x1.0e05c2p2f, 0x1p2f, 0x1.f38f3ap-1f, 0x1.8c9cb2p-26f, --0x1.0f8cfcp2f, 0x1p2f, 0x1.f0a7fp-1f, -0x1.1b73cap-27f, --0x1.2223a4p1f, 0x1p1f, 0x1.ed740ep-1f, 0x1.da1258p-27f, --0x1.25280cp1f, 0x1p1f, 0x1.e9f416p-1f, -0x1.273a44p-26f, --0x1.2826bap1f, 0x1p1f, 0x1.e6288ep-1f, 0x1.891c22p-26f, --0x1.2b1f34p1f, 0x1p1f, 0x1.e2121p-1f, 0x1.3da1bap-27f, --0x1.2e110ap1f, 0x1p1f, 0x1.ddb13cp-1f, -0x1.2667b8p-26f, --0x1.30fbc6p1f, 0x1p1f, 0x1.d906bcp-1f, 0x1.e651a8p-26f, --0x1.33def2p1f, 0x1p1f, 0x1.d4134ep-1f, -0x1.d646d8p-26f, --0x1.36ba2p1f, 0x1p1f, 0x1.ced7bp-1f, -0x1.786712p-26f, --0x1.398cdep1f, 0x1p1f, 0x1.c954b2p-1f, 0x1.3411f4p-29f, --0x1.3c56bap1f, 0x1p1f, 0x1.c38b3p-1f, -0x1.cfe84ap-26f, --0x1.3f174ap1f, 0x1p1f, 0x1.bd7c0ap-1f, 0x1.8df2a6p-26f, --0x1.839c3cp0f, 0x1p0f, 0x1.b72834p-1f, 0x1.465b9p-27f, --0x1.88f59ap0f, 0x1p0f, 0x1.b090a6p-1f, -0x1.fabf8p-27f, --0x1.8e39dap0f, 0x1p0f, 0x1.a9b662p-1f, 0x1.21d434p-26f, --0x1.93682ap0f, 0x1p0f, 0x1.a29a7ap-1f, 0x1.189e08p-31f, --0x1.987fcp0f, 0x1p0f, 0x1.9b3e04p-1f, 0x1.fce1dp-27f, --0x1.9d7fd2p0f, 0x1p0f, 0x1.93a224p-1f, 0x1.324c8p-26f, --0x1.a2679ap0f, 0x1p0f, 0x1.8bc806p-1f, 0x1.62a2e8p-26f, --0x1.a73656p0f, 0x1p0f, 0x1.83b0ep-1f, 0x1.7ff2eep-26f, --0x1.abeb4ap0f, 0x1p0f, 0x1.7b5df2p-1f, 0x1.3557d8p-28f, --0x1.b085bap0f, 0x1p0f, 0x1.72d084p-1f, -0x1.02000ep-26f, --0x1.b504f4p0f, 0x1p0f, 0x1.6a09e6p-1f, 0x1.9fcef4p-27f, --0x1.b96842p0f, 0x1p0f, 0x1.610b76p-1f, -0x1.5c5a64p-26f, --0x1.bdaefap0f, 0x1p0f, 0x1.57d694p-1f, -0x1.6e626cp-26f, --0x1.c1d87p0f, 0x1p0f, 0x1.4e6cacp-1f, -0x1.070686p-27f, --0x1.c5e404p0f, 0x1p0f, 0x1.44cf32p-1f, 0x1.424776p-27f, --0x1.c9d112p0f, 0x1p0f, 0x1.3affa2p-1f, 0x1.240a18p-26f, --0x1.cd9f02p0f, 0x1p0f, 0x1.30ff8p-1f, -0x1.8f47e6p-28f, --0x1.d14d3ep0f, 0x1p0f, 0x1.26d054p-1f, 0x1.9ba25cp-26f, --0x1.d4db32p0f, 0x1p0f, 0x1.1c73b4p-1f, -0x1.9465cep-27f, --0x1.d84852p0f, 0x1p0f, 0x1.11eb36p-1f, -0x1.7c969cp-26f, --0x1.db941ap0f, 0x1p0f, 0x1.07387ap-1f, -0x1.b74004p-27f, --0x1.debe06p0f, 0x1p0f, 0x1.f8ba4ep-2f, -0x1.01d952p-28f, --0x1.e1c598p0f, 0x1p0f, 0x1.e2b5d4p-2f, -0x1.fe4272p-28f, --0x1.e4aa5ap0f, 0x1p0f, 0x1.cc66eap-2f, -0x1.b38ee8p-28f, --0x1.e76bd8p0f, 0x1p0f, 0x1.b5d1p-2f, 0x1.3c2b98p-27f, --0x1.ea09a6p0f, 0x1p0f, 0x1.9ef794p-2f, 0x1.d476c6p-29f, --0x1.ec835ep0f, 0x1p0f, 0x1.87de2ap-2f, 0x1.abaa58p-28f, --0x1.eed89ep0f, 0x1p0f, 0x1.708854p-2f, -0x1.e0b74cp-27f, --0x1.f10908p0f, 0x1p0f, 0x1.58f9a8p-2f, -0x1.4a9c04p-27f, --0x1.f31448p0f, 0x1p0f, 0x1.4135cap-2f, -0x1.7d134p-27f, --0x1.f4fa0ap0f, 0x1p0f, 0x1.294062p-2f, 0x1.dab3ep-27f, --0x1.f6ba08p0f, 0x1p0f, 0x1.111d26p-2f, 0x1.58fb3cp-29f, --0x1.f853f8p0f, 0x1p0f, 0x1.f19f98p-3f, -0x1.37a83ap-29f, --0x1.f9c79ep0f, 0x1p0f, 0x1.c0b826p-3f, 0x1.4fc9ecp-28f, --0x1.fb14bep0f, 0x1p0f, 0x1.8f8b84p-3f, -0x1.cb2cfap-30f, --0x1.fc3b28p0f, 0x1p0f, 0x1.5e2144p-3f, 0x1.22cff2p-29f, --0x1.fd3aacp0f, 0x1p0f, 0x1.2c8106p-3f, 0x1.d1cc28p-28f, --0x1.fe1324p0f, 0x1p0f, 0x1.f564e6p-4f, -0x1.2ad19ep-29f, --0x1.fec46ep0f, 0x1p0f, 0x1.917a6cp-4f, -0x1.eb25eap-31f, --0x1.ff4e6ep0f, 0x1p0f, 0x1.2d520ap-4f, -0x1.a63cc2p-29f, --0x1.ffb11p0f, 0x1p0f, 0x1.91f66p-5f, -0x1.de44fep-30f, --0x1.ffec44p0f, 0x1p0f, 0x1.92156p-6f, -0x1.0b933p-31f, --0x1p1f, 0x1p0f, 0.0f, 0.0f, --0x1.ffec44p0f, 0x1p0f, -0x1.92156p-6f, 0x1.0b933p-31f, --0x1.ffb11p0f, 0x1p0f, -0x1.91f66p-5f, 0x1.de44fep-30f, --0x1.ff4e6ep0f, 0x1p0f, -0x1.2d520ap-4f, 0x1.a63cc2p-29f, --0x1.fec46ep0f, 0x1p0f, -0x1.917a6cp-4f, 0x1.eb25eap-31f, --0x1.fe1324p0f, 0x1p0f, -0x1.f564e6p-4f, 0x1.2ad19ep-29f, --0x1.fd3aacp0f, 0x1p0f, -0x1.2c8106p-3f, -0x1.d1cc28p-28f, --0x1.fc3b28p0f, 0x1p0f, -0x1.5e2144p-3f, -0x1.22cff2p-29f, --0x1.fb14bep0f, 0x1p0f, -0x1.8f8b84p-3f, 0x1.cb2cfap-30f, --0x1.f9c79ep0f, 0x1p0f, -0x1.c0b826p-3f, -0x1.4fc9ecp-28f, --0x1.f853f8p0f, 0x1p0f, -0x1.f19f98p-3f, 0x1.37a83ap-29f, --0x1.f6ba08p0f, 0x1p0f, -0x1.111d26p-2f, -0x1.58fb3cp-29f, --0x1.f4fa0ap0f, 0x1p0f, -0x1.294062p-2f, -0x1.dab3ep-27f, --0x1.f31448p0f, 0x1p0f, -0x1.4135cap-2f, 0x1.7d134p-27f, --0x1.f10908p0f, 0x1p0f, -0x1.58f9a8p-2f, 0x1.4a9c04p-27f, --0x1.eed89ep0f, 0x1p0f, -0x1.708854p-2f, 0x1.e0b74cp-27f, --0x1.ec835ep0f, 0x1p0f, -0x1.87de2ap-2f, -0x1.abaa58p-28f, --0x1.ea09a6p0f, 0x1p0f, -0x1.9ef794p-2f, -0x1.d476c6p-29f, --0x1.e76bd8p0f, 0x1p0f, -0x1.b5d1p-2f, -0x1.3c2b98p-27f, --0x1.e4aa5ap0f, 0x1p0f, -0x1.cc66eap-2f, 0x1.b38ee8p-28f, --0x1.e1c598p0f, 0x1p0f, -0x1.e2b5d4p-2f, 0x1.fe4272p-28f, --0x1.debe06p0f, 0x1p0f, -0x1.f8ba4ep-2f, 0x1.01d952p-28f, --0x1.db941ap0f, 0x1p0f, -0x1.07387ap-1f, 0x1.b74004p-27f, --0x1.d84852p0f, 0x1p0f, -0x1.11eb36p-1f, 0x1.7c969cp-26f, --0x1.d4db32p0f, 0x1p0f, -0x1.1c73b4p-1f, 0x1.9465cep-27f, --0x1.d14d3ep0f, 0x1p0f, -0x1.26d054p-1f, -0x1.9ba25cp-26f, --0x1.cd9f02p0f, 0x1p0f, -0x1.30ff8p-1f, 0x1.8f47e6p-28f, --0x1.c9d112p0f, 0x1p0f, -0x1.3affa2p-1f, -0x1.240a18p-26f, --0x1.c5e404p0f, 0x1p0f, -0x1.44cf32p-1f, -0x1.424776p-27f, --0x1.c1d87p0f, 0x1p0f, -0x1.4e6cacp-1f, 0x1.070686p-27f, --0x1.bdaefap0f, 0x1p0f, -0x1.57d694p-1f, 0x1.6e626cp-26f, --0x1.b96842p0f, 0x1p0f, -0x1.610b76p-1f, 0x1.5c5a64p-26f, --0x1.b504f4p0f, 0x1p0f, -0x1.6a09e6p-1f, -0x1.9fcef4p-27f, --0x1.b085bap0f, 0x1p0f, -0x1.72d084p-1f, 0x1.02000ep-26f, --0x1.abeb4ap0f, 0x1p0f, -0x1.7b5df2p-1f, -0x1.3557d8p-28f, --0x1.a73656p0f, 0x1p0f, -0x1.83b0ep-1f, -0x1.7ff2eep-26f, --0x1.a2679ap0f, 0x1p0f, -0x1.8bc806p-1f, -0x1.62a2e8p-26f, --0x1.9d7fd2p0f, 0x1p0f, -0x1.93a224p-1f, -0x1.324c8p-26f, --0x1.987fcp0f, 0x1p0f, -0x1.9b3e04p-1f, -0x1.fce1dp-27f, --0x1.93682ap0f, 0x1p0f, -0x1.a29a7ap-1f, -0x1.189e08p-31f, --0x1.8e39dap0f, 0x1p0f, -0x1.a9b662p-1f, -0x1.21d434p-26f, --0x1.88f59ap0f, 0x1p0f, -0x1.b090a6p-1f, 0x1.fabf8p-27f, --0x1.839c3cp0f, 0x1p0f, -0x1.b72834p-1f, -0x1.465b9p-27f, --0x1.3f174ap1f, 0x1p1f, -0x1.bd7c0ap-1f, -0x1.8df2a6p-26f, --0x1.3c56bap1f, 0x1p1f, -0x1.c38b3p-1f, 0x1.cfe84ap-26f, --0x1.398cdep1f, 0x1p1f, -0x1.c954b2p-1f, -0x1.3411f4p-29f, --0x1.36ba2p1f, 0x1p1f, -0x1.ced7bp-1f, 0x1.786712p-26f, --0x1.33def2p1f, 0x1p1f, -0x1.d4134ep-1f, 0x1.d646d8p-26f, --0x1.30fbc6p1f, 0x1p1f, -0x1.d906bcp-1f, -0x1.e651a8p-26f, --0x1.2e110ap1f, 0x1p1f, -0x1.ddb13cp-1f, 0x1.2667b8p-26f, --0x1.2b1f34p1f, 0x1p1f, -0x1.e2121p-1f, -0x1.3da1bap-27f, --0x1.2826bap1f, 0x1p1f, -0x1.e6288ep-1f, -0x1.891c22p-26f, --0x1.25280cp1f, 0x1p1f, -0x1.e9f416p-1f, 0x1.273a44p-26f, --0x1.2223a4p1f, 0x1p1f, -0x1.ed740ep-1f, -0x1.da1258p-27f, --0x1.0f8cfcp2f, 0x1p2f, -0x1.f0a7fp-1f, 0x1.1b73cap-27f, --0x1.0e05c2p2f, 0x1p2f, -0x1.f38f3ap-1f, -0x1.8c9cb2p-26f, --0x1.0c7c5cp2f, 0x1p2f, -0x1.f6297cp-1f, -0x1.feeb96p-26f, --0x1.0af10ap2f, 0x1p2f, -0x1.f8765p-1f, 0x1.63ad16p-27f, --0x1.096408p2f, 0x1p2f, -0x1.fa7558p-1f, 0x1.eeb5d2p-30f, --0x1.03eacap3f, 0x1p3f, -0x1.fc2648p-1f, 0x1.e3cc06p-26f, --0x1.0322f4p3f, 0x1p3f, -0x1.fd88dap-1f, -0x1.e89292p-28f, --0x1.025aa4p3f, 0x1p3f, -0x1.fe9cdap-1f, -0x1.a03108p-26f, --0x1.00c8fcp4f, 0x1p4f, -0x1.ff621ep-1f, -0x1.bcb6bep-28f, --0x1.003242p5f, 0x1p5f, -0x1.ffd886p-1f, -0x1.099a1ap-30f, +0x1.b7aa82p-8f, -0x1p-5f, 0x1.ffd886p-1f, 0x1.099a1ap-30f, +0x1.b82684p-7f, -0x1p-4f, 0x1.ff621ep-1f, 0x1.bcb6bep-28f, +-0x1.6a904ap-7f, -0x1p-4f, 0x1.fe9cdap-1f, 0x1.a03108p-26f, +0x1.ba165p-6f, -0x1p-3f, 0x1.fd88dap-1f, 0x1.e89292p-28f, +0x1.536352p-9f, -0x1p-3f, 0x1.fc2648p-1f, -0x1.e3cc06p-26f, +-0x1.640838p-6f, -0x1p-3f, 0x1.fa7558p-1f, -0x1.eeb5d2p-30f, +-0x1.788512p-5f, -0x1p-3f, 0x1.f8765p-1f, -0x1.63ad16p-27f, +0x1.c1d1fp-5f, -0x1p-2f, 0x1.f6297cp-1f, 0x1.feeb96p-26f, +0x1.fa3ecap-6f, -0x1p-2f, 0x1.f38f3ap-1f, 0x1.8c9cb2p-26f, +0x1.cc0d0ap-8f, -0x1p-2f, 0x1.f0a7fp-1f, -0x1.1b73cap-27f, +-0x1.11d262p-6f, -0x1p-2f, 0x1.ed740ep-1f, 0x1.da1258p-27f, +-0x1.4a0318p-5f, -0x1p-2f, 0x1.e9f416p-1f, -0x1.273a44p-26f, +-0x1.04d726p-4f, -0x1p-2f, 0x1.e6288ep-1f, 0x1.891c22p-26f, +-0x1.63e69ep-4f, -0x1p-2f, 0x1.e2121p-1f, 0x1.3da1bap-27f, +0x1.1eef5ap-3f, -0x1p-1f, 0x1.ddb13cp-1f, -0x1.2667b8p-26f, +0x1.e08756p-4f, -0x1p-1f, 0x1.d906bcp-1f, 0x1.e651a8p-26f, +0x1.8421bp-4f, -0x1p-1f, 0x1.d4134ep-1f, -0x1.d646d8p-26f, +0x1.28bbfep-4f, -0x1p-1f, 0x1.ced7bp-1f, -0x1.786712p-26f, +0x1.9cc8b4p-5f, -0x1p-1f, 0x1.c954b2p-1f, 0x1.3411f4p-29f, +0x1.d4a2c8p-6f, -0x1p-1f, 0x1.c38b3p-1f, -0x1.cfe84ap-26f, +0x1.d16c9p-8f, -0x1p-1f, 0x1.bd7c0ap-1f, 0x1.8df2a6p-26f, +-0x1.ce1e64p-7f, -0x1p-1f, 0x1.b72834p-1f, 0x1.465b9p-27f, +-0x1.1eb354p-5f, -0x1p-1f, 0x1.b090a6p-1f, -0x1.fabf8p-27f, +-0x1.c73b3ap-5f, -0x1p-1f, 0x1.a9b662p-1f, 0x1.21d434p-26f, +-0x1.3682a6p-4f, -0x1p-1f, 0x1.a29a7ap-1f, 0x1.189e08p-31f, +-0x1.87fbfep-4f, -0x1p-1f, 0x1.9b3e04p-1f, 0x1.fce1dp-27f, +-0x1.d7fd14p-4f, -0x1p-1f, 0x1.93a224p-1f, 0x1.324c8p-26f, +-0x1.133ccap-3f, -0x1p-1f, 0x1.8bc806p-1f, 0x1.62a2e8p-26f, +-0x1.39b2aep-3f, -0x1p-1f, 0x1.83b0ep-1f, 0x1.7ff2eep-26f, +-0x1.5f5a4ep-3f, -0x1p-1f, 0x1.7b5df2p-1f, 0x1.3557d8p-28f, +-0x1.842dd6p-3f, -0x1p-1f, 0x1.72d084p-1f, -0x1.02000ep-26f, +0x1.2bec34p-2f, -0x1p0f, 0x1.6a09e6p-1f, 0x1.9fcef4p-27f, +0x1.1a5efap-2f, -0x1p0f, 0x1.610b76p-1f, -0x1.5c5a64p-26f, +0x1.09441cp-2f, -0x1p0f, 0x1.57d694p-1f, -0x1.6e626cp-26f, +0x1.f13c7ep-3f, -0x1p0f, 0x1.4e6cacp-1f, -0x1.070686p-27f, +0x1.d0dfe6p-3f, -0x1p0f, 0x1.44cf32p-1f, 0x1.424776p-27f, +0x1.b1776ep-3f, -0x1p0f, 0x1.3affa2p-1f, 0x1.240a18p-26f, +0x1.9307eep-3f, -0x1p0f, 0x1.30ff8p-1f, -0x1.8f47e6p-28f, +0x1.759618p-3f, -0x1p0f, 0x1.26d054p-1f, 0x1.9ba25cp-26f, +0x1.592676p-3f, -0x1p0f, 0x1.1c73b4p-1f, -0x1.9465cep-27f, +0x1.3dbd6ap-3f, -0x1p0f, 0x1.11eb36p-1f, -0x1.7c969cp-26f, +0x1.235f2ep-3f, -0x1p0f, 0x1.07387ap-1f, -0x1.b74004p-27f, +0x1.0a0fd4p-3f, -0x1p0f, 0x1.f8ba4ep-2f, -0x1.01d952p-28f, +0x1.e3a688p-4f, -0x1p0f, 0x1.e2b5d4p-2f, -0x1.fe4272p-28f, +0x1.b55a7p-4f, -0x1p0f, 0x1.cc66eap-2f, -0x1.b38ee8p-28f, +0x1.894286p-4f, -0x1p0f, 0x1.b5d1p-2f, 0x1.3c2b98p-27f, +0x1.5f6598p-4f, -0x1p0f, 0x1.9ef794p-2f, 0x1.d476c6p-29f, +0x1.37ca18p-4f, -0x1p0f, 0x1.87de2ap-2f, 0x1.abaa58p-28f, +0x1.127624p-4f, -0x1p0f, 0x1.708854p-2f, -0x1.e0b74cp-27f, +0x1.dedefcp-5f, -0x1p0f, 0x1.58f9a8p-2f, -0x1.4a9c04p-27f, +0x1.9d7714p-5f, -0x1p0f, 0x1.4135cap-2f, -0x1.7d134p-27f, +0x1.60beaap-5f, -0x1p0f, 0x1.294062p-2f, 0x1.dab3ep-27f, +0x1.28bf18p-5f, -0x1p0f, 0x1.111d26p-2f, 0x1.58fb3cp-29f, +0x1.eb0208p-6f, -0x1p0f, 0x1.f19f98p-3f, -0x1.37a83ap-29f, +0x1.8e18a8p-6f, -0x1p0f, 0x1.c0b826p-3f, 0x1.4fc9ecp-28f, +0x1.3ad06p-6f, -0x1p0f, 0x1.8f8b84p-3f, -0x1.cb2cfap-30f, +0x1.e26c16p-7f, -0x1p0f, 0x1.5e2144p-3f, 0x1.22cff2p-29f, +0x1.62aa04p-7f, -0x1p0f, 0x1.2c8106p-3f, 0x1.d1cc28p-28f, +0x1.ecdc78p-8f, -0x1p0f, 0x1.f564e6p-4f, -0x1.2ad19ep-29f, +0x1.3b92e2p-8f, -0x1p0f, 0x1.917a6cp-4f, -0x1.eb25eap-31f, +0x1.63253p-9f, -0x1p0f, 0x1.2d520ap-4f, -0x1.a63cc2p-29f, +0x1.3bc39p-10f, -0x1p0f, 0x1.91f66p-5f, -0x1.de44fep-30f, +0x1.3bcfbep-12f, -0x1p0f, 0x1.92156p-6f, -0x1.0b933p-31f, +0.0f, -0x1p0f, 0.0f, 0.0f, +0x1.3bcfbep-12f, -0x1p0f, -0x1.92156p-6f, 0x1.0b933p-31f, +0x1.3bc39p-10f, -0x1p0f, -0x1.91f66p-5f, 0x1.de44fep-30f, +0x1.63253p-9f, -0x1p0f, -0x1.2d520ap-4f, 0x1.a63cc2p-29f, +0x1.3b92e2p-8f, -0x1p0f, -0x1.917a6cp-4f, 0x1.eb25eap-31f, +0x1.ecdc78p-8f, -0x1p0f, -0x1.f564e6p-4f, 0x1.2ad19ep-29f, +0x1.62aa04p-7f, -0x1p0f, -0x1.2c8106p-3f, -0x1.d1cc28p-28f, +0x1.e26c16p-7f, -0x1p0f, -0x1.5e2144p-3f, -0x1.22cff2p-29f, +0x1.3ad06p-6f, -0x1p0f, -0x1.8f8b84p-3f, 0x1.cb2cfap-30f, +0x1.8e18a8p-6f, -0x1p0f, -0x1.c0b826p-3f, -0x1.4fc9ecp-28f, +0x1.eb0208p-6f, -0x1p0f, -0x1.f19f98p-3f, 0x1.37a83ap-29f, +0x1.28bf18p-5f, -0x1p0f, -0x1.111d26p-2f, -0x1.58fb3cp-29f, +0x1.60beaap-5f, -0x1p0f, -0x1.294062p-2f, -0x1.dab3ep-27f, +0x1.9d7714p-5f, -0x1p0f, -0x1.4135cap-2f, 0x1.7d134p-27f, +0x1.dedefcp-5f, -0x1p0f, -0x1.58f9a8p-2f, 0x1.4a9c04p-27f, +0x1.127624p-4f, -0x1p0f, -0x1.708854p-2f, 0x1.e0b74cp-27f, +0x1.37ca18p-4f, -0x1p0f, -0x1.87de2ap-2f, -0x1.abaa58p-28f, +0x1.5f6598p-4f, -0x1p0f, -0x1.9ef794p-2f, -0x1.d476c6p-29f, +0x1.894286p-4f, -0x1p0f, -0x1.b5d1p-2f, -0x1.3c2b98p-27f, +0x1.b55a7p-4f, -0x1p0f, -0x1.cc66eap-2f, 0x1.b38ee8p-28f, +0x1.e3a688p-4f, -0x1p0f, -0x1.e2b5d4p-2f, 0x1.fe4272p-28f, +0x1.0a0fd4p-3f, -0x1p0f, -0x1.f8ba4ep-2f, 0x1.01d952p-28f, +0x1.235f2ep-3f, -0x1p0f, -0x1.07387ap-1f, 0x1.b74004p-27f, +0x1.3dbd6ap-3f, -0x1p0f, -0x1.11eb36p-1f, 0x1.7c969cp-26f, +0x1.592676p-3f, -0x1p0f, -0x1.1c73b4p-1f, 0x1.9465cep-27f, +0x1.759618p-3f, -0x1p0f, -0x1.26d054p-1f, -0x1.9ba25cp-26f, +0x1.9307eep-3f, -0x1p0f, -0x1.30ff8p-1f, 0x1.8f47e6p-28f, +0x1.b1776ep-3f, -0x1p0f, -0x1.3affa2p-1f, -0x1.240a18p-26f, +0x1.d0dfe6p-3f, -0x1p0f, -0x1.44cf32p-1f, -0x1.424776p-27f, +0x1.f13c7ep-3f, -0x1p0f, -0x1.4e6cacp-1f, 0x1.070686p-27f, +0x1.09441cp-2f, -0x1p0f, -0x1.57d694p-1f, 0x1.6e626cp-26f, +0x1.1a5efap-2f, -0x1p0f, -0x1.610b76p-1f, 0x1.5c5a64p-26f, +0x1.2bec34p-2f, -0x1p0f, -0x1.6a09e6p-1f, -0x1.9fcef4p-27f, +-0x1.842dd6p-3f, -0x1p-1f, -0x1.72d084p-1f, 0x1.02000ep-26f, +-0x1.5f5a4ep-3f, -0x1p-1f, -0x1.7b5df2p-1f, -0x1.3557d8p-28f, +-0x1.39b2aep-3f, -0x1p-1f, -0x1.83b0ep-1f, -0x1.7ff2eep-26f, +-0x1.133ccap-3f, -0x1p-1f, -0x1.8bc806p-1f, -0x1.62a2e8p-26f, +-0x1.d7fd14p-4f, -0x1p-1f, -0x1.93a224p-1f, -0x1.324c8p-26f, +-0x1.87fbfep-4f, -0x1p-1f, -0x1.9b3e04p-1f, -0x1.fce1dp-27f, +-0x1.3682a6p-4f, -0x1p-1f, -0x1.a29a7ap-1f, -0x1.189e08p-31f, +-0x1.c73b3ap-5f, -0x1p-1f, -0x1.a9b662p-1f, -0x1.21d434p-26f, +-0x1.1eb354p-5f, -0x1p-1f, -0x1.b090a6p-1f, 0x1.fabf8p-27f, +-0x1.ce1e64p-7f, -0x1p-1f, -0x1.b72834p-1f, -0x1.465b9p-27f, +0x1.d16c9p-8f, -0x1p-1f, -0x1.bd7c0ap-1f, -0x1.8df2a6p-26f, +0x1.d4a2c8p-6f, -0x1p-1f, -0x1.c38b3p-1f, 0x1.cfe84ap-26f, +0x1.9cc8b4p-5f, -0x1p-1f, -0x1.c954b2p-1f, -0x1.3411f4p-29f, +0x1.28bbfep-4f, -0x1p-1f, -0x1.ced7bp-1f, 0x1.786712p-26f, +0x1.8421bp-4f, -0x1p-1f, -0x1.d4134ep-1f, 0x1.d646d8p-26f, +0x1.e08756p-4f, -0x1p-1f, -0x1.d906bcp-1f, -0x1.e651a8p-26f, +0x1.1eef5ap-3f, -0x1p-1f, -0x1.ddb13cp-1f, 0x1.2667b8p-26f, +-0x1.63e69ep-4f, -0x1p-2f, -0x1.e2121p-1f, -0x1.3da1bap-27f, +-0x1.04d726p-4f, -0x1p-2f, -0x1.e6288ep-1f, -0x1.891c22p-26f, +-0x1.4a0318p-5f, -0x1p-2f, -0x1.e9f416p-1f, 0x1.273a44p-26f, +-0x1.11d262p-6f, -0x1p-2f, -0x1.ed740ep-1f, -0x1.da1258p-27f, +0x1.cc0d0ap-8f, -0x1p-2f, -0x1.f0a7fp-1f, 0x1.1b73cap-27f, +0x1.fa3ecap-6f, -0x1p-2f, -0x1.f38f3ap-1f, -0x1.8c9cb2p-26f, +0x1.c1d1fp-5f, -0x1p-2f, -0x1.f6297cp-1f, -0x1.feeb96p-26f, +-0x1.788512p-5f, -0x1p-3f, -0x1.f8765p-1f, 0x1.63ad16p-27f, +-0x1.640838p-6f, -0x1p-3f, -0x1.fa7558p-1f, 0x1.eeb5d2p-30f, +0x1.536352p-9f, -0x1p-3f, -0x1.fc2648p-1f, 0x1.e3cc06p-26f, +0x1.ba165p-6f, -0x1p-3f, -0x1.fd88dap-1f, -0x1.e89292p-28f, +-0x1.6a904ap-7f, -0x1p-4f, -0x1.fe9cdap-1f, -0x1.a03108p-26f, +0x1.b82684p-7f, -0x1p-4f, -0x1.ff621ep-1f, -0x1.bcb6bep-28f, +0x1.b7aa82p-8f, -0x1p-5f, -0x1.ffd886p-1f, -0x1.099a1ap-30f, 0.0f, 0.0f, -0x1p0f, 0.0f, -0x1.b7aa82p-8f, 0x1p-5f, -0x1.ffd886p-1f, -0x1.099a1ap-30f, -0x1.b82684p-7f, 0x1p-4f, -0x1.ff621ep-1f, -0x1.bcb6bep-28f, --0x1.a55beep-5f, 0x1p-3f, -0x1.fe9cdap-1f, -0x1.a03108p-26f, +0x1.6a904ap-7f, 0x1p-4f, -0x1.fe9cdap-1f, -0x1.a03108p-26f, -0x1.ba165p-6f, 0x1p-3f, -0x1.fd88dap-1f, -0x1.e89292p-28f, -0x1.536352p-9f, 0x1p-3f, -0x1.fc2648p-1f, 0x1.e3cc06p-26f, --0x1.a6fdf2p-4f, 0x1p-2f, -0x1.fa7558p-1f, 0x1.eeb5d2p-30f, --0x1.43bd78p-4f, 0x1p-2f, -0x1.f8765p-1f, 0x1.63ad16p-27f, +0x1.640838p-6f, 0x1p-3f, -0x1.fa7558p-1f, 0x1.eeb5d2p-30f, +0x1.788512p-5f, 0x1p-3f, -0x1.f8765p-1f, 0x1.63ad16p-27f, -0x1.c1d1fp-5f, 0x1p-2f, -0x1.f6297cp-1f, -0x1.feeb96p-26f, -0x1.fa3ecap-6f, 0x1p-2f, -0x1.f38f3ap-1f, -0x1.8c9cb2p-26f, -0x1.cc0d0ap-8f, 0x1p-2f, -0x1.f0a7fp-1f, 0x1.1b73cap-27f, --0x1.ddc5b4p-3f, 0x1p-1f, -0x1.ed740ep-1f, -0x1.da1258p-27f, --0x1.ad7f3ap-3f, 0x1p-1f, -0x1.e9f416p-1f, 0x1.273a44p-26f, --0x1.7d946ep-3f, 0x1p-1f, -0x1.e6288ep-1f, -0x1.891c22p-26f, --0x1.4e0cb2p-3f, 0x1p-1f, -0x1.e2121p-1f, -0x1.3da1bap-27f, +0x1.11d262p-6f, 0x1p-2f, -0x1.ed740ep-1f, -0x1.da1258p-27f, +0x1.4a0318p-5f, 0x1p-2f, -0x1.e9f416p-1f, 0x1.273a44p-26f, +0x1.04d726p-4f, 0x1p-2f, -0x1.e6288ep-1f, -0x1.891c22p-26f, +0x1.63e69ep-4f, 0x1p-2f, -0x1.e2121p-1f, -0x1.3da1bap-27f, -0x1.1eef5ap-3f, 0x1p-1f, -0x1.ddb13cp-1f, 0x1.2667b8p-26f, -0x1.e08756p-4f, 0x1p-1f, -0x1.d906bcp-1f, -0x1.e651a8p-26f, -0x1.8421bp-4f, 0x1p-1f, -0x1.d4134ep-1f, 0x1.d646d8p-26f, @@ -934,16 +934,16 @@ template <> inline constexpr float kCosApproxTable[] = -0x1.9cc8b4p-5f, 0x1p-1f, -0x1.c954b2p-1f, -0x1.3411f4p-29f, -0x1.d4a2c8p-6f, 0x1p-1f, -0x1.c38b3p-1f, 0x1.cfe84ap-26f, -0x1.d16c9p-8f, 0x1p-1f, -0x1.bd7c0ap-1f, -0x1.8df2a6p-26f, --0x1.f18f0cp-2f, 0x1p0f, -0x1.b72834p-1f, -0x1.465b9p-27f, --0x1.dc2996p-2f, 0x1p0f, -0x1.b090a6p-1f, 0x1.fabf8p-27f, --0x1.c71898p-2f, 0x1p0f, -0x1.a9b662p-1f, -0x1.21d434p-26f, --0x1.b25f56p-2f, 0x1p0f, -0x1.a29a7ap-1f, -0x1.189e08p-31f, --0x1.9e01p-2f, 0x1p0f, -0x1.9b3e04p-1f, -0x1.fce1dp-27f, --0x1.8a00bap-2f, 0x1p0f, -0x1.93a224p-1f, -0x1.324c8p-26f, --0x1.76619cp-2f, 0x1p0f, -0x1.8bc806p-1f, -0x1.62a2e8p-26f, --0x1.6326a8p-2f, 0x1p0f, -0x1.83b0ep-1f, -0x1.7ff2eep-26f, --0x1.5052dap-2f, 0x1p0f, -0x1.7b5df2p-1f, -0x1.3557d8p-28f, --0x1.3de916p-2f, 0x1p0f, -0x1.72d084p-1f, 0x1.02000ep-26f, +0x1.ce1e64p-7f, 0x1p-1f, -0x1.b72834p-1f, -0x1.465b9p-27f, +0x1.1eb354p-5f, 0x1p-1f, -0x1.b090a6p-1f, 0x1.fabf8p-27f, +0x1.c73b3ap-5f, 0x1p-1f, -0x1.a9b662p-1f, -0x1.21d434p-26f, +0x1.3682a6p-4f, 0x1p-1f, -0x1.a29a7ap-1f, -0x1.189e08p-31f, +0x1.87fbfep-4f, 0x1p-1f, -0x1.9b3e04p-1f, -0x1.fce1dp-27f, +0x1.d7fd14p-4f, 0x1p-1f, -0x1.93a224p-1f, -0x1.324c8p-26f, +0x1.133ccap-3f, 0x1p-1f, -0x1.8bc806p-1f, -0x1.62a2e8p-26f, +0x1.39b2aep-3f, 0x1p-1f, -0x1.83b0ep-1f, -0x1.7ff2eep-26f, +0x1.5f5a4ep-3f, 0x1p-1f, -0x1.7b5df2p-1f, -0x1.3557d8p-28f, +0x1.842dd6p-3f, 0x1p-1f, -0x1.72d084p-1f, 0x1.02000ep-26f, -0x1.2bec34p-2f, 0x1p0f, -0x1.6a09e6p-1f, -0x1.9fcef4p-27f, -0x1.1a5efap-2f, 0x1p0f, -0x1.610b76p-1f, 0x1.5c5a64p-26f, -0x1.09441cp-2f, 0x1p0f, -0x1.57d694p-1f, 0x1.6e626cp-26f, @@ -1009,16 +1009,16 @@ template <> inline constexpr float kCosApproxTable[] = -0x1.09441cp-2f, 0x1p0f, 0x1.57d694p-1f, -0x1.6e626cp-26f, -0x1.1a5efap-2f, 0x1p0f, 0x1.610b76p-1f, -0x1.5c5a64p-26f, -0x1.2bec34p-2f, 0x1p0f, 0x1.6a09e6p-1f, 0x1.9fcef4p-27f, --0x1.3de916p-2f, 0x1p0f, 0x1.72d084p-1f, -0x1.02000ep-26f, --0x1.5052dap-2f, 0x1p0f, 0x1.7b5df2p-1f, 0x1.3557d8p-28f, --0x1.6326a8p-2f, 0x1p0f, 0x1.83b0ep-1f, 0x1.7ff2eep-26f, --0x1.76619cp-2f, 0x1p0f, 0x1.8bc806p-1f, 0x1.62a2e8p-26f, --0x1.8a00bap-2f, 0x1p0f, 0x1.93a224p-1f, 0x1.324c8p-26f, --0x1.9e01p-2f, 0x1p0f, 0x1.9b3e04p-1f, 0x1.fce1dp-27f, --0x1.b25f56p-2f, 0x1p0f, 0x1.a29a7ap-1f, 0x1.189e08p-31f, --0x1.c71898p-2f, 0x1p0f, 0x1.a9b662p-1f, 0x1.21d434p-26f, --0x1.dc2996p-2f, 0x1p0f, 0x1.b090a6p-1f, -0x1.fabf8p-27f, --0x1.f18f0cp-2f, 0x1p0f, 0x1.b72834p-1f, 0x1.465b9p-27f, +0x1.842dd6p-3f, 0x1p-1f, 0x1.72d084p-1f, -0x1.02000ep-26f, +0x1.5f5a4ep-3f, 0x1p-1f, 0x1.7b5df2p-1f, 0x1.3557d8p-28f, +0x1.39b2aep-3f, 0x1p-1f, 0x1.83b0ep-1f, 0x1.7ff2eep-26f, +0x1.133ccap-3f, 0x1p-1f, 0x1.8bc806p-1f, 0x1.62a2e8p-26f, +0x1.d7fd14p-4f, 0x1p-1f, 0x1.93a224p-1f, 0x1.324c8p-26f, +0x1.87fbfep-4f, 0x1p-1f, 0x1.9b3e04p-1f, 0x1.fce1dp-27f, +0x1.3682a6p-4f, 0x1p-1f, 0x1.a29a7ap-1f, 0x1.189e08p-31f, +0x1.c73b3ap-5f, 0x1p-1f, 0x1.a9b662p-1f, 0x1.21d434p-26f, +0x1.1eb354p-5f, 0x1p-1f, 0x1.b090a6p-1f, -0x1.fabf8p-27f, +0x1.ce1e64p-7f, 0x1p-1f, 0x1.b72834p-1f, 0x1.465b9p-27f, -0x1.d16c9p-8f, 0x1p-1f, 0x1.bd7c0ap-1f, 0x1.8df2a6p-26f, -0x1.d4a2c8p-6f, 0x1p-1f, 0x1.c38b3p-1f, -0x1.cfe84ap-26f, -0x1.9cc8b4p-5f, 0x1p-1f, 0x1.c954b2p-1f, 0x1.3411f4p-29f, @@ -1026,18 +1026,18 @@ template <> inline constexpr float kCosApproxTable[] = -0x1.8421bp-4f, 0x1p-1f, 0x1.d4134ep-1f, -0x1.d646d8p-26f, -0x1.e08756p-4f, 0x1p-1f, 0x1.d906bcp-1f, 0x1.e651a8p-26f, -0x1.1eef5ap-3f, 0x1p-1f, 0x1.ddb13cp-1f, -0x1.2667b8p-26f, --0x1.4e0cb2p-3f, 0x1p-1f, 0x1.e2121p-1f, 0x1.3da1bap-27f, --0x1.7d946ep-3f, 0x1p-1f, 0x1.e6288ep-1f, 0x1.891c22p-26f, --0x1.ad7f3ap-3f, 0x1p-1f, 0x1.e9f416p-1f, -0x1.273a44p-26f, --0x1.ddc5b4p-3f, 0x1p-1f, 0x1.ed740ep-1f, 0x1.da1258p-27f, +0x1.63e69ep-4f, 0x1p-2f, 0x1.e2121p-1f, 0x1.3da1bap-27f, +0x1.04d726p-4f, 0x1p-2f, 0x1.e6288ep-1f, 0x1.891c22p-26f, +0x1.4a0318p-5f, 0x1p-2f, 0x1.e9f416p-1f, -0x1.273a44p-26f, +0x1.11d262p-6f, 0x1p-2f, 0x1.ed740ep-1f, 0x1.da1258p-27f, -0x1.cc0d0ap-8f, 0x1p-2f, 0x1.f0a7fp-1f, -0x1.1b73cap-27f, -0x1.fa3ecap-6f, 0x1p-2f, 0x1.f38f3ap-1f, 0x1.8c9cb2p-26f, -0x1.c1d1fp-5f, 0x1p-2f, 0x1.f6297cp-1f, 0x1.feeb96p-26f, --0x1.43bd78p-4f, 0x1p-2f, 0x1.f8765p-1f, -0x1.63ad16p-27f, --0x1.a6fdf2p-4f, 0x1p-2f, 0x1.fa7558p-1f, -0x1.eeb5d2p-30f, +0x1.788512p-5f, 0x1p-3f, 0x1.f8765p-1f, -0x1.63ad16p-27f, +0x1.640838p-6f, 0x1p-3f, 0x1.fa7558p-1f, -0x1.eeb5d2p-30f, -0x1.536352p-9f, 0x1p-3f, 0x1.fc2648p-1f, -0x1.e3cc06p-26f, -0x1.ba165p-6f, 0x1p-3f, 0x1.fd88dap-1f, 0x1.e89292p-28f, --0x1.a55beep-5f, 0x1p-3f, 0x1.fe9cdap-1f, 0x1.a03108p-26f, +0x1.6a904ap-7f, 0x1p-4f, 0x1.fe9cdap-1f, 0x1.a03108p-26f, -0x1.b82684p-7f, 0x1p-4f, 0x1.ff621ep-1f, 0x1.bcb6bep-28f, -0x1.b7aa82p-8f, 0x1p-5f, 0x1.ffd886p-1f, 0x1.099a1ap-30f, }; @@ -1045,293 +1045,293 @@ template <> inline constexpr float kCosApproxTable[] = template <> inline constexpr double kCosApproxTable[] = { 0.0, 0.0, 0x1p0, 0.0, --0x1.000c90e8fe6f6p6, 0x1p6, 0x1.fff62169b92dbp-1, 0x1.5dda3cp-55, --0x1.003242abef46dp5, 0x1p5, 0x1.ffd886084cd0dp-1, -0x1.1354d4p-55, --0x1.0096c32baca2bp4, 0x1p4, 0x1.ffa72effef75dp-1, -0x1.8b4cdcp-55, --0x1.00c8fb2f886ecp4, 0x1p4, 0x1.ff621e3796d7ep-1, -0x1.c57bc2p-57, --0x1.00fb2b73cfc1p4, 0x1p4, 0x1.ff095658e71adp-1, 0x1.01a8cep-55, --0x1.025aa41259c34p3, 0x1p3, 0x1.fe9cdad01883ap-1, 0x1.521eccp-57, --0x1.02beda0153548p3, 0x1p3, 0x1.fe1cafcbd5b09p-1, 0x1.a23e32p-57, --0x1.0322f4d785368p3, 0x1p3, 0x1.fd88da3d12526p-1, -0x1.87df62p-55, --0x1.0386f0b8f3d86p3, 0x1p3, 0x1.fce15fd6da67bp-1, -0x1.5dd6f8p-56, --0x1.03eac9cad52e6p3, 0x1p3, 0x1.fc26470e19fd3p-1, 0x1.1ec866p-55, --0x1.089cf8676d7acp2, 0x1p2, 0x1.fb5797195d741p-1, 0x1.1bfac6p-56, --0x1.096408374730ap2, 0x1p2, 0x1.fa7557f08a517p-1, -0x1.7a0a8cp-55, --0x1.0a2abb58949f3p2, 0x1p2, 0x1.f97f924c9099bp-1, -0x1.e2ae0ep-55, --0x1.0af10a22459fep2, 0x1p2, 0x1.f8764fa714ba9p-1, 0x1.ab2566p-56, --0x1.0bb6ecef285fap2, 0x1p2, 0x1.f7599a3a12077p-1, 0x1.84f31cp-55, --0x1.0c7c5c1e34d3p2, 0x1p2, 0x1.f6297cff75cbp-1, 0x1.562172p-56, --0x1.0d415012d8023p2, 0x1p2, 0x1.f4e603b0b2f2dp-1, -0x1.8ee01ep-56, --0x1.0e05c1353f27bp2, 0x1p2, 0x1.f38f3ac64e589p-1, -0x1.d7bafap-56, --0x1.0ec9a7f2a2a19p2, 0x1p2, 0x1.f2252f7763adap-1, -0x1.20cb8p-55, --0x1.0f8cfcbd90af9p2, 0x1p2, 0x1.f0a7efb9230d7p-1, 0x1.52c7acp-56, --0x1.209f701c6ffb6p1, 0x1p1, 0x1.ef178a3e473c2p-1, 0x1.6310a6p-55, --0x1.2223a4c563ecfp1, 0x1p1, 0x1.ed740e7684963p-1, 0x1.e82c78p-56, --0x1.23a6887e99b68p1, 0x1p1, 0x1.ebbd8c8df0b74p-1, 0x1.c6c8c6p-56, --0x1.25280c5dab3e1p1, 0x1p1, 0x1.e9f4156c62ddap-1, 0x1.760b1ep-55, --0x1.26a82185c302ap1, 0x1p1, 0x1.e817bab4cd10dp-1, -0x1.d0afe6p-56, --0x1.2826b9282eccp1, 0x1p1, 0x1.e6288ec48e112p-1, -0x1.16b56ep-57, --0x1.29a3c484f1cedp1, 0x1p1, 0x1.e426a4b2bc17ep-1, 0x1.a87388p-55, --0x1.2b1f34eb563fcp1, 0x1p1, 0x1.e212104f686e5p-1, -0x1.014c76p-55, --0x1.2c98fbba7e4f9p1, 0x1p1, 0x1.dfeae622dbe2bp-1, -0x1.514ea8p-55, --0x1.2e110a61f48b4p1, 0x1p1, 0x1.ddb13b6ccc23cp-1, 0x1.83c37cp-55, --0x1.2f8752623b99dp1, 0x1p1, 0x1.db6526238a09bp-1, -0x1.adee7ep-56, --0x1.30fbc54d5d52cp1, 0x1p1, 0x1.d906bcf328d46p-1, 0x1.457e6p-56, --0x1.326e54c77927bp1, 0x1p1, 0x1.d696173c9e68bp-1, -0x1.e8c61cp-56, --0x1.33def28751db1p1, 0x1p1, 0x1.d4134d14dc93ap-1, -0x1.4ef528p-55, --0x1.354d9056da7f9p1, 0x1p1, 0x1.d17e7743e35dcp-1, -0x1.101da2p-58, --0x1.36ba2013c2b98p1, 0x1p1, 0x1.ced7af43cc773p-1, -0x1.e7b6bap-58, --0x1.382493b0023ddp1, 0x1p1, 0x1.cc1f0f3fcfc5cp-1, 0x1.e57612p-56, --0x1.398cdd326388cp1, 0x1p1, 0x1.c954b213411f5p-1, -0x1.2fb76p-58, --0x1.3af2eeb70dc71p1, 0x1p1, 0x1.c678b3488739bp-1, 0x1.d86cacp-57, --0x1.3c56ba700dec7p1, 0x1p1, 0x1.c38b2f180bdb1p-1, -0x1.6e0b16p-56, --0x1.3db832a5def1bp1, 0x1p1, 0x1.c08c426725549p-1, 0x1.b157fcp-58, --0x1.3f1749b7f1357p1, 0x1p1, 0x1.bd7c0ac6f952ap-1, -0x1.825a72p-55, --0x1.80e7e43a61f5bp0, 0x1p0, 0x1.ba5aa673590d2p-1, 0x1.7ea4e2p-55, --0x1.839c3cc917ff7p0, 0x1p0, 0x1.b728345196e3ep-1, -0x1.bc69f2p-55, --0x1.864b826aec4c7p0, 0x1p0, 0x1.b3e4d3ef55712p-1, -0x1.eb6b8ap-55, --0x1.88f59aa0da591p0, 0x1p0, 0x1.b090a581502p-1, -0x1.926da2p-55, --0x1.8b9a6b1ef6da4p0, 0x1p0, 0x1.ad2bc9e21d511p-1, -0x1.47fbep-55, --0x1.8e39d9cd73464p0, 0x1p0, 0x1.a9b66290ea1a3p-1, 0x1.9f630ep-60, --0x1.90d3ccc99f5acp0, 0x1p0, 0x1.a63091b02fae2p-1, -0x1.e91114p-56, --0x1.93682a66e896fp0, 0x1p0, 0x1.a29a7a0462782p-1, -0x1.128bbp-56, --0x1.95f6d92fd79f5p0, 0x1p0, 0x1.9ef43ef29af94p-1, 0x1.b1dfcap-56, --0x1.987fbfe70b81ap0, 0x1p0, 0x1.9b3e047f38741p-1, -0x1.30ee28p-55, --0x1.9b02c58832cf9p0, 0x1p0, 0x1.9777ef4c7d742p-1, -0x1.15479ap-55, --0x1.9d7fd1490285dp0, 0x1p0, 0x1.93a22499263fbp-1, 0x1.3d419ap-55, --0x1.9ff6ca9a2ab6ap0, 0x1p0, 0x1.8fbcca3ef940dp-1, -0x1.6dfa98p-57, --0x1.a267992848eebp0, 0x1p0, 0x1.8bc806b151741p-1, -0x1.2c5e12p-55, --0x1.a4d224dcd849cp0, 0x1p0, 0x1.87c400fba2ebfp-1, -0x1.2dabcp-55, --0x1.a73655df1f2f5p0, 0x1p0, 0x1.83b0e0bff976ep-1, -0x1.6f420ep-56, --0x1.a99414951aacbp0, 0x1p0, 0x1.7f8ece3571771p-1, -0x1.9c8d8cp-55, --0x1.abeb49a46765p0, 0x1p0, 0x1.7b5df226aafafp-1, -0x1.0f537ap-56, --0x1.ae3bddf3280c6p0, 0x1p0, 0x1.771e75f037261p-1, 0x1.5cfce8p-56, --0x1.b085baa8e966fp0, 0x1p0, 0x1.72d0837efff96p-1, 0x1.0d4efp-55, --0x1.b2c8c92f83c1fp0, 0x1p0, 0x1.6e74454eaa8afp-1, -0x1.dbc03cp-55, --0x1.b504f333f9de6p0, 0x1p0, 0x1.6a09e667f3bcdp-1, -0x1.bdd34p-55, --0x1.b73a22a755457p0, 0x1p0, 0x1.6591925f0783dp-1, 0x1.c3d64ep-55, --0x1.b96841bf7ffcbp0, 0x1p0, 0x1.610b7551d2cdfp-1, -0x1.251b34p-56, --0x1.bb8f3af81b931p0, 0x1p0, 0x1.5c77bbe65018cp-1, 0x1.069ea8p-55, --0x1.bdaef913557d7p0, 0x1p0, 0x1.57d69348cecap-1, -0x1.757208p-55, --0x1.bfc7671ab8bb8p0, 0x1p0, 0x1.5328292a35596p-1, -0x1.a12eb8p-56, --0x1.c1d8705ffcbb7p0, 0x1p0, 0x1.4e6cabbe3e5e9p-1, 0x1.3c293ep-57, --0x1.c3e2007dd175fp0, 0x1p0, 0x1.49a449b9b0939p-1, -0x1.27ee16p-55, --0x1.c5e40358a8bap0, 0x1p0, 0x1.44cf325091dd6p-1, 0x1.8076a2p-57, --0x1.c7de651f7ca06p0, 0x1p0, 0x1.3fed9534556d4p-1, 0x1.369166p-55, --0x1.c9d1124c931fep0, 0x1p0, 0x1.3affa292050b9p-1, 0x1.e3e25ep-56, --0x1.cbbbf7a63eba1p0, 0x1p0, 0x1.36058b10659f3p-1, -0x1.1fcb3ap-55, --0x1.cd9f023f9c3ap0, 0x1p0, 0x1.30ff7fce17035p-1, -0x1.efcc62p-57, --0x1.cf7a1f794d7cap0, 0x1p0, 0x1.2bedb25faf3eap-1, -0x1.14981cp-58, --0x1.d14d3d02313c1p0, 0x1p0, 0x1.26d054cdd12dfp-1, -0x1.5da742p-55, --0x1.d31848d817d71p0, 0x1p0, 0x1.21a799933eb59p-1, -0x1.3a7b16p-55, --0x1.d4db3148750d2p0, 0x1p0, 0x1.1c73b39ae68c8p-1, 0x1.b25dd2p-55, --0x1.d695e4f10ea88p0, 0x1p0, 0x1.1734d63dedb49p-1, -0x1.7eef2cp-55, --0x1.d84852c0a81p0, 0x1p0, 0x1.11eb3541b4b23p-1, -0x1.ef23b6p-55, --0x1.d9f269f7aab89p0, 0x1p0, 0x1.0c9704d5d898fp-1, -0x1.8d3d7cp-55, --0x1.db941a28cb71fp0, 0x1p0, 0x1.073879922ffeep-1, -0x1.a5a014p-55, --0x1.dd2d5339ac869p0, 0x1p0, 0x1.01cfc874c3eb7p-1, -0x1.34a35ep-56, --0x1.debe05637ca95p0, 0x1p0, 0x1.f8ba4dbf89abap-2, -0x1.2ec1fcp-60, --0x1.e046213392aa5p0, 0x1p0, 0x1.edc1952ef78d6p-2, -0x1.dd0f7cp-56, --0x1.e1c5978c05ed8p0, 0x1p0, 0x1.e2b5d3806f63bp-2, 0x1.e0d89p-58, --0x1.e33c59a4439cep0, 0x1p0, 0x1.d79775b86e389p-2, 0x1.550ec8p-56, --0x1.e4aa5909a08fap0, 0x1p0, 0x1.cc66e9931c45ep-2, 0x1.6850e4p-58, --0x1.e60f879fe7e2ep0, 0x1p0, 0x1.c1249d8011ee7p-2, -0x1.813aaap-56, --0x1.e76bd7a1e63b9p0, 0x1p0, 0x1.b5d1009e15ccp-2, 0x1.5b362cp-57, --0x1.e8bf3ba1f1aeep0, 0x1p0, 0x1.aa6c82b6d3fcap-2, -0x1.d5f106p-56, --0x1.ea09a68a6e49dp0, 0x1p0, 0x1.9ef7943a8ed8ap-2, 0x1.6da812p-57, --0x1.eb4b0b9e4f345p0, 0x1p0, 0x1.9372a63bc93d7p-2, 0x1.684318p-57, --0x1.ec835e79946a3p0, 0x1p0, 0x1.87de2a6aea963p-2, -0x1.72cedcp-57, --0x1.edb29311c504dp0, 0x1p0, 0x1.7c3a9311dcce7p-2, 0x1.9a3f2p-62, --0x1.eed89db66611ep0, 0x1p0, 0x1.7088530fa459fp-2, -0x1.44b19ep-56, --0x1.eff573116df15p0, 0x1p0, 0x1.64c7ddd3f27c6p-2, 0x1.10d2b4p-58, --0x1.f1090827b4372p0, 0x1p0, 0x1.58f9a75ab1fddp-2, -0x1.efdc0cp-62, --0x1.f21352595e0bfp0, 0x1p0, 0x1.4d1e24278e76ap-2, 0x1.24172p-57, --0x1.f314476247089p0, 0x1p0, 0x1.4135c94176601p-2, 0x1.0c97c4p-56, --0x1.f40bdd5a66886p0, 0x1p0, 0x1.35410c2e18152p-2, -0x1.3cb002p-56, --0x1.f4fa0ab6316edp0, 0x1p0, 0x1.294062ed59f06p-2, -0x1.5d28dap-56, --0x1.f5dec646f85bap0, 0x1p0, 0x1.1d3443f4cdb3ep-2, -0x1.720d4p-57, --0x1.f6ba073b424b2p0, 0x1p0, 0x1.111d262b1f677p-2, 0x1.824c2p-56, --0x1.f78bc51f239e1p0, 0x1p0, 0x1.04fb80e37fdaep-2, -0x1.412cdap-63, --0x1.f853f7dc9186cp0, 0x1p0, 0x1.f19f97b215f1bp-3, -0x1.42deeep-57, --0x1.f91297bbb1d6dp0, 0x1p0, 0x1.d934fe5454311p-3, 0x1.75b922p-57, --0x1.f9c79d63272c4p0, 0x1p0, 0x1.c0b826a7e4f63p-3, -0x1.af1438p-62, --0x1.fa7301d859796p0, 0x1p0, 0x1.a82a025b00451p-3, -0x1.87905ep-57, --0x1.fb14be7fbae58p0, 0x1p0, 0x1.8f8b83c69a60bp-3, -0x1.26d19ap-57, --0x1.fbaccd1d0903cp0, 0x1p0, 0x1.76dd9de50bf31p-3, 0x1.1d5eeep-57, --0x1.fc3b27d38a5d5p0, 0x1p0, 0x1.5e214448b3fc6p-3, 0x1.531ff6p-57, --0x1.fcbfc926484cdp0, 0x1p0, 0x1.45576b1293e5ap-3, -0x1.285a24p-58, --0x1.fd3aabf84528bp0, 0x1p0, 0x1.2c8106e8e613ap-3, 0x1.13000ap-58, --0x1.fdabcb8caeba1p0, 0x1p0, 0x1.139f0cedaf577p-3, -0x1.523434p-57, --0x1.fe1323870cfeap0, 0x1p0, 0x1.f564e56a9730ep-4, 0x1.a27046p-59, --0x1.fe70afeb6d33dp0, 0x1p0, 0x1.c3785c79ec2d5p-4, -0x1.4f39dep-61, --0x1.fec46d1e89293p0, 0x1p0, 0x1.917a6bc29b42cp-4, -0x1.e2718cp-60, --0x1.ff0e57e5ead85p0, 0x1p0, 0x1.5f6d00a9aa419p-4, -0x1.f4022cp-59, --0x1.ff4e6d680c41dp0, 0x1p0, 0x1.2d52092ce19f6p-4, -0x1.9a088ap-59, --0x1.ff84ab2c738d7p0, 0x1p0, 0x1.f656e79f820ep-5, -0x1.2e1ebep-61, --0x1.ffb10f1bcb6bfp0, 0x1p0, 0x1.91f65f10dd814p-5, -0x1.912bdp-61, --0x1.ffd3977ff7baep0, 0x1p0, 0x1.2d865759455cdp-5, 0x1.686f64p-61, --0x1.ffec430426686p0, 0x1p0, 0x1.92155f7a3667ep-6, -0x1.b1d63p-64, --0x1.fffb10b4dc96ep0, 0x1p0, 0x1.921d1fcdec784p-7, 0x1.9878eap-61, --0x1p1, 0x1p0, 0.0, 0.0, --0x1.fffb10b4dc96ep0, 0x1p0, -0x1.921d1fcdec784p-7, -0x1.9878eap-61, --0x1.ffec430426686p0, 0x1p0, -0x1.92155f7a3667ep-6, 0x1.b1d63p-64, --0x1.ffd3977ff7baep0, 0x1p0, -0x1.2d865759455cdp-5, -0x1.686f64p-61, --0x1.ffb10f1bcb6bfp0, 0x1p0, -0x1.91f65f10dd814p-5, 0x1.912bdp-61, --0x1.ff84ab2c738d7p0, 0x1p0, -0x1.f656e79f820ep-5, 0x1.2e1ebep-61, --0x1.ff4e6d680c41dp0, 0x1p0, -0x1.2d52092ce19f6p-4, 0x1.9a088ap-59, --0x1.ff0e57e5ead85p0, 0x1p0, -0x1.5f6d00a9aa419p-4, 0x1.f4022cp-59, --0x1.fec46d1e89293p0, 0x1p0, -0x1.917a6bc29b42cp-4, 0x1.e2718cp-60, --0x1.fe70afeb6d33dp0, 0x1p0, -0x1.c3785c79ec2d5p-4, 0x1.4f39dep-61, --0x1.fe1323870cfeap0, 0x1p0, -0x1.f564e56a9730ep-4, -0x1.a27046p-59, --0x1.fdabcb8caeba1p0, 0x1p0, -0x1.139f0cedaf577p-3, 0x1.523434p-57, --0x1.fd3aabf84528bp0, 0x1p0, -0x1.2c8106e8e613ap-3, -0x1.13000ap-58, --0x1.fcbfc926484cdp0, 0x1p0, -0x1.45576b1293e5ap-3, 0x1.285a24p-58, --0x1.fc3b27d38a5d5p0, 0x1p0, -0x1.5e214448b3fc6p-3, -0x1.531ff6p-57, --0x1.fbaccd1d0903cp0, 0x1p0, -0x1.76dd9de50bf31p-3, -0x1.1d5eeep-57, --0x1.fb14be7fbae58p0, 0x1p0, -0x1.8f8b83c69a60bp-3, 0x1.26d19ap-57, --0x1.fa7301d859796p0, 0x1p0, -0x1.a82a025b00451p-3, 0x1.87905ep-57, --0x1.f9c79d63272c4p0, 0x1p0, -0x1.c0b826a7e4f63p-3, 0x1.af1438p-62, --0x1.f91297bbb1d6dp0, 0x1p0, -0x1.d934fe5454311p-3, -0x1.75b922p-57, --0x1.f853f7dc9186cp0, 0x1p0, -0x1.f19f97b215f1bp-3, 0x1.42deeep-57, --0x1.f78bc51f239e1p0, 0x1p0, -0x1.04fb80e37fdaep-2, 0x1.412cdap-63, --0x1.f6ba073b424b2p0, 0x1p0, -0x1.111d262b1f677p-2, -0x1.824c2p-56, --0x1.f5dec646f85bap0, 0x1p0, -0x1.1d3443f4cdb3ep-2, 0x1.720d4p-57, --0x1.f4fa0ab6316edp0, 0x1p0, -0x1.294062ed59f06p-2, 0x1.5d28dap-56, --0x1.f40bdd5a66886p0, 0x1p0, -0x1.35410c2e18152p-2, 0x1.3cb002p-56, --0x1.f314476247089p0, 0x1p0, -0x1.4135c94176601p-2, -0x1.0c97c4p-56, --0x1.f21352595e0bfp0, 0x1p0, -0x1.4d1e24278e76ap-2, -0x1.24172p-57, --0x1.f1090827b4372p0, 0x1p0, -0x1.58f9a75ab1fddp-2, 0x1.efdc0cp-62, --0x1.eff573116df15p0, 0x1p0, -0x1.64c7ddd3f27c6p-2, -0x1.10d2b4p-58, --0x1.eed89db66611ep0, 0x1p0, -0x1.7088530fa459fp-2, 0x1.44b19ep-56, --0x1.edb29311c504dp0, 0x1p0, -0x1.7c3a9311dcce7p-2, -0x1.9a3f2p-62, --0x1.ec835e79946a3p0, 0x1p0, -0x1.87de2a6aea963p-2, 0x1.72cedcp-57, --0x1.eb4b0b9e4f345p0, 0x1p0, -0x1.9372a63bc93d7p-2, -0x1.684318p-57, --0x1.ea09a68a6e49dp0, 0x1p0, -0x1.9ef7943a8ed8ap-2, -0x1.6da812p-57, --0x1.e8bf3ba1f1aeep0, 0x1p0, -0x1.aa6c82b6d3fcap-2, 0x1.d5f106p-56, --0x1.e76bd7a1e63b9p0, 0x1p0, -0x1.b5d1009e15ccp-2, -0x1.5b362cp-57, --0x1.e60f879fe7e2ep0, 0x1p0, -0x1.c1249d8011ee7p-2, 0x1.813aaap-56, --0x1.e4aa5909a08fap0, 0x1p0, -0x1.cc66e9931c45ep-2, -0x1.6850e4p-58, --0x1.e33c59a4439cep0, 0x1p0, -0x1.d79775b86e389p-2, -0x1.550ec8p-56, --0x1.e1c5978c05ed8p0, 0x1p0, -0x1.e2b5d3806f63bp-2, -0x1.e0d89p-58, --0x1.e046213392aa5p0, 0x1p0, -0x1.edc1952ef78d6p-2, 0x1.dd0f7cp-56, --0x1.debe05637ca95p0, 0x1p0, -0x1.f8ba4dbf89abap-2, 0x1.2ec1fcp-60, --0x1.dd2d5339ac869p0, 0x1p0, -0x1.01cfc874c3eb7p-1, 0x1.34a35ep-56, --0x1.db941a28cb71fp0, 0x1p0, -0x1.073879922ffeep-1, 0x1.a5a014p-55, --0x1.d9f269f7aab89p0, 0x1p0, -0x1.0c9704d5d898fp-1, 0x1.8d3d7cp-55, --0x1.d84852c0a81p0, 0x1p0, -0x1.11eb3541b4b23p-1, 0x1.ef23b6p-55, --0x1.d695e4f10ea88p0, 0x1p0, -0x1.1734d63dedb49p-1, 0x1.7eef2cp-55, --0x1.d4db3148750d2p0, 0x1p0, -0x1.1c73b39ae68c8p-1, -0x1.b25dd2p-55, --0x1.d31848d817d71p0, 0x1p0, -0x1.21a799933eb59p-1, 0x1.3a7b16p-55, --0x1.d14d3d02313c1p0, 0x1p0, -0x1.26d054cdd12dfp-1, 0x1.5da742p-55, --0x1.cf7a1f794d7cap0, 0x1p0, -0x1.2bedb25faf3eap-1, 0x1.14981cp-58, --0x1.cd9f023f9c3ap0, 0x1p0, -0x1.30ff7fce17035p-1, 0x1.efcc62p-57, --0x1.cbbbf7a63eba1p0, 0x1p0, -0x1.36058b10659f3p-1, 0x1.1fcb3ap-55, --0x1.c9d1124c931fep0, 0x1p0, -0x1.3affa292050b9p-1, -0x1.e3e25ep-56, --0x1.c7de651f7ca06p0, 0x1p0, -0x1.3fed9534556d4p-1, -0x1.369166p-55, --0x1.c5e40358a8bap0, 0x1p0, -0x1.44cf325091dd6p-1, -0x1.8076a2p-57, --0x1.c3e2007dd175fp0, 0x1p0, -0x1.49a449b9b0939p-1, 0x1.27ee16p-55, --0x1.c1d8705ffcbb7p0, 0x1p0, -0x1.4e6cabbe3e5e9p-1, -0x1.3c293ep-57, --0x1.bfc7671ab8bb8p0, 0x1p0, -0x1.5328292a35596p-1, 0x1.a12eb8p-56, --0x1.bdaef913557d7p0, 0x1p0, -0x1.57d69348cecap-1, 0x1.757208p-55, --0x1.bb8f3af81b931p0, 0x1p0, -0x1.5c77bbe65018cp-1, -0x1.069ea8p-55, --0x1.b96841bf7ffcbp0, 0x1p0, -0x1.610b7551d2cdfp-1, 0x1.251b34p-56, --0x1.b73a22a755457p0, 0x1p0, -0x1.6591925f0783dp-1, -0x1.c3d64ep-55, --0x1.b504f333f9de6p0, 0x1p0, -0x1.6a09e667f3bcdp-1, 0x1.bdd34p-55, --0x1.b2c8c92f83c1fp0, 0x1p0, -0x1.6e74454eaa8afp-1, 0x1.dbc03cp-55, --0x1.b085baa8e966fp0, 0x1p0, -0x1.72d0837efff96p-1, -0x1.0d4efp-55, --0x1.ae3bddf3280c6p0, 0x1p0, -0x1.771e75f037261p-1, -0x1.5cfce8p-56, --0x1.abeb49a46765p0, 0x1p0, -0x1.7b5df226aafafp-1, 0x1.0f537ap-56, --0x1.a99414951aacbp0, 0x1p0, -0x1.7f8ece3571771p-1, 0x1.9c8d8cp-55, --0x1.a73655df1f2f5p0, 0x1p0, -0x1.83b0e0bff976ep-1, 0x1.6f420ep-56, --0x1.a4d224dcd849cp0, 0x1p0, -0x1.87c400fba2ebfp-1, 0x1.2dabcp-55, --0x1.a267992848eebp0, 0x1p0, -0x1.8bc806b151741p-1, 0x1.2c5e12p-55, --0x1.9ff6ca9a2ab6ap0, 0x1p0, -0x1.8fbcca3ef940dp-1, 0x1.6dfa98p-57, --0x1.9d7fd1490285dp0, 0x1p0, -0x1.93a22499263fbp-1, -0x1.3d419ap-55, --0x1.9b02c58832cf9p0, 0x1p0, -0x1.9777ef4c7d742p-1, 0x1.15479ap-55, --0x1.987fbfe70b81ap0, 0x1p0, -0x1.9b3e047f38741p-1, 0x1.30ee28p-55, --0x1.95f6d92fd79f5p0, 0x1p0, -0x1.9ef43ef29af94p-1, -0x1.b1dfcap-56, --0x1.93682a66e896fp0, 0x1p0, -0x1.a29a7a0462782p-1, 0x1.128bbp-56, --0x1.90d3ccc99f5acp0, 0x1p0, -0x1.a63091b02fae2p-1, 0x1.e91114p-56, --0x1.8e39d9cd73464p0, 0x1p0, -0x1.a9b66290ea1a3p-1, -0x1.9f630ep-60, --0x1.8b9a6b1ef6da4p0, 0x1p0, -0x1.ad2bc9e21d511p-1, 0x1.47fbep-55, --0x1.88f59aa0da591p0, 0x1p0, -0x1.b090a581502p-1, 0x1.926da2p-55, --0x1.864b826aec4c7p0, 0x1p0, -0x1.b3e4d3ef55712p-1, 0x1.eb6b8ap-55, --0x1.839c3cc917ff7p0, 0x1p0, -0x1.b728345196e3ep-1, 0x1.bc69f2p-55, --0x1.80e7e43a61f5bp0, 0x1p0, -0x1.ba5aa673590d2p-1, -0x1.7ea4e2p-55, --0x1.3f1749b7f1357p1, 0x1p1, -0x1.bd7c0ac6f952ap-1, 0x1.825a72p-55, --0x1.3db832a5def1bp1, 0x1p1, -0x1.c08c426725549p-1, -0x1.b157fcp-58, --0x1.3c56ba700dec7p1, 0x1p1, -0x1.c38b2f180bdb1p-1, 0x1.6e0b16p-56, --0x1.3af2eeb70dc71p1, 0x1p1, -0x1.c678b3488739bp-1, -0x1.d86cacp-57, --0x1.398cdd326388cp1, 0x1p1, -0x1.c954b213411f5p-1, 0x1.2fb76p-58, --0x1.382493b0023ddp1, 0x1p1, -0x1.cc1f0f3fcfc5cp-1, -0x1.e57612p-56, --0x1.36ba2013c2b98p1, 0x1p1, -0x1.ced7af43cc773p-1, 0x1.e7b6bap-58, --0x1.354d9056da7f9p1, 0x1p1, -0x1.d17e7743e35dcp-1, 0x1.101da2p-58, --0x1.33def28751db1p1, 0x1p1, -0x1.d4134d14dc93ap-1, 0x1.4ef528p-55, --0x1.326e54c77927bp1, 0x1p1, -0x1.d696173c9e68bp-1, 0x1.e8c61cp-56, --0x1.30fbc54d5d52cp1, 0x1p1, -0x1.d906bcf328d46p-1, -0x1.457e6p-56, --0x1.2f8752623b99dp1, 0x1p1, -0x1.db6526238a09bp-1, 0x1.adee7ep-56, --0x1.2e110a61f48b4p1, 0x1p1, -0x1.ddb13b6ccc23cp-1, -0x1.83c37cp-55, --0x1.2c98fbba7e4f9p1, 0x1p1, -0x1.dfeae622dbe2bp-1, 0x1.514ea8p-55, --0x1.2b1f34eb563fcp1, 0x1p1, -0x1.e212104f686e5p-1, 0x1.014c76p-55, --0x1.29a3c484f1cedp1, 0x1p1, -0x1.e426a4b2bc17ep-1, -0x1.a87388p-55, --0x1.2826b9282eccp1, 0x1p1, -0x1.e6288ec48e112p-1, 0x1.16b56ep-57, --0x1.26a82185c302ap1, 0x1p1, -0x1.e817bab4cd10dp-1, 0x1.d0afe6p-56, --0x1.25280c5dab3e1p1, 0x1p1, -0x1.e9f4156c62ddap-1, -0x1.760b1ep-55, --0x1.23a6887e99b68p1, 0x1p1, -0x1.ebbd8c8df0b74p-1, -0x1.c6c8c6p-56, --0x1.2223a4c563ecfp1, 0x1p1, -0x1.ed740e7684963p-1, -0x1.e82c78p-56, --0x1.209f701c6ffb6p1, 0x1p1, -0x1.ef178a3e473c2p-1, -0x1.6310a6p-55, --0x1.0f8cfcbd90af9p2, 0x1p2, -0x1.f0a7efb9230d7p-1, -0x1.52c7acp-56, --0x1.0ec9a7f2a2a19p2, 0x1p2, -0x1.f2252f7763adap-1, 0x1.20cb8p-55, --0x1.0e05c1353f27bp2, 0x1p2, -0x1.f38f3ac64e589p-1, 0x1.d7bafap-56, --0x1.0d415012d8023p2, 0x1p2, -0x1.f4e603b0b2f2dp-1, 0x1.8ee01ep-56, --0x1.0c7c5c1e34d3p2, 0x1p2, -0x1.f6297cff75cbp-1, -0x1.562172p-56, --0x1.0bb6ecef285fap2, 0x1p2, -0x1.f7599a3a12077p-1, -0x1.84f31cp-55, --0x1.0af10a22459fep2, 0x1p2, -0x1.f8764fa714ba9p-1, -0x1.ab2566p-56, --0x1.0a2abb58949f3p2, 0x1p2, -0x1.f97f924c9099bp-1, 0x1.e2ae0ep-55, --0x1.096408374730ap2, 0x1p2, -0x1.fa7557f08a517p-1, 0x1.7a0a8cp-55, --0x1.089cf8676d7acp2, 0x1p2, -0x1.fb5797195d741p-1, -0x1.1bfac6p-56, --0x1.03eac9cad52e6p3, 0x1p3, -0x1.fc26470e19fd3p-1, -0x1.1ec866p-55, --0x1.0386f0b8f3d86p3, 0x1p3, -0x1.fce15fd6da67bp-1, 0x1.5dd6f8p-56, --0x1.0322f4d785368p3, 0x1p3, -0x1.fd88da3d12526p-1, 0x1.87df62p-55, --0x1.02beda0153548p3, 0x1p3, -0x1.fe1cafcbd5b09p-1, -0x1.a23e32p-57, --0x1.025aa41259c34p3, 0x1p3, -0x1.fe9cdad01883ap-1, -0x1.521eccp-57, --0x1.00fb2b73cfc1p4, 0x1p4, -0x1.ff095658e71adp-1, -0x1.01a8cep-55, --0x1.00c8fb2f886ecp4, 0x1p4, -0x1.ff621e3796d7ep-1, 0x1.c57bc2p-57, --0x1.0096c32baca2bp4, 0x1p4, -0x1.ffa72effef75dp-1, 0x1.8b4cdcp-55, --0x1.003242abef46dp5, 0x1p5, -0x1.ffd886084cd0dp-1, 0x1.1354d4p-55, --0x1.000c90e8fe6f6p6, 0x1p6, -0x1.fff62169b92dbp-1, -0x1.5dda3cp-55, +0x1.b78b80c84e1eep-9, -0x1p-6, 0x1.fff62169b92dbp-1, 0x1.5dda3cp-55, +0x1.b7aa821726608p-8, -0x1p-5, 0x1.ffd886084cd0dp-1, -0x1.1354d4p-55, +-0x1.6c32baca2ae69p-8, -0x1p-5, 0x1.ffa72effef75dp-1, -0x1.8b4cdcp-55, +0x1.b82683bc89fbp-7, -0x1p-4, 0x1.ff621e3796d7ep-1, -0x1.c57bc2p-57, +0x1.35230c0fbe402p-10, -0x1p-4, 0x1.ff095658e71adp-1, 0x1.01a8cep-55, +-0x1.6a9049670cfaep-7, -0x1p-4, 0x1.fe9cdad01883ap-1, 0x1.521eccp-57, +-0x1.7db402a6a9063p-6, -0x1p-4, 0x1.fe1cafcbd5b09p-1, 0x1.a23e32p-57, +0x1.ba1650f592f5p-6, -0x1p-3, 0x1.fd88da3d12526p-1, -0x1.87df62p-55, +0x1.e43d1c309e958p-7, -0x1p-3, 0x1.fce15fd6da67bp-1, -0x1.5dd6f8p-56, +0x1.536352ad19e39p-9, -0x1p-3, 0x1.fc26470e19fd3p-1, 0x1.1ec866p-55, +-0x1.39f0cedaf576bp-7, -0x1p-3, 0x1.fb5797195d741p-1, 0x1.1bfac6p-56, +-0x1.64083747309d1p-6, -0x1p-3, 0x1.fa7557f08a517p-1, -0x1.7a0a8cp-55, +-0x1.155dac4a4f967p-5, -0x1p-3, 0x1.f97f924c9099bp-1, -0x1.e2ae0ep-55, +-0x1.78851122cff19p-5, -0x1p-3, 0x1.f8764fa714ba9p-1, 0x1.ab2566p-56, +-0x1.db7677942fcc5p-5, -0x1p-3, 0x1.f7599a3a12077p-1, 0x1.84f31cp-55, +0x1.c1d1f0e5967d5p-5, -0x1p-2, 0x1.f6297cff75cbp-1, 0x1.562172p-56, +0x1.5f57f693feebep-5, -0x1p-2, 0x1.f4e603b0b2f2dp-1, -0x1.8ee01ep-56, +0x1.fa3ecac0d84e8p-6, -0x1p-2, 0x1.f38f3ac64e589p-1, -0x1.d7bafap-56, +0x1.36580d5d5e775p-6, -0x1p-2, 0x1.f2252f7763adap-1, -0x1.20cb8p-55, +0x1.cc0d09bd41caap-8, -0x1p-2, 0x1.f0a7efb9230d7p-1, 0x1.52c7acp-56, +-0x1.3ee038dff6b8p-8, -0x1p-2, 0x1.ef178a3e473c2p-1, 0x1.6310a6p-55, +-0x1.11d262b1f6776p-6, -0x1p-2, 0x1.ed740e7684963p-1, 0x1.e82c78p-56, +-0x1.d3443f4cdb3ddp-6, -0x1p-2, 0x1.ebbd8c8df0b74p-1, 0x1.c6c8c6p-56, +-0x1.4a03176acf82dp-5, -0x1p-2, 0x1.e9f4156c62ddap-1, 0x1.760b1ep-55, +-0x1.aa086170c0a8ep-5, -0x1p-2, 0x1.e817bab4cd10dp-1, -0x1.d0afe6p-56, +-0x1.04d72505d9805p-4, -0x1p-2, 0x1.e6288ec48e112p-1, -0x1.16b56ep-57, +-0x1.3478909e39da9p-4, -0x1p-2, 0x1.e426a4b2bc17ep-1, 0x1.a87388p-55, +-0x1.63e69d6ac7f74p-4, -0x1p-2, 0x1.e212104f686e5p-1, -0x1.014c76p-55, +-0x1.931f774fc9f18p-4, -0x1p-2, 0x1.dfeae622dbe2bp-1, -0x1.514ea8p-55, +-0x1.c2214c3e9167bp-4, -0x1p-2, 0x1.ddb13b6ccc23cp-1, 0x1.83c37cp-55, +-0x1.f0ea4c477339cp-4, -0x1p-2, 0x1.db6526238a09bp-1, -0x1.adee7ep-56, +0x1.e087565455a75p-4, -0x1p-1, 0x1.d906bcf328d46p-1, 0x1.457e6p-56, +0x1.b2356710db0a3p-4, -0x1p-1, 0x1.d696173c9e68bp-1, -0x1.e8c61cp-56, +0x1.8421af15c49d7p-4, -0x1p-1, 0x1.d4134d14dc93ap-1, -0x1.4ef528p-55, +0x1.564df524b00dap-4, -0x1p-1, 0x1.d17e7743e35dcp-1, -0x1.101da2p-58, +0x1.28bbfd87a8cffp-4, -0x1p-1, 0x1.ced7af43cc773p-1, -0x1.e7b6bap-58, +0x1.f6db13ff708cbp-5, -0x1p-1, 0x1.cc1f0f3fcfc5cp-1, 0x1.e57612p-56, +0x1.9cc8b3671dd0fp-5, -0x1p-1, 0x1.c954b213411f5p-1, -0x1.2fb76p-58, +0x1.4344523c8e3b5p-5, -0x1p-1, 0x1.c678b3488739bp-1, 0x1.d86cacp-57, +0x1.d4a2c7f909c4ep-6, -0x1p-1, 0x1.c38b2f180bdb1p-1, -0x1.6e0b16p-56, +0x1.23e6ad10872a7p-6, -0x1p-1, 0x1.c08c426725549p-1, 0x1.b157fcp-58, +0x1.d16c901d95181p-8, -0x1p-1, 0x1.bd7c0ac6f952ap-1, -0x1.825a72p-55, +-0x1.cfc874c3eb6d9p-9, -0x1p-1, 0x1.ba5aa673590d2p-1, 0x1.7ea4e2p-55, +-0x1.ce1e648bffb66p-7, -0x1p-1, 0x1.b728345196e3ep-1, -0x1.bc69f2p-55, +-0x1.92e09abb131d4p-6, -0x1p-1, 0x1.b3e4d3ef55712p-1, -0x1.eb6b8ap-55, +-0x1.1eb3541b4b228p-5, -0x1p-1, 0x1.b090a581502p-1, -0x1.926da2p-55, +-0x1.734d63dedb48ap-5, -0x1p-1, 0x1.ad2bc9e21d511p-1, -0x1.47fbep-55, +-0x1.c73b39ae68c87p-5, -0x1p-1, 0x1.a9b66290ea1a3p-1, 0x1.9f630ep-60, +-0x1.0d3ccc99f5ac6p-4, -0x1p-1, 0x1.a63091b02fae2p-1, -0x1.e91114p-56, +-0x1.3682a66e896f5p-4, -0x1p-1, 0x1.a29a7a0462782p-1, -0x1.128bbp-56, +-0x1.5f6d92fd79f5p-4, -0x1p-1, 0x1.9ef43ef29af94p-1, 0x1.b1dfcap-56, +-0x1.87fbfe70b81a7p-4, -0x1p-1, 0x1.9b3e047f38741p-1, -0x1.30ee28p-55, +-0x1.b02c58832cf96p-4, -0x1p-1, 0x1.9777ef4c7d742p-1, -0x1.15479ap-55, +-0x1.d7fd1490285cap-4, -0x1p-1, 0x1.93a22499263fbp-1, 0x1.3d419ap-55, +-0x1.ff6ca9a2ab6a2p-4, -0x1p-1, 0x1.8fbcca3ef940dp-1, -0x1.6dfa98p-57, +-0x1.133cc94247758p-3, -0x1p-1, 0x1.8bc806b151741p-1, -0x1.2c5e12p-55, +-0x1.269126e6c24e3p-3, -0x1p-1, 0x1.87c400fba2ebfp-1, -0x1.2dabcp-55, +-0x1.39b2aef8f97a4p-3, -0x1p-1, 0x1.83b0e0bff976ep-1, -0x1.6f420ep-56, +-0x1.4ca0a4a8d5657p-3, -0x1p-1, 0x1.7f8ece3571771p-1, -0x1.9c8d8cp-55, +-0x1.5f5a4d233b27fp-3, -0x1p-1, 0x1.7b5df226aafafp-1, -0x1.0f537ap-56, +-0x1.71deef9940631p-3, -0x1p-1, 0x1.771e75f037261p-1, 0x1.5cfce8p-56, +-0x1.842dd5474b37bp-3, -0x1p-1, 0x1.72d0837efff96p-1, 0x1.0d4efp-55, +-0x1.9646497c1e0f6p-3, -0x1p-1, 0x1.6e74454eaa8afp-1, -0x1.dbc03cp-55, +-0x1.a827999fcef32p-3, -0x1p-1, 0x1.6a09e667f3bcdp-1, -0x1.bdd34p-55, +-0x1.b9d1153aaa2bap-3, -0x1p-1, 0x1.6591925f0783dp-1, 0x1.c3d64ep-55, +-0x1.cb420dfbffe59p-3, -0x1p-1, 0x1.610b7551d2cdfp-1, -0x1.251b34p-56, +-0x1.dc79d7c0dc985p-3, -0x1p-1, 0x1.5c77bbe65018cp-1, 0x1.069ea8p-55, +-0x1.ed77c89aabebbp-3, -0x1p-1, 0x1.57d69348cecap-1, -0x1.757208p-55, +-0x1.fe3b38d5c5dc2p-3, -0x1p-1, 0x1.5328292a35596p-1, -0x1.a12eb8p-56, +0x1.f13c7d001a249p-3, -0x1p0, 0x1.4e6cabbe3e5e9p-1, 0x1.3c293ep-57, +0x1.e0effc1174505p-3, -0x1p0, 0x1.49a449b9b0939p-1, -0x1.27ee16p-55, +0x1.d0dfe53aba2fdp-3, -0x1p0, 0x1.44cf325091dd6p-1, 0x1.8076a2p-57, +0x1.c10cd7041afccp-3, -0x1p0, 0x1.3fed9534556d4p-1, 0x1.369166p-55, +0x1.b1776d9b67013p-3, -0x1p0, 0x1.3affa292050b9p-1, 0x1.e3e25ep-56, +0x1.a22042ce0a2f9p-3, -0x1p0, 0x1.36058b10659f3p-1, -0x1.1fcb3ap-55, +0x1.9307ee031e2fdp-3, -0x1p0, 0x1.30ff7fce17035p-1, -0x1.efcc62p-57, +0x1.842f0435941afp-3, -0x1p0, 0x1.2bedb25faf3eap-1, -0x1.14981cp-58, +0x1.759617ee761f9p-3, -0x1p0, 0x1.26d054cdd12dfp-1, -0x1.5da742p-55, +0x1.673db93f41479p-3, -0x1p0, 0x1.21a799933eb59p-1, -0x1.3a7b16p-55, +0x1.592675bc57974p-3, -0x1p0, 0x1.1c73b39ae68c8p-1, 0x1.b25dd2p-55, +0x1.4b50d8778abbdp-3, -0x1p0, 0x1.1734d63dedb49p-1, -0x1.7eef2cp-55, +0x1.3dbd69fabf802p-3, -0x1p0, 0x1.11eb3541b4b23p-1, -0x1.ef23b6p-55, +0x1.306cb042aa3bap-3, -0x1p0, 0x1.0c9704d5d898fp-1, -0x1.8d3d7cp-55, +0x1.235f2eb9a470ap-3, -0x1p0, 0x1.073879922ffeep-1, -0x1.a5a014p-55, +0x1.169566329bcb7p-3, -0x1p0, 0x1.01cfc874c3eb7p-1, -0x1.34a35ep-56, +0x1.0a0fd4e41ab5ap-3, -0x1p0, 0x1.f8ba4dbf89abap-2, -0x1.2ec1fcp-60, +0x1.fb9decc6d55b8p-4, -0x1p0, 0x1.edc1952ef78d6p-2, -0x1.dd0f7cp-56, +0x1.e3a6873fa1279p-4, -0x1p0, 0x1.e2b5d3806f63bp-2, 0x1.e0d89p-58, +0x1.cc3a65bbc6327p-4, -0x1p0, 0x1.d79775b86e389p-2, 0x1.550ec8p-56, +0x1.b55a6f65f7058p-4, -0x1p0, 0x1.cc66e9931c45ep-2, 0x1.6850e4p-58, +0x1.9f07860181d1ep-4, -0x1p0, 0x1.c1249d8011ee7p-2, -0x1.813aaap-56, +0x1.894285e19c468p-4, -0x1p0, 0x1.b5d1009e15ccp-2, 0x1.5b362cp-57, +0x1.740c45e0e512p-4, -0x1p0, 0x1.aa6c82b6d3fcap-2, -0x1.d5f106p-56, +0x1.5f6597591b633p-4, -0x1p0, 0x1.9ef7943a8ed8ap-2, 0x1.6da812p-57, +0x1.4b4f461b0cbaap-4, -0x1p0, 0x1.9372a63bc93d7p-2, 0x1.684318p-57, +0x1.37ca1866b95cfp-4, -0x1p0, 0x1.87de2a6aea963p-2, -0x1.72cedcp-57, +0x1.24d6cee3afb2ap-4, -0x1p0, 0x1.7c3a9311dcce7p-2, 0x1.9a3f2p-62, +0x1.127624999ee1dp-4, -0x1p0, 0x1.7088530fa459fp-2, -0x1.44b19ep-56, +0x1.00a8cee920eabp-4, -0x1p0, 0x1.64c7ddd3f27c6p-2, 0x1.10d2b4p-58, +0x1.dedefb09791b4p-5, -0x1p0, 0x1.58f9a75ab1fddp-2, -0x1.efdc0cp-62, +0x1.bd95b4d43e819p-5, -0x1p0, 0x1.4d1e24278e76ap-2, 0x1.24172p-57, +0x1.9d7713b71eee1p-5, -0x1p0, 0x1.4135c94176601p-2, 0x1.0c97c4p-56, +0x1.7e8454b32ef34p-5, -0x1p0, 0x1.35410c2e18152p-2, -0x1.3cb002p-56, +0x1.60bea939d225ap-5, -0x1p0, 0x1.294062ed59f06p-2, -0x1.5d28dap-56, +0x1.44273720f48bcp-5, -0x1p0, 0x1.1d3443f4cdb3ep-2, -0x1.720d4p-57, +0x1.28bf1897b69ccp-5, -0x1p0, 0x1.111d262b1f677p-2, 0x1.824c2p-56, +0x1.0e875c1b8c3dap-5, -0x1p0, 0x1.04fb80e37fdaep-2, -0x1.412cdap-63, +0x1.eb0208db9e51bp-6, -0x1p0, 0x1.f19f97b215f1bp-3, -0x1.42deeep-57, +0x1.bb5a11138a4c9p-6, -0x1p0, 0x1.d934fe5454311p-3, 0x1.75b922p-57, +0x1.8e18a73634ee7p-6, -0x1p0, 0x1.c0b826a7e4f63p-3, -0x1.af1438p-62, +0x1.633f89e9a1a66p-6, -0x1p0, 0x1.a82a025b00451p-3, -0x1.87905ep-57, +0x1.3ad06011469fbp-6, -0x1p0, 0x1.8f8b83c69a60bp-3, -0x1.26d19ap-57, +0x1.14ccb8bdbf114p-6, -0x1p0, 0x1.76dd9de50bf31p-3, 0x1.1d5eeep-57, +0x1.e26c163ad15b3p-7, -0x1p0, 0x1.5e214448b3fc6p-3, 0x1.531ff6p-57, +0x1.a01b6cdbd995ep-7, -0x1p0, 0x1.45576b1293e5ap-3, -0x1.285a24p-58, +0x1.62aa03dd6ba58p-7, -0x1p0, 0x1.2c8106e8e613ap-3, 0x1.13000ap-58, +0x1.2a1a39a8a2fb7p-7, -0x1p0, 0x1.139f0cedaf577p-3, -0x1.523434p-57, +0x1.ecdc78f30165cp-8, -0x1p0, 0x1.f564e56a9730ep-4, 0x1.a27046p-59, +0x1.8f501492cc296p-8, -0x1p0, 0x1.c3785c79ec2d5p-4, -0x1.4f39dep-61, +0x1.3b92e176d6d31p-8, -0x1p0, 0x1.917a6bc29b42cp-4, -0x1.e2718cp-60, +0x1.e350342a4f6e6p-9, -0x1p0, 0x1.5f6d00a9aa419p-4, -0x1.f4022cp-59, +0x1.63252fe77c5ebp-9, -0x1p0, 0x1.2d52092ce19f6p-4, -0x1.9a088ap-59, +0x1.ed534e31ca57fp-10, -0x1p0, 0x1.f656e79f820ep-5, -0x1.2e1ebep-61, +0x1.3bc390d250439p-10, -0x1p0, 0x1.91f65f10dd814p-5, -0x1.912bdp-61, +0x1.6344004228d8bp-11, -0x1p0, 0x1.2d865759455cdp-5, 0x1.686f64p-61, +0x1.3bcfbd9979a27p-12, -0x1p0, 0x1.92155f7a3667ep-6, -0x1.b1d63p-64, +0x1.3bd2c8da49511p-14, -0x1p0, 0x1.921d1fcdec784p-7, 0x1.9878eap-61, +0.0, -0x1p0, 0.0, 0.0, +0x1.3bd2c8da49511p-14, -0x1p0, -0x1.921d1fcdec784p-7, -0x1.9878eap-61, +0x1.3bcfbd9979a27p-12, -0x1p0, -0x1.92155f7a3667ep-6, 0x1.b1d63p-64, +0x1.6344004228d8bp-11, -0x1p0, -0x1.2d865759455cdp-5, -0x1.686f64p-61, +0x1.3bc390d250439p-10, -0x1p0, -0x1.91f65f10dd814p-5, 0x1.912bdp-61, +0x1.ed534e31ca57fp-10, -0x1p0, -0x1.f656e79f820ep-5, 0x1.2e1ebep-61, +0x1.63252fe77c5ebp-9, -0x1p0, -0x1.2d52092ce19f6p-4, 0x1.9a088ap-59, +0x1.e350342a4f6e6p-9, -0x1p0, -0x1.5f6d00a9aa419p-4, 0x1.f4022cp-59, +0x1.3b92e176d6d31p-8, -0x1p0, -0x1.917a6bc29b42cp-4, 0x1.e2718cp-60, +0x1.8f501492cc296p-8, -0x1p0, -0x1.c3785c79ec2d5p-4, 0x1.4f39dep-61, +0x1.ecdc78f30165cp-8, -0x1p0, -0x1.f564e56a9730ep-4, -0x1.a27046p-59, +0x1.2a1a39a8a2fb7p-7, -0x1p0, -0x1.139f0cedaf577p-3, 0x1.523434p-57, +0x1.62aa03dd6ba58p-7, -0x1p0, -0x1.2c8106e8e613ap-3, -0x1.13000ap-58, +0x1.a01b6cdbd995ep-7, -0x1p0, -0x1.45576b1293e5ap-3, 0x1.285a24p-58, +0x1.e26c163ad15b3p-7, -0x1p0, -0x1.5e214448b3fc6p-3, -0x1.531ff6p-57, +0x1.14ccb8bdbf114p-6, -0x1p0, -0x1.76dd9de50bf31p-3, -0x1.1d5eeep-57, +0x1.3ad06011469fbp-6, -0x1p0, -0x1.8f8b83c69a60bp-3, 0x1.26d19ap-57, +0x1.633f89e9a1a66p-6, -0x1p0, -0x1.a82a025b00451p-3, 0x1.87905ep-57, +0x1.8e18a73634ee7p-6, -0x1p0, -0x1.c0b826a7e4f63p-3, 0x1.af1438p-62, +0x1.bb5a11138a4c9p-6, -0x1p0, -0x1.d934fe5454311p-3, -0x1.75b922p-57, +0x1.eb0208db9e51bp-6, -0x1p0, -0x1.f19f97b215f1bp-3, 0x1.42deeep-57, +0x1.0e875c1b8c3dap-5, -0x1p0, -0x1.04fb80e37fdaep-2, 0x1.412cdap-63, +0x1.28bf1897b69ccp-5, -0x1p0, -0x1.111d262b1f677p-2, -0x1.824c2p-56, +0x1.44273720f48bcp-5, -0x1p0, -0x1.1d3443f4cdb3ep-2, 0x1.720d4p-57, +0x1.60bea939d225ap-5, -0x1p0, -0x1.294062ed59f06p-2, 0x1.5d28dap-56, +0x1.7e8454b32ef34p-5, -0x1p0, -0x1.35410c2e18152p-2, 0x1.3cb002p-56, +0x1.9d7713b71eee1p-5, -0x1p0, -0x1.4135c94176601p-2, -0x1.0c97c4p-56, +0x1.bd95b4d43e819p-5, -0x1p0, -0x1.4d1e24278e76ap-2, -0x1.24172p-57, +0x1.dedefb09791b4p-5, -0x1p0, -0x1.58f9a75ab1fddp-2, 0x1.efdc0cp-62, +0x1.00a8cee920eabp-4, -0x1p0, -0x1.64c7ddd3f27c6p-2, -0x1.10d2b4p-58, +0x1.127624999ee1dp-4, -0x1p0, -0x1.7088530fa459fp-2, 0x1.44b19ep-56, +0x1.24d6cee3afb2ap-4, -0x1p0, -0x1.7c3a9311dcce7p-2, -0x1.9a3f2p-62, +0x1.37ca1866b95cfp-4, -0x1p0, -0x1.87de2a6aea963p-2, 0x1.72cedcp-57, +0x1.4b4f461b0cbaap-4, -0x1p0, -0x1.9372a63bc93d7p-2, -0x1.684318p-57, +0x1.5f6597591b633p-4, -0x1p0, -0x1.9ef7943a8ed8ap-2, -0x1.6da812p-57, +0x1.740c45e0e512p-4, -0x1p0, -0x1.aa6c82b6d3fcap-2, 0x1.d5f106p-56, +0x1.894285e19c468p-4, -0x1p0, -0x1.b5d1009e15ccp-2, -0x1.5b362cp-57, +0x1.9f07860181d1ep-4, -0x1p0, -0x1.c1249d8011ee7p-2, 0x1.813aaap-56, +0x1.b55a6f65f7058p-4, -0x1p0, -0x1.cc66e9931c45ep-2, -0x1.6850e4p-58, +0x1.cc3a65bbc6327p-4, -0x1p0, -0x1.d79775b86e389p-2, -0x1.550ec8p-56, +0x1.e3a6873fa1279p-4, -0x1p0, -0x1.e2b5d3806f63bp-2, -0x1.e0d89p-58, +0x1.fb9decc6d55b8p-4, -0x1p0, -0x1.edc1952ef78d6p-2, 0x1.dd0f7cp-56, +0x1.0a0fd4e41ab5ap-3, -0x1p0, -0x1.f8ba4dbf89abap-2, 0x1.2ec1fcp-60, +0x1.169566329bcb7p-3, -0x1p0, -0x1.01cfc874c3eb7p-1, 0x1.34a35ep-56, +0x1.235f2eb9a470ap-3, -0x1p0, -0x1.073879922ffeep-1, 0x1.a5a014p-55, +0x1.306cb042aa3bap-3, -0x1p0, -0x1.0c9704d5d898fp-1, 0x1.8d3d7cp-55, +0x1.3dbd69fabf802p-3, -0x1p0, -0x1.11eb3541b4b23p-1, 0x1.ef23b6p-55, +0x1.4b50d8778abbdp-3, -0x1p0, -0x1.1734d63dedb49p-1, 0x1.7eef2cp-55, +0x1.592675bc57974p-3, -0x1p0, -0x1.1c73b39ae68c8p-1, -0x1.b25dd2p-55, +0x1.673db93f41479p-3, -0x1p0, -0x1.21a799933eb59p-1, 0x1.3a7b16p-55, +0x1.759617ee761f9p-3, -0x1p0, -0x1.26d054cdd12dfp-1, 0x1.5da742p-55, +0x1.842f0435941afp-3, -0x1p0, -0x1.2bedb25faf3eap-1, 0x1.14981cp-58, +0x1.9307ee031e2fdp-3, -0x1p0, -0x1.30ff7fce17035p-1, 0x1.efcc62p-57, +0x1.a22042ce0a2f9p-3, -0x1p0, -0x1.36058b10659f3p-1, 0x1.1fcb3ap-55, +0x1.b1776d9b67013p-3, -0x1p0, -0x1.3affa292050b9p-1, -0x1.e3e25ep-56, +0x1.c10cd7041afccp-3, -0x1p0, -0x1.3fed9534556d4p-1, -0x1.369166p-55, +0x1.d0dfe53aba2fdp-3, -0x1p0, -0x1.44cf325091dd6p-1, -0x1.8076a2p-57, +0x1.e0effc1174505p-3, -0x1p0, -0x1.49a449b9b0939p-1, 0x1.27ee16p-55, +0x1.f13c7d001a249p-3, -0x1p0, -0x1.4e6cabbe3e5e9p-1, -0x1.3c293ep-57, +-0x1.fe3b38d5c5dc2p-3, -0x1p-1, -0x1.5328292a35596p-1, 0x1.a12eb8p-56, +-0x1.ed77c89aabebbp-3, -0x1p-1, -0x1.57d69348cecap-1, 0x1.757208p-55, +-0x1.dc79d7c0dc985p-3, -0x1p-1, -0x1.5c77bbe65018cp-1, -0x1.069ea8p-55, +-0x1.cb420dfbffe59p-3, -0x1p-1, -0x1.610b7551d2cdfp-1, 0x1.251b34p-56, +-0x1.b9d1153aaa2bap-3, -0x1p-1, -0x1.6591925f0783dp-1, -0x1.c3d64ep-55, +-0x1.a827999fcef32p-3, -0x1p-1, -0x1.6a09e667f3bcdp-1, 0x1.bdd34p-55, +-0x1.9646497c1e0f6p-3, -0x1p-1, -0x1.6e74454eaa8afp-1, 0x1.dbc03cp-55, +-0x1.842dd5474b37bp-3, -0x1p-1, -0x1.72d0837efff96p-1, -0x1.0d4efp-55, +-0x1.71deef9940631p-3, -0x1p-1, -0x1.771e75f037261p-1, -0x1.5cfce8p-56, +-0x1.5f5a4d233b27fp-3, -0x1p-1, -0x1.7b5df226aafafp-1, 0x1.0f537ap-56, +-0x1.4ca0a4a8d5657p-3, -0x1p-1, -0x1.7f8ece3571771p-1, 0x1.9c8d8cp-55, +-0x1.39b2aef8f97a4p-3, -0x1p-1, -0x1.83b0e0bff976ep-1, 0x1.6f420ep-56, +-0x1.269126e6c24e3p-3, -0x1p-1, -0x1.87c400fba2ebfp-1, 0x1.2dabcp-55, +-0x1.133cc94247758p-3, -0x1p-1, -0x1.8bc806b151741p-1, 0x1.2c5e12p-55, +-0x1.ff6ca9a2ab6a2p-4, -0x1p-1, -0x1.8fbcca3ef940dp-1, 0x1.6dfa98p-57, +-0x1.d7fd1490285cap-4, -0x1p-1, -0x1.93a22499263fbp-1, -0x1.3d419ap-55, +-0x1.b02c58832cf96p-4, -0x1p-1, -0x1.9777ef4c7d742p-1, 0x1.15479ap-55, +-0x1.87fbfe70b81a7p-4, -0x1p-1, -0x1.9b3e047f38741p-1, 0x1.30ee28p-55, +-0x1.5f6d92fd79f5p-4, -0x1p-1, -0x1.9ef43ef29af94p-1, -0x1.b1dfcap-56, +-0x1.3682a66e896f5p-4, -0x1p-1, -0x1.a29a7a0462782p-1, 0x1.128bbp-56, +-0x1.0d3ccc99f5ac6p-4, -0x1p-1, -0x1.a63091b02fae2p-1, 0x1.e91114p-56, +-0x1.c73b39ae68c87p-5, -0x1p-1, -0x1.a9b66290ea1a3p-1, -0x1.9f630ep-60, +-0x1.734d63dedb48ap-5, -0x1p-1, -0x1.ad2bc9e21d511p-1, 0x1.47fbep-55, +-0x1.1eb3541b4b228p-5, -0x1p-1, -0x1.b090a581502p-1, 0x1.926da2p-55, +-0x1.92e09abb131d4p-6, -0x1p-1, -0x1.b3e4d3ef55712p-1, 0x1.eb6b8ap-55, +-0x1.ce1e648bffb66p-7, -0x1p-1, -0x1.b728345196e3ep-1, 0x1.bc69f2p-55, +-0x1.cfc874c3eb6d9p-9, -0x1p-1, -0x1.ba5aa673590d2p-1, -0x1.7ea4e2p-55, +0x1.d16c901d95181p-8, -0x1p-1, -0x1.bd7c0ac6f952ap-1, 0x1.825a72p-55, +0x1.23e6ad10872a7p-6, -0x1p-1, -0x1.c08c426725549p-1, -0x1.b157fcp-58, +0x1.d4a2c7f909c4ep-6, -0x1p-1, -0x1.c38b2f180bdb1p-1, 0x1.6e0b16p-56, +0x1.4344523c8e3b5p-5, -0x1p-1, -0x1.c678b3488739bp-1, -0x1.d86cacp-57, +0x1.9cc8b3671dd0fp-5, -0x1p-1, -0x1.c954b213411f5p-1, 0x1.2fb76p-58, +0x1.f6db13ff708cbp-5, -0x1p-1, -0x1.cc1f0f3fcfc5cp-1, -0x1.e57612p-56, +0x1.28bbfd87a8cffp-4, -0x1p-1, -0x1.ced7af43cc773p-1, 0x1.e7b6bap-58, +0x1.564df524b00dap-4, -0x1p-1, -0x1.d17e7743e35dcp-1, 0x1.101da2p-58, +0x1.8421af15c49d7p-4, -0x1p-1, -0x1.d4134d14dc93ap-1, 0x1.4ef528p-55, +0x1.b2356710db0a3p-4, -0x1p-1, -0x1.d696173c9e68bp-1, 0x1.e8c61cp-56, +0x1.e087565455a75p-4, -0x1p-1, -0x1.d906bcf328d46p-1, -0x1.457e6p-56, +-0x1.f0ea4c477339cp-4, -0x1p-2, -0x1.db6526238a09bp-1, 0x1.adee7ep-56, +-0x1.c2214c3e9167bp-4, -0x1p-2, -0x1.ddb13b6ccc23cp-1, -0x1.83c37cp-55, +-0x1.931f774fc9f18p-4, -0x1p-2, -0x1.dfeae622dbe2bp-1, 0x1.514ea8p-55, +-0x1.63e69d6ac7f74p-4, -0x1p-2, -0x1.e212104f686e5p-1, 0x1.014c76p-55, +-0x1.3478909e39da9p-4, -0x1p-2, -0x1.e426a4b2bc17ep-1, -0x1.a87388p-55, +-0x1.04d72505d9805p-4, -0x1p-2, -0x1.e6288ec48e112p-1, 0x1.16b56ep-57, +-0x1.aa086170c0a8ep-5, -0x1p-2, -0x1.e817bab4cd10dp-1, 0x1.d0afe6p-56, +-0x1.4a03176acf82dp-5, -0x1p-2, -0x1.e9f4156c62ddap-1, -0x1.760b1ep-55, +-0x1.d3443f4cdb3ddp-6, -0x1p-2, -0x1.ebbd8c8df0b74p-1, -0x1.c6c8c6p-56, +-0x1.11d262b1f6776p-6, -0x1p-2, -0x1.ed740e7684963p-1, -0x1.e82c78p-56, +-0x1.3ee038dff6b8p-8, -0x1p-2, -0x1.ef178a3e473c2p-1, -0x1.6310a6p-55, +0x1.cc0d09bd41caap-8, -0x1p-2, -0x1.f0a7efb9230d7p-1, -0x1.52c7acp-56, +0x1.36580d5d5e775p-6, -0x1p-2, -0x1.f2252f7763adap-1, 0x1.20cb8p-55, +0x1.fa3ecac0d84e8p-6, -0x1p-2, -0x1.f38f3ac64e589p-1, 0x1.d7bafap-56, +0x1.5f57f693feebep-5, -0x1p-2, -0x1.f4e603b0b2f2dp-1, 0x1.8ee01ep-56, +0x1.c1d1f0e5967d5p-5, -0x1p-2, -0x1.f6297cff75cbp-1, -0x1.562172p-56, +-0x1.db7677942fcc5p-5, -0x1p-3, -0x1.f7599a3a12077p-1, -0x1.84f31cp-55, +-0x1.78851122cff19p-5, -0x1p-3, -0x1.f8764fa714ba9p-1, -0x1.ab2566p-56, +-0x1.155dac4a4f967p-5, -0x1p-3, -0x1.f97f924c9099bp-1, 0x1.e2ae0ep-55, +-0x1.64083747309d1p-6, -0x1p-3, -0x1.fa7557f08a517p-1, 0x1.7a0a8cp-55, +-0x1.39f0cedaf576bp-7, -0x1p-3, -0x1.fb5797195d741p-1, -0x1.1bfac6p-56, +0x1.536352ad19e39p-9, -0x1p-3, -0x1.fc26470e19fd3p-1, -0x1.1ec866p-55, +0x1.e43d1c309e958p-7, -0x1p-3, -0x1.fce15fd6da67bp-1, 0x1.5dd6f8p-56, +0x1.ba1650f592f5p-6, -0x1p-3, -0x1.fd88da3d12526p-1, 0x1.87df62p-55, +-0x1.7db402a6a9063p-6, -0x1p-4, -0x1.fe1cafcbd5b09p-1, -0x1.a23e32p-57, +-0x1.6a9049670cfaep-7, -0x1p-4, -0x1.fe9cdad01883ap-1, -0x1.521eccp-57, +0x1.35230c0fbe402p-10, -0x1p-4, -0x1.ff095658e71adp-1, -0x1.01a8cep-55, +0x1.b82683bc89fbp-7, -0x1p-4, -0x1.ff621e3796d7ep-1, 0x1.c57bc2p-57, +-0x1.6c32baca2ae69p-8, -0x1p-5, -0x1.ffa72effef75dp-1, 0x1.8b4cdcp-55, +0x1.b7aa821726608p-8, -0x1p-5, -0x1.ffd886084cd0dp-1, 0x1.1354d4p-55, +0x1.b78b80c84e1eep-9, -0x1p-6, -0x1.fff62169b92dbp-1, -0x1.5dda3cp-55, 0.0, 0.0, -0x1p0, 0.0, -0x1.b78b80c84e1eep-9, 0x1p-6, -0x1.fff62169b92dbp-1, -0x1.5dda3cp-55, -0x1.b7aa821726608p-8, 0x1p-5, -0x1.ffd886084cd0dp-1, 0x1.1354d4p-55, --0x1.a4f3514d75466p-6, 0x1p-4, -0x1.ffa72effef75dp-1, 0x1.8b4cdcp-55, +0x1.6c32baca2ae69p-8, 0x1p-5, -0x1.ffa72effef75dp-1, 0x1.8b4cdcp-55, -0x1.b82683bc89fbp-7, 0x1p-4, -0x1.ff621e3796d7ep-1, 0x1.c57bc2p-57, -0x1.35230c0fbe402p-10, 0x1p-4, -0x1.ff095658e71adp-1, -0x1.01a8cep-55, --0x1.a55beda63cc14p-5, 0x1p-3, -0x1.fe9cdad01883ap-1, -0x1.521eccp-57, --0x1.4125feacab7cep-5, 0x1p-3, -0x1.fe1cafcbd5b09p-1, -0x1.a23e32p-57, +0x1.6a9049670cfaep-7, 0x1p-4, -0x1.fe9cdad01883ap-1, -0x1.521eccp-57, +0x1.7db402a6a9063p-6, 0x1p-4, -0x1.fe1cafcbd5b09p-1, -0x1.a23e32p-57, -0x1.ba1650f592f5p-6, 0x1p-3, -0x1.fd88da3d12526p-1, 0x1.87df62p-55, -0x1.e43d1c309e958p-7, 0x1p-3, -0x1.fce15fd6da67bp-1, 0x1.5dd6f8p-56, -0x1.536352ad19e39p-9, 0x1p-3, -0x1.fc26470e19fd3p-1, -0x1.1ec866p-55, --0x1.d8c1e624a1513p-4, 0x1p-2, -0x1.fb5797195d741p-1, -0x1.1bfac6p-56, --0x1.a6fdf22e33d8cp-4, 0x1p-2, -0x1.fa7557f08a517p-1, 0x1.7a0a8cp-55, --0x1.755129dad834cp-4, 0x1p-2, -0x1.f97f924c9099bp-1, 0x1.e2ae0ep-55, --0x1.43bd776e98073p-4, 0x1p-2, -0x1.f8764fa714ba9p-1, -0x1.ab2566p-56, --0x1.1244c435e819dp-4, 0x1p-2, -0x1.f7599a3a12077p-1, -0x1.84f31cp-55, +0x1.39f0cedaf576bp-7, 0x1p-3, -0x1.fb5797195d741p-1, -0x1.1bfac6p-56, +0x1.64083747309d1p-6, 0x1p-3, -0x1.fa7557f08a517p-1, 0x1.7a0a8cp-55, +0x1.155dac4a4f967p-5, 0x1p-3, -0x1.f97f924c9099bp-1, 0x1.e2ae0ep-55, +0x1.78851122cff19p-5, 0x1p-3, -0x1.f8764fa714ba9p-1, -0x1.ab2566p-56, +0x1.db7677942fcc5p-5, 0x1p-3, -0x1.f7599a3a12077p-1, -0x1.84f31cp-55, -0x1.c1d1f0e5967d5p-5, 0x1p-2, -0x1.f6297cff75cbp-1, -0x1.562172p-56, -0x1.5f57f693feebep-5, 0x1p-2, -0x1.f4e603b0b2f2dp-1, 0x1.8ee01ep-56, -0x1.fa3ecac0d84e8p-6, 0x1p-2, -0x1.f38f3ac64e589p-1, 0x1.d7bafap-56, -0x1.36580d5d5e775p-6, 0x1p-2, -0x1.f2252f7763adap-1, 0x1.20cb8p-55, -0x1.cc0d09bd41caap-8, 0x1p-2, -0x1.f0a7efb9230d7p-1, -0x1.52c7acp-56, --0x1.f608fe39004a4p-3, 0x1p-1, -0x1.ef178a3e473c2p-1, -0x1.6310a6p-55, --0x1.ddc5b3a9c1311p-3, 0x1p-1, -0x1.ed740e7684963p-1, -0x1.e82c78p-56, --0x1.c597781664984p-3, 0x1p-1, -0x1.ebbd8c8df0b74p-1, -0x1.c6c8c6p-56, --0x1.ad7f3a254c1f5p-3, 0x1p-1, -0x1.e9f4156c62ddap-1, -0x1.760b1ep-55, --0x1.957de7a3cfd5dp-3, 0x1p-1, -0x1.e817bab4cd10dp-1, 0x1.d0afe6p-56, --0x1.7d946d7d133fdp-3, 0x1p-1, -0x1.e6288ec48e112p-1, 0x1.16b56ep-57, --0x1.65c3b7b0e312cp-3, 0x1p-1, -0x1.e426a4b2bc17ep-1, -0x1.a87388p-55, --0x1.4e0cb14a9c046p-3, 0x1p-1, -0x1.e212104f686e5p-1, 0x1.014c76p-55, --0x1.367044581b074p-3, 0x1p-1, -0x1.dfeae622dbe2bp-1, 0x1.514ea8p-55, --0x1.1eef59e0b74c3p-3, 0x1p-1, -0x1.ddb13b6ccc23cp-1, -0x1.83c37cp-55, --0x1.078ad9dc46632p-3, 0x1p-1, -0x1.db6526238a09bp-1, 0x1.adee7ep-56, +0x1.3ee038dff6b8p-8, 0x1p-2, -0x1.ef178a3e473c2p-1, -0x1.6310a6p-55, +0x1.11d262b1f6776p-6, 0x1p-2, -0x1.ed740e7684963p-1, -0x1.e82c78p-56, +0x1.d3443f4cdb3ddp-6, 0x1p-2, -0x1.ebbd8c8df0b74p-1, -0x1.c6c8c6p-56, +0x1.4a03176acf82dp-5, 0x1p-2, -0x1.e9f4156c62ddap-1, -0x1.760b1ep-55, +0x1.aa086170c0a8ep-5, 0x1p-2, -0x1.e817bab4cd10dp-1, 0x1.d0afe6p-56, +0x1.04d72505d9805p-4, 0x1p-2, -0x1.e6288ec48e112p-1, 0x1.16b56ep-57, +0x1.3478909e39da9p-4, 0x1p-2, -0x1.e426a4b2bc17ep-1, -0x1.a87388p-55, +0x1.63e69d6ac7f74p-4, 0x1p-2, -0x1.e212104f686e5p-1, 0x1.014c76p-55, +0x1.931f774fc9f18p-4, 0x1p-2, -0x1.dfeae622dbe2bp-1, 0x1.514ea8p-55, +0x1.c2214c3e9167bp-4, 0x1p-2, -0x1.ddb13b6ccc23cp-1, -0x1.83c37cp-55, +0x1.f0ea4c477339cp-4, 0x1p-2, -0x1.db6526238a09bp-1, 0x1.adee7ep-56, -0x1.e087565455a75p-4, 0x1p-1, -0x1.d906bcf328d46p-1, -0x1.457e6p-56, -0x1.b2356710db0a3p-4, 0x1p-1, -0x1.d696173c9e68bp-1, 0x1.e8c61cp-56, -0x1.8421af15c49d7p-4, 0x1p-1, -0x1.d4134d14dc93ap-1, 0x1.4ef528p-55, @@ -1343,33 +1343,33 @@ template <> inline constexpr double kCosApproxTable[] = -0x1.d4a2c7f909c4ep-6, 0x1p-1, -0x1.c38b2f180bdb1p-1, 0x1.6e0b16p-56, -0x1.23e6ad10872a7p-6, 0x1p-1, -0x1.c08c426725549p-1, -0x1.b157fcp-58, -0x1.d16c901d95181p-8, 0x1p-1, -0x1.bd7c0ac6f952ap-1, 0x1.825a72p-55, --0x1.fc606f1678292p-2, 0x1p0, -0x1.ba5aa673590d2p-1, -0x1.7ea4e2p-55, --0x1.f18f0cdba0025p-2, 0x1p0, -0x1.b728345196e3ep-1, 0x1.bc69f2p-55, --0x1.e6d1f6544ece3p-2, 0x1p0, -0x1.b3e4d3ef55712p-1, 0x1.eb6b8ap-55, --0x1.dc29957c969bbp-2, 0x1p0, -0x1.b090a581502p-1, 0x1.926da2p-55, --0x1.d19653842496fp-2, 0x1p0, -0x1.ad2bc9e21d511p-1, 0x1.47fbep-55, --0x1.c71898ca32e6fp-2, 0x1p0, -0x1.a9b66290ea1a3p-1, -0x1.9f630ep-60, --0x1.bcb0ccd98294fp-2, 0x1p0, -0x1.a63091b02fae2p-1, 0x1.e91114p-56, --0x1.b25f56645da43p-2, 0x1p0, -0x1.a29a7a0462782p-1, 0x1.128bbp-56, --0x1.a8249b40a182cp-2, 0x1p0, -0x1.9ef43ef29af94p-1, -0x1.b1dfcap-56, --0x1.9e010063d1f96p-2, 0x1p0, -0x1.9b3e047f38741p-1, 0x1.30ee28p-55, --0x1.93f4e9df34c1bp-2, 0x1p0, -0x1.9777ef4c7d742p-1, 0x1.15479ap-55, --0x1.8a00badbf5e8ep-2, 0x1p0, -0x1.93a22499263fbp-1, -0x1.3d419ap-55, --0x1.8024d59755257p-2, 0x1p0, -0x1.8fbcca3ef940dp-1, 0x1.6dfa98p-57, --0x1.76619b5edc454p-2, 0x1p0, -0x1.8bc806b151741p-1, 0x1.2c5e12p-55, --0x1.6cb76c8c9ed8fp-2, 0x1p0, -0x1.87c400fba2ebfp-1, 0x1.2dabcp-55, --0x1.6326a8838342ep-2, 0x1p0, -0x1.83b0e0bff976ep-1, 0x1.6f420ep-56, --0x1.59afadab954d4p-2, 0x1p0, -0x1.7f8ece3571771p-1, 0x1.9c8d8cp-55, --0x1.5052d96e626c1p-2, 0x1p0, -0x1.7b5df226aafafp-1, 0x1.0f537ap-56, --0x1.471088335fce7p-2, 0x1p0, -0x1.771e75f037261p-1, -0x1.5cfce8p-56, --0x1.3de9155c5a642p-2, 0x1p0, -0x1.72d0837efff96p-1, -0x1.0d4efp-55, --0x1.34dcdb41f0f85p-2, 0x1p0, -0x1.6e74454eaa8afp-1, 0x1.dbc03cp-55, --0x1.2bec333018867p-2, 0x1p0, -0x1.6a09e667f3bcdp-1, 0x1.bdd34p-55, --0x1.23177562aaea3p-2, 0x1p0, -0x1.6591925f0783dp-1, -0x1.c3d64ep-55, --0x1.1a5ef902000d3p-2, 0x1p0, -0x1.610b7551d2cdfp-1, 0x1.251b34p-56, --0x1.11c3141f91b3ep-2, 0x1p0, -0x1.5c77bbe65018cp-1, -0x1.069ea8p-55, --0x1.09441bb2aa0a2p-2, 0x1p0, -0x1.57d69348cecap-1, 0x1.757208p-55, --0x1.00e263951d11fp-2, 0x1p0, -0x1.5328292a35596p-1, 0x1.a12eb8p-56, +0x1.cfc874c3eb6d9p-9, 0x1p-1, -0x1.ba5aa673590d2p-1, -0x1.7ea4e2p-55, +0x1.ce1e648bffb66p-7, 0x1p-1, -0x1.b728345196e3ep-1, 0x1.bc69f2p-55, +0x1.92e09abb131d4p-6, 0x1p-1, -0x1.b3e4d3ef55712p-1, 0x1.eb6b8ap-55, +0x1.1eb3541b4b228p-5, 0x1p-1, -0x1.b090a581502p-1, 0x1.926da2p-55, +0x1.734d63dedb48ap-5, 0x1p-1, -0x1.ad2bc9e21d511p-1, 0x1.47fbep-55, +0x1.c73b39ae68c87p-5, 0x1p-1, -0x1.a9b66290ea1a3p-1, -0x1.9f630ep-60, +0x1.0d3ccc99f5ac6p-4, 0x1p-1, -0x1.a63091b02fae2p-1, 0x1.e91114p-56, +0x1.3682a66e896f5p-4, 0x1p-1, -0x1.a29a7a0462782p-1, 0x1.128bbp-56, +0x1.5f6d92fd79f5p-4, 0x1p-1, -0x1.9ef43ef29af94p-1, -0x1.b1dfcap-56, +0x1.87fbfe70b81a7p-4, 0x1p-1, -0x1.9b3e047f38741p-1, 0x1.30ee28p-55, +0x1.b02c58832cf96p-4, 0x1p-1, -0x1.9777ef4c7d742p-1, 0x1.15479ap-55, +0x1.d7fd1490285cap-4, 0x1p-1, -0x1.93a22499263fbp-1, -0x1.3d419ap-55, +0x1.ff6ca9a2ab6a2p-4, 0x1p-1, -0x1.8fbcca3ef940dp-1, 0x1.6dfa98p-57, +0x1.133cc94247758p-3, 0x1p-1, -0x1.8bc806b151741p-1, 0x1.2c5e12p-55, +0x1.269126e6c24e3p-3, 0x1p-1, -0x1.87c400fba2ebfp-1, 0x1.2dabcp-55, +0x1.39b2aef8f97a4p-3, 0x1p-1, -0x1.83b0e0bff976ep-1, 0x1.6f420ep-56, +0x1.4ca0a4a8d5657p-3, 0x1p-1, -0x1.7f8ece3571771p-1, 0x1.9c8d8cp-55, +0x1.5f5a4d233b27fp-3, 0x1p-1, -0x1.7b5df226aafafp-1, 0x1.0f537ap-56, +0x1.71deef9940631p-3, 0x1p-1, -0x1.771e75f037261p-1, -0x1.5cfce8p-56, +0x1.842dd5474b37bp-3, 0x1p-1, -0x1.72d0837efff96p-1, -0x1.0d4efp-55, +0x1.9646497c1e0f6p-3, 0x1p-1, -0x1.6e74454eaa8afp-1, 0x1.dbc03cp-55, +0x1.a827999fcef32p-3, 0x1p-1, -0x1.6a09e667f3bcdp-1, 0x1.bdd34p-55, +0x1.b9d1153aaa2bap-3, 0x1p-1, -0x1.6591925f0783dp-1, -0x1.c3d64ep-55, +0x1.cb420dfbffe59p-3, 0x1p-1, -0x1.610b7551d2cdfp-1, 0x1.251b34p-56, +0x1.dc79d7c0dc985p-3, 0x1p-1, -0x1.5c77bbe65018cp-1, -0x1.069ea8p-55, +0x1.ed77c89aabebbp-3, 0x1p-1, -0x1.57d69348cecap-1, 0x1.757208p-55, +0x1.fe3b38d5c5dc2p-3, 0x1p-1, -0x1.5328292a35596p-1, 0x1.a12eb8p-56, -0x1.f13c7d001a249p-3, 0x1p0, -0x1.4e6cabbe3e5e9p-1, -0x1.3c293ep-57, -0x1.e0effc1174505p-3, 0x1p0, -0x1.49a449b9b0939p-1, 0x1.27ee16p-55, -0x1.d0dfe53aba2fdp-3, 0x1p0, -0x1.44cf325091dd6p-1, -0x1.8076a2p-57, @@ -1487,33 +1487,33 @@ template <> inline constexpr double kCosApproxTable[] = -0x1.d0dfe53aba2fdp-3, 0x1p0, 0x1.44cf325091dd6p-1, 0x1.8076a2p-57, -0x1.e0effc1174505p-3, 0x1p0, 0x1.49a449b9b0939p-1, -0x1.27ee16p-55, -0x1.f13c7d001a249p-3, 0x1p0, 0x1.4e6cabbe3e5e9p-1, 0x1.3c293ep-57, --0x1.00e263951d11fp-2, 0x1p0, 0x1.5328292a35596p-1, -0x1.a12eb8p-56, --0x1.09441bb2aa0a2p-2, 0x1p0, 0x1.57d69348cecap-1, -0x1.757208p-55, --0x1.11c3141f91b3ep-2, 0x1p0, 0x1.5c77bbe65018cp-1, 0x1.069ea8p-55, --0x1.1a5ef902000d3p-2, 0x1p0, 0x1.610b7551d2cdfp-1, -0x1.251b34p-56, --0x1.23177562aaea3p-2, 0x1p0, 0x1.6591925f0783dp-1, 0x1.c3d64ep-55, --0x1.2bec333018867p-2, 0x1p0, 0x1.6a09e667f3bcdp-1, -0x1.bdd34p-55, --0x1.34dcdb41f0f85p-2, 0x1p0, 0x1.6e74454eaa8afp-1, -0x1.dbc03cp-55, --0x1.3de9155c5a642p-2, 0x1p0, 0x1.72d0837efff96p-1, 0x1.0d4efp-55, --0x1.471088335fce7p-2, 0x1p0, 0x1.771e75f037261p-1, 0x1.5cfce8p-56, --0x1.5052d96e626c1p-2, 0x1p0, 0x1.7b5df226aafafp-1, -0x1.0f537ap-56, --0x1.59afadab954d4p-2, 0x1p0, 0x1.7f8ece3571771p-1, -0x1.9c8d8cp-55, --0x1.6326a8838342ep-2, 0x1p0, 0x1.83b0e0bff976ep-1, -0x1.6f420ep-56, --0x1.6cb76c8c9ed8fp-2, 0x1p0, 0x1.87c400fba2ebfp-1, -0x1.2dabcp-55, --0x1.76619b5edc454p-2, 0x1p0, 0x1.8bc806b151741p-1, -0x1.2c5e12p-55, --0x1.8024d59755257p-2, 0x1p0, 0x1.8fbcca3ef940dp-1, -0x1.6dfa98p-57, --0x1.8a00badbf5e8ep-2, 0x1p0, 0x1.93a22499263fbp-1, 0x1.3d419ap-55, --0x1.93f4e9df34c1bp-2, 0x1p0, 0x1.9777ef4c7d742p-1, -0x1.15479ap-55, --0x1.9e010063d1f96p-2, 0x1p0, 0x1.9b3e047f38741p-1, -0x1.30ee28p-55, --0x1.a8249b40a182cp-2, 0x1p0, 0x1.9ef43ef29af94p-1, 0x1.b1dfcap-56, --0x1.b25f56645da43p-2, 0x1p0, 0x1.a29a7a0462782p-1, -0x1.128bbp-56, --0x1.bcb0ccd98294fp-2, 0x1p0, 0x1.a63091b02fae2p-1, -0x1.e91114p-56, --0x1.c71898ca32e6fp-2, 0x1p0, 0x1.a9b66290ea1a3p-1, 0x1.9f630ep-60, --0x1.d19653842496fp-2, 0x1p0, 0x1.ad2bc9e21d511p-1, -0x1.47fbep-55, --0x1.dc29957c969bbp-2, 0x1p0, 0x1.b090a581502p-1, -0x1.926da2p-55, --0x1.e6d1f6544ece3p-2, 0x1p0, 0x1.b3e4d3ef55712p-1, -0x1.eb6b8ap-55, --0x1.f18f0cdba0025p-2, 0x1p0, 0x1.b728345196e3ep-1, -0x1.bc69f2p-55, --0x1.fc606f1678292p-2, 0x1p0, 0x1.ba5aa673590d2p-1, 0x1.7ea4e2p-55, +0x1.fe3b38d5c5dc2p-3, 0x1p-1, 0x1.5328292a35596p-1, -0x1.a12eb8p-56, +0x1.ed77c89aabebbp-3, 0x1p-1, 0x1.57d69348cecap-1, -0x1.757208p-55, +0x1.dc79d7c0dc985p-3, 0x1p-1, 0x1.5c77bbe65018cp-1, 0x1.069ea8p-55, +0x1.cb420dfbffe59p-3, 0x1p-1, 0x1.610b7551d2cdfp-1, -0x1.251b34p-56, +0x1.b9d1153aaa2bap-3, 0x1p-1, 0x1.6591925f0783dp-1, 0x1.c3d64ep-55, +0x1.a827999fcef32p-3, 0x1p-1, 0x1.6a09e667f3bcdp-1, -0x1.bdd34p-55, +0x1.9646497c1e0f6p-3, 0x1p-1, 0x1.6e74454eaa8afp-1, -0x1.dbc03cp-55, +0x1.842dd5474b37bp-3, 0x1p-1, 0x1.72d0837efff96p-1, 0x1.0d4efp-55, +0x1.71deef9940631p-3, 0x1p-1, 0x1.771e75f037261p-1, 0x1.5cfce8p-56, +0x1.5f5a4d233b27fp-3, 0x1p-1, 0x1.7b5df226aafafp-1, -0x1.0f537ap-56, +0x1.4ca0a4a8d5657p-3, 0x1p-1, 0x1.7f8ece3571771p-1, -0x1.9c8d8cp-55, +0x1.39b2aef8f97a4p-3, 0x1p-1, 0x1.83b0e0bff976ep-1, -0x1.6f420ep-56, +0x1.269126e6c24e3p-3, 0x1p-1, 0x1.87c400fba2ebfp-1, -0x1.2dabcp-55, +0x1.133cc94247758p-3, 0x1p-1, 0x1.8bc806b151741p-1, -0x1.2c5e12p-55, +0x1.ff6ca9a2ab6a2p-4, 0x1p-1, 0x1.8fbcca3ef940dp-1, -0x1.6dfa98p-57, +0x1.d7fd1490285cap-4, 0x1p-1, 0x1.93a22499263fbp-1, 0x1.3d419ap-55, +0x1.b02c58832cf96p-4, 0x1p-1, 0x1.9777ef4c7d742p-1, -0x1.15479ap-55, +0x1.87fbfe70b81a7p-4, 0x1p-1, 0x1.9b3e047f38741p-1, -0x1.30ee28p-55, +0x1.5f6d92fd79f5p-4, 0x1p-1, 0x1.9ef43ef29af94p-1, 0x1.b1dfcap-56, +0x1.3682a66e896f5p-4, 0x1p-1, 0x1.a29a7a0462782p-1, -0x1.128bbp-56, +0x1.0d3ccc99f5ac6p-4, 0x1p-1, 0x1.a63091b02fae2p-1, -0x1.e91114p-56, +0x1.c73b39ae68c87p-5, 0x1p-1, 0x1.a9b66290ea1a3p-1, 0x1.9f630ep-60, +0x1.734d63dedb48ap-5, 0x1p-1, 0x1.ad2bc9e21d511p-1, -0x1.47fbep-55, +0x1.1eb3541b4b228p-5, 0x1p-1, 0x1.b090a581502p-1, -0x1.926da2p-55, +0x1.92e09abb131d4p-6, 0x1p-1, 0x1.b3e4d3ef55712p-1, -0x1.eb6b8ap-55, +0x1.ce1e648bffb66p-7, 0x1p-1, 0x1.b728345196e3ep-1, -0x1.bc69f2p-55, +0x1.cfc874c3eb6d9p-9, 0x1p-1, 0x1.ba5aa673590d2p-1, 0x1.7ea4e2p-55, -0x1.d16c901d95181p-8, 0x1p-1, 0x1.bd7c0ac6f952ap-1, -0x1.825a72p-55, -0x1.23e6ad10872a7p-6, 0x1p-1, 0x1.c08c426725549p-1, 0x1.b157fcp-58, -0x1.d4a2c7f909c4ep-6, 0x1p-1, 0x1.c38b2f180bdb1p-1, -0x1.6e0b16p-56, @@ -1525,35 +1525,35 @@ template <> inline constexpr double kCosApproxTable[] = -0x1.8421af15c49d7p-4, 0x1p-1, 0x1.d4134d14dc93ap-1, -0x1.4ef528p-55, -0x1.b2356710db0a3p-4, 0x1p-1, 0x1.d696173c9e68bp-1, -0x1.e8c61cp-56, -0x1.e087565455a75p-4, 0x1p-1, 0x1.d906bcf328d46p-1, 0x1.457e6p-56, --0x1.078ad9dc46632p-3, 0x1p-1, 0x1.db6526238a09bp-1, -0x1.adee7ep-56, --0x1.1eef59e0b74c3p-3, 0x1p-1, 0x1.ddb13b6ccc23cp-1, 0x1.83c37cp-55, --0x1.367044581b074p-3, 0x1p-1, 0x1.dfeae622dbe2bp-1, -0x1.514ea8p-55, --0x1.4e0cb14a9c046p-3, 0x1p-1, 0x1.e212104f686e5p-1, -0x1.014c76p-55, --0x1.65c3b7b0e312cp-3, 0x1p-1, 0x1.e426a4b2bc17ep-1, 0x1.a87388p-55, --0x1.7d946d7d133fdp-3, 0x1p-1, 0x1.e6288ec48e112p-1, -0x1.16b56ep-57, --0x1.957de7a3cfd5dp-3, 0x1p-1, 0x1.e817bab4cd10dp-1, -0x1.d0afe6p-56, --0x1.ad7f3a254c1f5p-3, 0x1p-1, 0x1.e9f4156c62ddap-1, 0x1.760b1ep-55, --0x1.c597781664984p-3, 0x1p-1, 0x1.ebbd8c8df0b74p-1, 0x1.c6c8c6p-56, --0x1.ddc5b3a9c1311p-3, 0x1p-1, 0x1.ed740e7684963p-1, 0x1.e82c78p-56, --0x1.f608fe39004a4p-3, 0x1p-1, 0x1.ef178a3e473c2p-1, 0x1.6310a6p-55, +0x1.f0ea4c477339cp-4, 0x1p-2, 0x1.db6526238a09bp-1, -0x1.adee7ep-56, +0x1.c2214c3e9167bp-4, 0x1p-2, 0x1.ddb13b6ccc23cp-1, 0x1.83c37cp-55, +0x1.931f774fc9f18p-4, 0x1p-2, 0x1.dfeae622dbe2bp-1, -0x1.514ea8p-55, +0x1.63e69d6ac7f74p-4, 0x1p-2, 0x1.e212104f686e5p-1, -0x1.014c76p-55, +0x1.3478909e39da9p-4, 0x1p-2, 0x1.e426a4b2bc17ep-1, 0x1.a87388p-55, +0x1.04d72505d9805p-4, 0x1p-2, 0x1.e6288ec48e112p-1, -0x1.16b56ep-57, +0x1.aa086170c0a8ep-5, 0x1p-2, 0x1.e817bab4cd10dp-1, -0x1.d0afe6p-56, +0x1.4a03176acf82dp-5, 0x1p-2, 0x1.e9f4156c62ddap-1, 0x1.760b1ep-55, +0x1.d3443f4cdb3ddp-6, 0x1p-2, 0x1.ebbd8c8df0b74p-1, 0x1.c6c8c6p-56, +0x1.11d262b1f6776p-6, 0x1p-2, 0x1.ed740e7684963p-1, 0x1.e82c78p-56, +0x1.3ee038dff6b8p-8, 0x1p-2, 0x1.ef178a3e473c2p-1, 0x1.6310a6p-55, -0x1.cc0d09bd41caap-8, 0x1p-2, 0x1.f0a7efb9230d7p-1, 0x1.52c7acp-56, -0x1.36580d5d5e775p-6, 0x1p-2, 0x1.f2252f7763adap-1, -0x1.20cb8p-55, -0x1.fa3ecac0d84e8p-6, 0x1p-2, 0x1.f38f3ac64e589p-1, -0x1.d7bafap-56, -0x1.5f57f693feebep-5, 0x1p-2, 0x1.f4e603b0b2f2dp-1, -0x1.8ee01ep-56, -0x1.c1d1f0e5967d5p-5, 0x1p-2, 0x1.f6297cff75cbp-1, 0x1.562172p-56, --0x1.1244c435e819dp-4, 0x1p-2, 0x1.f7599a3a12077p-1, 0x1.84f31cp-55, --0x1.43bd776e98073p-4, 0x1p-2, 0x1.f8764fa714ba9p-1, 0x1.ab2566p-56, --0x1.755129dad834cp-4, 0x1p-2, 0x1.f97f924c9099bp-1, -0x1.e2ae0ep-55, --0x1.a6fdf22e33d8cp-4, 0x1p-2, 0x1.fa7557f08a517p-1, -0x1.7a0a8cp-55, --0x1.d8c1e624a1513p-4, 0x1p-2, 0x1.fb5797195d741p-1, 0x1.1bfac6p-56, +0x1.db7677942fcc5p-5, 0x1p-3, 0x1.f7599a3a12077p-1, 0x1.84f31cp-55, +0x1.78851122cff19p-5, 0x1p-3, 0x1.f8764fa714ba9p-1, 0x1.ab2566p-56, +0x1.155dac4a4f967p-5, 0x1p-3, 0x1.f97f924c9099bp-1, -0x1.e2ae0ep-55, +0x1.64083747309d1p-6, 0x1p-3, 0x1.fa7557f08a517p-1, -0x1.7a0a8cp-55, +0x1.39f0cedaf576bp-7, 0x1p-3, 0x1.fb5797195d741p-1, 0x1.1bfac6p-56, -0x1.536352ad19e39p-9, 0x1p-3, 0x1.fc26470e19fd3p-1, 0x1.1ec866p-55, -0x1.e43d1c309e958p-7, 0x1p-3, 0x1.fce15fd6da67bp-1, -0x1.5dd6f8p-56, -0x1.ba1650f592f5p-6, 0x1p-3, 0x1.fd88da3d12526p-1, -0x1.87df62p-55, --0x1.4125feacab7cep-5, 0x1p-3, 0x1.fe1cafcbd5b09p-1, 0x1.a23e32p-57, --0x1.a55beda63cc14p-5, 0x1p-3, 0x1.fe9cdad01883ap-1, 0x1.521eccp-57, +0x1.7db402a6a9063p-6, 0x1p-4, 0x1.fe1cafcbd5b09p-1, 0x1.a23e32p-57, +0x1.6a9049670cfaep-7, 0x1p-4, 0x1.fe9cdad01883ap-1, 0x1.521eccp-57, -0x1.35230c0fbe402p-10, 0x1p-4, 0x1.ff095658e71adp-1, 0x1.01a8cep-55, -0x1.b82683bc89fbp-7, 0x1p-4, 0x1.ff621e3796d7ep-1, -0x1.c57bc2p-57, --0x1.a4f3514d75466p-6, 0x1p-4, 0x1.ffa72effef75dp-1, -0x1.8b4cdcp-55, +0x1.6c32baca2ae69p-8, 0x1p-5, 0x1.ffa72effef75dp-1, -0x1.8b4cdcp-55, -0x1.b7aa821726608p-8, 0x1p-5, 0x1.ffd886084cd0dp-1, -0x1.1354d4p-55, -0x1.b78b80c84e1eep-9, 0x1p-6, 0x1.fff62169b92dbp-1, 0x1.5dda3cp-55, }; diff --git a/npsr/trig/data/constants.h b/npsr/trig/data/constants.h index 358290f..89e9337 100644 --- a/npsr/trig/data/constants.h +++ b/npsr/trig/data/constants.h @@ -30,7 +30,7 @@ template <> inline constexpr double kPiMul2[] = { template inline constexpr double kPiDiv16Prec29[] = { 0x1.921fb54442d18p-3, 0x1.1a62633p-57, 0x1.45c06e0e68948p-89, }; template <> inline constexpr double kPiDiv16Prec29[] = { -0x1.921fb54p-3, 0x1.a626331p-61, 0x1.1701b839a252p-91, 0x1.10b461p-33, +0x1.921fb54p-3, 0x1.10b461p-33, 0x1.a626331p-61, 0x1.1701b839a252p-91, }; template inline constexpr char kInvPi = '_'; diff --git a/npsr/trig/extended-inl.h b/npsr/trig/extended-inl.h index cdce91a..e49b802 100644 --- a/npsr/trig/extended-inl.h +++ b/npsr/trig/extended-inl.h @@ -212,7 +212,7 @@ NPSR_INTRIN V Extended(V x) { // PHASE 7: Convert to Radians // ============================================================================= - // Multiply by π with error compensation (Cody-Waite multiplication) + // Multiply by 2π with error compensation (Cody-Waite multiplication) constexpr auto kPiMul2 = data::kPiMul2; const V pi2_hi = Set(d, kPiMul2[0]); const V pi2_med = Set(d, kPiMul2[1]); @@ -233,6 +233,14 @@ NPSR_INTRIN V Extended(V x) { r_lo = Combine(d, DemoteTo(dh, r_lo_w0), DemoteTo(dh, r_lo_w1)); r_w0 = BitCast(d, r0); r_w1 = BitCast(d, r1); + } else if constexpr (!kNativeFMA) { + // Without FMA, `MulSub(pi2_hi, n, r)` yields zero and drops the 0.5-ulp(r) + // rounding error of r — worth 0.5 ulp of the result near k*pi/2. Recover + // it from the exact head product (head - r is exact by Sterbenz). + V head, rest; + SplitMul(pi2_hi, n, head, rest); + r_lo = Add(Sub(head, r), rest); + r_lo = Add(Mul(pi2_med, n), r_lo); } else { r_lo = MulSub(pi2_hi, n, r); r_lo = MulAdd(pi2_med, n, r_lo); @@ -272,22 +280,30 @@ NPSR_INTRIN V Extended(V x) { // ============================================================================= // PHASE 10: Final Assembly // ============================================================================= - V res_lo = NegMulAdd(func_hi, r, deriv); - res_lo = MulAdd(res_lo, r_lo, func_lo); V res_hi_lo = MulAdd(sigma, r, func_hi); - V res_hi = MulAdd(deriv_hi, r, res_hi_lo); - + V res_hi, deriv_hi_r_cor; + if constexpr (!kNativeFMA && !kIsSingle) { + // Same substitution as in Phase 7. sigma is a signed power of two (see + // approx.h) so sigma*r is exact, but deriv_hi*r would round under a + // decayed MulAdd and corrupt the head; SplitMul recovers it. + V dr, dr_rest; + SplitMul(deriv_hi, r, dr, dr_rest); + res_hi = Add(res_hi_lo, dr); + V dr_hi = Sub(res_hi, res_hi_lo); + deriv_hi_r_cor = Add(Sub(dr, dr_hi), dr_rest); + } else { + res_hi = MulAdd(deriv_hi, r, res_hi_lo); + deriv_hi_r_cor = MulAdd(deriv_hi, r, Sub(res_hi_lo, res_hi)); + } V sum_cor = MulAdd(sigma, r, Sub(func_hi, res_hi_lo)); - V deriv_hi_r_cor = MulAdd(deriv_hi, r, Sub(res_hi_lo, res_hi)); - deriv_hi_r_cor = Add(deriv_hi_r_cor, sum_cor); - res_lo = Add(res_lo, deriv_hi_r_cor); + V res_lo0 = Add(deriv_hi_r_cor, sum_cor); // Polynomial corrections V s2 = Set(d, kIsSingle ? 0x1.1110b8p-7f : 0x1.1110fabb3551cp-7); V s1 = Set(d, kIsSingle ? -0x1.555556p-3f : -0x1.5555555554448p-3); V sin_poly = MulAdd(s2, r2, s1); - sin_poly = Mul(sin_poly, r); sin_poly = Mul(sin_poly, r2); + sin_poly = Mul(sin_poly, r); V c1 = Set(d, kIsSingle ? 0x1.5554f8p-5f : 0x1.5555555554ccfp-5); const V neg_half = Set(d, static_cast(-0.5)); @@ -301,8 +317,11 @@ NPSR_INTRIN V Extended(V x) { } cos_poly = Mul(cos_poly, r2); - res_lo = MulAdd(sin_poly, deriv, res_lo); - res_lo = MulAdd(cos_poly, func_hi, res_lo); + V corr = NegMulAdd(func_hi, r, deriv); + V res_lo_rlo = MulAdd(corr, r_lo, func_lo); + V res_lo_sin = MulAdd(deriv, sin_poly, res_lo0); + V res_lo_cos = MulAdd(func_hi, cos_poly, res_lo_sin); + V res_lo = Add(res_lo_cos, res_lo_rlo); return Add(res_hi, res_lo); } // NOLINTNEXTLINE(google-readability-namespace-comments) diff --git a/npsr/trig/high-inl.h b/npsr/trig/high-inl.h index 68cdd9f..65d0fd3 100644 --- a/npsr/trig/high-inl.h +++ b/npsr/trig/high-inl.h @@ -95,15 +95,16 @@ NPSR_INTRIN V High(V x) { /** * This function computes sin(x) or cos(x) for |x| < 2^24 using the Cody-Waite * reduction algorithm combined with table lookup and polynomial approximation, - * achieves < 1 ULP error for |x| < 2^24. + * achieves <= 1 ULP error for |x| < 2^24 (worst case reaches, but does not + * exceed, 1 ULP). * * Algorithm Overview: * 1. Range Reduction: Reduces input x to r where |r| < π/16 * - Computes n = round(x * 16/π) and r = x - n*π/16 - * - Uses multi-precision arithmetic (3 parts of π/16) for accuracy + * - Uses multi-word π/16 (3 words with FMA, 4 without) for accuracy * * 2. Table Lookup: Retrieves precomputed sin(n*π/16) and cos(n*π/16) - * - Includes high and low precision parts for cos values + * - Stores high and low parts for both sin and cos (lows packed 32:32) * * 3. Polynomial Approximation: Computes sin(r) and cos(r) * - sin(r) ≈ r * (1 + r²*P_sin(r²)) where P_sin is a minimax polynomial @@ -142,17 +143,16 @@ NPSR_INTRIN V High(V x) { // Note: cos_lo and sin_lo are packed together (32 bits each) to save memory. // cos_lo can be used as-is since it's in the upper bits, sin_lo needs // extraction. The precision loss is negligible for the final result. - // see data/lut-inl.h.sol for the table generation code. + // see data/kpi16-inl.h.sol for the table generation code. V sin_lo = BitCast(d, ShiftLeft<32>(BitCast(du, cos_lo))); // Step 3: Multi-precision computation of remainder r // r = x - n*(π/16)_high + // Without native FMA the non-tail parts carry 27/25/29 bits, so the two + // leading products n*part are exact for |n| < ceil(2^24*16/π) = 85445660. + // part2 and the tail round, but the idioms below capture that rounding. constexpr auto kPiDiv16Prec29 = data::kPiDiv16Prec29; V r_hi = NegMulAdd(n, Set(d, kPiDiv16Prec29[0]), x); - if constexpr (!kNativeFMA) { - // For F64, we need to handle the low precision part separately - r_hi = NegMulAdd(n, Set(d, kPiDiv16Prec29[3]), r_hi); - } const V pi16_med = Set(d, kPiDiv16Prec29[1]); const V pi16_lo = Set(d, kPiDiv16Prec29[2]); V r_med = NegMulAdd(n, pi16_med, r_hi); @@ -162,6 +162,15 @@ NPSR_INTRIN V High(V x) { V term = NegMulAdd(pi16_med, n, Sub(r_hi, r_med)); V r_lo = MulAdd(pi16_lo, n, Sub(r, r_med)); r_lo = Sub(term, r_lo); + if constexpr (!kNativeFMA) { + // Fourth piece (48 bits at 2^-91). Reusing the one rounded product in both + // the subtraction and its error capture keeps (r, r_lo) an exact + // double-double even when r is tiny near k*π/2. + const V tail_prod = Mul(n, Set(d, kPiDiv16Prec29[3])); + const V r_prev = r; + r = Sub(r_prev, tail_prod); + r_lo = Add(r_lo, Sub(Sub(r_prev, r), tail_prod)); + } // Step 4: Polynomial approximation V r2 = Mul(r, r); @@ -210,13 +219,23 @@ NPSR_INTRIN V High(V x) { if constexpr (OP == Operation::kCos) { // Cosine reconstruction: cos_table - sin_table*remainder // Equivalent to: cos(a)*cos(r) - sin(a)*sin(r) but more efficient - V res_hi = NegMulAdd(r, sin_hi, cos_hi); // cos_hi - r*sin_hi - - // This captures the precision lost in the main computation - V r_sin_hi = Sub(cos_hi, res_hi); // Extract high part of multiplication - - // Handles rounding errors and adds sin_low contribution - V r_sin_low = MulSub(r, sin_hi, r_sin_hi); // Compute multiplication error + V res_hi, r_sin_low; + if constexpr (kNativeFMA) { + res_hi = NegMulAdd(r, sin_hi, cos_hi); // cos_hi - r*sin_hi + + // This captures the precision lost in the main computation + V r_sin_hi = Sub(cos_hi, res_hi); // Extract high part of multiplication + + // Handles rounding errors and adds the low-part contribution + r_sin_low = MulSub(r, sin_hi, r_sin_hi); // Compute multiplication error + } else { + // Dekker split stands in for the FMA idiom + V r_sin, r_sin_rest; + SplitMul(r, sin_hi, r_sin, r_sin_rest); + res_hi = Sub(cos_hi, r_sin); + V r_sin_hi = Sub(cos_hi, res_hi); + r_sin_low = Add(Sub(r_sin, r_sin_hi), r_sin_rest); + } V sin_low_corr = MulAdd(r, sin_lo, r_sin_low); // Add sin_low term // This is used to apply the low-precision remainder correction @@ -245,13 +264,23 @@ NPSR_INTRIN V High(V x) { } else { // Sine reconstruction: sin_table + cos_table*remainder // Equivalent to: sin(a)*cos(r) + cos(a)*sin(r) but more efficient - V res_hi = MulAdd(r, cos_hi, sin_hi); // sin_hi + r*cos_hi - - // This captures the precision lost in the main computation - V r_cos_hi = Sub(res_hi, sin_hi); // Extract high part of multiplication - - // Handles rounding errors and adds cos_low contribution - V r_cos_low = MulSub(r, cos_hi, r_cos_hi); // Compute multiplication error + V res_hi, r_cos_low; + if constexpr (kNativeFMA) { + res_hi = MulAdd(r, cos_hi, sin_hi); // sin_hi + r*cos_hi + + // This captures the precision lost in the main computation + V r_cos_hi = Sub(res_hi, sin_hi); // Extract high part of multiplication + + // Handles rounding errors and adds the low-part contribution + r_cos_low = MulSub(r, cos_hi, r_cos_hi); // Compute multiplication error + } else { + // Dekker split stands in for the FMA idiom + V r_cos, r_cos_rest; + SplitMul(r, cos_hi, r_cos, r_cos_rest); + res_hi = Add(sin_hi, r_cos); + V r_cos_hi = Sub(res_hi, sin_hi); + r_cos_low = Add(Sub(r_cos, r_cos_hi), r_cos_rest); + } V cos_low_corr = MulAdd(r, cos_lo, r_cos_low); // Add cos_low term // Intermediate term for r_low correction: cos_table - sin_table*r diff --git a/npsr/trig/inl.h b/npsr/trig/inl.h index 2e22bd7..9e16041 100644 --- a/npsr/trig/inl.h +++ b/npsr/trig/inl.h @@ -3,9 +3,10 @@ // configurable precision, special case handling, and algorithm selection // // The implementation automatically selects between three algorithms: -// 1. Low precision: ~1-4 ULP error, fastest +// 1. Low precision: ~2-3 ULP error, fastest // 2. High precision: ~1 ULP error, moderate speed -// 3. Extended precision: Exact for |x| > 2^24 (float) or 2^53 (double) +// 3. Extended precision: Payne-Hanek reduction for huge |x| +// (> 10^4 for float, > 2^24 for double) #if defined(NPSR_TRIG_INL_H_) == defined(HWY_TARGET_TOGGLE) // NOLINT #ifdef NPSR_TRIG_INL_H_ @@ -46,7 +47,8 @@ namespace npsr::HWY_NAMESPACE::trig { * * Thresholds for extended precision: * - Float: |x| > 10,000 (empirically chosen for accuracy) - * - Double: |x| > 2^24 (16,777,216 - where 53-bit mantissa loses precision) + * - Double: |x| > 2^24 (16,777,216 - beyond this the reduction's n*π products + * stop being exactly representable) */ template NPSR_INTRIN V Trig(Prec &prec, V x) { @@ -56,8 +58,8 @@ NPSR_INTRIN V Trig(Prec &prec, V x) { V ret; // Step 1: Select base algorithm based on accuracy requirements if constexpr (Prec::kLowAccuracy) { - // Low precision: Cody-Waite reduction with degree-9 polynomial - // Error: ~2 ULP and 3~ for non-fma + // Low precision: Cody-Waite reduction, degree-9 (f32) / degree-15 (f64) + // Error: ~2-3 ULP ret = Low(x); } else { // High precision: π/16 reduction with table lookup + polynomial @@ -78,11 +80,16 @@ NPSR_INTRIN V Trig(Prec &prec, V x) { // For |x| > threshold, standard algorithms lose precision due to // catastrophic cancellation in x - n*π reduction if constexpr (Prec::kLargeArgument) { - // Thresholds chosen based on when standard reduction loses accuracy: - // - Float: 10,000 is conservative but ensures < 1 ULP error - // - Double: 2^24 is where mantissa can't represent x and x-2π distinctly + // Thresholds mark where each path's n*π products stop being exact: + // - Float: 10,000, conservative but keeps the widened path < 1 ULP. + // - Double: 2^24, past which |round(x*16/π)| overflows the π/16 split. + // - Double low-accuracy cos: holds until trunc(|x|/π) > 8388606; the + // constant is the largest double below that boundary (~8388607π). + constexpr bool kIsLowCos = + Prec::kLowAccuracy && OP == trig::Operation::kCos; + constexpr double kLargeF64 = kIsLowCos ? 0x1.921fb2200366fp+24 : 16777216.0; auto has_large_arg = - And(Gt(Abs(x), Set(d, kIsSingle ? 10000.0f : 16777216.0)), is_finite); + And(Gt(Abs(x), Set(d, kIsSingle ? 10000.0f : kLargeF64)), is_finite); // Extended precision is expensive, only use when necessary if (HWY_UNLIKELY(!AllFalse(d, has_large_arg))) { diff --git a/npsr/trig/low-inl.h b/npsr/trig/low-inl.h index 6da18ae..93cceee 100644 --- a/npsr/trig/low-inl.h +++ b/npsr/trig/low-inl.h @@ -56,13 +56,17 @@ NPSR_INTRIN V PolyLow(V r, V r2) { using namespace hn; const DFromV d; - const V c15 = Set(d, -0x1.9f1517e9f65fp-41); - const V c13 = Set(d, 0x1.60e6bee01d83ep-33); - const V c11 = Set(d, -0x1.ae6355aaa4a53p-26); - const V c9 = Set(d, 0x1.71de3806add1ap-19); - const V c7 = Set(d, -0x1.a01a019a659ddp-13); - const V c5 = Set(d, 0x1.111111110a573p-7); - const V c3 = Set(d, -0x1.55555555554a8p-3); + // Both ops fit sin(r) on the same interval, so the two coefficient sets + // differ only in trailing bits; each matches its SVML counterpart + // (__svml_sin_d_la / __svml_cos_d_la) bit-for-bit. + constexpr bool kCos = OP == Operation::kCos; + const V c15 = Set(d, kCos ? -0x1.9f0d60811aac8p-41 : -0x1.9f1517e9f65fp-41); + const V c13 = Set(d, kCos ? 0x1.60e6857a2f220p-33 : 0x1.60e6bee01d83ep-33); + const V c11 = Set(d, kCos ? -0x1.ae63546002231p-26 : -0x1.ae6355aaa4a53p-26); + const V c9 = Set(d, kCos ? 0x1.71de38030fea0p-19 : 0x1.71de3806add1ap-19); + const V c7 = Set(d, kCos ? -0x1.a01a019a5b87bp-13 : -0x1.a01a019a659ddp-13); + const V c5 = Set(d, kCos ? 0x1.111111110a4a8p-7 : 0x1.111111110a573p-7); + const V c3 = Set(d, kCos ? -0x1.55555555554a7p-3 : -0x1.55555555554a8p-3); V poly = MulAdd(c15, r2, c13); poly = MulAdd(r2, poly, c11); poly = MulAdd(r2, poly, c9); @@ -110,26 +114,28 @@ NPSR_INTRIN V Low(V x) { // N' = N - 0.5 n = Sub(n, Set(d, static_cast(0.5))); } - // Use Cody-Waite method with triple-precision PI + // Cody-Waite reduction with multi-word π (3 words with FMA, 4 without) constexpr auto kPi = data::kPi; - V r = NegMulAdd(n, Set(d, kPi[0]), x_abs); r = NegMulAdd(n, Set(d, kPi[1]), r); V r_lo = NegMulAdd(n, Set(d, kPi[2]), r); + if constexpr (!kNativeFMA) { - if (!kIsSingle) { - r = r_lo; - } r_lo = NegMulAdd(n, Set(d, kPi[3]), r_lo); } - - if constexpr (kIsSingle) { + if constexpr (kIsSingle || !kNativeFMA) { + // The polynomial needs the fully reduced value; r still owes the last + // π word(s). r = r_lo; } + V r2 = Mul(r, r); V poly = PolyLow(r, r2); if constexpr (!kIsSingle) { + // Non-FMA has r == r_lo, giving the plain r + r³·poly. With FMA this is + // r_lo·(1 + r²·poly) ≈ sin(r_lo): r and r_lo differ by n·π[2] (~2^-83) + // and sin(r)/r varies slowly, so the error stays sub-ULP. V r2_corr = Mul(r2, r_lo); poly = MulAdd(r2_corr, poly, r_lo); } From 25c78204639fbbf7e17d33645fe0bd76bac2cbaf Mon Sep 17 00:00:00 2001 From: Sayed Awad Date: Mon, 27 Jul 2026 12:15:42 +0300 Subject: [PATCH 2/2] ENH: improve f32 sin/cos accuracy The new improvements provide better accuracy for both non-FMA and FMA targets, so we can achieve < 2ulp for the low accuracy path and < 0.6 for the high accuracy path without affecting performance, except for a few ops on non-FMA targets, which was necessary to match FMA target precision. The improvements also include increasing the fast path ranges for FMA targets, and it has been tested against an exhaustive test covering all float32 ranges. This was achieved by refitting the f32 sin/cos polynomials as generated minimax sets (new data/polyf32.h.pol) instead of SVML hardcoded coefficients, split per op and per FMA mode. For non-FMA: - High<> gets a third pi word with 31-bit heads so n*pi_i stays - exact; FMA keeps the two-word 35+53-bit split. - Low<> recovers the pi[2] rounding error via Fast2Sum on non-FMA, the same approach applies to float64 and buys ~0.3 ulp. Also, for all targets: - Low<> cos(x) == 1 is answered for all |x| below a per-type bound, not just x_trans == pi/2, which fixes tiny tests. - kLargeF32 replaces the flat 10000 with per-path measured thresholds. - Sollya prec 512 -> 1024, which was needed for generating the float32-widening double poly. --- npsr/lut-inl.h | 1 + npsr/trig/data/constants.h | 2 +- npsr/trig/data/constants.h.sol | 14 +++- npsr/trig/data/data.h | 1 + npsr/trig/data/polyf32.h | 32 ++++++++++ npsr/trig/data/polyf32.h.sol | 113 +++++++++++++++++++++++++++++++++ npsr/trig/high-inl.h | 28 ++++---- npsr/trig/inl.h | 45 +++++++------ npsr/trig/low-inl.h | 66 +++++++++++-------- tools/sollya/core.sol | 2 +- 10 files changed, 243 insertions(+), 61 deletions(-) create mode 100644 npsr/trig/data/polyf32.h create mode 100644 npsr/trig/data/polyf32.h.sol diff --git a/npsr/lut-inl.h b/npsr/lut-inl.h index 97905ee..354593f 100644 --- a/npsr/lut-inl.h +++ b/npsr/lut-inl.h @@ -7,6 +7,7 @@ #include #include +#include #include "npsr/hwy.h" diff --git a/npsr/trig/data/constants.h b/npsr/trig/data/constants.h index 89e9337..d56c88e 100644 --- a/npsr/trig/data/constants.h +++ b/npsr/trig/data/constants.h @@ -19,7 +19,7 @@ template <> inline constexpr double kPi[] = { template inline constexpr double kPiPrec35[] = { 0x1.921fb5444p1, 0x1.68c234c4c6628p-38, }; template <> inline constexpr double kPiPrec35[] = { -0x1.921fb6p1, -0x1.777a5cp-24, -0x1.ee59dap-49, }; +0x1.921fb544p1, 0x1.0b4611a8p-33, -0x1.d9cceba3f91f2p-65, }; template inline constexpr char kPiMul2[] = {}; template <> inline constexpr float kPiMul2[] = { diff --git a/npsr/trig/data/constants.h.sol b/npsr/trig/data/constants.h.sol index ef16bd8..178d60b 100644 --- a/npsr/trig/data/constants.h.sol +++ b/npsr/trig/data/constants.h.sol @@ -44,12 +44,20 @@ Append( // rounds ~2^-105, harmless even for tiny reduced arguments near k*π/2 "", - // Special 35-bit precision π for specific algorithms + // Special 35-bit precision π for the f32 High path, which reduces in double. + // FMA: the fused subtractions never need n*πᵢ to be representable, so two + // words carry the whole budget and π is held to 35+53 = 88 bits. + // + // non-FMA: NegMulAdd decays to `x - fl(n*πᵢ)`, so each n*πᵢ has to be exact. + // The quotient is bounded by the f32 magic-round in High(), |n| < 2^22, hence + // 53-22 = 31-bit heads. Two of those only pin π to 62 bits, so a 53-bit tail + // follows; its product rounds at ~2^-92, just under the FMA split's 2^-90 + // residual, which is what keeps both variants on the same accuracy curve. "template inline constexpr double kPiPrec35[] = " @ KArray_(Float64, pi, [|RN, 35|], [|RD, 53|]), - + "template <> inline constexpr double kPiPrec35[] = " @ - KArray_(Float64, pi, [|RN, 24, 24, 24|]), + KArray_(Float64, pi, [|RN, 31, 31|], [|RN, 53|]), "", // 2π constants for angle wrapping diff --git a/npsr/trig/data/data.h b/npsr/trig/data/data.h index b82545f..3d74381 100644 --- a/npsr/trig/data/data.h +++ b/npsr/trig/data/data.h @@ -8,6 +8,7 @@ // their own guards and no-op on re-entry. #include "npsr/lut-inl.h" #include "npsr/trig/data/constants.h" +#include "npsr/trig/data/polyf32.h" #include "npsr/trig/data/kpi16-inl.h" #include "npsr/trig/data/approx.h" #include "npsr/trig/data/reduction.h" diff --git a/npsr/trig/data/polyf32.h b/npsr/trig/data/polyf32.h new file mode 100644 index 0000000..2e71ae5 --- /dev/null +++ b/npsr/trig/data/polyf32.h @@ -0,0 +1,32 @@ +// Auto-generated by npsr/trig/data/polyf32.h.sol +// Use `spin sollya -f` to force regeneration +#ifndef NPSR_TRIG_DATA_POLYF32_H +#define NPSR_TRIG_DATA_POLYF32_H + +namespace npsr::trig::data { +// Degree-9 odd minimax sin(x) = x + x^3*P(x^2) on [2^-20, pi/2]. +// Coefficients {c3, c5, c7, c9} for the f32 PolyLow in npsr/trig/low-inl.h. +// See poly.h.sol for the recipe, pins and measured worst cases. +template inline constexpr float kSinPolyLowF32[] = { +-0x1.555544p-3f, 0x1.110d94p-7f, -0x1.9f3644p-13f, 0x1.5a9eap-19f, +}; +template inline constexpr float kCosPolyLowF32[] = { +-0x1.555548p-3f, 0x1.110e34p-7f, -0x1.9f527cp-13f, 0x1.5c1b4p-19f, +}; +template <> inline constexpr float kSinPolyLowF32[] = { +-0x1.55554ap-3f, 0x1.110e88p-7f, -0x1.9f621ap-13f, 0x1.5cfce2p-19f, +}; +template <> inline constexpr float kCosPolyLowF32[] = { +-0x1.55554ap-3f, 0x1.110e9p-7f, -0x1.9f653ep-13f, 0x1.5d3afep-19f, +}; + +// Degree-9 odd minimax sin(r) on [2^-30, pi/2 + 0.012] for the f32 High path +// in trig/high-inl.h; c1 is fitted, not pinned to 1. See poly.h.sol. +// Relative error 9.64818894863128662109375e-2 ulp(f32). Coefficients {c1, c3, c5, c7, c9}. +inline constexpr double kSinPolyHighF32[] = { +0x1.ffffffce99ecep-1, -0x1.5555471207a17p-3, 0x1.110e5bbaaff44p-7, +-0x1.9f5e996744e9ep-13, 0x1.5ce7e229f1f1p-19, }; + +} // namespace npsr::trig::data + +#endif // NPSR_TRIG_DATA_POLYF32_H diff --git a/npsr/trig/data/polyf32.h.sol b/npsr/trig/data/polyf32.h.sol new file mode 100644 index 0000000..41463aa --- /dev/null +++ b/npsr/trig/data/polyf32.h.sol @@ -0,0 +1,113 @@ +// f32 Low trig coefficients: sin(x) ~= x + x^3*P(x^2), degree 9, odd. +// 333/346/368 are recoverable Remez warnings the constrained refits below +// always trip; the driver would treat them as errors. +suppressmessage(346, 333, 368); + +I = [0x1p-20; pi/2]; +vFree = fpminimax(sin(x), [|3, 5, 7, 9|], [|single...|], I, relative, floating, x); + +// Relative error in ULP at 1 (= 2^-24); guards regeneration against a worse fit. +procedure ErrULP(pP) { return dirtyinfnorm(pP(x)/sin(x) - 1, I) * 0x1p24; }; +Assert(ErrULP(vFree) < 0.12, "f32 Low free fit error regressed: " @ ErrULP(vFree)); + +// One f32 ULP at a coefficient's scale. No coefficient sits within a step of +// a power of two, so the constant step is exact. +procedure Ulp(pC) { return 2^(floor(log2(abs(pC))) - 23); }; + +// Pin c3 (then c5, then optionally c7) an integer number of ULPs off the free +// fit and refit the rest under the pin. Pin indices come from exhaustive +// measurement of the compiled kernel over [0, 1e4); no analytic criterion +// sees the eval DAG's per-operation rounding. +procedure Stage2(pK3, pJ5) { + var vC3, vP5, vC5, vP7; + vC3 = round(coeff(vFree, 3) + pK3 * Ulp(coeff(vFree, 3)), single, RN); + vP5 = fpminimax(sin(x), [|5, 7, 9|], [|single...|], I, relative, floating, + x + vC3 * x^3); + vC5 = round(coeff(vP5, 5) + pJ5 * Ulp(coeff(vP5, 5)), single, RN); + vP7 = fpminimax(sin(x), [|7, 9|], [|single...|], I, relative, floating, + x + vC3 * x^3 + vC5 * x^5); + return [| vC3, vC5, vP7 |]; +}; + +procedure CheckPinned(pSet, pTag) { + Assert(ErrULP(pSet[0]*x^3 + pSet[1]*x^5 + pSet[2]*x^7 + pSet[3]*x^9 + x) < 1.0, + "pinned set " @ pTag @ " analytic error drifted"); + return pSet; +}; + +// c7/c9 come jointly from the stage-two fit. +procedure Pinned(pK3, pJ5) { + var vS; + vS = Stage2(pK3, pJ5); + return CheckPinned([| vS[0], vS[1], coeff(vS[2], 7), coeff(vS[2], 9) |], + "(" @ pK3 @ "," @ pJ5 @ ")"); +}; + +// Additionally pin c7 and refit c9 alone. Only FMA cos gains from it. +procedure Pinned3(pK3, pJ5, pL7) { + var vS, vC7, vP9; + vS = Stage2(pK3, pJ5); + vC7 = round(coeff(vS[2], 7) + pL7 * Ulp(coeff(vS[2], 7)), single, RN); + vP9 = fpminimax(sin(x), [|9|], [|single...|], I, relative, floating, + x + vS[0] * x^3 + vS[1] * x^5 + vC7 * x^7); + return CheckPinned([| vS[0], vS[1], vC7, coeff(vP9, 9) |], + "(" @ pK3 @ "," @ pJ5 @ "," @ pL7 @ ")"); +}; + +// Exhaustive [0, 1e4) worst case, pinned vs free fit, in ULP: +// FMA: sin 1.886 (free 2.191) cos 1.815 (free 2.110) +// non-FMA: sin 1.912 (free 1.939) cos 1.948 (free 1.966) +// Non-FMA is eval-rounding bound (~1.9 of the ~1.95 total), so pins only +// shift which argument realizes the worst alignment; the whole (k3, j5, l7) +// grid stays within 0.02 of the sets below. +vFmaSin = Pinned(4, 1); +vFmaCos = Pinned3(2, 1, 8); +vNoFmaSin = Pinned(1, 1); +vNoFmaCos = Pinned(1, 5); + +Append( + "// Degree-9 odd minimax sin(x) = x + x^3*P(x^2) on [2^-20, pi/2].", + "// Coefficients {c3, c5, c7, c9} for the f32 PolyLow in npsr/trig/low-inl.h.", + "// See poly.h.sol for the recipe, pins and measured worst cases.", + "template inline constexpr float kSinPolyLowF32[] = " @ CArrayT(Float32, vFmaSin, 4) @ ";", + "template inline constexpr float kCosPolyLowF32[] = " @ CArrayT(Float32, vFmaCos, 4) @ ";", + "template <> inline constexpr float kSinPolyLowF32[] = " @ CArrayT(Float32, vNoFmaSin, 4) @ ";", + "template <> inline constexpr float kCosPolyLowF32[] = " @ CArrayT(Float32, vNoFmaCos, 4) @ ";", + "" +); + +// f32 High coefficients, held and evaluated in double by npsr/trig/high-inl.h. +// +// c1 is fitted, not pinned to 1: MulAdd(r2, poly, c1) + Mul(poly, r) closes in +// the same two ops as the pinned x + x^3*P(x^2), so the free parameter is free +// -- 0.1099 -> 0.0965 ulp. No pinning stage either: eval is in double (~2^-52), +// so unlike the single Low sets above there is no rounding for pins to steer. +// +// The interval tracks the cutover in npsr/trig/inl.h and must move with it: n +// comes from a f32 magic-round, so |r| overshoots pi/2 by up to |x|*1.7e-7. +// 0.012 is the exhaustive ceiling below both cutovers, and widening costs +// accuracy fast: 0.0892 ulp at pi/2, 0.0965 here, 0.1073 at 0.028. +IHigh = [0x1p-30; pi/2 + 0.012]; +vHigh = fpminimax(sin(x), [|1, 3, 5, 7, 9|], [|double...|], IHigh, relative, floating); + +// Leaves High<> at 0.5 (final f32 rounding) + 0.097, the f32 ceiling: the +// Extended kernel above the cutover measures 0.5031, so this fit -- not the +// Payne-Hanek reduction -- is what keeps sin/cos off correct rounding. +errHigh = dirtyinfnorm(vHigh(x)/sin(x) - 1, IHigh) * 0x1p24; +Assert(errHigh < 0.0970, "f32 High fit error regressed: " @ errHigh); +// The driver leaves display in hexadecimal, which is unreadable for an error. +display = decimal!; +errHighStr = "" @ round(errHigh, 24, RN); +display = hexadecimal!; + +Append( + "// Degree-9 odd minimax sin(r) on [2^-30, pi/2 + 0.012] for the f32 High path", + "// in trig/high-inl.h; c1 is fitted, not pinned to 1. See poly.h.sol.", + "// Relative error " @ errHighStr @ " ulp(f32). Coefficients {c1, c3, c5, c7, c9}.", + "inline constexpr double kSinPolyHighF32[] = " @ + CArrayT(Float64, [| coeff(vHigh, 1), coeff(vHigh, 3), coeff(vHigh, 5), + coeff(vHigh, 7), coeff(vHigh, 9) |], 3) @ ";", + "" +); + +WriteCPPHeader("npsr::trig::data"); diff --git a/npsr/trig/high-inl.h b/npsr/trig/high-inl.h index 65d0fd3..a2655bd 100644 --- a/npsr/trig/high-inl.h +++ b/npsr/trig/high-inl.h @@ -59,21 +59,27 @@ NPSR_INTRIN V High(V x) { } auto WideCal = [](const VW &nh, const VW &xh_abs) -> VW { const DFromV dw; - constexpr auto kPiPrec35 = data::kPiPrec35; + // Cody-Waite r = x - n*π, one word per NegMulAdd. Without FMA the product + // rounds, so that split spends a third word on 31-bit heads to keep n*πᵢ + // exact; see constants.h.sol. + constexpr auto kPiPrec35 = data::kPiPrec35; VW r = NegMulAdd(nh, Set(dw, kPiPrec35[0]), xh_abs); r = NegMulAdd(nh, Set(dw, kPiPrec35[1]), r); + if constexpr (!kNativeFMA) { + r = NegMulAdd(nh, Set(dw, kPiPrec35[2]), r); + } VW r2 = Mul(r, r); - // Polynomial coefficients for sin(r) approximation on [-π/2, π/2] - const VW c9 = Set(dw, 0x1.5dbdf0e4c7deep-19); - const VW c7 = Set(dw, -0x1.9f6ffeea73463p-13); - const VW c5 = Set(dw, 0x1.110ed3804ca96p-7); - const VW c3 = Set(dw, -0x1.55554bc836587p-3); - VW poly = MulAdd(c9, r2, c7); - poly = MulAdd(r2, poly, c5); - poly = MulAdd(r2, poly, c3); - poly = Mul(poly, r2); - poly = MulAdd(r, poly, r); + // Degree-9 odd minimax for sin(r); the fit is this path's whole error + // budget (0.5 + 0.0965 ULP). c1 is fitted, not pinned to 1 -- same two + // closing ops as r + r^3*P(r^2), one more free parameter. Within 2^-27.4 + // of 1, so sin(r) still demotes to r bit-exactly. See data/polyf32.h.sol. + constexpr auto kPoly = data::kSinPolyHighF32; + VW poly = MulAdd(Set(dw, kPoly[4]), r2, Set(dw, kPoly[3])); + poly = MulAdd(r2, poly, Set(dw, kPoly[2])); + poly = MulAdd(r2, poly, Set(dw, kPoly[1])); + poly = MulAdd(r2, poly, Set(dw, kPoly[0])); + poly = Mul(poly, r); return poly; }; diff --git a/npsr/trig/inl.h b/npsr/trig/inl.h index 9e16041..d71f691 100644 --- a/npsr/trig/inl.h +++ b/npsr/trig/inl.h @@ -1,13 +1,12 @@ -// Main trigonometric function dispatcher for Highway SIMD library // This file provides the public API for sine and cosine functions with -// configurable precision, special case handling, and algorithm selection +// configurable precision, special case handling, and algorithm selection. +// +// The implementation automatically selects between: +// 1. Low precision: < 2 ULP for f32 and < 3.5 ULP for f64 +// 2. High precision: < 0.6 ULP for f32, < 1 ULP for f64; moderate speed +// 3. Extended precision: Payne-Hanek reduction for huge |x|, similar +// accuracy to High precision but a slow path. // -// The implementation automatically selects between three algorithms: -// 1. Low precision: ~2-3 ULP error, fastest -// 2. High precision: ~1 ULP error, moderate speed -// 3. Extended precision: Payne-Hanek reduction for huge |x| -// (> 10^4 for float, > 2^24 for double) - #if defined(NPSR_TRIG_INL_H_) == defined(HWY_TARGET_TOGGLE) // NOLINT #ifdef NPSR_TRIG_INL_H_ #undef NPSR_TRIG_INL_H_ @@ -42,11 +41,13 @@ namespace npsr::HWY_NAMESPACE::trig { * * Algorithm selection: * 1. If kLowAccuracy: Use Low<> (Cody-Waite with minimal polynomial) - * 2. Otherwise: Use High<> (π/16 reduction with table lookup) + * 2. Otherwise: Use High<> (f32: π reduction in double; f64: π/16 reduction + * with table lookup) * 3. If kLargeArgument and |x| > threshold: Override with Extended<> * * Thresholds for extended precision: - * - Float: |x| > 10,000 (empirically chosen for accuracy) + * - Float: |x| > the largest argument the chosen path still meets its bound at + * (differs per accuracy/FMA/op; see kLargeF32) * - Double: |x| > 2^24 (16,777,216 - beyond this the reduction's n*π products * stop being exactly representable) */ @@ -58,12 +59,8 @@ NPSR_INTRIN V Trig(Prec &prec, V x) { V ret; // Step 1: Select base algorithm based on accuracy requirements if constexpr (Prec::kLowAccuracy) { - // Low precision: Cody-Waite reduction, degree-9 (f32) / degree-15 (f64) - // Error: ~2-3 ULP ret = Low(x); } else { - // High precision: π/16 reduction with table lookup + polynomial - // Error: ~1 ULP ret = High(x); } // Step 2: Handle special cases (NaN, Inf) if enabled @@ -80,16 +77,26 @@ NPSR_INTRIN V Trig(Prec &prec, V x) { // For |x| > threshold, standard algorithms lose precision due to // catastrophic cancellation in x - n*π reduction if constexpr (Prec::kLargeArgument) { - // Thresholds mark where each path's n*π products stop being exact: - // - Float: 10,000, conservative but keeps the widened path < 1 ULP. + // Thresholds mark where each path stops meeting its bound, i.e. where its + // range reduction breaks down, not where mantissa resolution runs out: + // - Float: each path keeps its own accuracy bound up to a different |x|; + // every constant below is the round value under the exhaustively + // measured, MPFR-confirmed first argument that exceeds it. The low paths + // break far earlier without FMA, because there the extra π word is spent + // on keeping n*πᵢ representable rather than on headroom. // - Double: 2^24, past which |round(x*16/π)| overflows the π/16 split. // - Double low-accuracy cos: holds until trunc(|x|/π) > 8388606; the // constant is the largest double below that boundary (~8388607π). - constexpr bool kIsLowCos = - Prec::kLowAccuracy && OP == trig::Operation::kCos; + constexpr bool kIsCos = OP == trig::Operation::kCos; + constexpr bool kIsLowCos = Prec::kLowAccuracy && kIsCos; + constexpr float kLargeF32 = + Prec::kLowAccuracy + ? (kNativeFMA ? (kIsCos ? 1600000.0f : 2200000.0f) + : (kIsCos ? 12000.0f : 25000.0f)) + : (kNativeFMA ? 200000.0f : 130000.0f); constexpr double kLargeF64 = kIsLowCos ? 0x1.921fb2200366fp+24 : 16777216.0; auto has_large_arg = - And(Gt(Abs(x), Set(d, kIsSingle ? 10000.0f : kLargeF64)), is_finite); + And(Gt(Abs(x), Set(d, kIsSingle ? kLargeF32 : kLargeF64)), is_finite); // Extended precision is expensive, only use when necessary if (HWY_UNLIKELY(!AllFalse(d, has_large_arg))) { diff --git a/npsr/trig/low-inl.h b/npsr/trig/low-inl.h index 93cceee..1955795 100644 --- a/npsr/trig/low-inl.h +++ b/npsr/trig/low-inl.h @@ -17,31 +17,32 @@ enum class Operation { kSin = 0, kCos = 1 }; template )> NPSR_INTRIN V PolyLow(V r, V r2) { using namespace hn; + namespace data = ::npsr::trig::data; const DFromV d; constexpr bool kCos = OP == Operation::kCos; - const V c9 = Set(d, kCos ? 0x1.5d866ap-19f : 0x1.5dbdfp-19f); - const V c7 = Set(d, kCos ? -0x1.9f6d9ep-13 : -0x1.9f6ffep-13f); - const V c5 = Set(d, kCos ? 0x1.110ec8p-7 : 0x1.110eccp-7f); - const V c3 = Set(d, -0x1.55554cp-3f); + // cos reduces around (N + 0.5)·π, so both ops evaluate sin(r) here; the + // per-op/per-mode sets differ only in pinning (see data/polyf32.h.sol). + constexpr auto kSet = (kCos ? data::kCosPolyLowF32 + : data::kSinPolyLowF32); + const V c9 = Set(d, kSet[3]); + const V c7 = Set(d, kSet[2]); + const V c5 = Set(d, kSet[1]); + const V c3 = Set(d, kSet[0]); V poly = MulAdd(c9, r2, c7); poly = MulAdd(r2, poly, c5); poly = MulAdd(r2, poly, c3); - if constexpr (OP == Operation::kCos) { - // Although this path handles cosine, we have already transformed the - // input using the identity: cos(x) = sin(x + π/2) This means we're no - // longer directly evaluating a cosine Taylor series; instead, we evaluate - // the sine approximation polynomial at (x + π/2). - // - // The sine approximation has the general form: - // sin(r) ≈ r + r³ · P(r²) - // - // So, we compute: - // r³ = r · r² - // sin(r) ≈ r + r³ · poly - // - // This formulation preserves accuracy by computing the highest order - // terms last, which benefits from FMA to reduce rounding error. + // cos was mapped to sin via cos(x) = sin(x + π/2) during reduction, so all + // branches evaluate the same sine polynomial sin(r) ≈ r + r³ · P(r²), not a + // cosine series. All three build r + r³·poly in three ops; only the grouping + // differs. Without FMA every intermediate is rounded and r·poly lands in the + // lowest binade of the three, worth ~0.1 ULP. With FMA the choice is nearly + // free and cos measures ~0.06 ULP better in SVML's order (r³ first, matching + // SVML's R = X + X·X²·(...)). + if constexpr (!kNativeFMA) { + poly = Mul(r, poly); + poly = MulAdd(poly, r2, r); + } else if constexpr (kCos) { V r3 = Mul(r2, r); poly = MulAdd(r3, poly, r); } else { @@ -92,13 +93,17 @@ NPSR_INTRIN V Low(V x) { constexpr bool kIsSingle = std::is_same_v; // Transform cosine to sine using identity: cos(x) = sin(x + π/2) - const V half_pi = Set(d, data::kHalfPi); V x_trans = x_abs; if constexpr (OP == Operation::kCos) { - x_trans = Add(x_abs, half_pi); + x_trans = Add(x_abs, Set(d, data::kHalfPi)); } - // check zero input/subnormal for cosine (cos(~0) = 1) - const auto is_cos_near_zero = Eq(x_trans, half_pi); + // cos(x) rounds to exactly 1 up to these (largest such value per type). + // Answering 1 directly instead of catching only x_trans == half_pi matters + // for correctness, not just speed: tiny x reduces to r hugging pi/2, where + // the poly's per-op rounding cannot land on 1.0 for every such r. + constexpr T kCosOneMax = + static_cast(kIsSingle ? 0x1p-12 : 0x1.6a09e667f3bccp-27); + const auto is_cos_near_zero = Le(x_abs, Set(d, kCosOneMax)); // Compute N = round(x/π) using "magic number" technique // and stores integer part in mantissa @@ -118,10 +123,19 @@ NPSR_INTRIN V Low(V x) { constexpr auto kPi = data::kPi; V r = NegMulAdd(n, Set(d, kPi[0]), x_abs); r = NegMulAdd(n, Set(d, kPi[1]), r); - V r_lo = NegMulAdd(n, Set(d, kPi[2]), r); - + V r_lo; if constexpr (!kNativeFMA) { - r_lo = NegMulAdd(n, Set(d, kPi[3]), r_lo); + // n·π[2] is exact, so Fast2Sum recovers the π[2] rounding error into the + // π[3] step. + const V p2 = Mul(n, Set(d, kPi[2])); + const V ra = Sub(r, p2); + const V p2_err = Sub(Sub(r, ra), p2); + r_lo = Sub(ra, Sub(Mul(n, Set(d, kPi[3])), p2_err)); + } else { + r_lo = NegMulAdd(n, Set(d, kPi[2]), r); + if constexpr (!kNativeFMA) { + r_lo = NegMulAdd(n, Set(d, kPi[3]), r_lo); + } } if constexpr (kIsSingle || !kNativeFMA) { // The polynomial needs the fully reduced value; r still owes the last diff --git a/tools/sollya/core.sol b/tools/sollya/core.sol index 8c4d5a1..136f9de 100644 --- a/tools/sollya/core.sol +++ b/tools/sollya/core.sol @@ -1,7 +1,7 @@ // Sollya utility functions for generating C++ header files with mathematical constants and lookup tables // Initial Sollya configuration -prec = 512; // High precision for accurate constant computation +prec = 1024; // High precision for accurate constant computation display = hexadecimal; // Hex display for exact bit representation verbosity = 4; // Verbose output to detect NaN values showmessagenumbers = on;