mirror of
https://github.com/felt/tippecanoe.git
synced 2026-10-04 01:15:41 +02:00
Replace the Grisu2 float formatter with a C++ port of rsc/fpfmt
Tippecanoe formatted every double it wrote through milo::dtoa_milo, a vendored Grisu2. Grisu2 is fast, but it guarantees neither the shortest digit string nor the correctly rounded one: it only guarantees that what it prints parses back to the value it came from. In practice it prints a digit more than necessary about 0.16% of the time, and picks a neighbor of the correctly rounded digits about 32% of the time. This ports Russ Cox's fpfmt (https://github.com/rsc/fpfmt) to C++ in fpfmt/ and formats through it instead. fpfmt is both shortest and correctly rounded, and it is faster: full std::string formatting Grisu2 fpfmt speedup random bit patterns 156.62 ns 66.83 ns 2.34x geo coordinates 124.07 ns 58.62 ns 2.12x short decimals 69.37 ns 49.16 ns 1.41x small integers 44.18 ns 38.06 ns 1.16x digit generation only Grisu2 fpfmt speedup random bit patterns 90.07 ns 20.81 ns 4.33x geo coordinates 80.64 ns 20.18 ns 4.00x short decimals 55.61 ns 21.90 ns 2.54x small integers 40.23 ns 22.50 ns 1.79x (Intel Xeon @ 2.80GHz, g++ 13.3 -O3. `make fpfmt-bench` reproduces this, and `./fpfmt-bench -check` reruns the correctness sweep, which is why milo/dtoa_milo.h is kept even though nothing links it any more.) The port is deliberately literal, so it can be diffed against fpfmt.go. Its Short() agrees bit for bit with the Go original's on 445,640 values covering powers of ten, small integers and reciprocals, subnormals, and random bit patterns. Over 38.5 million values, fpfmt::dtoa always round trips, is never longer than Grisu2's output, and is shorter 61,329 times. Output is otherwise formatted exactly as before, including the choice between plain and exponential notation, so 26 expected test outputs change: some numbers lose digits (-26.170044999999999 becomes -26.170045), and some have a corrected final digit (9.823748927348929e+55 becomes 9.823748927348928e+55). Every changed token was checked to parse back to the identical double; none of the values themselves moved. milo/milo.h, whose only job was to declare the C shim jsonpull calls, is replaced by fpfmt/fpfmt.h, and the shim is renamed dtoa_shortest. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_014wJRAuhMninQE4wK2TUfuZ
This commit is contained in:
@@ -0,0 +1,27 @@
|
||||
Copyright (c) 2009 The Go Authors. All rights reserved.
|
||||
|
||||
Redistribution and use in source and binary forms, with or without
|
||||
modification, are permitted provided that the following conditions are
|
||||
met:
|
||||
|
||||
* Redistributions of source code must retain the above copyright
|
||||
notice, this list of conditions and the following disclaimer.
|
||||
* Redistributions in binary form must reproduce the above
|
||||
copyright notice, this list of conditions and the following disclaimer
|
||||
in the documentation and/or other materials provided with the
|
||||
distribution.
|
||||
* Neither the name of Google Inc. nor the names of its
|
||||
contributors may be used to endorse or promote products derived from
|
||||
this software without specific prior written permission.
|
||||
|
||||
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
|
||||
"AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
|
||||
LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
|
||||
A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
|
||||
OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
|
||||
SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
|
||||
LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
|
||||
DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
|
||||
THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
|
||||
(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
|
||||
OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
||||
+278
@@ -0,0 +1,278 @@
|
||||
// Head-to-head comparison of fpfmt::dtoa() against the Grisu2 implementation
|
||||
// (milo::dtoa_milo) that it replaced.
|
||||
//
|
||||
// make fpfmt-bench && ./fpfmt-bench # timings
|
||||
// ./fpfmt-bench -check [n] # correctness sweep
|
||||
//
|
||||
// -check verifies, over structured edge cases plus n random doubles, that
|
||||
// every fpfmt::dtoa() result parses back to the value it came from, and
|
||||
// reports how its digit strings compare with Grisu2's.
|
||||
|
||||
#include <stdio.h>
|
||||
#include <stdlib.h>
|
||||
#include <string.h>
|
||||
|
||||
#include <algorithm>
|
||||
#include <chrono>
|
||||
#include <cmath>
|
||||
#include <cstdint>
|
||||
#include <random>
|
||||
#include <string>
|
||||
#include <vector>
|
||||
|
||||
#include "fpfmt/fpfmt.hpp"
|
||||
#include "milo/dtoa_milo.h"
|
||||
|
||||
using clk = std::chrono::steady_clock;
|
||||
|
||||
static double from_bits(uint64_t b) {
|
||||
double d;
|
||||
memcpy(&d, &b, sizeof(d));
|
||||
return d;
|
||||
}
|
||||
|
||||
static uint64_t bits_of(double d) {
|
||||
uint64_t b;
|
||||
memcpy(&b, &d, sizeof(b));
|
||||
return b;
|
||||
}
|
||||
|
||||
// significant_digits counts the significant decimal digits in a formatted
|
||||
// number: leading zeros and zeros trailing the last nonzero digit don't count.
|
||||
static int significant_digits(const std::string &str) {
|
||||
std::string s = str;
|
||||
size_t e = s.find('e');
|
||||
if (e != std::string::npos) {
|
||||
s = s.substr(0, e);
|
||||
}
|
||||
int n = 0, trailing = 0;
|
||||
bool seen = false;
|
||||
for (char c : s) {
|
||||
if (c >= '1' && c <= '9') {
|
||||
n += trailing + 1;
|
||||
trailing = 0;
|
||||
seen = true;
|
||||
} else if (c == '0' && seen) {
|
||||
trailing++;
|
||||
}
|
||||
}
|
||||
return n == 0 ? 1 : n;
|
||||
}
|
||||
|
||||
struct dataset {
|
||||
const char *name;
|
||||
std::vector<double> v;
|
||||
};
|
||||
|
||||
static std::vector<dataset> make_datasets(size_t n, std::mt19937_64 &rng) {
|
||||
std::vector<dataset> sets;
|
||||
|
||||
{
|
||||
// Uniform random bit patterns: the worst case, nearly all 17 digits.
|
||||
dataset s{"random bit patterns", {}};
|
||||
while (s.v.size() < n) {
|
||||
double d = from_bits(rng());
|
||||
if (std::isfinite(d) && d != 0) {
|
||||
s.v.push_back(d);
|
||||
}
|
||||
}
|
||||
sets.push_back(std::move(s));
|
||||
}
|
||||
{
|
||||
// What tippecanoe mostly formats: longitudes and latitudes.
|
||||
dataset s{"geo coordinates", {}};
|
||||
std::uniform_real_distribution<double> u(-180, 180);
|
||||
while (s.v.size() < n) {
|
||||
s.v.push_back(u(rng));
|
||||
}
|
||||
sets.push_back(std::move(s));
|
||||
}
|
||||
{
|
||||
// Attribute values with only a few significant digits.
|
||||
dataset s{"short decimals", {}};
|
||||
std::uniform_int_distribution<int> m(1, 999999);
|
||||
std::uniform_int_distribution<int> e(-4, 4);
|
||||
while (s.v.size() < n) {
|
||||
s.v.push_back(m(rng) * pow(10.0, e(rng)));
|
||||
}
|
||||
sets.push_back(std::move(s));
|
||||
}
|
||||
{
|
||||
// IDs, counts, zoom levels.
|
||||
dataset s{"small integers", {}};
|
||||
std::uniform_int_distribution<int> u(0, 1000000);
|
||||
while (s.v.size() < n) {
|
||||
s.v.push_back((double) u(rng));
|
||||
}
|
||||
sets.push_back(std::move(s));
|
||||
}
|
||||
|
||||
return sets;
|
||||
}
|
||||
|
||||
static volatile size_t sink;
|
||||
|
||||
template <typename F>
|
||||
static double best_ns(const std::vector<double> &v, int reps, F f) {
|
||||
double best = 1e300;
|
||||
for (int r = 0; r < reps; r++) {
|
||||
auto t0 = clk::now();
|
||||
size_t acc = 0;
|
||||
for (double d : v) {
|
||||
acc += f(d);
|
||||
}
|
||||
auto t1 = clk::now();
|
||||
sink += acc;
|
||||
double ns = std::chrono::duration<double, std::nano>(t1 - t0).count() / (double) v.size();
|
||||
best = std::min(best, ns);
|
||||
}
|
||||
return best;
|
||||
}
|
||||
|
||||
static int check(long n) {
|
||||
uint64_t tested = 0, roundtrip_fail = 0, differ = 0, fpfmt_shorter = 0, milo_shorter = 0, same_length = 0;
|
||||
std::string first_fail;
|
||||
|
||||
auto one = [&](double d) {
|
||||
tested++;
|
||||
std::string a = fpfmt::dtoa(d);
|
||||
std::string b = milo::dtoa_milo(d);
|
||||
if (strtod(a.c_str(), NULL) != d) {
|
||||
roundtrip_fail++;
|
||||
if (first_fail.empty()) {
|
||||
char buf[128];
|
||||
snprintf(buf, sizeof(buf), "bits=%016llx -> %s", (unsigned long long) bits_of(d), a.c_str());
|
||||
first_fail = buf;
|
||||
}
|
||||
}
|
||||
if (a != b) {
|
||||
differ++;
|
||||
int na = significant_digits(a), nb = significant_digits(b);
|
||||
if (na < nb) {
|
||||
fpfmt_shorter++;
|
||||
} else if (na > nb) {
|
||||
milo_shorter++;
|
||||
} else {
|
||||
same_length++;
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
// Non-finite and zero cases have to agree exactly.
|
||||
static const double special[] = {0.0, -0.0, INFINITY, -INFINITY, NAN};
|
||||
for (double d : special) {
|
||||
std::string a = fpfmt::dtoa(d), b = milo::dtoa_milo(d);
|
||||
if (a != b) {
|
||||
printf("MISMATCH on special value: fpfmt=%s milo=%s\n", a.c_str(), b.c_str());
|
||||
return 1;
|
||||
}
|
||||
}
|
||||
|
||||
static const double edge[] = {
|
||||
1.0, -1.0, 0.1, 0.2, 0.3, 0.5, 1.5, 2.0, 3.0,
|
||||
1e-7, 1e-6, 1e-5, 1e-1, 1e20, 1e21, 1e22, 1e23,
|
||||
5e-324, 1e-323, 2.2250738585072014e-308, 2.2250738585072011e-308,
|
||||
1.7976931348623157e308, 123456789.0, 3.14159265358979,
|
||||
9007199254740992.0, 9007199254740993.0, 1e100, 1e-100};
|
||||
for (double d : edge) {
|
||||
one(d);
|
||||
}
|
||||
|
||||
for (int i = -320; i <= 308; i++) {
|
||||
double d = pow(10.0, i);
|
||||
if (std::isfinite(d) && d != 0) {
|
||||
one(d);
|
||||
}
|
||||
}
|
||||
for (int i = 1; i < 100000; i++) {
|
||||
one((double) i);
|
||||
one(1.0 / i);
|
||||
one(-(double) i);
|
||||
}
|
||||
|
||||
// Every float32 bit pattern, subsampled, promoted to double.
|
||||
for (uint64_t u = 0; u < (1ull << 32); u += 521) {
|
||||
float f;
|
||||
uint32_t b = (uint32_t) u;
|
||||
memcpy(&f, &b, sizeof(f));
|
||||
if (std::isfinite(f) && f != 0) {
|
||||
one((double) f);
|
||||
}
|
||||
}
|
||||
|
||||
std::mt19937_64 rng(12345);
|
||||
for (long i = 0; i < n; i++) {
|
||||
double d = from_bits(rng());
|
||||
if (std::isfinite(d) && d != 0) {
|
||||
one(d);
|
||||
}
|
||||
}
|
||||
std::uniform_real_distribution<double> lat(-90, 90), lon(-180, 180);
|
||||
for (long i = 0; i < n / 4; i++) {
|
||||
one(lat(rng));
|
||||
one(lon(rng));
|
||||
}
|
||||
|
||||
printf("values tested %llu\n", (unsigned long long) tested);
|
||||
printf("fpfmt failed to round trip %llu\n", (unsigned long long) roundtrip_fail);
|
||||
printf("output differs from Grisu2 %llu\n", (unsigned long long) differ);
|
||||
printf(" fpfmt used fewer digits %llu\n", (unsigned long long) fpfmt_shorter);
|
||||
printf(" Grisu2 used fewer digits %llu\n", (unsigned long long) milo_shorter);
|
||||
printf(" same digit count, last differs %llu\n", (unsigned long long) same_length);
|
||||
if (!first_fail.empty()) {
|
||||
printf("first round trip failure: %s\n", first_fail.c_str());
|
||||
}
|
||||
return (roundtrip_fail != 0 || milo_shorter != 0) ? 1 : 0;
|
||||
}
|
||||
|
||||
int main(int argc, char **argv) {
|
||||
if (argc > 1 && strcmp(argv[1], "-check") == 0) {
|
||||
return check(argc > 2 ? atol(argv[2]) : 20000000L);
|
||||
}
|
||||
|
||||
size_t n = (argc > 1) ? (size_t) atol(argv[1]) : 2000000;
|
||||
int reps = (argc > 2) ? atoi(argv[2]) : 5;
|
||||
std::mt19937_64 rng(2024);
|
||||
std::vector<dataset> sets = make_datasets(n, rng);
|
||||
|
||||
printf("%zu values per dataset, best of %d runs\n\n", n, reps * 2);
|
||||
printf("full std::string formatting\n");
|
||||
printf("%-22s %14s %14s %9s\n", "dataset", "Grisu2 ns", "fpfmt ns", "speedup");
|
||||
for (auto &s : sets) {
|
||||
// Interleave the two so they share cache and clock conditions.
|
||||
double tm = best_ns(s.v, reps, [](double d) { return milo::dtoa_milo(d).size(); });
|
||||
double tf = best_ns(s.v, reps, [](double d) { return fpfmt::dtoa(d).size(); });
|
||||
tm = std::min(tm, best_ns(s.v, reps, [](double d) { return milo::dtoa_milo(d).size(); }));
|
||||
tf = std::min(tf, best_ns(s.v, reps, [](double d) { return fpfmt::dtoa(d).size(); }));
|
||||
printf("%-22s %14.2f %14.2f %8.2fx\n", s.name, tm, tf, tm / tf);
|
||||
}
|
||||
|
||||
printf("\ndigit generation only, without the std::string\n");
|
||||
printf("%-22s %14s %14s %9s\n", "dataset", "Grisu2 ns", "fpfmt ns", "speedup");
|
||||
for (auto &s : sets) {
|
||||
double tm = best_ns(s.v, reps, [](double d) {
|
||||
static std::string b;
|
||||
b.clear();
|
||||
if (d == 0) {
|
||||
return (size_t) 1;
|
||||
}
|
||||
if (d < 0) {
|
||||
d = -d;
|
||||
}
|
||||
int length, K;
|
||||
milo::Grisu2(d, b, &length, &K);
|
||||
return (size_t) (length + K);
|
||||
});
|
||||
double tf = best_ns(s.v, reps, [](double d) {
|
||||
if (d == 0) {
|
||||
return (size_t) 1;
|
||||
}
|
||||
uint64_t dd;
|
||||
int p;
|
||||
fpfmt::shortest(d, &dd, &p);
|
||||
return (size_t) (fpfmt::digits(dd) + p);
|
||||
});
|
||||
printf("%-22s %14.2f %14.2f %8.2fx\n", s.name, tm, tf, tm / tf);
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
+430
@@ -0,0 +1,430 @@
|
||||
// C++ port of Russ Cox's fpfmt shortest-float formatting algorithm,
|
||||
// from https://github.com/rsc/fpfmt (fpfmt.go).
|
||||
//
|
||||
// The original Go code is Copyright 2025 The Go Authors and is covered by
|
||||
// the BSD-style license in fpfmt/LICENSE.txt.
|
||||
//
|
||||
// The port is deliberately literal: the functions, their names, and the
|
||||
// comments follow fpfmt.go closely, so the two can be diffed. The only
|
||||
// substantive additions are the Go-compatible shift helpers (Go defines a
|
||||
// shift of 64 or more as 0, where C++ leaves it undefined) and format(),
|
||||
// which renders the (d, p) pair the way milo::Prettify() does.
|
||||
|
||||
#include "fpfmt.hpp"
|
||||
|
||||
#include <string.h>
|
||||
|
||||
#include <cmath>
|
||||
|
||||
#include "pow10tab.hpp"
|
||||
|
||||
namespace fpfmt {
|
||||
|
||||
static_assert((-1 >> 1) == -1, "fpfmt needs an arithmetic right shift on signed ints");
|
||||
|
||||
// go_shl and go_shr shift the way Go does: a shift count of 64 or more
|
||||
// yields 0 rather than undefined behavior. The Short() code below relies on
|
||||
// this for subnormals, where the neighbor offset shifts entirely away.
|
||||
static inline uint64_t go_shl(uint64_t x, int s) {
|
||||
return s >= 64 ? 0 : x << s;
|
||||
}
|
||||
|
||||
static inline uint64_t go_shr(uint64_t x, int s) {
|
||||
return s >= 64 ? 0 : x >> s;
|
||||
}
|
||||
|
||||
// len64 returns the minimum number of bits required to represent x;
|
||||
// it is 0 for x == 0. (Go's bits.Len64.)
|
||||
static inline int len64(uint64_t x) {
|
||||
return x == 0 ? 0 : 64 - __builtin_clzll(x);
|
||||
}
|
||||
|
||||
// mul64 returns the 128-bit product of x and y as hi, lo. (Go's bits.Mul64.)
|
||||
static inline void mul64(uint64_t x, uint64_t y, uint64_t *hi, uint64_t *lo) {
|
||||
unsigned __int128 p = (unsigned __int128) x * (unsigned __int128) y;
|
||||
*hi = (uint64_t) (p >> 64);
|
||||
*lo = (uint64_t) p;
|
||||
}
|
||||
|
||||
// mul64hi returns just the high half of the 128-bit product of x and y.
|
||||
static inline uint64_t mul64hi(uint64_t x, uint64_t y) {
|
||||
return (uint64_t) (((unsigned __int128) x * (unsigned __int128) y) >> 64);
|
||||
}
|
||||
|
||||
// ror64 rotates x right by k bits. (Go's bits.RotateLeft64(x, -k).)
|
||||
static inline uint64_t ror64(uint64_t x, int k) {
|
||||
return (x >> k) | (x << (64 - k));
|
||||
}
|
||||
|
||||
// unpack64 returns m, e such that f = m * 2**e.
|
||||
// The caller is expected to have handled 0, NaN, and ±Inf already.
|
||||
// The sign of f is ignored.
|
||||
static inline void unpack64(double f, uint64_t *mp, int *ep) {
|
||||
const int shift = 64 - 53;
|
||||
const int minExp = -(1074 + shift);
|
||||
|
||||
uint64_t b;
|
||||
memcpy(&b, &f, sizeof(b));
|
||||
|
||||
uint64_t m = (1ULL << 63) | ((b & ((1ULL << 52) - 1)) << shift);
|
||||
int e = (int) ((b >> 52) & ((1ULL << shift) - 1));
|
||||
if (e == 0) {
|
||||
m &= ~(1ULL << 63);
|
||||
e = minExp;
|
||||
int s = 64 - len64(m);
|
||||
*mp = m << s;
|
||||
*ep = e - s;
|
||||
return;
|
||||
}
|
||||
*mp = m;
|
||||
*ep = (e - 1) + minExp;
|
||||
}
|
||||
|
||||
// An unrounded represents an unrounded value: the top 62 bits are the value
|
||||
// scaled by 4, the low bit is a sticky bit recording a nonzero remainder.
|
||||
typedef uint64_t unrounded;
|
||||
|
||||
static inline uint64_t un_floor(unrounded u) {
|
||||
return (u + 0) >> 2;
|
||||
}
|
||||
|
||||
static inline uint64_t un_round(unrounded u) {
|
||||
return (u + 1 + ((u >> 2) & 1)) >> 2;
|
||||
}
|
||||
|
||||
static inline uint64_t un_ceil(unrounded u) {
|
||||
return (u + 3) >> 2;
|
||||
}
|
||||
|
||||
static inline unrounded un_nudge(unrounded u, int delta) {
|
||||
return u + (unrounded) (int64_t) delta;
|
||||
}
|
||||
|
||||
static inline unrounded un_div(unrounded u, uint64_t d) {
|
||||
uint64_t x = u;
|
||||
return (x / d) | (u & 1) | (uint64_t) (x % d != 0);
|
||||
}
|
||||
|
||||
// log10_pow2(x) returns ⌊log₁₀ 2**x⌋ = ⌊x * log₁₀ 2⌋.
|
||||
static inline int log10_pow2(int x) {
|
||||
// log₁₀ 2 ≈ 0.30102999566 ≈ 78913 / 2^18
|
||||
return (int) (((int64_t) x * 78913) >> 18);
|
||||
}
|
||||
|
||||
// log2_pow10(x) returns ⌊log₂ 10**x⌋ = ⌊x * log₂ 10⌋.
|
||||
static inline int log2_pow10(int x) {
|
||||
// log₂ 10 ≈ 3.32192809489 ≈ 108853 / 2^15
|
||||
return (int) (((int64_t) x * 108853) >> 15);
|
||||
}
|
||||
|
||||
// skewed computes the skewed footprint of m * 2**e,
|
||||
// which is ⌊log₁₀ 3/4 * 2**e⌋ = ⌊e*(log₁₀ 2)-(log₁₀ 4/3)⌋.
|
||||
static inline int skewed(int e) {
|
||||
return (int) (((int64_t) e * 631305 - 261663) >> 21);
|
||||
}
|
||||
|
||||
// uint64pow10[x] is 10**x.
|
||||
static const uint64_t uint64pow10[20] = {
|
||||
1ULL, 10ULL, 100ULL, 1000ULL, 10000ULL,
|
||||
100000ULL, 1000000ULL, 10000000ULL, 100000000ULL, 1000000000ULL,
|
||||
10000000000ULL, 100000000000ULL, 1000000000000ULL, 10000000000000ULL, 100000000000000ULL,
|
||||
1000000000000000ULL, 10000000000000000ULL, 100000000000000000ULL, 1000000000000000000ULL,
|
||||
10000000000000000000ULL};
|
||||
|
||||
// A scaler holds derived scaling constants for a given e, p pair.
|
||||
struct scaler {
|
||||
pm_hi_lo pm;
|
||||
int s;
|
||||
};
|
||||
|
||||
// prescale returns the scaling constants for e, p.
|
||||
// lp must be log2_pow10(p).
|
||||
static inline scaler prescale(int e, int p, int lp) {
|
||||
scaler c;
|
||||
c.pm = pow10_tab[p - pow10Min];
|
||||
c.s = -(e + lp + 3);
|
||||
return c;
|
||||
}
|
||||
|
||||
// uscale returns unround(x * 2**e * 10**p).
|
||||
// The caller should pass c = prescale(e, p, log2_pow10(p))
|
||||
// and should have left-justified x so its high bit is set.
|
||||
static inline unrounded uscale(uint64_t x, scaler c) {
|
||||
uint64_t hi, mid;
|
||||
mul64(x, c.pm.hi, &hi, &mid);
|
||||
uint64_t sticky = 1;
|
||||
if ((hi & ((1ULL << (c.s & 63)) - 1)) == 0) {
|
||||
uint64_t mid2 = mul64hi(x, c.pm.lo);
|
||||
sticky = (uint64_t) (mid - mid2 > 1);
|
||||
hi -= (uint64_t) (mid < mid2);
|
||||
}
|
||||
return go_shr(hi, c.s) | sticky;
|
||||
}
|
||||
|
||||
// trim_zeros removes trailing zeros from x * 10**p.
|
||||
// If x ends in k zeros, trim_zeros returns x/10**k, p+k.
|
||||
// It assumes that x ends in at most 16 zeros.
|
||||
static inline void trim_zeros(uint64_t *xp, int *pp) {
|
||||
const uint64_t maxUint64 = ~(uint64_t) 0;
|
||||
const uint64_t inv5p8 = 0xc767074b22e90e21ULL; // inverse of 5**8
|
||||
const uint64_t inv5p4 = 0xd288ce703afb7e91ULL; // inverse of 5**4
|
||||
const uint64_t inv5p2 = 0x8f5c28f5c28f5c29ULL; // inverse of 5**2
|
||||
const uint64_t inv5 = 0xcccccccccccccccdULL; // inverse of 5
|
||||
|
||||
uint64_t x = *xp;
|
||||
int p = *pp;
|
||||
|
||||
// Cut 1 zero, or else return.
|
||||
uint64_t d = ror64(x * inv5, 1);
|
||||
if (d <= maxUint64 / 10) {
|
||||
x = d;
|
||||
p += 1;
|
||||
} else {
|
||||
*xp = x;
|
||||
*pp = p;
|
||||
return;
|
||||
}
|
||||
|
||||
// Cut 8 zeros, then 4, then 2, then 1.
|
||||
d = ror64(x * inv5p8, 8);
|
||||
if (d <= maxUint64 / 100000000) {
|
||||
x = d;
|
||||
p += 8;
|
||||
}
|
||||
d = ror64(x * inv5p4, 4);
|
||||
if (d <= maxUint64 / 10000) {
|
||||
x = d;
|
||||
p += 4;
|
||||
}
|
||||
d = ror64(x * inv5p2, 2);
|
||||
if (d <= maxUint64 / 100) {
|
||||
x = d;
|
||||
p += 2;
|
||||
}
|
||||
d = ror64(x * inv5, 1);
|
||||
if (d <= maxUint64 / 10) {
|
||||
x = d;
|
||||
p += 1;
|
||||
}
|
||||
|
||||
*xp = x;
|
||||
*pp = p;
|
||||
}
|
||||
|
||||
// shortest computes the shortest formatting of f,
|
||||
// using as few digits as possible that will still round trip
|
||||
// back to the original float64.
|
||||
void shortest(double f, uint64_t *dp, int *pp) {
|
||||
const int minExp = -1085;
|
||||
|
||||
uint64_t m;
|
||||
int e;
|
||||
unpack64(f, &m, &e);
|
||||
|
||||
uint64_t mn;
|
||||
int p;
|
||||
int z = 11; // extra zero bits at bottom of m; 11 for 53-bit m
|
||||
if (m == (1ULL << 63) && e > minExp) {
|
||||
p = -skewed(e + z);
|
||||
mn = m - go_shl(1, z - 2); // mn = m - 1/4 * 2**(e+z)
|
||||
} else {
|
||||
if (e < minExp) {
|
||||
z = 11 + (minExp - e);
|
||||
}
|
||||
p = -log10_pow2(e + z);
|
||||
mn = m - go_shl(1, z - 1); // mn = m - 1/2 * 2**(e+z)
|
||||
}
|
||||
uint64_t mx = m + go_shl(1, z - 1); // mx = m + 1/2 * 2**(e+z)
|
||||
int odd = (int) (go_shr(m, z) & 1);
|
||||
|
||||
scaler pre = prescale(e, p, log2_pow10(p));
|
||||
uint64_t dmin = un_ceil(un_nudge(uscale(mn, pre), +odd));
|
||||
uint64_t dmax = un_floor(un_nudge(uscale(mx, pre), -odd));
|
||||
|
||||
uint64_t d = dmax / 10;
|
||||
if (d * 10 >= dmin) {
|
||||
int q = -(p - 1);
|
||||
trim_zeros(&d, &q);
|
||||
*dp = d;
|
||||
*pp = q;
|
||||
return;
|
||||
}
|
||||
d = dmin;
|
||||
if (d < dmax) {
|
||||
d = un_round(uscale(m, pre));
|
||||
}
|
||||
*dp = d;
|
||||
*pp = -p;
|
||||
}
|
||||
|
||||
// digits returns the number of decimal digits in d.
|
||||
int digits(uint64_t d) {
|
||||
int nd = log10_pow2(len64(d));
|
||||
return nd + (int) (d >= uint64pow10[nd]);
|
||||
}
|
||||
|
||||
// i2a is the formatting of 00..99 concatenated,
|
||||
// a lookup table for formatting [0, 99].
|
||||
static const char i2a[201] =
|
||||
"00010203040506070809"
|
||||
"10111213141516171819"
|
||||
"20212223242526272829"
|
||||
"30313233343536373839"
|
||||
"40414243444546474849"
|
||||
"50515253545556575859"
|
||||
"60616263646566676869"
|
||||
"70717273747576777879"
|
||||
"80818283848586878889"
|
||||
"90919293949596979899";
|
||||
|
||||
// format_base10 formats the decimal representation of u into the nd bytes
|
||||
// at a. The caller is responsible for ensuring that nd is big enough to hold
|
||||
// u. If nd is too big, leading zeros will be filled in as needed.
|
||||
static inline void format_base10(char *a, int nd, uint64_t u) {
|
||||
while (nd >= 8) {
|
||||
// Format last 8 digits (4 pairs).
|
||||
uint32_t x3210 = (uint32_t) (u % 100000000);
|
||||
u /= 100000000;
|
||||
uint32_t x32 = x3210 / 10000, x10 = x3210 % 10000;
|
||||
uint32_t x1 = (x10 / 100) * 2, x0 = (x10 % 100) * 2;
|
||||
uint32_t x3 = (x32 / 100) * 2, x2 = (x32 % 100) * 2;
|
||||
a[nd - 1] = i2a[x0 + 1];
|
||||
a[nd - 2] = i2a[x0];
|
||||
a[nd - 3] = i2a[x1 + 1];
|
||||
a[nd - 4] = i2a[x1];
|
||||
a[nd - 5] = i2a[x2 + 1];
|
||||
a[nd - 6] = i2a[x2];
|
||||
a[nd - 7] = i2a[x3 + 1];
|
||||
a[nd - 8] = i2a[x3];
|
||||
nd -= 8;
|
||||
}
|
||||
|
||||
uint32_t x = (uint32_t) u;
|
||||
if (nd >= 4) {
|
||||
// Format last 4 digits (2 pairs).
|
||||
uint32_t x10 = x % 10000;
|
||||
x /= 10000;
|
||||
uint32_t x1 = (x10 / 100) * 2, x0 = (x10 % 100) * 2;
|
||||
a[nd - 1] = i2a[x0 + 1];
|
||||
a[nd - 2] = i2a[x0];
|
||||
a[nd - 3] = i2a[x1 + 1];
|
||||
a[nd - 4] = i2a[x1];
|
||||
nd -= 4;
|
||||
}
|
||||
if (nd >= 2) {
|
||||
// Format last 2 digits.
|
||||
uint32_t x0 = (x % 100) * 2;
|
||||
x /= 100;
|
||||
a[nd - 1] = i2a[x0 + 1];
|
||||
a[nd - 2] = i2a[x0];
|
||||
nd -= 2;
|
||||
}
|
||||
if (nd > 0) {
|
||||
// Format final digit.
|
||||
a[0] = (char) ('0' + x);
|
||||
}
|
||||
}
|
||||
|
||||
// write_exponent appends the exponent k the way milo::WriteExponent() does:
|
||||
// a sign, then one, two, or three digits with no leading zero padding.
|
||||
static inline int write_exponent(char *s, int k) {
|
||||
int n = 0;
|
||||
if (k < 0) {
|
||||
s[n++] = '-';
|
||||
k = -k;
|
||||
} else {
|
||||
s[n++] = '+';
|
||||
}
|
||||
|
||||
if (k >= 100) {
|
||||
s[n++] = (char) ('0' + k / 100);
|
||||
k %= 100;
|
||||
s[n++] = i2a[k * 2];
|
||||
s[n++] = i2a[k * 2 + 1];
|
||||
} else if (k >= 10) {
|
||||
s[n++] = i2a[k * 2];
|
||||
s[n++] = i2a[k * 2 + 1];
|
||||
} else {
|
||||
s[n++] = (char) ('0' + k);
|
||||
}
|
||||
return n;
|
||||
}
|
||||
|
||||
// format renders d * 10**p, negated if negative, choosing between plain and
|
||||
// exponential notation exactly as milo::Prettify() does.
|
||||
int format(char *buf, uint64_t d, int p, int nd, bool negative) {
|
||||
char *s = buf;
|
||||
if (negative) {
|
||||
*s++ = '-';
|
||||
}
|
||||
|
||||
const int kk = nd + p; // 10^(kk-1) <= v < 10^kk
|
||||
|
||||
if (nd <= kk && kk <= 21) {
|
||||
// 1234e7 -> 12340000000
|
||||
format_base10(s, nd, d);
|
||||
memset(s + nd, '0', (size_t) (kk - nd));
|
||||
return (int) (s - buf) + kk;
|
||||
}
|
||||
|
||||
if (0 < kk && kk <= 21) {
|
||||
// 1234e-2 -> 12.34
|
||||
// Lay the digits down one byte high, then slide the integer part
|
||||
// back down over the gap, which leaves room for the point.
|
||||
format_base10(s + 1, nd, d);
|
||||
memmove(s, s + 1, (size_t) kk);
|
||||
s[kk] = '.';
|
||||
return (int) (s - buf) + nd + 1;
|
||||
}
|
||||
|
||||
if (-6 < kk && kk <= 0) {
|
||||
// 1234e-6 -> 0.001234
|
||||
s[0] = '0';
|
||||
s[1] = '.';
|
||||
memset(s + 2, '0', (size_t) -kk);
|
||||
format_base10(s + 2 - kk, nd, d);
|
||||
return (int) (s - buf) + 2 - kk + nd;
|
||||
}
|
||||
|
||||
int n;
|
||||
if (nd == 1) {
|
||||
// 1e30
|
||||
s[0] = (char) ('0' + d);
|
||||
n = 1;
|
||||
} else {
|
||||
// 1234e30 -> 1.234e33
|
||||
format_base10(s + 1, nd, d);
|
||||
s[0] = s[1];
|
||||
s[1] = '.';
|
||||
n = nd + 1;
|
||||
}
|
||||
s[n++] = 'e';
|
||||
n += write_exponent(s + n, kk - 1);
|
||||
return (int) (s - buf) + n;
|
||||
}
|
||||
|
||||
std::string dtoa(double value) {
|
||||
if (std::isnan(value)) {
|
||||
return "nan";
|
||||
}
|
||||
if (std::isinf(value)) {
|
||||
if (value < 0) {
|
||||
return "-inf";
|
||||
} else {
|
||||
return "inf";
|
||||
}
|
||||
}
|
||||
if (value == 0) {
|
||||
return "0";
|
||||
}
|
||||
|
||||
uint64_t d;
|
||||
int p;
|
||||
shortest(value, &d, &p);
|
||||
|
||||
char buf[32];
|
||||
int n = format(buf, d, p, digits(d), value < 0);
|
||||
return std::string(buf, (size_t) n);
|
||||
}
|
||||
|
||||
} // namespace fpfmt
|
||||
@@ -0,0 +1,14 @@
|
||||
// C-callable shortest-float formatting, for jsonpull.
|
||||
// The implementation lives in text.cpp and calls fpfmt::dtoa().
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif
|
||||
|
||||
// dtoa_shortest returns a newly strdup()ed shortest decimal form of val.
|
||||
// The caller owns the result.
|
||||
char *dtoa_shortest(double val);
|
||||
|
||||
#ifdef __cplusplus
|
||||
}
|
||||
#endif
|
||||
@@ -0,0 +1,38 @@
|
||||
// C++ port of Russ Cox's fpfmt shortest-float formatting algorithm,
|
||||
// from https://github.com/rsc/fpfmt (fpfmt.go).
|
||||
//
|
||||
// The original Go code is Copyright 2025 The Go Authors and is covered by
|
||||
// the BSD-style license in fpfmt/LICENSE.txt.
|
||||
//
|
||||
// fpfmt::dtoa() is a drop-in replacement for milo::dtoa_milo(): it produces
|
||||
// the same output format (JSON-ish shortest round-trippable decimal, with
|
||||
// "nan", "inf", "-inf" for the non-finite cases), but always chooses the
|
||||
// genuinely shortest digit string, where Grisu2 sometimes emits one digit
|
||||
// more than necessary.
|
||||
|
||||
#pragma once
|
||||
|
||||
#include <stdint.h>
|
||||
|
||||
#include <string>
|
||||
|
||||
namespace fpfmt {
|
||||
|
||||
// shortest computes the shortest decimal d * 10**p that round-trips back to f.
|
||||
// The caller must have already excluded 0, NaN, and ±Inf. The sign of f is
|
||||
// ignored; the magnitude is what is formatted.
|
||||
void shortest(double f, uint64_t *d, int *p);
|
||||
|
||||
// digits returns the number of decimal digits in d (d must be nonzero).
|
||||
int digits(uint64_t d);
|
||||
|
||||
// format writes the milo-compatible rendering of (negative ? -1 : 1) * d * 10**p
|
||||
// into buf, which must have room for at least 32 bytes, and returns the number
|
||||
// of bytes written. nd must be digits(d).
|
||||
int format(char *buf, uint64_t d, int p, int nd, bool negative);
|
||||
|
||||
// dtoa formats value the way milo::dtoa_milo() did, but using the shortest
|
||||
// possible digit string.
|
||||
std::string dtoa(double value);
|
||||
|
||||
} // namespace fpfmt
|
||||
@@ -0,0 +1,720 @@
|
||||
// Generated from https://github.com/rsc/fpfmt pow10tab.go (BSD-style license; see LICENSE.txt).
|
||||
// Code generated by: go run pow10gen.go. DO NOT EDIT.
|
||||
|
||||
#pragma once
|
||||
|
||||
#include <stdint.h>
|
||||
|
||||
namespace fpfmt {
|
||||
|
||||
constexpr int pow10Min = -348;
|
||||
constexpr int pow10Max = 347;
|
||||
|
||||
// A pm_hi_lo represents hi<<64 - lo.
|
||||
struct pm_hi_lo {
|
||||
uint64_t hi;
|
||||
uint64_t lo;
|
||||
};
|
||||
|
||||
// pow10_tab holds 128-bit mantissas of powers of 10.
|
||||
// The values are scaled so the high bit is always set.
|
||||
static const pm_hi_lo pow10_tab[pow10Max - pow10Min + 1] = {
|
||||
{0xfa8fd5a0081c0289ULL, 0xe8cd3796329f1bacULL}, // 1e-348 * 2**1284
|
||||
{0x9c99e58405118196ULL, 0xf18042bddfa3714bULL}, // 1e-347 * 2**1280
|
||||
{0xc3c05ee50655e1fbULL, 0xade0536d578c4d9eULL}, // 1e-346 * 2**1277
|
||||
{0xf4b0769e47eb5a79ULL, 0x19586848ad6f6106ULL}, // 1e-345 * 2**1274
|
||||
{0x98ee4a22ecf3188cULL, 0x6fd7412d6c659ca3ULL}, // 1e-344 * 2**1270
|
||||
{0xbf29dcaba82fdeafULL, 0x8bcd1178c77f03ccULL}, // 1e-343 * 2**1267
|
||||
{0xeef453d6923bd65bULL, 0xeec055d6f95ec4c0ULL}, // 1e-342 * 2**1264
|
||||
{0x9558b4661b6565f9ULL, 0xb53835a65bdb3af8ULL}, // 1e-341 * 2**1260
|
||||
{0xbaaee17fa23ebf77ULL, 0xa286430ff2d209b6ULL}, // 1e-340 * 2**1257
|
||||
{0xe95a99df8ace6f54ULL, 0x0b27d3d3ef868c23ULL}, // 1e-339 * 2**1254
|
||||
{0x91d8a02bb6c10595ULL, 0x86f8e46475b41796ULL}, // 1e-338 * 2**1250
|
||||
{0xb64ec836a47146faULL, 0x68b71d7d93211d7bULL}, // 1e-337 * 2**1247
|
||||
{0xe3e27a444d8d98b8ULL, 0x02e4e4dcf7e964daULL}, // 1e-336 * 2**1244
|
||||
{0x8e6d8c6ab0787f73ULL, 0x01cf0f0a1af1df08ULL}, // 1e-335 * 2**1240
|
||||
{0xb208ef855c969f50ULL, 0x4242d2cca1ae56caULL}, // 1e-334 * 2**1237
|
||||
{0xde8b2b66b3bc4724ULL, 0x52d3877fca19ec7dULL}, // 1e-333 * 2**1234
|
||||
{0x8b16fb203055ac77ULL, 0xb3c434afde5033ceULL}, // 1e-332 * 2**1230
|
||||
{0xaddcb9e83c6b1794ULL, 0x20b541dbd5e440c2ULL}, // 1e-331 * 2**1227
|
||||
{0xd953e8624b85dd79ULL, 0x28e29252cb5d50f2ULL}, // 1e-330 * 2**1224
|
||||
{0x87d4713d6f33aa6cULL, 0x798d9b73bf1a5297ULL}, // 1e-329 * 2**1220
|
||||
{0xa9c98d8ccb009507ULL, 0x97f10250aee0e73dULL}, // 1e-328 * 2**1217
|
||||
{0xd43bf0effdc0ba49ULL, 0xfded42e4da99210dULL}, // 1e-327 * 2**1214
|
||||
{0x84a57695fe98746eULL, 0xfeb449cf089fb4a8ULL}, // 1e-326 * 2**1210
|
||||
{0xa5ced43b7e3e9189ULL, 0xbe615c42cac7a1d2ULL}, // 1e-325 * 2**1207
|
||||
{0xcf42894a5dce35ebULL, 0xadf9b3537d798a46ULL}, // 1e-324 * 2**1204
|
||||
{0x818995ce7aa0e1b3ULL, 0x8cbc10142e6bf66cULL}, // 1e-323 * 2**1200
|
||||
{0xa1ebfb4219491a20ULL, 0xefeb14193a06f407ULL}, // 1e-322 * 2**1197
|
||||
{0xca66fa129f9b60a7ULL, 0x2be5d91f8888b109ULL}, // 1e-321 * 2**1194
|
||||
{0xfd00b897478238d1ULL, 0x76df4f676aaadd4bULL}, // 1e-320 * 2**1191
|
||||
{0x9e20735e8cb16383ULL, 0xaa4b91a0a2aaca4fULL}, // 1e-319 * 2**1187
|
||||
{0xc5a890362fddbc63ULL, 0x14de7608cb557ce2ULL}, // 1e-318 * 2**1184
|
||||
{0xf712b443bbd52b7cULL, 0x5a16138afe2adc1bULL}, // 1e-317 * 2**1181
|
||||
{0x9a6bb0aa55653b2eULL, 0xb84dcc36dedac991ULL}, // 1e-316 * 2**1177
|
||||
{0xc1069cd4eabe89f9ULL, 0x66613f4496917bf5ULL}, // 1e-315 * 2**1174
|
||||
{0xf148440a256e2c77ULL, 0x3ff98f15bc35daf2ULL}, // 1e-314 * 2**1171
|
||||
{0x96cd2a865764dbcbULL, 0xc7fbf96d95a1a8d7ULL}, // 1e-313 * 2**1167
|
||||
{0xbc807527ed3e12bdULL, 0x39faf7c8fb0a130dULL}, // 1e-312 * 2**1164
|
||||
{0xeba09271e88d976cULL, 0x0879b5bb39cc97d1ULL}, // 1e-311 * 2**1161
|
||||
{0x93445b8731587ea4ULL, 0x854c1195041fdee2ULL}, // 1e-310 * 2**1157
|
||||
{0xb8157268fdae9e4dULL, 0xa69f15fa4527d69bULL}, // 1e-309 * 2**1154
|
||||
{0xe61acf033d1a45e0ULL, 0x9046db78d671cc42ULL}, // 1e-308 * 2**1151
|
||||
{0x8fd0c16206306bacULL, 0x5a2c492b86071fa9ULL}, // 1e-307 * 2**1147
|
||||
{0xb3c4f1ba87bc8697ULL, 0x70b75b766788e793ULL}, // 1e-306 * 2**1144
|
||||
{0xe0b62e2929aba83dULL, 0xcce53254016b2178ULL}, // 1e-305 * 2**1141
|
||||
{0x8c71dcd9ba0b4926ULL, 0x600f3f7480e2f4ebULL}, // 1e-304 * 2**1137
|
||||
{0xaf8e5410288e1b70ULL, 0xf8130f51a11bb226ULL}, // 1e-303 * 2**1134
|
||||
{0xdb71e91432b1a24bULL, 0x3617d32609629eafULL}, // 1e-302 * 2**1131
|
||||
{0x892731ac9faf056fULL, 0x41cee3f7c5dda32dULL}, // 1e-301 * 2**1127
|
||||
{0xab70fe17c79ac6cbULL, 0x92429cf5b7550bf9ULL}, // 1e-300 * 2**1124
|
||||
{0xd64d3d9db981787eULL, 0xf6d34433252a4ef7ULL}, // 1e-299 * 2**1121
|
||||
{0x85f0468293f0eb4fULL, 0xda440a9ff73a715aULL}, // 1e-298 * 2**1117
|
||||
{0xa76c582338ed2622ULL, 0x50d50d47f5090db1ULL}, // 1e-297 * 2**1114
|
||||
{0xd1476e2c07286fabULL, 0xe50a5099f24b511eULL}, // 1e-296 * 2**1111
|
||||
{0x82cca4db847945cbULL, 0xaf267260376f12b2ULL}, // 1e-295 * 2**1107
|
||||
{0xa37fce126597973dULL, 0x1af00ef8454ad75fULL}, // 1e-294 * 2**1104
|
||||
{0xcc5fc196fefd7d0dULL, 0xe1ac12b6569d8d37ULL}, // 1e-293 * 2**1101
|
||||
{0xff77b1fcbebcdc50ULL, 0xda171763ec44f085ULL}, // 1e-292 * 2**1098
|
||||
{0x9faacf3df73609b2ULL, 0x884e6e9e73ab1653ULL}, // 1e-291 * 2**1094
|
||||
{0xc795830d75038c1eULL, 0x2a620a461095dbe8ULL}, // 1e-290 * 2**1091
|
||||
{0xf97ae3d0d2446f26ULL, 0xb4fa8cd794bb52e2ULL}, // 1e-289 * 2**1088
|
||||
{0x9becce62836ac578ULL, 0xb11c9806bcf513cdULL}, // 1e-288 * 2**1084
|
||||
{0xc2e801fb244576d6ULL, 0xdd63be086c3258c0ULL}, // 1e-287 * 2**1081
|
||||
{0xf3a20279ed56d48bULL, 0x94bcad8a873eeef0ULL}, // 1e-286 * 2**1078
|
||||
{0x9845418c345644d7ULL, 0x7cf5ec7694875556ULL}, // 1e-285 * 2**1074
|
||||
{0xbe5691ef416bd60dULL, 0xdc33679439a92aacULL}, // 1e-284 * 2**1071
|
||||
{0xedec366b11c6cb90ULL, 0xd340417948137557ULL}, // 1e-283 * 2**1068
|
||||
{0x94b3a202eb1c3f3aULL, 0x840828ebcd0c2956ULL}, // 1e-282 * 2**1064
|
||||
{0xb9e08a83a5e34f08ULL, 0x250a3326c04f33acULL}, // 1e-281 * 2**1061
|
||||
{0xe858ad248f5c22caULL, 0x2e4cbff070630097ULL}, // 1e-280 * 2**1058
|
||||
{0x91376c36d99995bfULL, 0xdceff7f6463de05eULL}, // 1e-279 * 2**1054
|
||||
{0xb58547448ffffb2eULL, 0x542bf5f3d7cd5875ULL}, // 1e-278 * 2**1051
|
||||
{0xe2e69915b3fff9faULL, 0xe936f370cdc0ae93ULL}, // 1e-277 * 2**1048
|
||||
{0x8dd01fad907ffc3cULL, 0x51c2582680986d1cULL}, // 1e-276 * 2**1044
|
||||
{0xb1442798f49ffb4bULL, 0x6632ee3020be8863ULL}, // 1e-275 * 2**1041
|
||||
{0xdd95317f31c7fa1eULL, 0xbfbfa9bc28ee2a7cULL}, // 1e-274 * 2**1038
|
||||
{0x8a7d3eef7f1cfc53ULL, 0xb7d7ca159994da8dULL}, // 1e-273 * 2**1034
|
||||
{0xad1c8eab5ee43b67ULL, 0x25cdbc9afffa1130ULL}, // 1e-272 * 2**1031
|
||||
{0xd863b256369d4a41ULL, 0x6f412bc1bff8957dULL}, // 1e-271 * 2**1028
|
||||
{0x873e4f75e2224e69ULL, 0xa588bb5917fb5d6eULL}, // 1e-270 * 2**1024
|
||||
{0xa90de3535aaae203ULL, 0x8eeaea2f5dfa34c9ULL}, // 1e-269 * 2**1021
|
||||
{0xd3515c2831559a84ULL, 0xf2a5a4bb3578c1fcULL}, // 1e-268 * 2**1018
|
||||
{0x8412d9991ed58092ULL, 0x17a786f5016b793dULL}, // 1e-267 * 2**1014
|
||||
{0xa5178fff668ae0b7ULL, 0x9d9168b241c6578dULL}, // 1e-266 * 2**1011
|
||||
{0xce5d73ff402d98e4ULL, 0x04f5c2ded237ed70ULL}, // 1e-265 * 2**1008
|
||||
{0x80fa687f881c7f8fULL, 0x831999cb4362f466ULL}, // 1e-264 * 2**1004
|
||||
{0xa139029f6a239f73ULL, 0xe3e0003e143bb17fULL}, // 1e-263 * 2**1001
|
||||
{0xc987434744ac874fULL, 0x5cd8004d994a9ddfULL}, // 1e-262 * 2**998
|
||||
{0xfbe9141915d7a923ULL, 0xb40e0060ff9d4557ULL}, // 1e-261 * 2**995
|
||||
{0x9d71ac8fada6c9b6ULL, 0x9088c03c9fc24b56ULL}, // 1e-260 * 2**991
|
||||
{0xc4ce17b399107c23ULL, 0x34aaf04bc7b2de2cULL}, // 1e-259 * 2**988
|
||||
{0xf6019da07f549b2cULL, 0x81d5ac5eb99f95b7ULL}, // 1e-258 * 2**985
|
||||
{0x99c102844f94e0fcULL, 0xd1258bbb3403bd92ULL}, // 1e-257 * 2**981
|
||||
{0xc0314325637a193aULL, 0x056eeeaa0104acf7ULL}, // 1e-256 * 2**978
|
||||
{0xf03d93eebc589f89ULL, 0x86caaa548145d835ULL}, // 1e-255 * 2**975
|
||||
{0x96267c7535b763b6ULL, 0xb43eaa74d0cba721ULL}, // 1e-254 * 2**971
|
||||
{0xbbb01b9283253ca3ULL, 0x614e551204fe90e9ULL}, // 1e-253 * 2**968
|
||||
{0xea9c227723ee8bccULL, 0xb9a1ea56863e3523ULL}, // 1e-252 * 2**965
|
||||
{0x92a1958a76751760ULL, 0xf405327613e6e136ULL}, // 1e-251 * 2**961
|
||||
{0xb749faed14125d37ULL, 0x31067f1398e09984ULL}, // 1e-250 * 2**958
|
||||
{0xe51c79a85916f485ULL, 0x7d481ed87f18bfe5ULL}, // 1e-249 * 2**955
|
||||
{0x8f31cc0937ae58d3ULL, 0x2e4d13474f6f77efULL}, // 1e-248 * 2**951
|
||||
{0xb2fe3f0b8599ef08ULL, 0x79e05819234b55eaULL}, // 1e-247 * 2**948
|
||||
{0xdfbdcece67006acaULL, 0x98586e1f6c1e2b65ULL}, // 1e-246 * 2**945
|
||||
{0x8bd6a141006042beULL, 0x1f3744d3a392db1fULL}, // 1e-245 * 2**941
|
||||
{0xaecc49914078536eULL, 0xa70516088c7791e7ULL}, // 1e-244 * 2**938
|
||||
{0xda7f5bf590966849ULL, 0x50c65b8aaf957661ULL}, // 1e-243 * 2**935
|
||||
{0x888f99797a5e012eULL, 0x927bf936adbd69fcULL}, // 1e-242 * 2**931
|
||||
{0xaab37fd7d8f58179ULL, 0x371af784592cc47cULL}, // 1e-241 * 2**928
|
||||
{0xd5605fcdcf32e1d7ULL, 0x04e1b5656f77f59bULL}, // 1e-240 * 2**925
|
||||
{0x855c3be0a17fcd27ULL, 0xa30d115f65aaf980ULL}, // 1e-239 * 2**921
|
||||
{0xa6b34ad8c9dfc070ULL, 0x0bd055b73f15b7e1ULL}, // 1e-238 * 2**918
|
||||
{0xd0601d8efc57b08cULL, 0x0ec46b250edb25d9ULL}, // 1e-237 * 2**915
|
||||
{0x823c12795db6ce58ULL, 0x893ac2f72948f7a7ULL}, // 1e-236 * 2**911
|
||||
{0xa2cb1717b52481eeULL, 0xab8973b4f39b3591ULL}, // 1e-235 * 2**908
|
||||
{0xcb7ddcdda26da269ULL, 0x566bd0a2308202f6ULL}, // 1e-234 * 2**905
|
||||
{0xfe5d54150b090b03ULL, 0x2c06c4cabca283b3ULL}, // 1e-233 * 2**902
|
||||
{0x9efa548d26e5a6e2ULL, 0x3b843afeb5e59250ULL}, // 1e-232 * 2**898
|
||||
{0xc6b8e9b0709f109bULL, 0xca6549be635ef6e4ULL}, // 1e-231 * 2**895
|
||||
{0xf867241c8cc6d4c1ULL, 0x3cfe9c2dfc36b49dULL}, // 1e-230 * 2**892
|
||||
{0x9b407691d7fc44f9ULL, 0x861f219cbda230e2ULL}, // 1e-229 * 2**888
|
||||
{0xc21094364dfb5637ULL, 0x67a6ea03ed0abd1bULL}, // 1e-228 * 2**885
|
||||
{0xf294b943e17a2bc5ULL, 0xc190a484e84d6c62ULL}, // 1e-227 * 2**882
|
||||
{0x979cf3ca6cec5b5bULL, 0x58fa66d3113063bdULL}, // 1e-226 * 2**878
|
||||
{0xbd8430bd08277232ULL, 0xaf390087d57c7cacULL}, // 1e-225 * 2**875
|
||||
{0xece53cec4a314ebeULL, 0x5b0740a9cadb9bd7ULL}, // 1e-224 * 2**872
|
||||
{0x940f4613ae5ed137ULL, 0x78e4886a1ec94166ULL}, // 1e-223 * 2**868
|
||||
{0xb913179899f68585ULL, 0xd71daa84a67b91c0ULL}, // 1e-222 * 2**865
|
||||
{0xe757dd7ec07426e6ULL, 0xcce51525d01a7630ULL}, // 1e-221 * 2**862
|
||||
{0x9096ea6f38489850ULL, 0xc00f2d37a21089deULL}, // 1e-220 * 2**858
|
||||
{0xb4bca50b065abe64ULL, 0xf012f8858a94ac56ULL}, // 1e-219 * 2**855
|
||||
{0xe1ebce4dc7f16dfcULL, 0x2c17b6a6ed39d76bULL}, // 1e-218 * 2**852
|
||||
{0x8d3360f09cf6e4beULL, 0x9b8ed228544426a3ULL}, // 1e-217 * 2**848
|
||||
{0xb080392cc4349dedULL, 0x427286b26955304cULL}, // 1e-216 * 2**845
|
||||
{0xdca04777f541c568ULL, 0x130f285f03aa7c5fULL}, // 1e-215 * 2**842
|
||||
{0x89e42caaf9491b61ULL, 0x0be9793b624a8dbbULL}, // 1e-214 * 2**838
|
||||
{0xac5d37d5b79b623aULL, 0xcee3d78a3add312aULL}, // 1e-213 * 2**835
|
||||
{0xd77485cb25823ac8ULL, 0x829ccd6cc9947d74ULL}, // 1e-212 * 2**832
|
||||
{0x86a8d39ef77164bdULL, 0x51a20063fdfcce68ULL}, // 1e-211 * 2**828
|
||||
{0xa8530886b54dbdecULL, 0x260a807cfd7c0203ULL}, // 1e-210 * 2**825
|
||||
{0xd267caa862a12d67ULL, 0x2f8d209c3cdb0284ULL}, // 1e-209 * 2**822
|
||||
{0x8380dea93da4bc61ULL, 0xbdb83461a608e192ULL}, // 1e-208 * 2**818
|
||||
{0xa46116538d0deb79ULL, 0xad26417a0f8b19f7ULL}, // 1e-207 * 2**815
|
||||
{0xcd795be870516657ULL, 0x986fd1d8936de074ULL}, // 1e-206 * 2**812
|
||||
{0x806bd9714632dff7ULL, 0xff45e3275c24ac49ULL}, // 1e-205 * 2**808
|
||||
{0xa086cfcd97bf97f4ULL, 0x7f175bf1332dd75bULL}, // 1e-204 * 2**805
|
||||
{0xc8a883c0fdaf7df1ULL, 0x9edd32ed7ff94d32ULL}, // 1e-203 * 2**802
|
||||
{0xfad2a4b13d1b5d6dULL, 0x86947fa8dff7a07eULL}, // 1e-202 * 2**799
|
||||
{0x9cc3a6eec6311a64ULL, 0x341ccfc98bfac44fULL}, // 1e-201 * 2**795
|
||||
{0xc3f490aa77bd60fdULL, 0x412403bbeef97563ULL}, // 1e-200 * 2**792
|
||||
{0xf4f1b4d515acb93cULL, 0x116d04aaeab7d2bbULL}, // 1e-199 * 2**789
|
||||
{0x991711052d8bf3c6ULL, 0x8ae422ead2b2e3b5ULL}, // 1e-198 * 2**785
|
||||
{0xbf5cd54678eef0b7ULL, 0x2d9d2ba5875f9ca2ULL}, // 1e-197 * 2**782
|
||||
{0xef340a98172aace5ULL, 0x7904768ee93783cbULL}, // 1e-196 * 2**779
|
||||
{0x9580869f0e7aac0fULL, 0x2ba2ca1951c2b25fULL}, // 1e-195 * 2**775
|
||||
{0xbae0a846d2195713ULL, 0x768b7c9fa6335ef6ULL}, // 1e-194 * 2**772
|
||||
{0xe998d258869facd8ULL, 0xd42e5bc78fc036b4ULL}, // 1e-193 * 2**769
|
||||
{0x91ff83775423cc07ULL, 0x849cf95cb9d82230ULL}, // 1e-192 * 2**765
|
||||
{0xb67f6455292cbf09ULL, 0xe5c437b3e84e2abdULL}, // 1e-191 * 2**762
|
||||
{0xe41f3d6a7377eecbULL, 0xdf3545a0e261b56cULL}, // 1e-190 * 2**759
|
||||
{0x8e938662882af53fULL, 0xab814b848d7d1163ULL}, // 1e-189 * 2**755
|
||||
{0xb23867fb2a35b28eULL, 0x16619e65b0dc55bcULL}, // 1e-188 * 2**752
|
||||
{0xdec681f9f4c31f32ULL, 0x9bfa05ff1d136b2bULL}, // 1e-187 * 2**749
|
||||
{0x8b3c113c38f9f37fULL, 0x217c43bf722c22fbULL}, // 1e-186 * 2**745
|
||||
{0xae0b158b4738705fULL, 0x69db54af4eb72bbaULL}, // 1e-185 * 2**742
|
||||
{0xd98ddaee19068c77ULL, 0xc45229db2264f6a8ULL}, // 1e-184 * 2**739
|
||||
{0x87f8a8d4cfa417caULL, 0x1ab35a28f57f1a29ULL}, // 1e-183 * 2**735
|
||||
{0xa9f6d30a038d1dbdULL, 0xa16030b332dee0b3ULL}, // 1e-182 * 2**732
|
||||
{0xd47487cc8470652cULL, 0x89b83cdfff9698e0ULL}, // 1e-181 * 2**729
|
||||
{0x84c8d4dfd2c63f3cULL, 0xd613260bffbe1f8cULL}, // 1e-180 * 2**725
|
||||
{0xa5fb0a17c777cf0aULL, 0x0b97ef8effada76fULL}, // 1e-179 * 2**722
|
||||
{0xcf79cc9db955c2cdULL, 0x8e7deb72bf99114bULL}, // 1e-178 * 2**719
|
||||
{0x81ac1fe293d599c0ULL, 0x390eb327b7bfaacfULL}, // 1e-177 * 2**715
|
||||
{0xa21727db38cb0030ULL, 0x47525ff1a5af9583ULL}, // 1e-176 * 2**712
|
||||
{0xca9cf1d206fdc03cULL, 0x5926f7ee0f1b7ae3ULL}, // 1e-175 * 2**709
|
||||
{0xfd442e4688bd304bULL, 0x6f70b5e992e2599cULL}, // 1e-174 * 2**706
|
||||
{0x9e4a9cec15763e2fULL, 0x65a671b1fbcd7801ULL}, // 1e-173 * 2**702
|
||||
{0xc5dd44271ad3cdbbULL, 0xbf100e1e7ac0d602ULL}, // 1e-172 * 2**699
|
||||
{0xf7549530e188c129ULL, 0x2ed411a619710b83ULL}, // 1e-171 * 2**696
|
||||
{0x9a94dd3e8cf578baULL, 0x7d448b07cfe6a731ULL}, // 1e-170 * 2**692
|
||||
{0xc13a148e3032d6e8ULL, 0x1c95adc9c3e050feULL}, // 1e-169 * 2**689
|
||||
{0xf18899b1bc3f8ca2ULL, 0x23bb193c34d8653eULL}, // 1e-168 * 2**686
|
||||
{0x96f5600f15a7b7e6ULL, 0xd654efc5a1073f46ULL}, // 1e-167 * 2**682
|
||||
{0xbcb2b812db11a5dfULL, 0x8bea2bb709490f18ULL}, // 1e-166 * 2**679
|
||||
{0xebdf661791d60f57ULL, 0xeee4b6a4cb9b52deULL}, // 1e-165 * 2**676
|
||||
{0x936b9fcebb25c996ULL, 0x354ef226ff4113cbULL}, // 1e-164 * 2**672
|
||||
{0xb84687c269ef3bfcULL, 0xc2a2aeb0bf1158bdULL}, // 1e-163 * 2**669
|
||||
{0xe65829b3046b0afbULL, 0xf34b5a5ceed5aeedULL}, // 1e-162 * 2**666
|
||||
{0x8ff71a0fe2c2e6ddULL, 0xb80f187a15458d54ULL}, // 1e-161 * 2**662
|
||||
{0xb3f4e093db73a094ULL, 0xa612de989a96f0a9ULL}, // 1e-160 * 2**659
|
||||
{0xe0f218b8d25088b9ULL, 0xcf97963ec13cacd3ULL}, // 1e-159 * 2**656
|
||||
{0x8c974f7383725574ULL, 0xe1bebde738c5ec04ULL}, // 1e-158 * 2**652
|
||||
{0xafbd2350644eead0ULL, 0x1a2e6d6106f76705ULL}, // 1e-157 * 2**649
|
||||
{0xdbac6c247d62a584ULL, 0x20ba08b948b540c6ULL}, // 1e-156 * 2**646
|
||||
{0x894bc396ce5da773ULL, 0x94744573cd71487cULL}, // 1e-155 * 2**642
|
||||
{0xab9eb47c81f51150ULL, 0xf99156d0c0cd9a9bULL}, // 1e-154 * 2**639
|
||||
{0xd686619ba27255a3ULL, 0x37f5ac84f1010142ULL}, // 1e-153 * 2**636
|
||||
{0x8613fd0145877586ULL, 0x42f98bd316a0a0c9ULL}, // 1e-152 * 2**632
|
||||
{0xa798fc4196e952e8ULL, 0xd3b7eec7dc48c8fbULL}, // 1e-151 * 2**629
|
||||
{0xd17f3b51fca3a7a1ULL, 0x08a5ea79d35afb3aULL}, // 1e-150 * 2**626
|
||||
{0x82ef85133de648c5ULL, 0x6567b28c2418dd04ULL}, // 1e-149 * 2**622
|
||||
{0xa3ab66580d5fdaf6ULL, 0x3ec19f2f2d1f1445ULL}, // 1e-148 * 2**619
|
||||
{0xcc963fee10b7d1b4ULL, 0xce7206faf866d957ULL}, // 1e-147 * 2**616
|
||||
{0xffbbcfe994e5c620ULL, 0x020e88b9b6808fadULL}, // 1e-146 * 2**613
|
||||
{0x9fd561f1fd0f9bd4ULL, 0x01491574121059ccULL}, // 1e-145 * 2**609
|
||||
{0xc7caba6e7c5382c9ULL, 0x019b5ad11694703fULL}, // 1e-144 * 2**606
|
||||
{0xf9bd690a1b68637cULL, 0xc20231855c398c4fULL}, // 1e-143 * 2**603
|
||||
{0x9c1661a651213e2eULL, 0xf9415ef359a3f7b1ULL}, // 1e-142 * 2**599
|
||||
{0xc31bfa0fe5698db9ULL, 0xb791b6b0300cf59dULL}, // 1e-141 * 2**596
|
||||
{0xf3e2f893dec3f127ULL, 0xa576245c3c103305ULL}, // 1e-140 * 2**593
|
||||
{0x986ddb5c6b3a76b8ULL, 0x0769d6b9a58a1fe3ULL}, // 1e-139 * 2**589
|
||||
{0xbe89523386091466ULL, 0x09444c680eeca7dcULL}, // 1e-138 * 2**586
|
||||
{0xee2ba6c0678b5980ULL, 0x8b955f8212a7d1d3ULL}, // 1e-137 * 2**583
|
||||
{0x94db483840b717f0ULL, 0x573d5bb14ba8e323ULL}, // 1e-136 * 2**579
|
||||
{0xba121a4650e4ddecULL, 0x6d0cb29d9e931becULL}, // 1e-135 * 2**576
|
||||
{0xe896a0d7e51e1567ULL, 0x884fdf450637e2e8ULL}, // 1e-134 * 2**573
|
||||
{0x915e2486ef32cd61ULL, 0xf531eb8b23e2edd1ULL}, // 1e-133 * 2**569
|
||||
{0xb5b5ada8aaff80b9ULL, 0xf27e666decdba945ULL}, // 1e-132 * 2**566
|
||||
{0xe3231912d5bf60e7ULL, 0xef1e000968129396ULL}, // 1e-131 * 2**563
|
||||
{0x8df5efabc5979c90ULL, 0x3572c005e10b9c3eULL}, // 1e-130 * 2**559
|
||||
{0xb1736b96b6fd83b4ULL, 0x42cf7007594e834dULL}, // 1e-129 * 2**556
|
||||
{0xddd0467c64bce4a1ULL, 0x53834c092fa22421ULL}, // 1e-128 * 2**553
|
||||
{0x8aa22c0dbef60ee5ULL, 0x94320f85bdc55694ULL}, // 1e-127 * 2**549
|
||||
{0xad4ab7112eb3929eULL, 0x793e93672d36ac39ULL}, // 1e-126 * 2**546
|
||||
{0xd89d64d57a607745ULL, 0x178e3840f8845748ULL}, // 1e-125 * 2**543
|
||||
{0x87625f056c7c4a8cULL, 0xeeb8e3289b52b68dULL}, // 1e-124 * 2**539
|
||||
{0xa93af6c6c79b5d2eULL, 0x2a671bf2c2276430ULL}, // 1e-123 * 2**536
|
||||
{0xd389b4787982347aULL, 0xb500e2ef72b13d3cULL}, // 1e-122 * 2**533
|
||||
{0x843610cb4bf160ccULL, 0x31208dd5a7aec645ULL}, // 1e-121 * 2**529
|
||||
{0xa54394fe1eedb8ffULL, 0x3d68b14b119a77d7ULL}, // 1e-120 * 2**526
|
||||
{0xce947a3da6a9273fULL, 0x8cc2dd9dd60115cdULL}, // 1e-119 * 2**523
|
||||
{0x811ccc668829b888ULL, 0xf7f9ca82a5c0ada0ULL}, // 1e-118 * 2**519
|
||||
{0xa163ff802a3426a9ULL, 0x35f83d234f30d908ULL}, // 1e-117 * 2**516
|
||||
{0xc9bcff6034c13053ULL, 0x03764c6c22fd0f4aULL}, // 1e-116 * 2**513
|
||||
{0xfc2c3f3841f17c68ULL, 0x4453df872bbc531dULL}, // 1e-115 * 2**510
|
||||
{0x9d9ba7832936edc1ULL, 0x2ab46bb47b55b3f2ULL}, // 1e-114 * 2**506
|
||||
{0xc5029163f384a932ULL, 0xf56186a19a2b20eeULL}, // 1e-113 * 2**503
|
||||
{0xf64335bcf065d37eULL, 0xb2b9e84a00b5e92aULL}, // 1e-112 * 2**500
|
||||
{0x99ea0196163fa42fULL, 0xafb4312e4071b1baULL}, // 1e-111 * 2**496
|
||||
{0xc06481fb9bcf8d3aULL, 0x1ba13d79d08e1e29ULL}, // 1e-110 * 2**493
|
||||
{0xf07da27a82c37089ULL, 0xa2898cd844b1a5b3ULL}, // 1e-109 * 2**490
|
||||
{0x964e858c91ba2656ULL, 0xc595f8072aef0790ULL}, // 1e-108 * 2**486
|
||||
{0xbbe226efb628afebULL, 0x76fb7608f5aac974ULL}, // 1e-107 * 2**483
|
||||
{0xeadab0aba3b2dbe6ULL, 0xd4ba538b33157bd1ULL}, // 1e-106 * 2**480
|
||||
{0x92c8ae6b464fc970ULL, 0xc4f47436ffed6d62ULL}, // 1e-105 * 2**476
|
||||
{0xb77ada0617e3bbccULL, 0xf6319144bfe8c8bbULL}, // 1e-104 * 2**473
|
||||
{0xe55990879ddcaabeULL, 0x33bdf595efe2faeaULL}, // 1e-103 * 2**470
|
||||
{0x8f57fa54c2a9eab7ULL, 0x6056b97db5eddcd2ULL}, // 1e-102 * 2**466
|
||||
{0xb32df8e9f3546565ULL, 0xb86c67dd23695406ULL}, // 1e-101 * 2**463
|
||||
{0xdff9772470297ebeULL, 0xa68781d46c43a908ULL}, // 1e-100 * 2**460
|
||||
{0x8bfbea76c619ef37ULL, 0xa814b124c3aa49a5ULL}, // 1e-99 * 2**456
|
||||
{0xaefae51477a06b04ULL, 0x1219dd6df494dc0eULL}, // 1e-98 * 2**453
|
||||
{0xdab99e59958885c5ULL, 0x16a054c971ba1312ULL}, // 1e-97 * 2**450
|
||||
{0x88b402f7fd75539cULL, 0xee2434fde7144bebULL}, // 1e-96 * 2**446
|
||||
{0xaae103b5fcd2a882ULL, 0x29ad423d60d95ee6ULL}, // 1e-95 * 2**443
|
||||
{0xd59944a37c0752a3ULL, 0xb41892ccb90fb6a0ULL}, // 1e-94 * 2**440
|
||||
{0x857fcae62d8493a6ULL, 0x908f5bbff3a9d224ULL}, // 1e-93 * 2**436
|
||||
{0xa6dfbd9fb8e5b88fULL, 0x34b332aff09446adULL}, // 1e-92 * 2**433
|
||||
{0xd097ad07a71f26b3ULL, 0x81dfff5becb95858ULL}, // 1e-91 * 2**430
|
||||
{0x825ecc24c8737830ULL, 0x712bff9973f3d737ULL}, // 1e-90 * 2**426
|
||||
{0xa2f67f2dfa90563cULL, 0x8d76ff7fd0f0cd05ULL}, // 1e-89 * 2**423
|
||||
{0xcbb41ef979346bcbULL, 0xb0d4bf5fc52d0046ULL}, // 1e-88 * 2**420
|
||||
{0xfea126b7d78186bdULL, 0x1d09ef37b6784057ULL}, // 1e-87 * 2**417
|
||||
{0x9f24b832e6b0f437ULL, 0xf2263582d20b2836ULL}, // 1e-86 * 2**413
|
||||
{0xc6ede63fa05d3144ULL, 0x6eafc2e3868df244ULL}, // 1e-85 * 2**410
|
||||
{0xf8a95fcf88747d95ULL, 0x8a5bb39c68316ed5ULL}, // 1e-84 * 2**407
|
||||
{0x9b69dbe1b548ce7dULL, 0x36795041c11ee545ULL}, // 1e-83 * 2**403
|
||||
{0xc24452da229b021cULL, 0x0417a45231669e97ULL}, // 1e-82 * 2**400
|
||||
{0xf2d56790ab41c2a3ULL, 0x051d8d66bdc0463cULL}, // 1e-81 * 2**397
|
||||
{0x97c560ba6b0919a6ULL, 0x2332786036982be5ULL}, // 1e-80 * 2**393
|
||||
{0xbdb6b8e905cb6010ULL, 0xabff1678443e36dfULL}, // 1e-79 * 2**390
|
||||
{0xed246723473e3814ULL, 0xd6fedc16554dc497ULL}, // 1e-78 * 2**387
|
||||
{0x9436c0760c86e30cULL, 0x065f498df5509adeULL}, // 1e-77 * 2**383
|
||||
{0xb94470938fa89bcfULL, 0x07f71bf172a4c196ULL}, // 1e-76 * 2**380
|
||||
{0xe7958cb87392c2c3ULL, 0x49f4e2edcf4df1fbULL}, // 1e-75 * 2**377
|
||||
{0x90bd77f3483bb9baULL, 0x4e390dd4a190b73dULL}, // 1e-74 * 2**373
|
||||
{0xb4ecd5f01a4aa829ULL, 0xe1c75149c9f4e50cULL}, // 1e-73 * 2**370
|
||||
{0xe2280b6c20dd5233ULL, 0xda39259c3c721e4fULL}, // 1e-72 * 2**367
|
||||
{0x8d590723948a5360ULL, 0xa863b781a5c752f1ULL}, // 1e-71 * 2**363
|
||||
{0xb0af48ec79ace838ULL, 0xd27ca5620f3927aeULL}, // 1e-70 * 2**360
|
||||
{0xdcdb1b2798182245ULL, 0x071bceba9307719aULL}, // 1e-69 * 2**357
|
||||
{0x8a08f0f8bf0f156cULL, 0xe47161349be4a700ULL}, // 1e-68 * 2**353
|
||||
{0xac8b2d36eed2dac6ULL, 0x1d8db981c2ddd0c0ULL}, // 1e-67 * 2**350
|
||||
{0xd7adf884aa879178ULL, 0xa4f127e2339544f0ULL}, // 1e-66 * 2**347
|
||||
{0x86ccbb52ea94baebULL, 0x6716b8ed603d4b16ULL}, // 1e-65 * 2**343
|
||||
{0xa87fea27a539e9a6ULL, 0xc0dc6728b84c9ddbULL}, // 1e-64 * 2**340
|
||||
{0xd29fe4b18e88640fULL, 0x711380f2e65fc552ULL}, // 1e-63 * 2**337
|
||||
{0x83a3eeeef9153e8aULL, 0xe6ac3097cffbdb53ULL}, // 1e-62 * 2**333
|
||||
{0xa48ceaaab75a8e2cULL, 0xa0573cbdc3fad228ULL}, // 1e-61 * 2**330
|
||||
{0xcdb02555653131b7ULL, 0xc86d0bed34f986b2ULL}, // 1e-60 * 2**327
|
||||
{0x808e17555f3ebf12ULL, 0x1d442774411bf42fULL}, // 1e-59 * 2**323
|
||||
{0xa0b19d2ab70e6ed7ULL, 0xa49531515162f13bULL}, // 1e-58 * 2**320
|
||||
{0xc8de047564d20a8cULL, 0x0dba7da5a5bbad8aULL}, // 1e-57 * 2**317
|
||||
{0xfb158592be068d2fULL, 0x11291d0f0f2a98edULL}, // 1e-56 * 2**314
|
||||
{0x9ced737bb6c4183eULL, 0xaab9b229697a9f94ULL}, // 1e-55 * 2**310
|
||||
{0xc428d05aa4751e4dULL, 0x55681eb3c3d94779ULL}, // 1e-54 * 2**307
|
||||
{0xf53304714d9265e0ULL, 0x2ac22660b4cf9957ULL}, // 1e-53 * 2**304
|
||||
{0x993fe2c6d07b7facULL, 0x1ab957fc7101bfd6ULL}, // 1e-52 * 2**300
|
||||
{0xbf8fdb78849a5f97ULL, 0x2167adfb8d422fccULL}, // 1e-51 * 2**297
|
||||
{0xef73d256a5c0f77dULL, 0x69c1997a7092bbbfULL}, // 1e-50 * 2**294
|
||||
{0x95a8637627989aaeULL, 0x2218ffec865bb557ULL}, // 1e-49 * 2**290
|
||||
{0xbb127c53b17ec15aULL, 0xaa9f3fe7a7f2a2adULL}, // 1e-48 * 2**287
|
||||
{0xe9d71b689dde71b0ULL, 0x55470fe191ef4b59ULL}, // 1e-47 * 2**284
|
||||
{0x9226712162ab070eULL, 0x354c69ecfb358f17ULL}, // 1e-46 * 2**280
|
||||
{0xb6b00d69bb55c8d2ULL, 0xc29f84683a02f2ddULL}, // 1e-45 * 2**277
|
||||
{0xe45c10c42a2b3b06ULL, 0x734765824883af95ULL}, // 1e-44 * 2**274
|
||||
{0x8eb98a7a9a5b04e4ULL, 0x880c9f716d524dbdULL}, // 1e-43 * 2**270
|
||||
{0xb267ed1940f1c61dULL, 0xaa0fc74dc8a6e12cULL}, // 1e-42 * 2**267
|
||||
{0xdf01e85f912e37a4ULL, 0x9493b9213ad09977ULL}, // 1e-41 * 2**264
|
||||
{0x8b61313bbabce2c7ULL, 0xdcdc53b4c4c25feaULL}, // 1e-40 * 2**260
|
||||
{0xae397d8aa96c1b78ULL, 0x541368a1f5f2f7e5ULL}, // 1e-39 * 2**257
|
||||
{0xd9c7dced53c72256ULL, 0x691842ca736fb5deULL}, // 1e-38 * 2**254
|
||||
{0x881cea14545c7576ULL, 0x81af29be8825d1abULL}, // 1e-37 * 2**250
|
||||
{0xaa242499697392d3ULL, 0x221af42e2a2f4616ULL}, // 1e-36 * 2**247
|
||||
{0xd4ad2dbfc3d07788ULL, 0x6aa1b139b4bb179bULL}, // 1e-35 * 2**244
|
||||
{0x84ec3c97da624ab5ULL, 0x42a50ec410f4eec1ULL}, // 1e-34 * 2**240
|
||||
{0xa6274bbdd0fadd62ULL, 0x134e527515322a71ULL}, // 1e-33 * 2**237
|
||||
{0xcfb11ead453994bbULL, 0x9821e7125a7eb50dULL}, // 1e-32 * 2**234
|
||||
{0x81ceb32c4b43fcf5ULL, 0x7f15306b788f3128ULL}, // 1e-31 * 2**230
|
||||
{0xa2425ff75e14fc32ULL, 0x5eda7c8656b2fd72ULL}, // 1e-30 * 2**227
|
||||
{0xcad2f7f5359a3b3fULL, 0xf6911ba7ec5fbccfULL}, // 1e-29 * 2**224
|
||||
{0xfd87b5f28300ca0eULL, 0x74356291e777ac03ULL}, // 1e-28 * 2**221
|
||||
{0x9e74d1b791e07e49ULL, 0x88a15d9b30aacb82ULL}, // 1e-27 * 2**217
|
||||
{0xc612062576589ddbULL, 0x6ac9b501fcd57e62ULL}, // 1e-26 * 2**214
|
||||
{0xf79687aed3eec552ULL, 0xc57c22427c0addfbULL}, // 1e-25 * 2**211
|
||||
{0x9abe14cd44753b53ULL, 0x3b6d95698d86cabdULL}, // 1e-24 * 2**207
|
||||
{0xc16d9a0095928a28ULL, 0x8a48fac3f0e87d6cULL}, // 1e-23 * 2**204
|
||||
{0xf1c90080baf72cb2ULL, 0xacdb3974ed229cc7ULL}, // 1e-22 * 2**201
|
||||
{0x971da05074da7befULL, 0x2c0903e91435a1fcULL}, // 1e-21 * 2**197
|
||||
{0xbce5086492111aebULL, 0x770b44e359430a7bULL}, // 1e-20 * 2**194
|
||||
{0xec1e4a7db69561a6ULL, 0xd4ce161c2f93cd1aULL}, // 1e-19 * 2**191
|
||||
{0x9392ee8e921d5d08ULL, 0xc500cdd19dbc6030ULL}, // 1e-18 * 2**187
|
||||
{0xb877aa3236a4b44aULL, 0xf6410146052b783dULL}, // 1e-17 * 2**184
|
||||
{0xe69594bec44de15cULL, 0xb3d141978676564cULL}, // 1e-16 * 2**181
|
||||
{0x901d7cf73ab0acdaULL, 0xf062c8feb409f5efULL}, // 1e-15 * 2**177
|
||||
{0xb424dc35095cd810ULL, 0xac7b7b3e610c736bULL}, // 1e-14 * 2**174
|
||||
{0xe12e13424bb40e14ULL, 0xd79a5a0df94f9046ULL}, // 1e-13 * 2**171
|
||||
{0x8cbccc096f5088ccULL, 0x06c07848bbd1ba2cULL}, // 1e-12 * 2**167
|
||||
{0xafebff0bcb24aaffULL, 0x0870965aeac628b7ULL}, // 1e-11 * 2**164
|
||||
{0xdbe6fecebdedd5bfULL, 0x4a8cbbf1a577b2e4ULL}, // 1e-10 * 2**161
|
||||
{0x89705f4136b4a598ULL, 0xce97f577076acfcfULL}, // 1e-9 * 2**157
|
||||
{0xabcc77118461cefdULL, 0x023df2d4c94583c2ULL}, // 1e-8 * 2**154
|
||||
{0xd6bf94d5e57a42bdULL, 0xc2cd6f89fb96e4b3ULL}, // 1e-7 * 2**151
|
||||
{0x8637bd05af6c69b6ULL, 0x59c065b63d3e4ef0ULL}, // 1e-6 * 2**147
|
||||
{0xa7c5ac471b478424ULL, 0xf0307f23cc8de2acULL}, // 1e-5 * 2**144
|
||||
{0xd1b71758e219652cULL, 0x2c3c9eecbfb15b57ULL}, // 1e-4 * 2**141
|
||||
{0x83126e978d4fdf3cULL, 0x9ba5e353f7ced916ULL}, // 1e-3 * 2**137
|
||||
{0xa3d70a3d70a3d70bULL, 0xc28f5c28f5c28f5cULL}, // 1e-2 * 2**134
|
||||
{0xcccccccccccccccdULL, 0x3333333333333333ULL}, // 1e-1 * 2**131
|
||||
{0x8000000000000000ULL, 0x0000000000000000ULL}, // 1e0 * 2**127
|
||||
{0xa000000000000000ULL, 0x0000000000000000ULL}, // 1e1 * 2**124
|
||||
{0xc800000000000000ULL, 0x0000000000000000ULL}, // 1e2 * 2**121
|
||||
{0xfa00000000000000ULL, 0x0000000000000000ULL}, // 1e3 * 2**118
|
||||
{0x9c40000000000000ULL, 0x0000000000000000ULL}, // 1e4 * 2**114
|
||||
{0xc350000000000000ULL, 0x0000000000000000ULL}, // 1e5 * 2**111
|
||||
{0xf424000000000000ULL, 0x0000000000000000ULL}, // 1e6 * 2**108
|
||||
{0x9896800000000000ULL, 0x0000000000000000ULL}, // 1e7 * 2**104
|
||||
{0xbebc200000000000ULL, 0x0000000000000000ULL}, // 1e8 * 2**101
|
||||
{0xee6b280000000000ULL, 0x0000000000000000ULL}, // 1e9 * 2**98
|
||||
{0x9502f90000000000ULL, 0x0000000000000000ULL}, // 1e10 * 2**94
|
||||
{0xba43b74000000000ULL, 0x0000000000000000ULL}, // 1e11 * 2**91
|
||||
{0xe8d4a51000000000ULL, 0x0000000000000000ULL}, // 1e12 * 2**88
|
||||
{0x9184e72a00000000ULL, 0x0000000000000000ULL}, // 1e13 * 2**84
|
||||
{0xb5e620f480000000ULL, 0x0000000000000000ULL}, // 1e14 * 2**81
|
||||
{0xe35fa931a0000000ULL, 0x0000000000000000ULL}, // 1e15 * 2**78
|
||||
{0x8e1bc9bf04000000ULL, 0x0000000000000000ULL}, // 1e16 * 2**74
|
||||
{0xb1a2bc2ec5000000ULL, 0x0000000000000000ULL}, // 1e17 * 2**71
|
||||
{0xde0b6b3a76400000ULL, 0x0000000000000000ULL}, // 1e18 * 2**68
|
||||
{0x8ac7230489e80000ULL, 0x0000000000000000ULL}, // 1e19 * 2**64
|
||||
{0xad78ebc5ac620000ULL, 0x0000000000000000ULL}, // 1e20 * 2**61
|
||||
{0xd8d726b7177a8000ULL, 0x0000000000000000ULL}, // 1e21 * 2**58
|
||||
{0x878678326eac9000ULL, 0x0000000000000000ULL}, // 1e22 * 2**54
|
||||
{0xa968163f0a57b400ULL, 0x0000000000000000ULL}, // 1e23 * 2**51
|
||||
{0xd3c21bcecceda100ULL, 0x0000000000000000ULL}, // 1e24 * 2**48
|
||||
{0x84595161401484a0ULL, 0x0000000000000000ULL}, // 1e25 * 2**44
|
||||
{0xa56fa5b99019a5c8ULL, 0x0000000000000000ULL}, // 1e26 * 2**41
|
||||
{0xcecb8f27f4200f3aULL, 0x0000000000000000ULL}, // 1e27 * 2**38
|
||||
{0x813f3978f8940985ULL, 0xc000000000000000ULL}, // 1e28 * 2**34
|
||||
{0xa18f07d736b90be6ULL, 0xb000000000000000ULL}, // 1e29 * 2**31
|
||||
{0xc9f2c9cd04674edfULL, 0x5c00000000000000ULL}, // 1e30 * 2**28
|
||||
{0xfc6f7c4045812297ULL, 0xb300000000000000ULL}, // 1e31 * 2**25
|
||||
{0x9dc5ada82b70b59eULL, 0x0fe0000000000000ULL}, // 1e32 * 2**21
|
||||
{0xc5371912364ce306ULL, 0x93d8000000000000ULL}, // 1e33 * 2**18
|
||||
{0xf684df56c3e01bc7ULL, 0x38ce000000000000ULL}, // 1e34 * 2**15
|
||||
{0x9a130b963a6c115dULL, 0xc380c00000000000ULL}, // 1e35 * 2**11
|
||||
{0xc097ce7bc90715b4ULL, 0xb460f00000000000ULL}, // 1e36 * 2**8
|
||||
{0xf0bdc21abb48db21ULL, 0xe1792c0000000000ULL}, // 1e37 * 2**5
|
||||
{0x96769950b50d88f5ULL, 0xecebbb8000000000ULL}, // 1e38 * 2**1
|
||||
{0xbc143fa4e250eb32ULL, 0xe826aa6000000000ULL}, // 1e39 * 2**-2
|
||||
{0xeb194f8e1ae525feULL, 0xa23054f800000000ULL}, // 1e40 * 2**-5
|
||||
{0x92efd1b8d0cf37bfULL, 0xa55e351b00000000ULL}, // 1e41 * 2**-9
|
||||
{0xb7abc627050305aeULL, 0x0eb5c261c0000000ULL}, // 1e42 * 2**-12
|
||||
{0xe596b7b0c643c71aULL, 0x926332fa30000000ULL}, // 1e43 * 2**-15
|
||||
{0x8f7e32ce7bea5c70ULL, 0x1b7dffdc5e000000ULL}, // 1e44 * 2**-19
|
||||
{0xb35dbf821ae4f38cULL, 0x225d7fd375800000ULL}, // 1e45 * 2**-22
|
||||
{0xe0352f62a19e306fULL, 0x2af4dfc852e00000ULL}, // 1e46 * 2**-25
|
||||
{0x8c213d9da502de46ULL, 0xbad90bdd33cc0000ULL}, // 1e47 * 2**-29
|
||||
{0xaf298d050e4395d7ULL, 0x698f4ed480bf0000ULL}, // 1e48 * 2**-32
|
||||
{0xdaf3f04651d47b4dULL, 0xc3f32289a0eec000ULL}, // 1e49 * 2**-35
|
||||
{0x88d8762bf324cd10ULL, 0x5a77f59604953800ULL}, // 1e50 * 2**-39
|
||||
{0xab0e93b6efee0054ULL, 0x7115f2fb85ba8600ULL}, // 1e51 * 2**-42
|
||||
{0xd5d238a4abe98069ULL, 0x8d5b6fba67292780ULL}, // 1e52 * 2**-45
|
||||
{0x85a36366eb71f042ULL, 0xb85925d48079b8b0ULL}, // 1e53 * 2**-49
|
||||
{0xa70c3c40a64e6c52ULL, 0x666f6f49a09826dcULL}, // 1e54 * 2**-52
|
||||
{0xd0cf4b50cfe20766ULL, 0x000b4b1c08be3093ULL}, // 1e55 * 2**-55
|
||||
{0x82818f1281ed44a0ULL, 0x40070ef18576de5bULL}, // 1e56 * 2**-59
|
||||
{0xa321f2d7226895c8ULL, 0x5008d2ade6d495f2ULL}, // 1e57 * 2**-62
|
||||
{0xcbea6f8ceb02bb3aULL, 0x640b07596089bb6fULL}, // 1e58 * 2**-65
|
||||
{0xfee50b7025c36a09ULL, 0xfd0dc92fb8ac2a4bULL}, // 1e59 * 2**-68
|
||||
{0x9f4f2726179a2246ULL, 0xfe289dbdd36b9a6fULL}, // 1e60 * 2**-72
|
||||
{0xc722f0ef9d80aad7ULL, 0xbdb2c52d4846810aULL}, // 1e61 * 2**-75
|
||||
{0xf8ebad2b84e0d58cULL, 0x2d1f76789a58214dULL}, // 1e62 * 2**-78
|
||||
{0x9b934c3b330c8578ULL, 0x9c33aa0b607714d0ULL}, // 1e63 * 2**-82
|
||||
{0xc2781f49ffcfa6d6ULL, 0xc340948e3894da04ULL}, // 1e64 * 2**-85
|
||||
{0xf316271c7fc3908bULL, 0x7410b9b1c6ba1085ULL}, // 1e65 * 2**-88
|
||||
{0x97edd871cfda3a57ULL, 0x688a740f1c344a53ULL}, // 1e66 * 2**-92
|
||||
{0xbde94e8e43d0c8edULL, 0xc2ad1112e3415ce8ULL}, // 1e67 * 2**-95
|
||||
{0xed63a231d4c4fb28ULL, 0xb35855579c11b422ULL}, // 1e68 * 2**-98
|
||||
{0x945e455f24fb1cf9ULL, 0x70173556c18b1095ULL}, // 1e69 * 2**-102
|
||||
{0xb975d6b6ee39e437ULL, 0x4c1d02ac71edd4bbULL}, // 1e70 * 2**-105
|
||||
{0xe7d34c64a9c85d45ULL, 0x9f2443578e6949e9ULL}, // 1e71 * 2**-108
|
||||
{0x90e40fbeea1d3a4bULL, 0x4376aa16b901ce32ULL}, // 1e72 * 2**-112
|
||||
{0xb51d13aea4a488deULL, 0x9454549c674241beULL}, // 1e73 * 2**-115
|
||||
{0xe264589a4dcdab15ULL, 0x396969c38112d22eULL}, // 1e74 * 2**-118
|
||||
{0x8d7eb76070a08aedULL, 0x03e1e21a30abc35dULL}, // 1e75 * 2**-122
|
||||
{0xb0de65388cc8ada9ULL, 0xc4da5aa0bcd6b434ULL}, // 1e76 * 2**-125
|
||||
{0xdd15fe86affad913ULL, 0xb610f148ec0c6141ULL}, // 1e77 * 2**-128
|
||||
{0x8a2dbf142dfcc7acULL, 0x91ca96cd9387bcc8ULL}, // 1e78 * 2**-132
|
||||
{0xacb92ed9397bf997ULL, 0xb63d3c80f869abfbULL}, // 1e79 * 2**-135
|
||||
{0xd7e77a8f87daf7fcULL, 0x23cc8ba1368416f9ULL}, // 1e80 * 2**-138
|
||||
{0x86f0ac99b4e8dafeULL, 0x965fd744c2128e5cULL}, // 1e81 * 2**-142
|
||||
{0xa8acd7c0222311bdULL, 0x3bf7cd15f29731f3ULL}, // 1e82 * 2**-145
|
||||
{0xd2d80db02aabd62cULL, 0x0af5c05b6f3cfe6fULL}, // 1e83 * 2**-148
|
||||
{0x83c7088e1aab65dcULL, 0x86d9983925861f05ULL}, // 1e84 * 2**-152
|
||||
{0xa4b8cab1a1563f53ULL, 0xa88ffe476ee7a6c7ULL}, // 1e85 * 2**-155
|
||||
{0xcde6fd5e09abcf27ULL, 0x12b3fdd94aa19079ULL}, // 1e86 * 2**-158
|
||||
{0x80b05e5ac60b6179ULL, 0xabb07ea7cea4fa4bULL}, // 1e87 * 2**-162
|
||||
{0xa0dc75f1778e39d7ULL, 0x969c9e51c24e38deULL}, // 1e88 * 2**-165
|
||||
{0xc913936dd571c84dULL, 0xfc43c5e632e1c716ULL}, // 1e89 * 2**-168
|
||||
{0xfb5878494ace3a60ULL, 0xfb54b75fbf9a38dcULL}, // 1e90 * 2**-171
|
||||
{0x9d174b2dcec0e47cULL, 0x9d14f29bd7c06389ULL}, // 1e91 * 2**-175
|
||||
{0xc45d1df942711d9bULL, 0xc45a2f42cdb07c6bULL}, // 1e92 * 2**-178
|
||||
{0xf5746577930d6501ULL, 0x3570bb13811c9b86ULL}, // 1e93 * 2**-181
|
||||
{0x9968bf6abbe85f21ULL, 0x816674ec30b1e134ULL}, // 1e94 * 2**-185
|
||||
{0xbfc2ef456ae276e9ULL, 0x61c012273cde5981ULL}, // 1e95 * 2**-188
|
||||
{0xefb3ab16c59b14a3ULL, 0x3a3016b10c15efe1ULL}, // 1e96 * 2**-191
|
||||
{0x95d04aee3b80ece6ULL, 0x445e0e2ea78db5edULL}, // 1e97 * 2**-195
|
||||
{0xbb445da9ca612820ULL, 0xd57591ba51712368ULL}, // 1e98 * 2**-198
|
||||
{0xea1575143cf97227ULL, 0x0ad2f628e5cd6c42ULL}, // 1e99 * 2**-201
|
||||
{0x924d692ca61be759ULL, 0xa6c3d9d98fa063a9ULL}, // 1e100 * 2**-205
|
||||
{0xb6e0c377cfa2e12fULL, 0x9074d04ff3887c93ULL}, // 1e101 * 2**-208
|
||||
{0xe498f455c38b997bULL, 0xf4920463f06a9bb8ULL}, // 1e102 * 2**-211
|
||||
{0x8edf98b59a373fedULL, 0xb8db42be7642a153ULL}, // 1e103 * 2**-215
|
||||
{0xb2977ee300c50fe8ULL, 0xa712136e13d349a8ULL}, // 1e104 * 2**-218
|
||||
{0xdf3d5e9bc0f653e2ULL, 0xd0d6984998c81c12ULL}, // 1e105 * 2**-221
|
||||
{0x8b865b215899f46dULL, 0x42861f2dff7d118bULL}, // 1e106 * 2**-225
|
||||
{0xae67f1e9aec07188ULL, 0x1327a6f97f5c55eeULL}, // 1e107 * 2**-228
|
||||
{0xda01ee641a708deaULL, 0x17f190b7df336b6aULL}, // 1e108 * 2**-231
|
||||
{0x884134fe908658b3ULL, 0xcef6fa72eb802322ULL}, // 1e109 * 2**-235
|
||||
{0xaa51823e34a7eedfULL, 0x42b4b90fa6602beaULL}, // 1e110 * 2**-238
|
||||
{0xd4e5e2cdc1d1ea97ULL, 0x9361e7538ff836e5ULL}, // 1e111 * 2**-241
|
||||
{0x850fadc09923329fULL, 0xfc1d309439fb224fULL}, // 1e112 * 2**-245
|
||||
{0xa6539930bf6bff46ULL, 0x7b247cb94879eae3ULL}, // 1e113 * 2**-248
|
||||
{0xcfe87f7cef46ff17ULL, 0x19ed9be79a98659cULL}, // 1e114 * 2**-251
|
||||
{0x81f14fae158c5f6fULL, 0xb0348170c09f3f81ULL}, // 1e115 * 2**-255
|
||||
{0xa26da3999aef774aULL, 0x1c41a1ccf0c70f62ULL}, // 1e116 * 2**-258
|
||||
{0xcb090c8001ab551dULL, 0xa3520a402cf8d33aULL}, // 1e117 * 2**-261
|
||||
{0xfdcb4fa002162a64ULL, 0x8c268cd038370809ULL}, // 1e118 * 2**-264
|
||||
{0x9e9f11c4014dda7fULL, 0xd798180223226505ULL}, // 1e119 * 2**-268
|
||||
{0xc646d63501a1511eULL, 0x4d7e1e02abeafe47ULL}, // 1e120 * 2**-271
|
||||
{0xf7d88bc24209a566ULL, 0xe0dda58356e5bdd9ULL}, // 1e121 * 2**-274
|
||||
{0x9ae7575969460760ULL, 0xcc8a8772164f96a7ULL}, // 1e122 * 2**-278
|
||||
{0xc1a12d2fc3978938ULL, 0xffad294e9be37c51ULL}, // 1e123 * 2**-281
|
||||
{0xf209787bb47d6b85ULL, 0x3f9873a242dc5b65ULL}, // 1e124 * 2**-284
|
||||
{0x9745eb4d50ce6333ULL, 0x07bf484569c9b91fULL}, // 1e125 * 2**-288
|
||||
{0xbd176620a501fc00ULL, 0x49af1a56c43c2767ULL}, // 1e126 * 2**-291
|
||||
{0xec5d3fa8ce427b00ULL, 0x5c1ae0ec754b3141ULL}, // 1e127 * 2**-294
|
||||
{0x93ba47c980e98ce0ULL, 0x3990cc93c94efec8ULL}, // 1e128 * 2**-298
|
||||
{0xb8a8d9bbe123f018ULL, 0x47f4ffb8bba2be7bULL}, // 1e129 * 2**-301
|
||||
{0xe6d3102ad96cec1eULL, 0x59f23fa6ea8b6e1aULL}, // 1e130 * 2**-304
|
||||
{0x9043ea1ac7e41393ULL, 0x783767c8529724d0ULL}, // 1e131 * 2**-308
|
||||
{0xb454e4a179dd1878ULL, 0xd64541ba673cee04ULL}, // 1e132 * 2**-311
|
||||
{0xe16a1dc9d8545e95ULL, 0x0bd69229010c2985ULL}, // 1e133 * 2**-314
|
||||
{0x8ce2529e2734bb1eULL, 0xe7661b59a0a799f3ULL}, // 1e134 * 2**-318
|
||||
{0xb01ae745b101e9e5ULL, 0xa13fa23008d18070ULL}, // 1e135 * 2**-321
|
||||
{0xdc21a1171d42645eULL, 0x898f8abc0b05e08cULL}, // 1e136 * 2**-324
|
||||
{0x899504ae72497ebbULL, 0x95f9b6b586e3ac57ULL}, // 1e137 * 2**-328
|
||||
{0xabfa45da0edbde6aULL, 0xfb782462e89c976dULL}, // 1e138 * 2**-331
|
||||
{0xd6f8d7509292d604ULL, 0xba562d7ba2c3bd49ULL}, // 1e139 * 2**-334
|
||||
{0x865b86925b9bc5c3ULL, 0xf475dc6d45ba564dULL}, // 1e140 * 2**-338
|
||||
{0xa7f26836f282b733ULL, 0x719353889728ebe1ULL}, // 1e141 * 2**-341
|
||||
{0xd1ef0244af236500ULL, 0xcdf8286abcf326d9ULL}, // 1e142 * 2**-344
|
||||
{0x8335616aed761f20ULL, 0x80bb1942b617f847ULL}, // 1e143 * 2**-348
|
||||
{0xa402b9c5a8d3a6e8ULL, 0xa0e9df93639df659ULL}, // 1e144 * 2**-351
|
||||
{0xcd036837130890a2ULL, 0xc92457783c8573f0ULL}, // 1e145 * 2**-354
|
||||
{0x802221226be55a65ULL, 0x3db6b6ab25d36876ULL}, // 1e146 * 2**-358
|
||||
{0xa02aa96b06deb0feULL, 0x0d246455ef484293ULL}, // 1e147 * 2**-361
|
||||
{0xc83553c5c8965d3eULL, 0x906d7d6b6b1a5338ULL}, // 1e148 * 2**-364
|
||||
{0xfa42a8b73abbf48dULL, 0x3488dcc645e0e806ULL}, // 1e149 * 2**-367
|
||||
{0x9c69a97284b578d8ULL, 0x00d589fbebac9104ULL}, // 1e150 * 2**-371
|
||||
{0xc38413cf25e2d70eULL, 0x010aec7ae697b545ULL}, // 1e151 * 2**-374
|
||||
{0xf46518c2ef5b8cd2ULL, 0x814da799a03da296ULL}, // 1e152 * 2**-377
|
||||
{0x98bf2f79d5993803ULL, 0x10d088c00426859eULL}, // 1e153 * 2**-381
|
||||
{0xbeeefb584aff8604ULL, 0x5504aaf005302705ULL}, // 1e154 * 2**-384
|
||||
{0xeeaaba2e5dbf6785ULL, 0x6a45d5ac067c30c7ULL}, // 1e155 * 2**-387
|
||||
{0x952ab45cfa97a0b3ULL, 0x226ba58b840d9e7cULL}, // 1e156 * 2**-391
|
||||
{0xba756174393d88e0ULL, 0x6b068eee6511061bULL}, // 1e157 * 2**-394
|
||||
{0xe912b9d1478ceb18ULL, 0x85c832a9fe5547a2ULL}, // 1e158 * 2**-397
|
||||
{0x91abb422ccb812efULL, 0x539d1faa3ef54cc5ULL}, // 1e159 * 2**-401
|
||||
{0xb616a12b7fe617abULL, 0xa8846794ceb29ff6ULL}, // 1e160 * 2**-404
|
||||
{0xe39c49765fdf9d95ULL, 0x12a5817a025f47f4ULL}, // 1e161 * 2**-407
|
||||
{0x8e41ade9fbebc27eULL, 0xeba770ec417b8cf8ULL}, // 1e162 * 2**-411
|
||||
{0xb1d219647ae6b31dULL, 0xa6914d2751da7037ULL}, // 1e163 * 2**-414
|
||||
{0xde469fbd99a05fe4ULL, 0x9035a07126510c44ULL}, // 1e164 * 2**-417
|
||||
{0x8aec23d680043befULL, 0xda218446b7f2a7abULL}, // 1e165 * 2**-421
|
||||
{0xada72ccc20054aeaULL, 0x50a9e55865ef5195ULL}, // 1e166 * 2**-424
|
||||
{0xd910f7ff28069da5ULL, 0xe4d45eae7f6b25fbULL}, // 1e167 * 2**-427
|
||||
{0x87aa9aff79042287ULL, 0x6f04bb2d0fa2f7bdULL}, // 1e168 * 2**-431
|
||||
{0xa99541bf57452b29ULL, 0xcac5e9f8538bb5acULL}, // 1e169 * 2**-434
|
||||
{0xd3fa922f2d1675f3ULL, 0xbd776476686ea317ULL}, // 1e170 * 2**-437
|
||||
{0x847c9b5d7c2e09b8ULL, 0x966a9eca014525eeULL}, // 1e171 * 2**-441
|
||||
{0xa59bc234db398c26ULL, 0xbc05467c81966f6aULL}, // 1e172 * 2**-444
|
||||
{0xcf02b2c21207ef2fULL, 0x6b06981ba1fc0b44ULL}, // 1e173 * 2**-447
|
||||
{0x8161afb94b44f57eULL, 0xe2e41f11453d870aULL}, // 1e174 * 2**-451
|
||||
{0xa1ba1ba79e1632ddULL, 0x9b9d26d5968ce8cdULL}, // 1e175 * 2**-454
|
||||
{0xca28a291859bbf94ULL, 0x8284708afc302301ULL}, // 1e176 * 2**-457
|
||||
{0xfcb2cb35e702af79ULL, 0xa3258cadbb3c2bc1ULL}, // 1e177 * 2**-460
|
||||
{0x9defbf01b061adacULL, 0xc5f777ec95059b58ULL}, // 1e178 * 2**-464
|
||||
{0xc56baec21c7a1917ULL, 0xf77555e7ba47022fULL}, // 1e179 * 2**-467
|
||||
{0xf6c69a72a3989f5cULL, 0x7552ab61a8d8c2baULL}, // 1e180 * 2**-470
|
||||
{0x9a3c2087a63f639aULL, 0xc953ab1d098779b4ULL}, // 1e181 * 2**-474
|
||||
{0xc0cb28a98fcf3c80ULL, 0x7ba895e44be95822ULL}, // 1e182 * 2**-477
|
||||
{0xf0fdf2d3f3c30ba0ULL, 0x9a92bb5d5ee3ae2aULL}, // 1e183 * 2**-480
|
||||
{0x969eb7c47859e744ULL, 0x609bb51a5b4e4cdaULL}, // 1e184 * 2**-484
|
||||
{0xbc4665b596706115ULL, 0x78c2a260f221e011ULL}, // 1e185 * 2**-487
|
||||
{0xeb57ff22fc0c795aULL, 0x56f34af92eaa5815ULL}, // 1e186 * 2**-490
|
||||
{0x9316ff75dd87cbd9ULL, 0xf6580edbbd2a770dULL}, // 1e187 * 2**-494
|
||||
{0xb7dcbf5354e9becfULL, 0xf3ee1292ac7514d0ULL}, // 1e188 * 2**-497
|
||||
{0xe5d3ef282a242e82ULL, 0x70e9973757925a05ULL}, // 1e189 * 2**-500
|
||||
{0x8fa475791a569d11ULL, 0x0691fe8296bb7843ULL}, // 1e190 * 2**-504
|
||||
{0xb38d92d760ec4456ULL, 0xc8367e233c6a5653ULL}, // 1e191 * 2**-507
|
||||
{0xe070f78d3927556bULL, 0x7a441dac0b84ebe8ULL}, // 1e192 * 2**-510
|
||||
{0x8c469ab843b89563ULL, 0x6c6a928b87331371ULL}, // 1e193 * 2**-514
|
||||
{0xaf58416654a6babcULL, 0xc785372e68ffd84dULL}, // 1e194 * 2**-517
|
||||
{0xdb2e51bfe9d0696bULL, 0xf96684fa033fce61ULL}, // 1e195 * 2**-520
|
||||
{0x88fcf317f22241e3ULL, 0xbbe0131c4207e0fcULL}, // 1e196 * 2**-524
|
||||
{0xab3c2fddeeaad25bULL, 0x2ad817e35289d93cULL}, // 1e197 * 2**-527
|
||||
{0xd60b3bd56a5586f2ULL, 0x758e1ddc272c4f8bULL}, // 1e198 * 2**-530
|
||||
{0x85c7056562757457ULL, 0x0978d2a9987bb1b6ULL}, // 1e199 * 2**-534
|
||||
{0xa738c6bebb12d16dULL, 0x4bd70753fe9a9e24ULL}, // 1e200 * 2**-537
|
||||
{0xd106f86e69d785c8ULL, 0x1eccc928fe4145adULL}, // 1e201 * 2**-540
|
||||
{0x82a45b450226b39dULL, 0x133ffdb99ee8cb8cULL}, // 1e202 * 2**-544
|
||||
{0xa34d721642b06085ULL, 0xd80ffd2806a2fe6fULL}, // 1e203 * 2**-547
|
||||
{0xcc20ce9bd35c78a6ULL, 0xce13fc72084bbe0bULL}, // 1e204 * 2**-550
|
||||
{0xff290242c83396cfULL, 0x8198fb8e8a5ead8eULL}, // 1e205 * 2**-553
|
||||
{0x9f79a169bd203e42ULL, 0xf0ff9d39167b2c79ULL}, // 1e206 * 2**-557
|
||||
{0xc75809c42c684dd2ULL, 0xad3f84875c19f797ULL}, // 1e207 * 2**-560
|
||||
{0xf92e0c3537826146ULL, 0x588f65a93320757dULL}, // 1e208 * 2**-563
|
||||
{0x9bbcc7a142b17cccULL, 0x77599f89bff4496eULL}, // 1e209 * 2**-567
|
||||
{0xc2abf989935ddbffULL, 0x9530076c2ff15bcaULL}, // 1e210 * 2**-570
|
||||
{0xf356f7ebf83552ffULL, 0xfa7c09473bedb2bcULL}, // 1e211 * 2**-573
|
||||
{0x98165af37b2153dfULL, 0x3c8d85cc85748fb5ULL}, // 1e212 * 2**-577
|
||||
{0xbe1bf1b059e9a8d7ULL, 0x8bb0e73fa6d1b3a3ULL}, // 1e213 * 2**-580
|
||||
{0xeda2ee1c7064130dULL, 0xee9d210f9086208cULL}, // 1e214 * 2**-583
|
||||
{0x9485d4d1c63e8be8ULL, 0x752234a9ba53d457ULL}, // 1e215 * 2**-587
|
||||
{0xb9a74a0637ce2ee2ULL, 0x926ac1d428e8c96dULL}, // 1e216 * 2**-590
|
||||
{0xe8111c87c5c1ba9aULL, 0x370572493322fbc8ULL}, // 1e217 * 2**-593
|
||||
{0x910ab1d4db9914a1ULL, 0xe263676dbff5dd5dULL}, // 1e218 * 2**-597
|
||||
{0xb54d5e4a127f59c9ULL, 0xdafc41492ff354b4ULL}, // 1e219 * 2**-600
|
||||
{0xe2a0b5dc971f303bULL, 0xd1bb519b7bf029e2ULL}, // 1e220 * 2**-603
|
||||
{0x8da471a9de737e25ULL, 0xa31513012d761a2dULL}, // 1e221 * 2**-607
|
||||
{0xb10d8e1456105daeULL, 0x8bda57c178d3a0b8ULL}, // 1e222 * 2**-610
|
||||
{0xdd50f1996b947519ULL, 0x2ed0edb1d70888e6ULL}, // 1e223 * 2**-613
|
||||
{0x8a5296ffe33cc930ULL, 0x7d42948f26655590ULL}, // 1e224 * 2**-617
|
||||
{0xace73cbfdc0bfb7cULL, 0x9c9339b2effeaaf4ULL}, // 1e225 * 2**-620
|
||||
{0xd8210befd30efa5bULL, 0xc3b8081fabfe55b1ULL}, // 1e226 * 2**-623
|
||||
{0x8714a775e3e95c79ULL, 0x9a530513cb7ef58eULL}, // 1e227 * 2**-627
|
||||
{0xa8d9d1535ce3b397ULL, 0x80e7c658be5eb2f2ULL}, // 1e228 * 2**-630
|
||||
{0xd31045a8341ca07dULL, 0xe121b7eeedf65fafULL}, // 1e229 * 2**-633
|
||||
{0x83ea2b892091e44eULL, 0x6cb512f554b9fbcdULL}, // 1e230 * 2**-637
|
||||
{0xa4e4b66b68b65d61ULL, 0x07e257b2a9e87ac0ULL}, // 1e231 * 2**-640
|
||||
{0xce1de40642e3f4baULL, 0xc9daed9f54629971ULL}, // 1e232 * 2**-643
|
||||
{0x80d2ae83e9ce78f4ULL, 0x3e28d48394bd9fe6ULL}, // 1e233 * 2**-647
|
||||
{0xa1075a24e4421731ULL, 0x4db309a479ed07e0ULL}, // 1e234 * 2**-650
|
||||
{0xc94930ae1d529cfdULL, 0x211fcc0d986849d8ULL}, // 1e235 * 2**-653
|
||||
{0xfb9b7cd9a4a7443dULL, 0xe967bf10fe825c4eULL}, // 1e236 * 2**-656
|
||||
{0x9d412e0806e88aa6ULL, 0x71e0d76a9f1179b1ULL}, // 1e237 * 2**-660
|
||||
{0xc491798a08a2ad4fULL, 0x0e590d4546d5d81dULL}, // 1e238 * 2**-663
|
||||
{0xf5b5d7ec8acb58a3ULL, 0x51ef5096988b4e24ULL}, // 1e239 * 2**-666
|
||||
{0x9991a6f3d6bf1766ULL, 0x5335925e1f5710d6ULL}, // 1e240 * 2**-670
|
||||
{0xbff610b0cc6edd40ULL, 0xe802f6f5a72cd50cULL}, // 1e241 * 2**-673
|
||||
{0xeff394dcff8a948fULL, 0x2203b4b310f80a4fULL}, // 1e242 * 2**-676
|
||||
{0x95f83d0a1fb69cdaULL, 0xb54250efea9b0671ULL}, // 1e243 * 2**-680
|
||||
{0xbb764c4ca7a44410ULL, 0x6292e52be541c80eULL}, // 1e244 * 2**-683
|
||||
{0xea53df5fd18d5514ULL, 0x7b379e76de923a12ULL}, // 1e245 * 2**-686
|
||||
{0x92746b9be2f8552dULL, 0xcd02c30a4b1b644bULL}, // 1e246 * 2**-690
|
||||
{0xb7118682dbb66a78ULL, 0xc04373ccdde23d5eULL}, // 1e247 * 2**-693
|
||||
{0xe4d5e82392a40516ULL, 0xf05450c0155accb5ULL}, // 1e248 * 2**-696
|
||||
{0x8f05b1163ba6832eULL, 0xd634b2780d58bff1ULL}, // 1e249 * 2**-700
|
||||
{0xb2c71d5bca9023f9ULL, 0x8bc1df1610aeefedULL}, // 1e250 * 2**-703
|
||||
{0xdf78e4b2bd342cf7ULL, 0x6eb256db94daabe9ULL}, // 1e251 * 2**-706
|
||||
{0x8bab8eefb6409c1bULL, 0xe52f76493d08ab71ULL}, // 1e252 * 2**-710
|
||||
{0xae9672aba3d0c321ULL, 0x5e7b53db8c4ad64eULL}, // 1e253 * 2**-713
|
||||
{0xda3c0f568cc4f3e9ULL, 0x361a28d26f5d8be1ULL}, // 1e254 * 2**-716
|
||||
{0x8865899617fb1872ULL, 0x81d05983859a776dULL}, // 1e255 * 2**-720
|
||||
{0xaa7eebfb9df9de8eULL, 0x22446fe467011548ULL}, // 1e256 * 2**-723
|
||||
{0xd51ea6fa85785632ULL, 0xaad58bdd80c15a9aULL}, // 1e257 * 2**-726
|
||||
{0x8533285c936b35dfULL, 0x2ac5776a7078d8a0ULL}, // 1e258 * 2**-730
|
||||
{0xa67ff273b8460357ULL, 0x7576d5450c970ec8ULL}, // 1e259 * 2**-733
|
||||
{0xd01fef10a657842dULL, 0xd2d48a964fbcd27aULL}, // 1e260 * 2**-736
|
||||
{0x8213f56a67f6b29cULL, 0x63c4d69df1d6038cULL}, // 1e261 * 2**-740
|
||||
{0xa298f2c501f45f43ULL, 0x7cb60c456e4b8470ULL}, // 1e262 * 2**-743
|
||||
{0xcb3f2f7642717714ULL, 0xdbe38f56c9de658cULL}, // 1e263 * 2**-746
|
||||
{0xfe0efb53d30dd4d8ULL, 0x12dc732c7c55feefULL}, // 1e264 * 2**-749
|
||||
{0x9ec95d1463e8a507ULL, 0x0bc9c7fbcdb5bf55ULL}, // 1e265 * 2**-753
|
||||
{0xc67bb4597ce2ce49ULL, 0x4ebc39fac1232f2aULL}, // 1e266 * 2**-756
|
||||
{0xf81aa16fdc1b81dbULL, 0x226b4879716bfaf5ULL}, // 1e267 * 2**-759
|
||||
{0x9b10a4e5e9913129ULL, 0x35830d4be6e37cd9ULL}, // 1e268 * 2**-763
|
||||
{0xc1d4ce1f63f57d73ULL, 0x02e3d09ee09c5c0fULL}, // 1e269 * 2**-766
|
||||
{0xf24a01a73cf2dcd0ULL, 0x439cc4c698c37313ULL}, // 1e270 * 2**-769
|
||||
{0x976e41088617ca02ULL, 0x2a41fafc1f7a27ecULL}, // 1e271 * 2**-773
|
||||
{0xbd49d14aa79dbc83ULL, 0xb4d279bb2758b1e7ULL}, // 1e272 * 2**-776
|
||||
{0xec9c459d51852ba3ULL, 0x22071829f12ede61ULL}, // 1e273 * 2**-779
|
||||
{0x93e1ab8252f33b46ULL, 0x35446f1a36bd4afcULL}, // 1e274 * 2**-783
|
||||
{0xb8da1662e7b00a18ULL, 0xc2958ae0c46c9dbcULL}, // 1e275 * 2**-786
|
||||
{0xe7109bfba19c0c9eULL, 0xf33aed98f587c52bULL}, // 1e276 * 2**-789
|
||||
{0x906a617d450187e3ULL, 0xd804d47f9974db3aULL}, // 1e277 * 2**-793
|
||||
{0xb484f9dc9641e9dbULL, 0x4e06099f7fd21209ULL}, // 1e278 * 2**-796
|
||||
{0xe1a63853bbd26452ULL, 0xa1878c075fc6968cULL}, // 1e279 * 2**-799
|
||||
{0x8d07e33455637eb3ULL, 0x24f4b7849bdc1e17ULL}, // 1e280 * 2**-803
|
||||
{0xb049dc016abc5e60ULL, 0x6e31e565c2d3259dULL}, // 1e281 * 2**-806
|
||||
{0xdc5c5301c56b75f8ULL, 0x89be5ebf3387ef04ULL}, // 1e282 * 2**-809
|
||||
{0x89b9b3e11b6329bbULL, 0x5616fb378034f562ULL}, // 1e283 * 2**-813
|
||||
{0xac2820d9623bf42aULL, 0xab9cba05604232bbULL}, // 1e284 * 2**-816
|
||||
{0xd732290fbacaf134ULL, 0x5683e886b852bf6aULL}, // 1e285 * 2**-819
|
||||
{0x867f59a9d4bed6c1ULL, 0xb61271543333b7a2ULL}, // 1e286 * 2**-823
|
||||
{0xa81f301449ee8c71ULL, 0xa3970da94000a58bULL}, // 1e287 * 2**-826
|
||||
{0xd226fc195c6a2f8dULL, 0x8c7cd1139000ceeeULL}, // 1e288 * 2**-829
|
||||
{0x83585d8fd9c25db8ULL, 0x37ce02ac3a008154ULL}, // 1e289 * 2**-833
|
||||
{0xa42e74f3d032f526ULL, 0x45c183574880a1aaULL}, // 1e290 * 2**-836
|
||||
{0xcd3a1230c43fb270ULL, 0xd731e42d1aa0ca14ULL}, // 1e291 * 2**-839
|
||||
{0x80444b5e7aa7cf86ULL, 0x867f2e9c30a47e4cULL}, // 1e292 * 2**-843
|
||||
{0xa0555e361951c367ULL, 0x281efa433ccd9de0ULL}, // 1e293 * 2**-846
|
||||
{0xc86ab5c39fa63441ULL, 0x7226b8d40c010558ULL}, // 1e294 * 2**-849
|
||||
{0xfa856334878fc151ULL, 0x4eb067090f0146aeULL}, // 1e295 * 2**-852
|
||||
{0x9c935e00d4b9d8d3ULL, 0x912e4065a960cc2cULL}, // 1e296 * 2**-856
|
||||
{0xc3b8358109e84f08ULL, 0xf579d07f13b8ff37ULL}, // 1e297 * 2**-859
|
||||
{0xf4a642e14c6262c9ULL, 0x32d8449ed8a73f05ULL}, // 1e298 * 2**-862
|
||||
{0x98e7e9cccfbd7dbeULL, 0x7fc72ae347688763ULL}, // 1e299 * 2**-866
|
||||
{0xbf21e44003acdd2dULL, 0x1fb8f59c1942a93cULL}, // 1e300 * 2**-869
|
||||
{0xeeea5d5004981479ULL, 0xe7a733031f93538bULL}, // 1e301 * 2**-872
|
||||
{0x95527a5202df0cccULL, 0xf0c87fe1f3bc1437ULL}, // 1e302 * 2**-876
|
||||
{0xbaa718e68396cffeULL, 0x2cfa9fda70ab1945ULL}, // 1e303 * 2**-879
|
||||
{0xe950df20247c83feULL, 0xb83947d10cd5df96ULL}, // 1e304 * 2**-882
|
||||
{0x91d28b7416cdd27fULL, 0xb323cce2a805abbeULL}, // 1e305 * 2**-886
|
||||
{0xb6472e511c81471eULL, 0x1fecc01b520716adULL}, // 1e306 * 2**-889
|
||||
{0xe3d8f9e563a198e6ULL, 0xa7e7f0222688dc59ULL}, // 1e307 * 2**-892
|
||||
{0x8e679c2f5e44ff90ULL, 0xa8f0f615581589b7ULL}, // 1e308 * 2**-896
|
||||
{0xb201833b35d63f74ULL, 0xd32d339aae1aec25ULL}, // 1e309 * 2**-899
|
||||
{0xde81e40a034bcf50ULL, 0x07f8808159a1a72eULL}, // 1e310 * 2**-902
|
||||
{0x8b112e86420f6192ULL, 0x04fb5050d805087dULL}, // 1e311 * 2**-906
|
||||
{0xadd57a27d29339f7ULL, 0x863a24650e064a9cULL}, // 1e312 * 2**-909
|
||||
{0xd94ad8b1c7380875ULL, 0xe7c8ad7e5187dd43ULL}, // 1e313 * 2**-912
|
||||
{0x87cec76f1c830549ULL, 0x70dd6c6ef2f4ea4aULL}, // 1e314 * 2**-916
|
||||
{0xa9c2794ae3a3c69bULL, 0x4d14c78aafb224ddULL}, // 1e315 * 2**-919
|
||||
{0xd433179d9c8cb842ULL, 0xa059f96d5b9eae14ULL}, // 1e316 * 2**-922
|
||||
{0x849feec281d7f329ULL, 0x24383be459432cccULL}, // 1e317 * 2**-926
|
||||
{0xa5c7ea73224deff4ULL, 0xed464add6f93f7ffULL}, // 1e318 * 2**-929
|
||||
{0xcf39e50feae16bf0ULL, 0x2897dd94cb78f5ffULL}, // 1e319 * 2**-932
|
||||
{0x81842f29f2cce376ULL, 0x195eea7cff2b99bfULL}, // 1e320 * 2**-936
|
||||
{0xa1e53af46f801c54ULL, 0x9fb6a51c3ef6802fULL}, // 1e321 * 2**-939
|
||||
{0xca5e89b18b602369ULL, 0xc7a44e634eb4203bULL}, // 1e322 * 2**-942
|
||||
{0xfcf62c1dee382c43ULL, 0xb98d61fc2261284aULL}, // 1e323 * 2**-945
|
||||
{0x9e19db92b4e31baaULL, 0x93f85d3d957cb92eULL}, // 1e324 * 2**-949
|
||||
{0xc5a05277621be294ULL, 0x38f6748cfadbe77aULL}, // 1e325 * 2**-952
|
||||
{0xf70867153aa2db39ULL, 0x473411b03992e158ULL}, // 1e326 * 2**-955
|
||||
{0x9a65406d44a5c904ULL, 0x8c808b0e23fbccd7ULL}, // 1e327 * 2**-959
|
||||
{0xc0fe908895cf3b45ULL, 0xafa0add1acfac00dULL}, // 1e328 * 2**-962
|
||||
{0xf13e34aabb430a16ULL, 0x9b88d94618397010ULL}, // 1e329 * 2**-965
|
||||
{0x96c6e0eab509e64eULL, 0xa13587cbcf23e60aULL}, // 1e330 * 2**-969
|
||||
{0xbc789925624c5fe1ULL, 0x4982e9bec2ecdf8dULL}, // 1e331 * 2**-972
|
||||
{0xeb96bf6ebadf77d9ULL, 0x1be3a42e73a81770ULL}, // 1e332 * 2**-975
|
||||
{0x933e37a534cbaae8ULL, 0x716e469d08490ea6ULL}, // 1e333 * 2**-979
|
||||
{0xb80dc58e81fe95a2ULL, 0x8dc9d8444a5b524fULL}, // 1e334 * 2**-982
|
||||
{0xe61136f2227e3b0aULL, 0x313c4e555cf226e3ULL}, // 1e335 * 2**-985
|
||||
{0x8fcac257558ee4e7ULL, 0xdec5b0f55a17584eULL}, // 1e336 * 2**-989
|
||||
{0xb3bd72ed2af29e20ULL, 0x56771d32b09d2e62ULL}, // 1e337 * 2**-992
|
||||
{0xe0accfa875af45a8ULL, 0x6c14e47f5cc479faULL}, // 1e338 * 2**-995
|
||||
{0x8c6c01c9498d8b89ULL, 0x438d0ecf99facc3cULL}, // 1e339 * 2**-999
|
||||
{0xaf87023b9bf0ee6bULL, 0x1470528380797f4bULL}, // 1e340 * 2**-1002
|
||||
{0xdb68c2ca82ed2a06ULL, 0x598c67246097df1eULL}, // 1e341 * 2**-1005
|
||||
{0x892179be91d43a44ULL, 0x77f7c076bc5eeb73ULL}, // 1e342 * 2**-1009
|
||||
{0xab69d82e364948d5ULL, 0x95f5b0946b76a64fULL}, // 1e343 * 2**-1012
|
||||
{0xd6444e39c3db9b0aULL, 0x7b731cb986544fe3ULL}, // 1e344 * 2**-1015
|
||||
{0x85eab0e41a6940e6ULL, 0x0d27f1f3f3f4b1eeULL}, // 1e345 * 2**-1019
|
||||
{0xa7655d1d21039120ULL, 0x9071ee70f0f1de6aULL}, // 1e346 * 2**-1022
|
||||
{0xd13eb46469447568ULL, 0xb48e6a0d2d2e5604ULL}, // 1e347 * 2**-1025
|
||||
};
|
||||
|
||||
} // namespace fpfmt
|
||||
Reference in New Issue
Block a user