8 #ifndef FMT_FORMAT_INL_H_
9 #define FMT_FORMAT_INL_H_
21 #ifndef FMT_STATIC_THOUSANDS_SEPARATOR
37 std::fprintf(stderr,
"%s:%d: assertion failed: %s", file, line, message);
44 # define FMT_SNPRINTF snprintf
46 inline int fmt_snprintf(
char*
buffer,
size_t size,
const char*
format, ...) {
48 va_start(args, format);
49 int result = vsnprintf_s(buffer, size, _TRUNCATE, format, args);
53 # define FMT_SNPRINTF fmt_snprintf
62 static const char SEP[] =
": ";
63 static const char ERROR_STR[] =
"error ";
65 size_t error_code_size =
sizeof(SEP) +
sizeof(ERROR_STR) - 2;
68 abs_value = 0 - abs_value;
84 if (std::fwrite(full_message.data(), full_message.size(), 1, stderr) > 0)
85 std::fputc(
'\n', stderr);
91 size_t written = std::fwrite(ptr, size, count, stream);
95 #ifndef FMT_STATIC_THOUSANDS_SEPARATOR
96 template <
typename Locale>
103 return locale_ ? *
static_cast<const std::locale*
>(locale_) : std::locale();
106 template <
typename Char>
108 auto& facet = std::use_facet<std::numpunct<Char>>(loc.get<std::locale>());
109 auto grouping = facet.grouping();
110 auto thousands_sep = grouping.empty() ? Char() : facet.thousands_sep();
114 return std::use_facet<std::numpunct<Char>>(loc.
get<std::locale>())
118 template <
typename Char>
120 return {
"\03", FMT_STATIC_THOUSANDS_SEPARATOR};
134 auto ec = std::error_code(error_code, std::generic_category());
142 int i =
static_cast<int>(
sizeof(
void*)) - 1;
143 while (i > 0 &&
n.value[i] == 0) --i;
144 auto char_digits = std::numeric_limits<unsigned char>::digits / 4;
145 return i >= 0 ? i * char_digits + count_digits<4, unsigned>(
n.value[i]) : 1;
148 #if __cplusplus < 201703L
154 template <
typename T>
158 template <
typename T>
struct bits {
160 static_cast<int>(
sizeof(
T) * std::numeric_limits<unsigned char>::digits);
177 using significand_type = uint64_t;
179 template <
typename Float>
180 using is_supported_float =
bool_constant<
sizeof(Float) ==
sizeof(uint64_t) ||
181 sizeof(Float) ==
sizeof(uint32_t)>;
191 std::numeric_limits<double>::digits - 1;
198 fp(uint64_t f_val,
int e_val) :
f(f_val),
e(e_val) {}
202 template <
typename Double>
explicit fp(Double d) {
assign(d); }
208 using limits = std::numeric_limits<Float>;
209 const int float_significand_size = limits::digits - 1;
210 const int exponent_size =
212 const uint64_t float_implicit_bit = 1ULL << float_significand_size;
213 const uint64_t significand_mask = float_implicit_bit - 1;
214 const uint64_t
exponent_mask = (~0ULL >> 1) & ~significand_mask;
215 const int exponent_bias = (1 << exponent_size) - limits::max_exponent - 1;
216 constexpr
bool is_double =
sizeof(Float) ==
sizeof(uint64_t);
218 f = u & significand_mask;
220 static_cast<int>((u &
exponent_mask) >> float_significand_size);
223 bool is_predecessor_closer = f == 0 && biased_e > 1;
225 f += float_implicit_bit;
228 e = biased_e - exponent_bias - float_significand_size;
229 return is_predecessor_closer;
243 while ((value.
f & shifted_implicit_bit) == 0) {
258 inline uint64_t
multiply(uint64_t lhs, uint64_t rhs) {
260 auto product =
static_cast<__uint128_t
>(lhs) * rhs;
261 auto f =
static_cast<uint64_t
>(product >> 64);
262 return (static_cast<uint64_t>(product) & (1ULL << 63)) != 0 ?
f + 1 :
f;
265 uint64_t
mask = (1ULL << 32) - 1;
266 uint64_t
a = lhs >> 32,
b = lhs &
mask;
267 uint64_t
c = rhs >> 32, d = rhs &
mask;
268 uint64_t ac = a *
c, bc = b *
c, ad = a * d, bd = b * d;
270 uint64_t mid = (bd >> 32) + (ad & mask) + (bc &
mask) + (1U << 31);
271 return ac + (ad >> 32) + (bc >> 32) + (mid >> 32);
282 static constexpr
const uint64_t pow10_significands[] = {
283 0xfa8fd5a0081c0288, 0xbaaee17fa23ebf76, 0x8b16fb203055ac76,
284 0xcf42894a5dce35ea, 0x9a6bb0aa55653b2d, 0xe61acf033d1a45df,
285 0xab70fe17c79ac6ca, 0xff77b1fcbebcdc4f, 0xbe5691ef416bd60c,
286 0x8dd01fad907ffc3c, 0xd3515c2831559a83, 0x9d71ac8fada6c9b5,
287 0xea9c227723ee8bcb, 0xaecc49914078536d, 0x823c12795db6ce57,
288 0xc21094364dfb5637, 0x9096ea6f3848984f, 0xd77485cb25823ac7,
289 0xa086cfcd97bf97f4, 0xef340a98172aace5, 0xb23867fb2a35b28e,
290 0x84c8d4dfd2c63f3b, 0xc5dd44271ad3cdba, 0x936b9fcebb25c996,
291 0xdbac6c247d62a584, 0xa3ab66580d5fdaf6, 0xf3e2f893dec3f126,
292 0xb5b5ada8aaff80b8, 0x87625f056c7c4a8b, 0xc9bcff6034c13053,
293 0x964e858c91ba2655, 0xdff9772470297ebd, 0xa6dfbd9fb8e5b88f,
294 0xf8a95fcf88747d94, 0xb94470938fa89bcf, 0x8a08f0f8bf0f156b,
295 0xcdb02555653131b6, 0x993fe2c6d07b7fac, 0xe45c10c42a2b3b06,
296 0xaa242499697392d3, 0xfd87b5f28300ca0e, 0xbce5086492111aeb,
297 0x8cbccc096f5088cc, 0xd1b71758e219652c, 0x9c40000000000000,
298 0xe8d4a51000000000, 0xad78ebc5ac620000, 0x813f3978f8940984,
299 0xc097ce7bc90715b3, 0x8f7e32ce7bea5c70, 0xd5d238a4abe98068,
300 0x9f4f2726179a2245, 0xed63a231d4c4fb27, 0xb0de65388cc8ada8,
301 0x83c7088e1aab65db, 0xc45d1df942711d9a, 0x924d692ca61be758,
302 0xda01ee641a708dea, 0xa26da3999aef774a, 0xf209787bb47d6b85,
303 0xb454e4a179dd1877, 0x865b86925b9bc5c2, 0xc83553c5c8965d3d,
304 0x952ab45cfa97a0b3, 0xde469fbd99a05fe3, 0xa59bc234db398c25,
305 0xf6c69a72a3989f5c, 0xb7dcbf5354e9bece, 0x88fcf317f22241e2,
306 0xcc20ce9bd35c78a5, 0x98165af37b2153df, 0xe2a0b5dc971f303a,
307 0xa8d9d1535ce3b396, 0xfb9b7cd9a4a7443c, 0xbb764c4ca7a44410,
308 0x8bab8eefb6409c1a, 0xd01fef10a657842c, 0x9b10a4e5e9913129,
309 0xe7109bfba19c0c9d, 0xac2820d9623bf429, 0x80444b5e7aa7cf85,
310 0xbf21e44003acdd2d, 0x8e679c2f5e44ff8f, 0xd433179d9c8cb841,
311 0x9e19db92b4e31ba9, 0xeb96bf6ebadf77d9, 0xaf87023b9bf0ee6b,
316 static constexpr
const int16_t pow10_exponents[] = {
317 -1220, -1193, -1166, -1140, -1113, -1087, -1060, -1034, -1007, -980, -954,
318 -927, -901, -874, -847, -821, -794, -768, -741, -715, -688, -661,
319 -635, -608, -582, -555, -529, -502, -475, -449, -422, -396, -369,
320 -343, -316, -289, -263, -236, -210, -183, -157, -130, -103, -77,
321 -50, -24, 3, 30, 56, 83, 109, 136, 162, 189, 216,
322 242, 269, 295, 322, 348, 375, 402, 428, 455, 481, 508,
323 534, 561, 588, 614, 641, 667, 694, 720, 747, 774, 800,
324 827, 853, 880, 907, 933, 960, 986, 1013, 1039, 1066};
326 const int shift = 32;
328 int index =
static_cast<int>(
330 ((int64_t(1) << shift) - 1))
334 const int first_dec_exp = -348;
336 const int dec_exp_step = 8;
337 index = (index - first_dec_exp - 1) / dec_exp_step + 1;
338 pow10_exponent = first_dec_exp + index * dec_exp_step;
339 return {pow10_significands[index], pow10_exponents[index]};
349 explicit operator uint32_t()
const {
return static_cast<uint32_t
>(
lower); }
358 lower = (upper << 32) | (lower >> 32);
367 using bigit = uint32_t;
368 using double_bigit = uint64_t;
369 enum { bigits_capacity = 32 };
374 bigit& operator[](
int index) {
return bigits_[
to_unsigned(index)]; }
380 void subtract_bigits(
int index, bigit other, bigit& borrow) {
381 auto result =
static_cast<double_bigit
>((*this)[
index]) - other - borrow;
383 borrow =
static_cast<bigit
>(
result >> (bigit_bits * 2 - 1));
386 void remove_leading_zeros() {
387 int num_bigits =
static_cast<int>(bigits_.size()) - 1;
388 while (num_bigits > 0 && (*
this)[
num_bigits] == 0) --num_bigits;
393 void subtract_aligned(
const bigint& other) {
394 FMT_ASSERT(other.exp_ >= exp_,
"unaligned bigints");
397 int i = other.exp_ - exp_;
398 for (
size_t j = 0,
n = other.bigits_.size();
j !=
n; ++i, ++
j)
399 subtract_bigits(i, other.bigits_[
j], borrow);
400 while (borrow > 0) subtract_bigits(i, 0, borrow);
401 remove_leading_zeros();
405 const double_bigit wide_value =
value;
407 for (
size_t i = 0,
n = bigits_.size(); i <
n; ++i) {
408 double_bigit
result = bigits_[i] * wide_value + carry;
409 bigits_[i] =
static_cast<bigit
>(
result);
410 carry =
static_cast<bigit
>(result >> bigit_bits);
412 if (carry != 0) bigits_.push_back(carry);
416 const bigit
mask = ~bigit(0);
418 const double_bigit
upper = value >> bigit_bits;
419 double_bigit carry = 0;
420 for (
size_t i = 0, n = bigits_.size(); i <
n; ++i) {
421 double_bigit
result = bigits_[i] * lower + (carry &
mask);
423 bigits_[i] * upper + (result >> bigit_bits) + (carry >> bigit_bits);
424 bigits_[i] =
static_cast<bigit
>(
result);
427 bigits_.push_back(carry & mask);
428 carry >>= bigit_bits;
441 auto size = other.bigits_.size();
443 auto data = other.bigits_.data();
449 size_t num_bigits = 0;
451 bigits_[num_bigits++] = n & ~bigit(0);
454 bigits_.
resize(num_bigits);
458 int num_bigits()
const {
return static_cast<int>(bigits_.size()) + exp_; }
462 exp_ += shift / bigit_bits;
464 if (shift == 0)
return *
this;
466 for (
size_t i = 0, n = bigits_.size(); i <
n; ++i) {
467 bigit
c = bigits_[i] >> (bigit_bits - shift);
468 bigits_[i] = (bigits_[i] << shift) + carry;
471 if (carry != 0) bigits_.push_back(carry);
483 if (num_lhs_bigits != num_rhs_bigits)
484 return num_lhs_bigits > num_rhs_bigits ? 1 : -1;
485 int i =
static_cast<int>(lhs.bigits_.size()) - 1;
486 int j =
static_cast<int>(rhs.bigits_.size()) - 1;
488 if (end < 0) end = 0;
489 for (; i >=
end; --i, --
j) {
490 bigit lhs_bigit = lhs[i], rhs_bigit = rhs[
j];
491 if (lhs_bigit != rhs_bigit)
return lhs_bigit > rhs_bigit ? 1 : -1;
493 if (i != j)
return i > j ? 1 : -1;
502 if (max_lhs_bigits + 1 < num_rhs_bigits)
return -1;
503 if (max_lhs_bigits > num_rhs_bigits)
return 1;
504 auto get_bigit = [](
const bigint&
n,
int i) -> bigit {
505 return i >= n.exp_ && i < n.
num_bigits() ? n[i - n.exp_] : 0;
507 double_bigit borrow = 0;
509 for (
int i = num_rhs_bigits - 1; i >= min_exp; --i) {
511 static_cast<double_bigit
>(get_bigit(lhs1, i)) + get_bigit(lhs2, i);
512 bigit rhs_bigit = get_bigit(rhs, i);
513 if (sum > rhs_bigit + borrow)
return 1;
514 borrow = rhs_bigit + borrow - sum;
515 if (borrow > 1)
return -1;
516 borrow <<= bigit_bits;
518 return borrow != 0 ? -1 : 0;
524 if (exp == 0)
return assign(1);
527 while (exp >= bitmask) bitmask <<= 1;
533 while (bitmask != 0) {
535 if ((exp & bitmask) != 0) *
this *= 5;
542 int num_bigits =
static_cast<int>(bigits_.size());
547 auto sum = accumulator_t();
548 for (
int bigit_index = 0; bigit_index <
num_bigits; ++bigit_index) {
551 for (
int i = 0,
j = bigit_index;
j >= 0; ++i, --
j) {
553 sum +=
static_cast<double_bigit
>(n[i]) * n[
j];
555 (*this)[bigit_index] =
static_cast<bigit
>(sum);
559 for (
int bigit_index = num_bigits; bigit_index < num_result_bigits;
561 for (
int j = num_bigits - 1, i = bigit_index -
j; i <
num_bigits;)
562 sum += static_cast<double_bigit>(n[i++]) * n[
j--];
563 (*this)[bigit_index] =
static_cast<bigit
>(sum);
567 remove_leading_zeros();
574 int exp_difference = exp_ - other.exp_;
575 if (exp_difference <= 0)
return;
576 int num_bigits =
static_cast<int>(bigits_.size());
578 for (
int i = num_bigits - 1,
j = i + exp_difference; i >= 0; --i, --
j)
579 bigits_[
j] = bigits_[i];
580 std::uninitialized_fill_n(bigits_.data(), exp_difference, 0);
581 exp_ -= exp_difference;
588 if (
compare(*
this, divisor) < 0)
return 0;
589 FMT_ASSERT(divisor.bigits_[divisor.bigits_.size() - 1u] != 0,
"");
593 subtract_aligned(divisor);
595 }
while (
compare(*
this, divisor) >= 0);
612 if (remainder <= divisor - remainder && error * 2 <= divisor - remainder * 2)
615 if (remainder >= error &&
616 remainder - error >= divisor - (remainder - error)) {
633 10000000000000000000ULL};
640 template <
typename Handler>
643 const fp one(1ULL << -value.
e, value.
e);
647 auto integral =
static_cast<uint32_t
>(value.
f >> -one.
e);
651 uint64_t fractional = value.
f & (one.
f - 1);
655 value.
f / 10, error * 10, exp);
660 auto divmod_integral = [&](uint32_t
divisor) {
668 divmod_integral(1000000000);
671 divmod_integral(100000000);
674 divmod_integral(10000000);
677 divmod_integral(1000000);
680 divmod_integral(100000);
683 divmod_integral(10000);
686 divmod_integral(1000);
689 divmod_integral(100);
699 FMT_ASSERT(
false,
"invalid number of digits");
702 auto remainder = (
static_cast<uint64_t
>(integral) << -one.
e) + fractional;
703 result = handler.on_digit(static_cast<char>(
'0' + digit),
712 char digit =
static_cast<char>(
'0' + (fractional >> -one.
e));
713 fractional &= one.
f - 1;
715 result = handler.on_digit(digit, one.
f, fractional, error, exp,
false);
746 uint64_t error,
int,
bool integral) {
755 if (error >= divisor || error >= divisor - error)
return digits::error;
763 for (
int i =
size - 1; i > 0 &&
buf[i] >
'9'; --i) {
787 (static_cast<uint128_t>(high) << 64)} {}
792 return uint64_t(internal_ >> 64);
794 constexpr uint64_t
low()
const FMT_NOEXCEPT {
return uint64_t(internal_); }
812 # if defined(_MSC_VER) && defined(_M_X64)
813 unsigned char carry = _addcarry_u64(0, low_, n, &low_);
814 _addcarry_u64(carry, high_, 0, &high_);
817 uint64_t sum = low_ +
n;
818 high_ += (sum < low_ ? 1 : 0);
827 namespace dragonbox {
831 return static_cast<uint128_t>(
x) * static_cast<uint128_t>(
y);
832 #elif defined(_MSC_VER) && defined(_M_X64)
837 const uint64_t mask = (uint64_t(1) << 32) - uint64_t(1);
839 uint64_t
a =
x >> 32;
841 uint64_t
c =
y >> 32;
842 uint64_t d =
y &
mask;
851 return {ac + (intermediate >> 32) + (ad >> 32) + (bc >> 32),
852 (intermediate << 32) + (bd &
mask)};
859 auto p =
static_cast<uint128_t>(
x) * static_cast<uint128_t>(
y);
860 return static_cast<uint64_t
>(p >> 64);
861 #elif defined(_MSC_VER) && defined(_M_X64)
862 return __umulh(
x,
y);
885 uint64_t g01 =
x *
y.high();
899 FMT_ASSERT(e <= 1700 && e >= -1700,
"too large exponent");
900 const int shift = 22;
907 FMT_ASSERT(e <= 1233 && e >= -1233,
"too large exponent");
908 const uint64_t log2_10_integer_part = 3;
909 const uint64_t log2_10_fractional_digits = 0x5269e12f346e2bf9;
910 const int shift_amount = 19;
911 return (e * static_cast<int>(
912 (log2_10_integer_part << shift_amount) |
913 (log2_10_fractional_digits >> (64 - shift_amount)))) >>
917 FMT_ASSERT(e <= 1700 && e >= -1700,
"too large exponent");
918 const uint64_t log10_4_over_3_fractional_digits = 0x1ffbfc2bbc780375;
919 const int shift_amount = 22;
921 (64 - shift_amount)) -
922 static_cast<int>(log10_4_over_3_fractional_digits >>
923 (64 - shift_amount))) >>
931 #ifdef FMT_BUILTIN_CTZ
932 return FMT_BUILTIN_CTZ(
x) >= exp;
934 return exp < num_bits<uint32_t>() &&
x == ((
x >> exp) << exp);
940 #ifdef FMT_BUILTIN_CTZLL
941 return FMT_BUILTIN_CTZLL(
x) >= exp;
943 return exp < num_bits<uint64_t>() &&
x == ((
x >> exp) << exp);
957 {0x00000001, 0xffffffff}, {0xcccccccd, 0x33333333},
958 {0xc28f5c29, 0x0a3d70a3}, {0x26e978d5, 0x020c49ba},
959 {0x3afb7e91, 0x0068db8b}, {0x0bcbe61d, 0x0014f8b5},
960 {0x68c26139, 0x000431bd}, {0xae8d46a5, 0x0000d6bf},
961 {0x22e90e21, 0x00002af3}, {0x3a2e9c6d, 0x00000897},
962 {0x3ed61f49, 0x000001b7}};
963 return x * divtest_table[exp].
mod_inv <= divtest_table[exp].max_quotient;
968 {0x0000000000000001, 0xffffffffffffffff},
969 {0xcccccccccccccccd, 0x3333333333333333},
970 {0x8f5c28f5c28f5c29, 0x0a3d70a3d70a3d70},
971 {0x1cac083126e978d5, 0x020c49ba5e353f7c},
972 {0xd288ce703afb7e91, 0x0068db8bac710cb2},
973 {0x5d4e8fb00bcbe61d, 0x0014f8b588e368f0},
974 {0x790fb65668c26139, 0x000431bde82d7b63},
975 {0xe5032477ae8d46a5, 0x0000d6bf94d5e57a},
976 {0xc767074b22e90e21, 0x00002af31dc46118},
977 {0x8e47ce423a2e9c6d, 0x0000089705f4136b},
978 {0x4fa7f60d3ed61f49, 0x000001b7cdfd9d7b},
979 {0x0fee64690c913975, 0x00000057f5ff85e5},
980 {0x3662e0e1cf503eb1, 0x000000119799812d},
981 {0xa47a2cf9f6433fbd, 0x0000000384b84d09},
982 {0x54186f653140a659, 0x00000000b424dc35},
983 {0x7738164770402145, 0x0000000024075f3d},
984 {0xe4a4d1417cd9a041, 0x000000000734aca5},
985 {0xc75429d9e5c5200d, 0x000000000170ef54},
986 {0xc1773b91fac10669, 0x000000000049c977},
987 {0x26b172506559ce15, 0x00000000000ec1e4},
988 {0xd489e3a9addec2d1, 0x000000000002f394},
989 {0x90e860bb892c8d5d, 0x000000000000971d},
990 {0x502e79bf1b6f4f79, 0x0000000000001e39},
991 {0xdcd618596be30fe5, 0x000000000000060b}};
992 return x * divtest_table[exp].
mod_inv <= divtest_table[exp].max_quotient;
1000 static constexpr
struct {
1001 uint32_t magic_number;
1002 int bits_for_comparison;
1005 } infos[] = {{0xcccd, 16, 0x3333, 18}, {0xa429, 8, 0x0a, 20}};
1006 constexpr
auto info = infos[
N - 1];
1007 n *= info.magic_number;
1008 const uint32_t comparison_mask = (1u << info.bits_for_comparison) - 1;
1009 bool result = (n & comparison_mask) <= info.threshold;
1010 n >>= info.shift_amount;
1017 static constexpr
struct {
1018 uint32_t magic_number;
1020 uint32_t divisor_times_10;
1021 } infos[] = {{0xcccd, 19, 100}, {0xa3d8, 22, 1000}};
1022 constexpr
auto info = infos[
N - 1];
1023 FMT_ASSERT(n <= info.divisor_times_10,
"n is too large");
1024 return n * info.magic_number >> info.shift_amount;
1029 return n / float_info<float>::big_divisor;
1044 FMT_ASSERT(k >= float_info<float>::min_k && k <= float_info<float>::max_k,
1045 "k is out of range");
1046 constexpr
const uint64_t pow10_significands[] = {
1047 0x81ceb32c4b43fcf5, 0xa2425ff75e14fc32, 0xcad2f7f5359a3b3f,
1048 0xfd87b5f28300ca0e, 0x9e74d1b791e07e49, 0xc612062576589ddb,
1049 0xf79687aed3eec552, 0x9abe14cd44753b53, 0xc16d9a0095928a28,
1050 0xf1c90080baf72cb2, 0x971da05074da7bef, 0xbce5086492111aeb,
1051 0xec1e4a7db69561a6, 0x9392ee8e921d5d08, 0xb877aa3236a4b44a,
1052 0xe69594bec44de15c, 0x901d7cf73ab0acda, 0xb424dc35095cd810,
1053 0xe12e13424bb40e14, 0x8cbccc096f5088cc, 0xafebff0bcb24aaff,
1054 0xdbe6fecebdedd5bf, 0x89705f4136b4a598, 0xabcc77118461cefd,
1055 0xd6bf94d5e57a42bd, 0x8637bd05af6c69b6, 0xa7c5ac471b478424,
1056 0xd1b71758e219652c, 0x83126e978d4fdf3c, 0xa3d70a3d70a3d70b,
1057 0xcccccccccccccccd, 0x8000000000000000, 0xa000000000000000,
1058 0xc800000000000000, 0xfa00000000000000, 0x9c40000000000000,
1059 0xc350000000000000, 0xf424000000000000, 0x9896800000000000,
1060 0xbebc200000000000, 0xee6b280000000000, 0x9502f90000000000,
1061 0xba43b74000000000, 0xe8d4a51000000000, 0x9184e72a00000000,
1062 0xb5e620f480000000, 0xe35fa931a0000000, 0x8e1bc9bf04000000,
1063 0xb1a2bc2ec5000000, 0xde0b6b3a76400000, 0x8ac7230489e80000,
1064 0xad78ebc5ac620000, 0xd8d726b7177a8000, 0x878678326eac9000,
1065 0xa968163f0a57b400, 0xd3c21bcecceda100, 0x84595161401484a0,
1066 0xa56fa5b99019a5c8, 0xcecb8f27f4200f3a, 0x813f3978f8940984,
1067 0xa18f07d736b90be5, 0xc9f2c9cd04674ede, 0xfc6f7c4045812296,
1068 0x9dc5ada82b70b59d, 0xc5371912364ce305, 0xf684df56c3e01bc6,
1069 0x9a130b963a6c115c, 0xc097ce7bc90715b3, 0xf0bdc21abb48db20,
1070 0x96769950b50d88f4, 0xbc143fa4e250eb31, 0xeb194f8e1ae525fd,
1071 0x92efd1b8d0cf37be, 0xb7abc627050305ad, 0xe596b7b0c643c719,
1072 0x8f7e32ce7bea5c6f, 0xb35dbf821ae4f38b, 0xe0352f62a19e306e};
1073 return pow10_significands[k - float_info<float>::min_k];
1083 return static_cast<uint32_t
>(cache >> (64 - 1 - beta_minus_1));
1092 return ((
umul96_lower64(two_f, cache) >> (64 - beta_minus_1)) & 1) != 0;
1098 (cache - (cache >> (float_info<float>::significand_bits + 2))) >>
1099 (64 - float_info<float>::significand_bits - 1 - beta_minus_1));
1105 (cache + (cache >> (float_info<float>::significand_bits + 1))) >>
1106 (64 - float_info<float>::significand_bits - 1 - beta_minus_1));
1111 return (static_cast<carrier_uint>(
1113 (64 - float_info<float>::significand_bits - 2 - beta_minus_1)) +
1124 FMT_ASSERT(k >= float_info<double>::min_k && k <= float_info<double>::max_k,
1125 "k is out of range");
1128 #if FMT_USE_FULL_CACHE_DRAGONBOX
1129 {0xff77b1fcbebcdc4f, 0x25e8e89c13bb0f7b},
1130 {0x9faacf3df73609b1, 0x77b191618c54e9ad},
1131 {0xc795830d75038c1d, 0xd59df5b9ef6a2418},
1132 {0xf97ae3d0d2446f25, 0x4b0573286b44ad1e},
1133 {0x9becce62836ac577, 0x4ee367f9430aec33},
1134 {0xc2e801fb244576d5, 0x229c41f793cda740},
1135 {0xf3a20279ed56d48a, 0x6b43527578c11110},
1136 {0x9845418c345644d6, 0x830a13896b78aaaa},
1137 {0xbe5691ef416bd60c, 0x23cc986bc656d554},
1138 {0xedec366b11c6cb8f, 0x2cbfbe86b7ec8aa9},
1139 {0x94b3a202eb1c3f39, 0x7bf7d71432f3d6aa},
1140 {0xb9e08a83a5e34f07, 0xdaf5ccd93fb0cc54},
1141 {0xe858ad248f5c22c9, 0xd1b3400f8f9cff69},
1142 {0x91376c36d99995be, 0x23100809b9c21fa2},
1143 {0xb58547448ffffb2d, 0xabd40a0c2832a78b},
1144 {0xe2e69915b3fff9f9, 0x16c90c8f323f516d},
1145 {0x8dd01fad907ffc3b, 0xae3da7d97f6792e4},
1146 {0xb1442798f49ffb4a, 0x99cd11cfdf41779d},
1147 {0xdd95317f31c7fa1d, 0x40405643d711d584},
1148 {0x8a7d3eef7f1cfc52, 0x482835ea666b2573},
1149 {0xad1c8eab5ee43b66, 0xda3243650005eed0},
1150 {0xd863b256369d4a40, 0x90bed43e40076a83},
1151 {0x873e4f75e2224e68, 0x5a7744a6e804a292},
1152 {0xa90de3535aaae202, 0x711515d0a205cb37},
1153 {0xd3515c2831559a83, 0x0d5a5b44ca873e04},
1154 {0x8412d9991ed58091, 0xe858790afe9486c3},
1155 {0xa5178fff668ae0b6, 0x626e974dbe39a873},
1156 {0xce5d73ff402d98e3, 0xfb0a3d212dc81290},
1157 {0x80fa687f881c7f8e, 0x7ce66634bc9d0b9a},
1158 {0xa139029f6a239f72, 0x1c1fffc1ebc44e81},
1159 {0xc987434744ac874e, 0xa327ffb266b56221},
1160 {0xfbe9141915d7a922, 0x4bf1ff9f0062baa9},
1161 {0x9d71ac8fada6c9b5, 0x6f773fc3603db4aa},
1162 {0xc4ce17b399107c22, 0xcb550fb4384d21d4},
1163 {0xf6019da07f549b2b, 0x7e2a53a146606a49},
1164 {0x99c102844f94e0fb, 0x2eda7444cbfc426e},
1165 {0xc0314325637a1939, 0xfa911155fefb5309},
1166 {0xf03d93eebc589f88, 0x793555ab7eba27cb},
1167 {0x96267c7535b763b5, 0x4bc1558b2f3458df},
1168 {0xbbb01b9283253ca2, 0x9eb1aaedfb016f17},
1169 {0xea9c227723ee8bcb, 0x465e15a979c1cadd},
1170 {0x92a1958a7675175f, 0x0bfacd89ec191eca},
1171 {0xb749faed14125d36, 0xcef980ec671f667c},
1172 {0xe51c79a85916f484, 0x82b7e12780e7401b},
1173 {0x8f31cc0937ae58d2, 0xd1b2ecb8b0908811},
1174 {0xb2fe3f0b8599ef07, 0x861fa7e6dcb4aa16},
1175 {0xdfbdcece67006ac9, 0x67a791e093e1d49b},
1176 {0x8bd6a141006042bd, 0xe0c8bb2c5c6d24e1},
1177 {0xaecc49914078536d, 0x58fae9f773886e19},
1178 {0xda7f5bf590966848, 0xaf39a475506a899f},
1179 {0x888f99797a5e012d, 0x6d8406c952429604},
1180 {0xaab37fd7d8f58178, 0xc8e5087ba6d33b84},
1181 {0xd5605fcdcf32e1d6, 0xfb1e4a9a90880a65},
1182 {0x855c3be0a17fcd26, 0x5cf2eea09a550680},
1183 {0xa6b34ad8c9dfc06f, 0xf42faa48c0ea481f},
1184 {0xd0601d8efc57b08b, 0xf13b94daf124da27},
1185 {0x823c12795db6ce57, 0x76c53d08d6b70859},
1186 {0xa2cb1717b52481ed, 0x54768c4b0c64ca6f},
1187 {0xcb7ddcdda26da268, 0xa9942f5dcf7dfd0a},
1188 {0xfe5d54150b090b02, 0xd3f93b35435d7c4d},
1189 {0x9efa548d26e5a6e1, 0xc47bc5014a1a6db0},
1190 {0xc6b8e9b0709f109a, 0x359ab6419ca1091c},
1191 {0xf867241c8cc6d4c0, 0xc30163d203c94b63},
1192 {0x9b407691d7fc44f8, 0x79e0de63425dcf1e},
1193 {0xc21094364dfb5636, 0x985915fc12f542e5},
1194 {0xf294b943e17a2bc4, 0x3e6f5b7b17b2939e},
1195 {0x979cf3ca6cec5b5a, 0xa705992ceecf9c43},
1196 {0xbd8430bd08277231, 0x50c6ff782a838354},
1197 {0xece53cec4a314ebd, 0xa4f8bf5635246429},
1198 {0x940f4613ae5ed136, 0x871b7795e136be9a},
1199 {0xb913179899f68584, 0x28e2557b59846e40},
1200 {0xe757dd7ec07426e5, 0x331aeada2fe589d0},
1201 {0x9096ea6f3848984f, 0x3ff0d2c85def7622},
1202 {0xb4bca50b065abe63, 0x0fed077a756b53aa},
1203 {0xe1ebce4dc7f16dfb, 0xd3e8495912c62895},
1204 {0x8d3360f09cf6e4bd, 0x64712dd7abbbd95d},
1205 {0xb080392cc4349dec, 0xbd8d794d96aacfb4},
1206 {0xdca04777f541c567, 0xecf0d7a0fc5583a1},
1207 {0x89e42caaf9491b60, 0xf41686c49db57245},
1208 {0xac5d37d5b79b6239, 0x311c2875c522ced6},
1209 {0xd77485cb25823ac7, 0x7d633293366b828c},
1210 {0x86a8d39ef77164bc, 0xae5dff9c02033198},
1211 {0xa8530886b54dbdeb, 0xd9f57f830283fdfd},
1212 {0xd267caa862a12d66, 0xd072df63c324fd7c},
1213 {0x8380dea93da4bc60, 0x4247cb9e59f71e6e},
1214 {0xa46116538d0deb78, 0x52d9be85f074e609},
1215 {0xcd795be870516656, 0x67902e276c921f8c},
1216 {0x806bd9714632dff6, 0x00ba1cd8a3db53b7},
1217 {0xa086cfcd97bf97f3, 0x80e8a40eccd228a5},
1218 {0xc8a883c0fdaf7df0, 0x6122cd128006b2ce},
1219 {0xfad2a4b13d1b5d6c, 0x796b805720085f82},
1220 {0x9cc3a6eec6311a63, 0xcbe3303674053bb1},
1221 {0xc3f490aa77bd60fc, 0xbedbfc4411068a9d},
1222 {0xf4f1b4d515acb93b, 0xee92fb5515482d45},
1223 {0x991711052d8bf3c5, 0x751bdd152d4d1c4b},
1224 {0xbf5cd54678eef0b6, 0xd262d45a78a0635e},
1225 {0xef340a98172aace4, 0x86fb897116c87c35},
1226 {0x9580869f0e7aac0e, 0xd45d35e6ae3d4da1},
1227 {0xbae0a846d2195712, 0x8974836059cca10a},
1228 {0xe998d258869facd7, 0x2bd1a438703fc94c},
1229 {0x91ff83775423cc06, 0x7b6306a34627ddd0},
1230 {0xb67f6455292cbf08, 0x1a3bc84c17b1d543},
1231 {0xe41f3d6a7377eeca, 0x20caba5f1d9e4a94},
1232 {0x8e938662882af53e, 0x547eb47b7282ee9d},
1233 {0xb23867fb2a35b28d, 0xe99e619a4f23aa44},
1234 {0xdec681f9f4c31f31, 0x6405fa00e2ec94d5},
1235 {0x8b3c113c38f9f37e, 0xde83bc408dd3dd05},
1236 {0xae0b158b4738705e, 0x9624ab50b148d446},
1237 {0xd98ddaee19068c76, 0x3badd624dd9b0958},
1238 {0x87f8a8d4cfa417c9, 0xe54ca5d70a80e5d7},
1239 {0xa9f6d30a038d1dbc, 0x5e9fcf4ccd211f4d},
1240 {0xd47487cc8470652b, 0x7647c32000696720},
1241 {0x84c8d4dfd2c63f3b, 0x29ecd9f40041e074},
1242 {0xa5fb0a17c777cf09, 0xf468107100525891},
1243 {0xcf79cc9db955c2cc, 0x7182148d4066eeb5},
1244 {0x81ac1fe293d599bf, 0xc6f14cd848405531},
1245 {0xa21727db38cb002f, 0xb8ada00e5a506a7d},
1246 {0xca9cf1d206fdc03b, 0xa6d90811f0e4851d},
1247 {0xfd442e4688bd304a, 0x908f4a166d1da664},
1248 {0x9e4a9cec15763e2e, 0x9a598e4e043287ff},
1249 {0xc5dd44271ad3cdba, 0x40eff1e1853f29fe},
1250 {0xf7549530e188c128, 0xd12bee59e68ef47d},
1251 {0x9a94dd3e8cf578b9, 0x82bb74f8301958cf},
1252 {0xc13a148e3032d6e7, 0xe36a52363c1faf02},
1253 {0xf18899b1bc3f8ca1, 0xdc44e6c3cb279ac2},
1254 {0x96f5600f15a7b7e5, 0x29ab103a5ef8c0ba},
1255 {0xbcb2b812db11a5de, 0x7415d448f6b6f0e8},
1256 {0xebdf661791d60f56, 0x111b495b3464ad22},
1257 {0x936b9fcebb25c995, 0xcab10dd900beec35},
1258 {0xb84687c269ef3bfb, 0x3d5d514f40eea743},
1259 {0xe65829b3046b0afa, 0x0cb4a5a3112a5113},
1260 {0x8ff71a0fe2c2e6dc, 0x47f0e785eaba72ac},
1261 {0xb3f4e093db73a093, 0x59ed216765690f57},
1262 {0xe0f218b8d25088b8, 0x306869c13ec3532d},
1263 {0x8c974f7383725573, 0x1e414218c73a13fc},
1264 {0xafbd2350644eeacf, 0xe5d1929ef90898fb},
1265 {0xdbac6c247d62a583, 0xdf45f746b74abf3a},
1266 {0x894bc396ce5da772, 0x6b8bba8c328eb784},
1267 {0xab9eb47c81f5114f, 0x066ea92f3f326565},
1268 {0xd686619ba27255a2, 0xc80a537b0efefebe},
1269 {0x8613fd0145877585, 0xbd06742ce95f5f37},
1270 {0xa798fc4196e952e7, 0x2c48113823b73705},
1271 {0xd17f3b51fca3a7a0, 0xf75a15862ca504c6},
1272 {0x82ef85133de648c4, 0x9a984d73dbe722fc},
1273 {0xa3ab66580d5fdaf5, 0xc13e60d0d2e0ebbb},
1274 {0xcc963fee10b7d1b3, 0x318df905079926a9},
1275 {0xffbbcfe994e5c61f, 0xfdf17746497f7053},
1276 {0x9fd561f1fd0f9bd3, 0xfeb6ea8bedefa634},
1277 {0xc7caba6e7c5382c8, 0xfe64a52ee96b8fc1},
1278 {0xf9bd690a1b68637b, 0x3dfdce7aa3c673b1},
1279 {0x9c1661a651213e2d, 0x06bea10ca65c084f},
1280 {0xc31bfa0fe5698db8, 0x486e494fcff30a63},
1281 {0xf3e2f893dec3f126, 0x5a89dba3c3efccfb},
1282 {0x986ddb5c6b3a76b7, 0xf89629465a75e01d},
1283 {0xbe89523386091465, 0xf6bbb397f1135824},
1284 {0xee2ba6c0678b597f, 0x746aa07ded582e2d},
1285 {0x94db483840b717ef, 0xa8c2a44eb4571cdd},
1286 {0xba121a4650e4ddeb, 0x92f34d62616ce414},
1287 {0xe896a0d7e51e1566, 0x77b020baf9c81d18},
1288 {0x915e2486ef32cd60, 0x0ace1474dc1d122f},
1289 {0xb5b5ada8aaff80b8, 0x0d819992132456bb},
1290 {0xe3231912d5bf60e6, 0x10e1fff697ed6c6a},
1291 {0x8df5efabc5979c8f, 0xca8d3ffa1ef463c2},
1292 {0xb1736b96b6fd83b3, 0xbd308ff8a6b17cb3},
1293 {0xddd0467c64bce4a0, 0xac7cb3f6d05ddbdf},
1294 {0x8aa22c0dbef60ee4, 0x6bcdf07a423aa96c},
1295 {0xad4ab7112eb3929d, 0x86c16c98d2c953c7},
1296 {0xd89d64d57a607744, 0xe871c7bf077ba8b8},
1297 {0x87625f056c7c4a8b, 0x11471cd764ad4973},
1298 {0xa93af6c6c79b5d2d, 0xd598e40d3dd89bd0},
1299 {0xd389b47879823479, 0x4aff1d108d4ec2c4},
1300 {0x843610cb4bf160cb, 0xcedf722a585139bb},
1301 {0xa54394fe1eedb8fe, 0xc2974eb4ee658829},
1302 {0xce947a3da6a9273e, 0x733d226229feea33},
1303 {0x811ccc668829b887, 0x0806357d5a3f5260},
1304 {0xa163ff802a3426a8, 0xca07c2dcb0cf26f8},
1305 {0xc9bcff6034c13052, 0xfc89b393dd02f0b6},
1306 {0xfc2c3f3841f17c67, 0xbbac2078d443ace3},
1307 {0x9d9ba7832936edc0, 0xd54b944b84aa4c0e},
1308 {0xc5029163f384a931, 0x0a9e795e65d4df12},
1309 {0xf64335bcf065d37d, 0x4d4617b5ff4a16d6},
1310 {0x99ea0196163fa42e, 0x504bced1bf8e4e46},
1311 {0xc06481fb9bcf8d39, 0xe45ec2862f71e1d7},
1312 {0xf07da27a82c37088, 0x5d767327bb4e5a4d},
1313 {0x964e858c91ba2655, 0x3a6a07f8d510f870},
1314 {0xbbe226efb628afea, 0x890489f70a55368c},
1315 {0xeadab0aba3b2dbe5, 0x2b45ac74ccea842f},
1316 {0x92c8ae6b464fc96f, 0x3b0b8bc90012929e},
1317 {0xb77ada0617e3bbcb, 0x09ce6ebb40173745},
1318 {0xe55990879ddcaabd, 0xcc420a6a101d0516},
1319 {0x8f57fa54c2a9eab6, 0x9fa946824a12232e},
1320 {0xb32df8e9f3546564, 0x47939822dc96abfa},
1321 {0xdff9772470297ebd, 0x59787e2b93bc56f8},
1322 {0x8bfbea76c619ef36, 0x57eb4edb3c55b65b},
1323 {0xaefae51477a06b03, 0xede622920b6b23f2},
1324 {0xdab99e59958885c4, 0xe95fab368e45ecee},
1325 {0x88b402f7fd75539b, 0x11dbcb0218ebb415},
1326 {0xaae103b5fcd2a881, 0xd652bdc29f26a11a},
1327 {0xd59944a37c0752a2, 0x4be76d3346f04960},
1328 {0x857fcae62d8493a5, 0x6f70a4400c562ddc},
1329 {0xa6dfbd9fb8e5b88e, 0xcb4ccd500f6bb953},
1330 {0xd097ad07a71f26b2, 0x7e2000a41346a7a8},
1331 {0x825ecc24c873782f, 0x8ed400668c0c28c9},
1332 {0xa2f67f2dfa90563b, 0x728900802f0f32fb},
1333 {0xcbb41ef979346bca, 0x4f2b40a03ad2ffba},
1334 {0xfea126b7d78186bc, 0xe2f610c84987bfa9},
1335 {0x9f24b832e6b0f436, 0x0dd9ca7d2df4d7ca},
1336 {0xc6ede63fa05d3143, 0x91503d1c79720dbc},
1337 {0xf8a95fcf88747d94, 0x75a44c6397ce912b},
1338 {0x9b69dbe1b548ce7c, 0xc986afbe3ee11abb},
1339 {0xc24452da229b021b, 0xfbe85badce996169},
1340 {0xf2d56790ab41c2a2, 0xfae27299423fb9c4},
1341 {0x97c560ba6b0919a5, 0xdccd879fc967d41b},
1342 {0xbdb6b8e905cb600f, 0x5400e987bbc1c921},
1343 {0xed246723473e3813, 0x290123e9aab23b69},
1344 {0x9436c0760c86e30b, 0xf9a0b6720aaf6522},
1345 {0xb94470938fa89bce, 0xf808e40e8d5b3e6a},
1346 {0xe7958cb87392c2c2, 0xb60b1d1230b20e05},
1347 {0x90bd77f3483bb9b9, 0xb1c6f22b5e6f48c3},
1348 {0xb4ecd5f01a4aa828, 0x1e38aeb6360b1af4},
1349 {0xe2280b6c20dd5232, 0x25c6da63c38de1b1},
1350 {0x8d590723948a535f, 0x579c487e5a38ad0f},
1351 {0xb0af48ec79ace837, 0x2d835a9df0c6d852},
1352 {0xdcdb1b2798182244, 0xf8e431456cf88e66},
1353 {0x8a08f0f8bf0f156b, 0x1b8e9ecb641b5900},
1354 {0xac8b2d36eed2dac5, 0xe272467e3d222f40},
1355 {0xd7adf884aa879177, 0x5b0ed81dcc6abb10},
1356 {0x86ccbb52ea94baea, 0x98e947129fc2b4ea},
1357 {0xa87fea27a539e9a5, 0x3f2398d747b36225},
1358 {0xd29fe4b18e88640e, 0x8eec7f0d19a03aae},
1359 {0x83a3eeeef9153e89, 0x1953cf68300424ad},
1360 {0xa48ceaaab75a8e2b, 0x5fa8c3423c052dd8},
1361 {0xcdb02555653131b6, 0x3792f412cb06794e},
1362 {0x808e17555f3ebf11, 0xe2bbd88bbee40bd1},
1363 {0xa0b19d2ab70e6ed6, 0x5b6aceaeae9d0ec5},
1364 {0xc8de047564d20a8b, 0xf245825a5a445276},
1365 {0xfb158592be068d2e, 0xeed6e2f0f0d56713},
1366 {0x9ced737bb6c4183d, 0x55464dd69685606c},
1367 {0xc428d05aa4751e4c, 0xaa97e14c3c26b887},
1368 {0xf53304714d9265df, 0xd53dd99f4b3066a9},
1369 {0x993fe2c6d07b7fab, 0xe546a8038efe402a},
1370 {0xbf8fdb78849a5f96, 0xde98520472bdd034},
1371 {0xef73d256a5c0f77c, 0x963e66858f6d4441},
1372 {0x95a8637627989aad, 0xdde7001379a44aa9},
1373 {0xbb127c53b17ec159, 0x5560c018580d5d53},
1374 {0xe9d71b689dde71af, 0xaab8f01e6e10b4a7},
1375 {0x9226712162ab070d, 0xcab3961304ca70e9},
1376 {0xb6b00d69bb55c8d1, 0x3d607b97c5fd0d23},
1377 {0xe45c10c42a2b3b05, 0x8cb89a7db77c506b},
1378 {0x8eb98a7a9a5b04e3, 0x77f3608e92adb243},
1379 {0xb267ed1940f1c61c, 0x55f038b237591ed4},
1380 {0xdf01e85f912e37a3, 0x6b6c46dec52f6689},
1381 {0x8b61313bbabce2c6, 0x2323ac4b3b3da016},
1382 {0xae397d8aa96c1b77, 0xabec975e0a0d081b},
1383 {0xd9c7dced53c72255, 0x96e7bd358c904a22},
1384 {0x881cea14545c7575, 0x7e50d64177da2e55},
1385 {0xaa242499697392d2, 0xdde50bd1d5d0b9ea},
1386 {0xd4ad2dbfc3d07787, 0x955e4ec64b44e865},
1387 {0x84ec3c97da624ab4, 0xbd5af13bef0b113f},
1388 {0xa6274bbdd0fadd61, 0xecb1ad8aeacdd58f},
1389 {0xcfb11ead453994ba, 0x67de18eda5814af3},
1390 {0x81ceb32c4b43fcf4, 0x80eacf948770ced8},
1391 {0xa2425ff75e14fc31, 0xa1258379a94d028e},
1392 {0xcad2f7f5359a3b3e, 0x096ee45813a04331},
1393 {0xfd87b5f28300ca0d, 0x8bca9d6e188853fd},
1394 {0x9e74d1b791e07e48, 0x775ea264cf55347e},
1395 {0xc612062576589dda, 0x95364afe032a819e},
1396 {0xf79687aed3eec551, 0x3a83ddbd83f52205},
1397 {0x9abe14cd44753b52, 0xc4926a9672793543},
1398 {0xc16d9a0095928a27, 0x75b7053c0f178294},
1399 {0xf1c90080baf72cb1, 0x5324c68b12dd6339},
1400 {0x971da05074da7bee, 0xd3f6fc16ebca5e04},
1401 {0xbce5086492111aea, 0x88f4bb1ca6bcf585},
1402 {0xec1e4a7db69561a5, 0x2b31e9e3d06c32e6},
1403 {0x9392ee8e921d5d07, 0x3aff322e62439fd0},
1404 {0xb877aa3236a4b449, 0x09befeb9fad487c3},
1405 {0xe69594bec44de15b, 0x4c2ebe687989a9b4},
1406 {0x901d7cf73ab0acd9, 0x0f9d37014bf60a11},
1407 {0xb424dc35095cd80f, 0x538484c19ef38c95},
1408 {0xe12e13424bb40e13, 0x2865a5f206b06fba},
1409 {0x8cbccc096f5088cb, 0xf93f87b7442e45d4},
1410 {0xafebff0bcb24aafe, 0xf78f69a51539d749},
1411 {0xdbe6fecebdedd5be, 0xb573440e5a884d1c},
1412 {0x89705f4136b4a597, 0x31680a88f8953031},
1413 {0xabcc77118461cefc, 0xfdc20d2b36ba7c3e},
1414 {0xd6bf94d5e57a42bc, 0x3d32907604691b4d},
1415 {0x8637bd05af6c69b5, 0xa63f9a49c2c1b110},
1416 {0xa7c5ac471b478423, 0x0fcf80dc33721d54},
1417 {0xd1b71758e219652b, 0xd3c36113404ea4a9},
1418 {0x83126e978d4fdf3b, 0x645a1cac083126ea},
1419 {0xa3d70a3d70a3d70a, 0x3d70a3d70a3d70a4},
1420 {0xcccccccccccccccc, 0xcccccccccccccccd},
1421 {0x8000000000000000, 0x0000000000000000},
1422 {0xa000000000000000, 0x0000000000000000},
1423 {0xc800000000000000, 0x0000000000000000},
1424 {0xfa00000000000000, 0x0000000000000000},
1425 {0x9c40000000000000, 0x0000000000000000},
1426 {0xc350000000000000, 0x0000000000000000},
1427 {0xf424000000000000, 0x0000000000000000},
1428 {0x9896800000000000, 0x0000000000000000},
1429 {0xbebc200000000000, 0x0000000000000000},
1430 {0xee6b280000000000, 0x0000000000000000},
1431 {0x9502f90000000000, 0x0000000000000000},
1432 {0xba43b74000000000, 0x0000000000000000},
1433 {0xe8d4a51000000000, 0x0000000000000000},
1434 {0x9184e72a00000000, 0x0000000000000000},
1435 {0xb5e620f480000000, 0x0000000000000000},
1436 {0xe35fa931a0000000, 0x0000000000000000},
1437 {0x8e1bc9bf04000000, 0x0000000000000000},
1438 {0xb1a2bc2ec5000000, 0x0000000000000000},
1439 {0xde0b6b3a76400000, 0x0000000000000000},
1440 {0x8ac7230489e80000, 0x0000000000000000},
1441 {0xad78ebc5ac620000, 0x0000000000000000},
1442 {0xd8d726b7177a8000, 0x0000000000000000},
1443 {0x878678326eac9000, 0x0000000000000000},
1444 {0xa968163f0a57b400, 0x0000000000000000},
1445 {0xd3c21bcecceda100, 0x0000000000000000},
1446 {0x84595161401484a0, 0x0000000000000000},
1447 {0xa56fa5b99019a5c8, 0x0000000000000000},
1448 {0xcecb8f27f4200f3a, 0x0000000000000000},
1449 {0x813f3978f8940984, 0x4000000000000000},
1450 {0xa18f07d736b90be5, 0x5000000000000000},
1451 {0xc9f2c9cd04674ede, 0xa400000000000000},
1452 {0xfc6f7c4045812296, 0x4d00000000000000},
1453 {0x9dc5ada82b70b59d, 0xf020000000000000},
1454 {0xc5371912364ce305, 0x6c28000000000000},
1455 {0xf684df56c3e01bc6, 0xc732000000000000},
1456 {0x9a130b963a6c115c, 0x3c7f400000000000},
1457 {0xc097ce7bc90715b3, 0x4b9f100000000000},
1458 {0xf0bdc21abb48db20, 0x1e86d40000000000},
1459 {0x96769950b50d88f4, 0x1314448000000000},
1460 {0xbc143fa4e250eb31, 0x17d955a000000000},
1461 {0xeb194f8e1ae525fd, 0x5dcfab0800000000},
1462 {0x92efd1b8d0cf37be, 0x5aa1cae500000000},
1463 {0xb7abc627050305ad, 0xf14a3d9e40000000},
1464 {0xe596b7b0c643c719, 0x6d9ccd05d0000000},
1465 {0x8f7e32ce7bea5c6f, 0xe4820023a2000000},
1466 {0xb35dbf821ae4f38b, 0xdda2802c8a800000},
1467 {0xe0352f62a19e306e, 0xd50b2037ad200000},
1468 {0x8c213d9da502de45, 0x4526f422cc340000},
1469 {0xaf298d050e4395d6, 0x9670b12b7f410000},
1470 {0xdaf3f04651d47b4c, 0x3c0cdd765f114000},
1471 {0x88d8762bf324cd0f, 0xa5880a69fb6ac800},
1472 {0xab0e93b6efee0053, 0x8eea0d047a457a00},
1473 {0xd5d238a4abe98068, 0x72a4904598d6d880},
1474 {0x85a36366eb71f041, 0x47a6da2b7f864750},
1475 {0xa70c3c40a64e6c51, 0x999090b65f67d924},
1476 {0xd0cf4b50cfe20765, 0xfff4b4e3f741cf6d},
1477 {0x82818f1281ed449f, 0xbff8f10e7a8921a4},
1478 {0xa321f2d7226895c7, 0xaff72d52192b6a0d},
1479 {0xcbea6f8ceb02bb39, 0x9bf4f8a69f764490},
1480 {0xfee50b7025c36a08, 0x02f236d04753d5b4},
1481 {0x9f4f2726179a2245, 0x01d762422c946590},
1482 {0xc722f0ef9d80aad6, 0x424d3ad2b7b97ef5},
1483 {0xf8ebad2b84e0d58b, 0xd2e0898765a7deb2},
1484 {0x9b934c3b330c8577, 0x63cc55f49f88eb2f},
1485 {0xc2781f49ffcfa6d5, 0x3cbf6b71c76b25fb},
1486 {0xf316271c7fc3908a, 0x8bef464e3945ef7a},
1487 {0x97edd871cfda3a56, 0x97758bf0e3cbb5ac},
1488 {0xbde94e8e43d0c8ec, 0x3d52eeed1cbea317},
1489 {0xed63a231d4c4fb27, 0x4ca7aaa863ee4bdd},
1490 {0x945e455f24fb1cf8, 0x8fe8caa93e74ef6a},
1491 {0xb975d6b6ee39e436, 0xb3e2fd538e122b44},
1492 {0xe7d34c64a9c85d44, 0x60dbbca87196b616},
1493 {0x90e40fbeea1d3a4a, 0xbc8955e946fe31cd},
1494 {0xb51d13aea4a488dd, 0x6babab6398bdbe41},
1495 {0xe264589a4dcdab14, 0xc696963c7eed2dd1},
1496 {0x8d7eb76070a08aec, 0xfc1e1de5cf543ca2},
1497 {0xb0de65388cc8ada8, 0x3b25a55f43294bcb},
1498 {0xdd15fe86affad912, 0x49ef0eb713f39ebe},
1499 {0x8a2dbf142dfcc7ab, 0x6e3569326c784337},
1500 {0xacb92ed9397bf996, 0x49c2c37f07965404},
1501 {0xd7e77a8f87daf7fb, 0xdc33745ec97be906},
1502 {0x86f0ac99b4e8dafd, 0x69a028bb3ded71a3},
1503 {0xa8acd7c0222311bc, 0xc40832ea0d68ce0c},
1504 {0xd2d80db02aabd62b, 0xf50a3fa490c30190},
1505 {0x83c7088e1aab65db, 0x792667c6da79e0fa},
1506 {0xa4b8cab1a1563f52, 0x577001b891185938},
1507 {0xcde6fd5e09abcf26, 0xed4c0226b55e6f86},
1508 {0x80b05e5ac60b6178, 0x544f8158315b05b4},
1509 {0xa0dc75f1778e39d6, 0x696361ae3db1c721},
1510 {0xc913936dd571c84c, 0x03bc3a19cd1e38e9},
1511 {0xfb5878494ace3a5f, 0x04ab48a04065c723},
1512 {0x9d174b2dcec0e47b, 0x62eb0d64283f9c76},
1513 {0xc45d1df942711d9a, 0x3ba5d0bd324f8394},
1514 {0xf5746577930d6500, 0xca8f44ec7ee36479},
1515 {0x9968bf6abbe85f20, 0x7e998b13cf4e1ecb},
1516 {0xbfc2ef456ae276e8, 0x9e3fedd8c321a67e},
1517 {0xefb3ab16c59b14a2, 0xc5cfe94ef3ea101e},
1518 {0x95d04aee3b80ece5, 0xbba1f1d158724a12},
1519 {0xbb445da9ca61281f, 0x2a8a6e45ae8edc97},
1520 {0xea1575143cf97226, 0xf52d09d71a3293bd},
1521 {0x924d692ca61be758, 0x593c2626705f9c56},
1522 {0xb6e0c377cfa2e12e, 0x6f8b2fb00c77836c},
1523 {0xe498f455c38b997a, 0x0b6dfb9c0f956447},
1524 {0x8edf98b59a373fec, 0x4724bd4189bd5eac},
1525 {0xb2977ee300c50fe7, 0x58edec91ec2cb657},
1526 {0xdf3d5e9bc0f653e1, 0x2f2967b66737e3ed},
1527 {0x8b865b215899f46c, 0xbd79e0d20082ee74},
1528 {0xae67f1e9aec07187, 0xecd8590680a3aa11},
1529 {0xda01ee641a708de9, 0xe80e6f4820cc9495},
1530 {0x884134fe908658b2, 0x3109058d147fdcdd},
1531 {0xaa51823e34a7eede, 0xbd4b46f0599fd415},
1532 {0xd4e5e2cdc1d1ea96, 0x6c9e18ac7007c91a},
1533 {0x850fadc09923329e, 0x03e2cf6bc604ddb0},
1534 {0xa6539930bf6bff45, 0x84db8346b786151c},
1535 {0xcfe87f7cef46ff16, 0xe612641865679a63},
1536 {0x81f14fae158c5f6e, 0x4fcb7e8f3f60c07e},
1537 {0xa26da3999aef7749, 0xe3be5e330f38f09d},
1538 {0xcb090c8001ab551c, 0x5cadf5bfd3072cc5},
1539 {0xfdcb4fa002162a63, 0x73d9732fc7c8f7f6},
1540 {0x9e9f11c4014dda7e, 0x2867e7fddcdd9afa},
1541 {0xc646d63501a1511d, 0xb281e1fd541501b8},
1542 {0xf7d88bc24209a565, 0x1f225a7ca91a4226},
1543 {0x9ae757596946075f, 0x3375788de9b06958},
1544 {0xc1a12d2fc3978937, 0x0052d6b1641c83ae},
1545 {0xf209787bb47d6b84, 0xc0678c5dbd23a49a},
1546 {0x9745eb4d50ce6332, 0xf840b7ba963646e0},
1547 {0xbd176620a501fbff, 0xb650e5a93bc3d898},
1548 {0xec5d3fa8ce427aff, 0xa3e51f138ab4cebe},
1549 {0x93ba47c980e98cdf, 0xc66f336c36b10137},
1550 {0xb8a8d9bbe123f017, 0xb80b0047445d4184},
1551 {0xe6d3102ad96cec1d, 0xa60dc059157491e5},
1552 {0x9043ea1ac7e41392, 0x87c89837ad68db2f},
1553 {0xb454e4a179dd1877, 0x29babe4598c311fb},
1554 {0xe16a1dc9d8545e94, 0xf4296dd6fef3d67a},
1555 {0x8ce2529e2734bb1d, 0x1899e4a65f58660c},
1556 {0xb01ae745b101e9e4, 0x5ec05dcff72e7f8f},
1557 {0xdc21a1171d42645d, 0x76707543f4fa1f73},
1558 {0x899504ae72497eba, 0x6a06494a791c53a8},
1559 {0xabfa45da0edbde69, 0x0487db9d17636892},
1560 {0xd6f8d7509292d603, 0x45a9d2845d3c42b6},
1561 {0x865b86925b9bc5c2, 0x0b8a2392ba45a9b2},
1562 {0xa7f26836f282b732, 0x8e6cac7768d7141e},
1563 {0xd1ef0244af2364ff, 0x3207d795430cd926},
1564 {0x8335616aed761f1f, 0x7f44e6bd49e807b8},
1565 {0xa402b9c5a8d3a6e7, 0x5f16206c9c6209a6},
1566 {0xcd036837130890a1, 0x36dba887c37a8c0f},
1567 {0x802221226be55a64, 0xc2494954da2c9789},
1568 {0xa02aa96b06deb0fd, 0xf2db9baa10b7bd6c},
1569 {0xc83553c5c8965d3d, 0x6f92829494e5acc7},
1570 {0xfa42a8b73abbf48c, 0xcb772339ba1f17f9},
1571 {0x9c69a97284b578d7, 0xff2a760414536efb},
1572 {0xc38413cf25e2d70d, 0xfef5138519684aba},
1573 {0xf46518c2ef5b8cd1, 0x7eb258665fc25d69},
1574 {0x98bf2f79d5993802, 0xef2f773ffbd97a61},
1575 {0xbeeefb584aff8603, 0xaafb550ffacfd8fa},
1576 {0xeeaaba2e5dbf6784, 0x95ba2a53f983cf38},
1577 {0x952ab45cfa97a0b2, 0xdd945a747bf26183},
1578 {0xba756174393d88df, 0x94f971119aeef9e4},
1579 {0xe912b9d1478ceb17, 0x7a37cd5601aab85d},
1580 {0x91abb422ccb812ee, 0xac62e055c10ab33a},
1581 {0xb616a12b7fe617aa, 0x577b986b314d6009},
1582 {0xe39c49765fdf9d94, 0xed5a7e85fda0b80b},
1583 {0x8e41ade9fbebc27d, 0x14588f13be847307},
1584 {0xb1d219647ae6b31c, 0x596eb2d8ae258fc8},
1585 {0xde469fbd99a05fe3, 0x6fca5f8ed9aef3bb},
1586 {0x8aec23d680043bee, 0x25de7bb9480d5854},
1587 {0xada72ccc20054ae9, 0xaf561aa79a10ae6a},
1588 {0xd910f7ff28069da4, 0x1b2ba1518094da04},
1589 {0x87aa9aff79042286, 0x90fb44d2f05d0842},
1590 {0xa99541bf57452b28, 0x353a1607ac744a53},
1591 {0xd3fa922f2d1675f2, 0x42889b8997915ce8},
1592 {0x847c9b5d7c2e09b7, 0x69956135febada11},
1593 {0xa59bc234db398c25, 0x43fab9837e699095},
1594 {0xcf02b2c21207ef2e, 0x94f967e45e03f4bb},
1595 {0x8161afb94b44f57d, 0x1d1be0eebac278f5},
1596 {0xa1ba1ba79e1632dc, 0x6462d92a69731732},
1597 {0xca28a291859bbf93, 0x7d7b8f7503cfdcfe},
1598 {0xfcb2cb35e702af78, 0x5cda735244c3d43e},
1599 {0x9defbf01b061adab, 0x3a0888136afa64a7},
1600 {0xc56baec21c7a1916, 0x088aaa1845b8fdd0},
1601 {0xf6c69a72a3989f5b, 0x8aad549e57273d45},
1602 {0x9a3c2087a63f6399, 0x36ac54e2f678864b},
1603 {0xc0cb28a98fcf3c7f, 0x84576a1bb416a7dd},
1604 {0xf0fdf2d3f3c30b9f, 0x656d44a2a11c51d5},
1605 {0x969eb7c47859e743, 0x9f644ae5a4b1b325},
1606 {0xbc4665b596706114, 0x873d5d9f0dde1fee},
1607 {0xeb57ff22fc0c7959, 0xa90cb506d155a7ea},
1608 {0x9316ff75dd87cbd8, 0x09a7f12442d588f2},
1609 {0xb7dcbf5354e9bece, 0x0c11ed6d538aeb2f},
1610 {0xe5d3ef282a242e81, 0x8f1668c8a86da5fa},
1611 {0x8fa475791a569d10, 0xf96e017d694487bc},
1612 {0xb38d92d760ec4455, 0x37c981dcc395a9ac},
1613 {0xe070f78d3927556a, 0x85bbe253f47b1417},
1614 {0x8c469ab843b89562, 0x93956d7478ccec8e},
1615 {0xaf58416654a6babb, 0x387ac8d1970027b2},
1616 {0xdb2e51bfe9d0696a, 0x06997b05fcc0319e},
1617 {0x88fcf317f22241e2, 0x441fece3bdf81f03},
1618 {0xab3c2fddeeaad25a, 0xd527e81cad7626c3},
1619 {0xd60b3bd56a5586f1, 0x8a71e223d8d3b074},
1620 {0x85c7056562757456, 0xf6872d5667844e49},
1621 {0xa738c6bebb12d16c, 0xb428f8ac016561db},
1622 {0xd106f86e69d785c7, 0xe13336d701beba52},
1623 {0x82a45b450226b39c, 0xecc0024661173473},
1624 {0xa34d721642b06084, 0x27f002d7f95d0190},
1625 {0xcc20ce9bd35c78a5, 0x31ec038df7b441f4},
1626 {0xff290242c83396ce, 0x7e67047175a15271},
1627 {0x9f79a169bd203e41, 0x0f0062c6e984d386},
1628 {0xc75809c42c684dd1, 0x52c07b78a3e60868},
1629 {0xf92e0c3537826145, 0xa7709a56ccdf8a82},
1630 {0x9bbcc7a142b17ccb, 0x88a66076400bb691},
1631 {0xc2abf989935ddbfe, 0x6acff893d00ea435},
1632 {0xf356f7ebf83552fe, 0x0583f6b8c4124d43},
1633 {0x98165af37b2153de, 0xc3727a337a8b704a},
1634 {0xbe1bf1b059e9a8d6, 0x744f18c0592e4c5c},
1635 {0xeda2ee1c7064130c, 0x1162def06f79df73},
1636 {0x9485d4d1c63e8be7, 0x8addcb5645ac2ba8},
1637 {0xb9a74a0637ce2ee1, 0x6d953e2bd7173692},
1638 {0xe8111c87c5c1ba99, 0xc8fa8db6ccdd0437},
1639 {0x910ab1d4db9914a0, 0x1d9c9892400a22a2},
1640 {0xb54d5e4a127f59c8, 0x2503beb6d00cab4b},
1641 {0xe2a0b5dc971f303a, 0x2e44ae64840fd61d},
1642 {0x8da471a9de737e24, 0x5ceaecfed289e5d2},
1643 {0xb10d8e1456105dad, 0x7425a83e872c5f47},
1644 {0xdd50f1996b947518, 0xd12f124e28f77719},
1645 {0x8a5296ffe33cc92f, 0x82bd6b70d99aaa6f},
1646 {0xace73cbfdc0bfb7b, 0x636cc64d1001550b},
1647 {0xd8210befd30efa5a, 0x3c47f7e05401aa4e},
1648 {0x8714a775e3e95c78, 0x65acfaec34810a71},
1649 {0xa8d9d1535ce3b396, 0x7f1839a741a14d0d},
1650 {0xd31045a8341ca07c, 0x1ede48111209a050},
1651 {0x83ea2b892091e44d, 0x934aed0aab460432},
1652 {0xa4e4b66b68b65d60, 0xf81da84d5617853f},
1653 {0xce1de40642e3f4b9, 0x36251260ab9d668e},
1654 {0x80d2ae83e9ce78f3, 0xc1d72b7c6b426019},
1655 {0xa1075a24e4421730, 0xb24cf65b8612f81f},
1656 {0xc94930ae1d529cfc, 0xdee033f26797b627},
1657 {0xfb9b7cd9a4a7443c, 0x169840ef017da3b1},
1658 {0x9d412e0806e88aa5, 0x8e1f289560ee864e},
1659 {0xc491798a08a2ad4e, 0xf1a6f2bab92a27e2},
1660 {0xf5b5d7ec8acb58a2, 0xae10af696774b1db},
1661 {0x9991a6f3d6bf1765, 0xacca6da1e0a8ef29},
1662 {0xbff610b0cc6edd3f, 0x17fd090a58d32af3},
1663 {0xeff394dcff8a948e, 0xddfc4b4cef07f5b0},
1664 {0x95f83d0a1fb69cd9, 0x4abdaf101564f98e},
1665 {0xbb764c4ca7a4440f, 0x9d6d1ad41abe37f1},
1666 {0xea53df5fd18d5513, 0x84c86189216dc5ed},
1667 {0x92746b9be2f8552c, 0x32fd3cf5b4e49bb4},
1668 {0xb7118682dbb66a77, 0x3fbc8c33221dc2a1},
1669 {0xe4d5e82392a40515, 0x0fabaf3feaa5334a},
1670 {0x8f05b1163ba6832d, 0x29cb4d87f2a7400e},
1671 {0xb2c71d5bca9023f8, 0x743e20e9ef511012},
1672 {0xdf78e4b2bd342cf6, 0x914da9246b255416},
1673 {0x8bab8eefb6409c1a, 0x1ad089b6c2f7548e},
1674 {0xae9672aba3d0c320, 0xa184ac2473b529b1},
1675 {0xda3c0f568cc4f3e8, 0xc9e5d72d90a2741e},
1676 {0x8865899617fb1871, 0x7e2fa67c7a658892},
1677 {0xaa7eebfb9df9de8d, 0xddbb901b98feeab7},
1678 {0xd51ea6fa85785631, 0x552a74227f3ea565},
1679 {0x8533285c936b35de, 0xd53a88958f87275f},
1680 {0xa67ff273b8460356, 0x8a892abaf368f137},
1681 {0xd01fef10a657842c, 0x2d2b7569b0432d85},
1682 {0x8213f56a67f6b29b, 0x9c3b29620e29fc73},
1683 {0xa298f2c501f45f42, 0x8349f3ba91b47b8f},
1684 {0xcb3f2f7642717713, 0x241c70a936219a73},
1685 {0xfe0efb53d30dd4d7, 0xed238cd383aa0110},
1686 {0x9ec95d1463e8a506, 0xf4363804324a40aa},
1687 {0xc67bb4597ce2ce48, 0xb143c6053edcd0d5},
1688 {0xf81aa16fdc1b81da, 0xdd94b7868e94050a},
1689 {0x9b10a4e5e9913128, 0xca7cf2b4191c8326},
1690 {0xc1d4ce1f63f57d72, 0xfd1c2f611f63a3f0},
1691 {0xf24a01a73cf2dccf, 0xbc633b39673c8cec},
1692 {0x976e41088617ca01, 0xd5be0503e085d813},
1693 {0xbd49d14aa79dbc82, 0x4b2d8644d8a74e18},
1694 {0xec9c459d51852ba2, 0xddf8e7d60ed1219e},
1695 {0x93e1ab8252f33b45, 0xcabb90e5c942b503},
1696 {0xb8da1662e7b00a17, 0x3d6a751f3b936243},
1697 {0xe7109bfba19c0c9d, 0x0cc512670a783ad4},
1698 {0x906a617d450187e2, 0x27fb2b80668b24c5},
1699 {0xb484f9dc9641e9da, 0xb1f9f660802dedf6},
1700 {0xe1a63853bbd26451, 0x5e7873f8a0396973},
1701 {0x8d07e33455637eb2, 0xdb0b487b6423e1e8},
1702 {0xb049dc016abc5e5f, 0x91ce1a9a3d2cda62},
1703 {0xdc5c5301c56b75f7, 0x7641a140cc7810fb},
1704 {0x89b9b3e11b6329ba, 0xa9e904c87fcb0a9d},
1705 {0xac2820d9623bf429, 0x546345fa9fbdcd44},
1706 {0xd732290fbacaf133, 0xa97c177947ad4095},
1707 {0x867f59a9d4bed6c0, 0x49ed8eabcccc485d},
1708 {0xa81f301449ee8c70, 0x5c68f256bfff5a74},
1709 {0xd226fc195c6a2f8c, 0x73832eec6fff3111},
1710 {0x83585d8fd9c25db7, 0xc831fd53c5ff7eab},
1711 {0xa42e74f3d032f525, 0xba3e7ca8b77f5e55},
1712 {0xcd3a1230c43fb26f, 0x28ce1bd2e55f35eb},
1713 {0x80444b5e7aa7cf85, 0x7980d163cf5b81b3},
1714 {0xa0555e361951c366, 0xd7e105bcc332621f},
1715 {0xc86ab5c39fa63440, 0x8dd9472bf3fefaa7},
1716 {0xfa856334878fc150, 0xb14f98f6f0feb951},
1717 {0x9c935e00d4b9d8d2, 0x6ed1bf9a569f33d3},
1718 {0xc3b8358109e84f07, 0x0a862f80ec4700c8},
1719 {0xf4a642e14c6262c8, 0xcd27bb612758c0fa},
1720 {0x98e7e9cccfbd7dbd, 0x8038d51cb897789c},
1721 {0xbf21e44003acdd2c, 0xe0470a63e6bd56c3},
1722 {0xeeea5d5004981478, 0x1858ccfce06cac74},
1723 {0x95527a5202df0ccb, 0x0f37801e0c43ebc8},
1724 {0xbaa718e68396cffd, 0xd30560258f54e6ba},
1725 {0xe950df20247c83fd, 0x47c6b82ef32a2069},
1726 {0x91d28b7416cdd27e, 0x4cdc331d57fa5441},
1727 {0xb6472e511c81471d, 0xe0133fe4adf8e952},
1728 {0xe3d8f9e563a198e5, 0x58180fddd97723a6},
1729 {0x8e679c2f5e44ff8f, 0x570f09eaa7ea7648},
1730 {0xb201833b35d63f73, 0x2cd2cc6551e513da},
1731 {0xde81e40a034bcf4f, 0xf8077f7ea65e58d1},
1732 {0x8b112e86420f6191, 0xfb04afaf27faf782},
1733 {0xadd57a27d29339f6, 0x79c5db9af1f9b563},
1734 {0xd94ad8b1c7380874, 0x18375281ae7822bc},
1735 {0x87cec76f1c830548, 0x8f2293910d0b15b5},
1736 {0xa9c2794ae3a3c69a, 0xb2eb3875504ddb22},
1737 {0xd433179d9c8cb841, 0x5fa60692a46151eb},
1738 {0x849feec281d7f328, 0xdbc7c41ba6bcd333},
1739 {0xa5c7ea73224deff3, 0x12b9b522906c0800},
1740 {0xcf39e50feae16bef, 0xd768226b34870a00},
1741 {0x81842f29f2cce375, 0xe6a1158300d46640},
1742 {0xa1e53af46f801c53, 0x60495ae3c1097fd0},
1743 {0xca5e89b18b602368, 0x385bb19cb14bdfc4},
1744 {0xfcf62c1dee382c42, 0x46729e03dd9ed7b5},
1745 {0x9e19db92b4e31ba9, 0x6c07a2c26a8346d1},
1746 {0xc5a05277621be293, 0xc7098b7305241885},
1747 { 0xf70867153aa2db38,
1748 0xb8cbee4fc66d1ea7 }
1750 {0xff77b1fcbebcdc4f, 0x25e8e89c13bb0f7b},
1751 {0xce5d73ff402d98e3, 0xfb0a3d212dc81290},
1752 {0xa6b34ad8c9dfc06f, 0xf42faa48c0ea481f},
1753 {0x86a8d39ef77164bc, 0xae5dff9c02033198},
1754 {0xd98ddaee19068c76, 0x3badd624dd9b0958},
1755 {0xafbd2350644eeacf, 0xe5d1929ef90898fb},
1756 {0x8df5efabc5979c8f, 0xca8d3ffa1ef463c2},
1757 {0xe55990879ddcaabd, 0xcc420a6a101d0516},
1758 {0xb94470938fa89bce, 0xf808e40e8d5b3e6a},
1759 {0x95a8637627989aad, 0xdde7001379a44aa9},
1760 {0xf1c90080baf72cb1, 0x5324c68b12dd6339},
1761 {0xc350000000000000, 0x0000000000000000},
1762 {0x9dc5ada82b70b59d, 0xf020000000000000},
1763 {0xfee50b7025c36a08, 0x02f236d04753d5b4},
1764 {0xcde6fd5e09abcf26, 0xed4c0226b55e6f86},
1765 {0xa6539930bf6bff45, 0x84db8346b786151c},
1766 {0x865b86925b9bc5c2, 0x0b8a2392ba45a9b2},
1767 {0xd910f7ff28069da4, 0x1b2ba1518094da04},
1768 {0xaf58416654a6babb, 0x387ac8d1970027b2},
1769 {0x8da471a9de737e24, 0x5ceaecfed289e5d2},
1770 {0xe4d5e82392a40515, 0x0fabaf3feaa5334a},
1771 {0xb8da1662e7b00a17, 0x3d6a751f3b936243},
1772 { 0x95527a5202df0ccb,
1773 0x0f37801e0c43ebc8 }
1777 #if FMT_USE_FULL_CACHE_DRAGONBOX
1778 return pow10_significands[k - float_info<double>::min_k];
1780 static constexpr
const uint64_t powers_of_5_64[] = {
1781 0x0000000000000001, 0x0000000000000005, 0x0000000000000019,
1782 0x000000000000007d, 0x0000000000000271, 0x0000000000000c35,
1783 0x0000000000003d09, 0x000000000001312d, 0x000000000005f5e1,
1784 0x00000000001dcd65, 0x00000000009502f9, 0x0000000002e90edd,
1785 0x000000000e8d4a51, 0x0000000048c27395, 0x000000016bcc41e9,
1786 0x000000071afd498d, 0x0000002386f26fc1, 0x000000b1a2bc2ec5,
1787 0x000003782dace9d9, 0x00001158e460913d, 0x000056bc75e2d631,
1788 0x0001b1ae4d6e2ef5, 0x000878678326eac9, 0x002a5a058fc295ed,
1789 0x00d3c21bcecceda1, 0x0422ca8b0a00a425, 0x14adf4b7320334b9};
1791 static constexpr
const uint32_t pow10_recovery_errors[] = {
1792 0x50001400, 0x54044100, 0x54014555, 0x55954415, 0x54115555, 0x00000001,
1793 0x50000000, 0x00104000, 0x54010004, 0x05004001, 0x55555544, 0x41545555,
1794 0x54040551, 0x15445545, 0x51555514, 0x10000015, 0x00101100, 0x01100015,
1795 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x04450514, 0x45414110,
1796 0x55555145, 0x50544050, 0x15040155, 0x11054140, 0x50111514, 0x11451454,
1797 0x00400541, 0x00000000, 0x55555450, 0x10056551, 0x10054011, 0x55551014,
1798 0x69514555, 0x05151109, 0x00155555};
1800 static const int compression_ratio = 27;
1803 int cache_index = (k - float_info<double>::min_k) / compression_ratio;
1804 int kb = cache_index * compression_ratio + float_info<double>::min_k;
1809 if (offset == 0)
return base_cache;
1813 FMT_ASSERT(alpha > 0 && alpha < 64,
"shifting error detected");
1816 uint64_t pow5 = powers_of_5_64[
offset];
1819 umul128(base_cache.
low() - (kb < 0 ? 1u : 0u), pow5);
1821 recovered_cache += middle_low.
high();
1823 uint64_t high_to_middle = recovered_cache.
high() << (64 -
alpha);
1824 uint64_t middle_to_low = recovered_cache.
low() << (64 -
alpha);
1828 ((middle_low.low() >>
alpha) | middle_to_low)};
1830 if (kb < 0) recovered_cache += 1;
1833 int error_idx = (k - float_info<double>::min_k) / 16;
1834 uint32_t
error = (pow10_recovery_errors[error_idx] >>
1835 ((k - float_info<double>::min_k) % 16) * 2) &
1840 return {recovered_cache.
high(), recovered_cache.
low() + error};
1851 return static_cast<uint32_t
>(cache.high() >> (64 - 1 - beta_minus_1));
1865 return (cache.high() -
1866 (cache.high() >> (float_info<double>::significand_bits + 2))) >>
1867 (64 - float_info<double>::significand_bits - 1 - beta_minus_1);
1872 return (cache.high() +
1873 (cache.high() >> (float_info<double>::significand_bits + 1))) >>
1874 (64 - float_info<double>::significand_bits - 1 - beta_minus_1);
1879 return ((cache.high() >>
1880 (64 - float_info<double>::significand_bits - 2 - beta_minus_1)) +
1891 T>::case_shorter_interval_left_endpoint_lower_threshold &&
1893 float_info<T>::case_shorter_interval_left_endpoint_upper_threshold;
1898 if (exponent < float_info<T>::case_fc_pm_half_lower_threshold)
return false;
1900 if (exponent <= float_info<T>::case_fc_pm_half_upper_threshold)
return true;
1902 if (exponent > float_info<T>::divisibility_check_by_5_threshold)
return false;
1910 if (exponent > float_info<T>::divisibility_check_by_5_threshold)
return false;
1911 if (exponent > float_info<T>::case_fc_upper_threshold)
1914 if (exponent >= float_info<T>::case_fc_lower_threshold)
return true;
1921 #ifdef FMT_BUILTIN_CTZ
1922 int t = FMT_BUILTIN_CTZ(n);
1926 if (t > float_info<float>::max_trailing_zeros)
1927 t = float_info<float>::max_trailing_zeros;
1929 const uint32_t mod_inv1 = 0xcccccccd;
1930 const uint32_t max_quotient1 = 0x33333333;
1931 const uint32_t mod_inv2 = 0xc28f5c29;
1932 const uint32_t max_quotient2 = 0x0a3d70a3;
1935 for (; s < t - 1; s += 2) {
1936 if (n * mod_inv2 > max_quotient2)
break;
1939 if (s < t && n * mod_inv1 <= max_quotient1) {
1949 #ifdef FMT_BUILTIN_CTZLL
1950 int t = FMT_BUILTIN_CTZLL(n);
1954 if (t > float_info<double>::max_trailing_zeros)
1955 t = float_info<double>::max_trailing_zeros;
1960 const uint32_t mod_inv1 = 0xcccccccd;
1961 const uint32_t max_quotient1 = 0x33333333;
1962 const uint64_t mod_inv8 = 0xc767074b22e90e21;
1963 const uint64_t max_quotient8 = 0x00002af31dc46118;
1967 auto quotient_candidate = n * mod_inv8;
1969 if (quotient_candidate <= max_quotient8) {
1970 auto quotient =
static_cast<uint32_t
>(quotient_candidate >> 8);
1973 for (; s <
t; ++
s) {
1974 if (quotient * mod_inv1 > max_quotient1)
break;
1975 quotient *= mod_inv1;
1977 quotient >>= (s - 8);
1984 auto quotient =
static_cast<uint32_t
>(n / 100000000);
1985 auto remainder =
static_cast<uint32_t
>(n - 100000000 * quotient);
1987 if (t == 0 || remainder * mod_inv1 > max_quotient1) {
1990 remainder *= mod_inv1;
1992 if (t == 1 || remainder * mod_inv1 > max_quotient1) {
1993 n = (remainder >> 1) + quotient * 10000000ull;
1996 remainder *= mod_inv1;
1998 if (t == 2 || remainder * mod_inv1 > max_quotient1) {
1999 n = (remainder >> 2) + quotient * 1000000ull;
2002 remainder *= mod_inv1;
2004 if (t == 3 || remainder * mod_inv1 > max_quotient1) {
2005 n = (remainder >> 3) + quotient * 100000ull;
2008 remainder *= mod_inv1;
2010 if (t == 4 || remainder * mod_inv1 > max_quotient1) {
2011 n = (remainder >> 4) + quotient * 10000ull;
2014 remainder *= mod_inv1;
2016 if (t == 5 || remainder * mod_inv1 > max_quotient1) {
2017 n = (remainder >> 5) + quotient * 1000ull;
2020 remainder *= mod_inv1;
2022 if (t == 6 || remainder * mod_inv1 > max_quotient1) {
2023 n = (remainder >> 6) + quotient * 100ull;
2026 remainder *= mod_inv1;
2028 n = (remainder >> 7) + quotient * 10ull;
2035 decimal_fp<T> ret_value;
2045 cache, beta_minus_1);
2047 cache, beta_minus_1);
2050 if (!is_left_endpoint_integer_shorter_interval<T>(exponent)) ++xi;
2053 ret_value.significand = zi / 10;
2056 if (ret_value.significand * 10 >= xi) {
2057 ret_value.exponent = minus_k + 1;
2063 ret_value.significand =
2065 cache, beta_minus_1);
2066 ret_value.exponent = minus_k;
2069 if (exponent >= float_info<T>::shorter_interval_tie_lower_threshold &&
2070 exponent <= float_info<T>::shorter_interval_tie_upper_threshold) {
2071 ret_value.significand = ret_value.significand % 2 == 0
2072 ? ret_value.significand
2073 : ret_value.significand - 1;
2074 }
else if (ret_value.significand < xi) {
2075 ++ret_value.significand;
2084 using cache_entry_type =
typename cache_accessor<T>::cache_entry_type;
2088 const carrier_uint significand_mask =
2090 carrier_uint significand = (br & significand_mask);
2091 int exponent =
static_cast<int>((br & exponent_mask<T>()) >>
2094 if (exponent != 0) {
2098 if (significand == 0)
return shorter_interval_case<T>(exponent);
2101 (
static_cast<carrier_uint
>(1) << float_info<T>::significand_bits);
2104 if (significand == 0)
return {0, 0};
2108 const bool include_left_endpoint = (significand % 2 == 0);
2109 const bool include_right_endpoint = include_left_endpoint;
2118 const uint32_t deltai = cache_accessor<T>::compute_delta(cache, beta_minus_1);
2119 const carrier_uint two_fc = significand << 1;
2120 const carrier_uint two_fr = two_fc | 1;
2121 const carrier_uint zi =
2122 cache_accessor<T>::compute_mul(two_fr << beta_minus_1, cache);
2134 goto small_divisor_case_label;
2135 }
else if (r < deltai) {
2137 if (r == 0 && !include_right_endpoint &&
2138 is_endpoint_integer<T>(two_fr, exponent, minus_k)) {
2141 goto small_divisor_case_label;
2147 const carrier_uint two_fl = two_fc - 1;
2148 if ((!include_left_endpoint ||
2149 !is_endpoint_integer<T>(two_fl, exponent, minus_k)) &&
2150 !cache_accessor<T>::compute_mul_parity(two_fl, cache, beta_minus_1)) {
2151 goto small_divisor_case_label;
2162 small_divisor_case_label:
2164 ret_value.
exponent = minus_k + float_info<T>::kappa;
2166 const uint32_t mask = (1u << float_info<T>::kappa) - 1;
2170 if ((
dist & mask) == 0) {
2171 const bool approx_y_parity =
2173 dist >>= float_info<T>::kappa;
2185 if (cache_accessor<T>::compute_mul_parity(two_fc, cache, beta_minus_1) !=
2191 if (is_center_integer<T>(two_fc, exponent, minus_k)) {
2208 small_division_by_pow10<float_info<T>::kappa>(
dist);
2217 template <
typename Double>
2230 const bool is_predecessor_closer =
2231 binary32 ? value.
assign(static_cast<float>(d)) : value.
assign(d);
2232 int shift = is_predecessor_closer ? 2 : 1;
2233 uint64_t significand = value.
f << shift;
2235 numerator.
assign(significand);
2236 numerator <<= value.
e;
2241 upper_store <<= value.
e + 1;
2242 upper = &upper_store;
2245 denominator <<= shift;
2246 }
else if (exp10 < 0) {
2250 upper_store.
assign(numerator);
2252 upper = &upper_store;
2254 numerator *= significand;
2256 denominator <<= shift - value.
e;
2258 numerator.
assign(significand);
2260 denominator <<= shift - value.
e;
2263 upper_store.
assign(1ULL << 1);
2264 upper = &upper_store;
2268 if (num_digits < 0) {
2270 if (!upper) upper = &
lower;
2271 bool even = (value.
f & 1) == 0;
2276 bool low =
compare(numerator, lower) - even < 0;
2278 bool high = add_compare(numerator, *upper, denominator) + even > 0;
2279 data[num_digits++] =
static_cast<char>(
'0' + digit);
2282 ++data[num_digits - 1];
2284 int result = add_compare(numerator, numerator, denominator);
2286 if (result > 0 || (result == 0 && (digit % 2) != 0))
2287 ++data[num_digits - 1];
2290 exp10 -= num_digits - 1;
2295 if (upper != &lower) *upper *= 10;
2299 exp10 -= num_digits - 1;
2300 if (num_digits == 0) {
2303 buf[0] = add_compare(numerator, numerator, denominator) > 0 ?
'1' :
'0';
2307 for (
int i = 0; i < num_digits - 1; ++i) {
2309 buf[i] =
static_cast<char>(
'0' + digit);
2313 auto result = add_compare(numerator, numerator, denominator);
2316 const auto overflow =
'0' + 10;
2317 buf[num_digits - 1] = overflow;
2319 for (
int i = num_digits - 1; i > 0 && buf[i] == overflow; --i) {
2323 if (buf[0] == overflow) {
2331 buf[num_digits - 1] =
static_cast<char>(
'0' + digit);
2334 template <
typename T>
2341 if (precision <= 0 || !fixed) {
2352 if (precision < 0) {
2357 return dec.exponent;
2361 return dec.exponent;
2367 const int min_exp = -60;
2368 int cached_exp10 = 0;
2372 normalized = normalized * cached_pow;
2375 const int max_double_digits = 767;
2376 if (precision > max_double_digits) precision = max_double_digits;
2377 fixed_handler handler{buf.
data(), 0,
precision, -cached_exp10, fixed};
2379 exp += handler.size - cached_exp10 - 1;
2382 exp += handler.exp10;
2387 auto num_digits = buf.
size();
2388 while (num_digits > 0 && buf[num_digits - 1] ==
'0') {
2397 template <
typename T>
2408 precision = (precision >= 0 ? precision : 6) - 1;
2411 enum { max_format_size = 7 };
2412 char format[max_format_size];
2413 char* format_ptr =
format;
2414 *format_ptr++ =
'%';
2416 if (precision >= 0) {
2417 *format_ptr++ =
'.';
2418 *format_ptr++ =
'*';
2420 if (std::is_same<T, long double>()) *format_ptr++ =
'L';
2423 : (specs.
upper ?
'A' :
'a');
2432 if (precision > 100000)
2433 throw std::runtime_error(
2434 "fuzz mode - avoid large allocation inside snprintf");
2439 int result = precision >= 0
2440 ? snprintf_ptr(
begin, capacity, format, precision, value)
2441 : snprintf_ptr(
begin, capacity, format, value);
2449 if (
size >= capacity) {
2453 auto is_digit = [](
char c) {
return c >=
'0' &&
c <=
'9'; };
2455 if (precision == 0) {
2463 }
while (is_digit(*p));
2464 int fraction_size =
static_cast<int>(
end - p - 1);
2465 std::memmove(p, p + 1,
to_unsigned(fraction_size));
2467 return -fraction_size;
2477 }
while (*exp_pos !=
'e');
2478 char sign = exp_pos[1];
2481 auto p = exp_pos + 2;
2484 exp = exp * 10 + (*p++ -
'0');
2486 if (sign ==
'-') exp = -exp;
2487 int fraction_size = 0;
2488 if (exp_pos !=
begin + 1) {
2490 auto fraction_end = exp_pos - 1;
2491 while (*fraction_end ==
'0') --fraction_end;
2493 fraction_size =
static_cast<int>(fraction_end -
begin - 1);
2497 return exp - fraction_size;
2510 auto out = ctx.
out();
2512 for (
auto i = n.bigits_.size(); i > 0; --i) {
2513 auto value = n.bigits_[i - 1u];
2523 n.exp_ * detail::bigint::bigit_bits);
2530 if (error != 0)
FMT_THROW(std::runtime_error(
"invalid utf8"));
2532 buffer_.push_back(static_cast<wchar_t>(cp));
2535 buffer_.push_back(static_cast<wchar_t>(0xD800 + (cp >> 10)));
2536 buffer_.push_back(static_cast<wchar_t>(0xDC00 + (cp & 0x3FF)));
2539 buffer_.push_back(0);
2545 auto ec = std::error_code(error_code, std::generic_category());
2573 extern "C" __declspec(dllimport)
int __stdcall WriteConsoleW(
2574 void*, const
void*, dword, dword*,
void*);
2581 auto fd = _fileno(f);
2584 auto written = detail::dword();
2585 if (detail::WriteConsoleW(reinterpret_cast<void*>(_get_osfhandle(
fd)),
2586 u16.c_str(),
static_cast<uint32_t
>(u16.size()),
2587 &written,
nullptr)) {
2616 vprint(stdout, format_str, args);
2621 #endif // FMT_FORMAT_INL_H_
FMT_CONSTEXPR auto to_unsigned(Int value) -> typename std::make_unsigned< Int >::type
FMT_INLINE int remove_trailing_zeros(uint64_t &n) FMT_NOEXCEPT
auto data() FMT_NOEXCEPT-> T *
GLuint GLsizei const GLchar * message
auto make_checked(T *p, size_t) -> T *
typedef int(APIENTRYP RE_PFNGLXSWAPINTERVALSGIPROC)(int)
GA_API const UT_StringHolder dist
GLenum GLuint GLenum GLsizei const GLchar * buf
static carrier_uint compute_right_endpoint_for_shorter_interval_case(const cache_entry_type &cache, int beta_minus_1) FMT_NOEXCEPT
std::string upper(string_view a)
Return an all-upper case version of a (locale-independent).
uint32_t umul96_upper32(uint32_t x, uint64_t y) FMT_NOEXCEPT
float_info< float >::carrier_uint carrier_uint
static carrier_uint compute_right_endpoint_for_shorter_interval_case(const cache_entry_type &cache, int beta_minus_1) FMT_NOEXCEPT
FMT_API void vprint_mojibake(std::FILE *, string_view, format_args)
int divmod_assign(const bigint &divisor)
void operator>>=(int shift)
uint128_wrapper & operator+=(uint64_t n) FMT_NOEXCEPT
int floor_log2_pow10(int e) FMT_NOEXCEPT
FMT_FUNC void format_error_code(detail::buffer< char > &out, int error_code, string_view message) FMT_NOEXCEPT
bool operator==(fp x, fp y)
FMT_INLINE decimal_fp< T > shorter_interval_case(int exponent) FMT_NOEXCEPT
typename std::conditional< B, T, F >::type conditional_t
OIIO_UTIL_API bool copy(string_view from, string_view to, std::string &err)
static FMT_CONSTEXPR_DECL const uint64_t implicit_bit
static carrier_uint compute_mul(carrier_uint u, const cache_entry_type &cache) FMT_NOEXCEPT
GLsizei const GLchar *const * string
GLsizei const GLfloat * value
static carrier_uint compute_round_up_for_shorter_interval_case(const cache_entry_type &cache, int beta_minus_1) FMT_NOEXCEPT
void operator+=(uint64_t n)
uint32_t small_division_by_pow10(uint32_t n) FMT_NOEXCEPT
uint64_t umul96_lower64(uint32_t x, uint64_t y) FMT_NOEXCEPT
static carrier_uint compute_left_endpoint_for_shorter_interval_case(const cache_entry_type &cache, int beta_minus_1) FMT_NOEXCEPT
GLboolean GLboolean GLboolean GLboolean a
conditional_t< std::is_same< T, char >::value, appender, std::back_insert_iterator< buffer< T >>> buffer_appender
static FMT_CONSTEXPR_DECL const int double_significand_size
FMT_INLINE digits::result grisu_gen_digits(fp value, uint64_t error, int &exp, Handler &handler)
static carrier_uint compute_round_up_for_shorter_interval_case(const cache_entry_type &cache, int beta_minus_1) FMT_NOEXCEPT
constexpr uint64_t high() const FMT_NOEXCEPT
void assign_pow10(int exp)
ImageBuf OIIO_API min(Image_or_Const A, Image_or_Const B, ROI roi={}, int nthreads=0)
#define FMT_CONSTEXPR_DECL
void fallback_format(Double d, int num_digits, bool binary32, buffer< char > &buf, int &exp10)
**But if you need a result
int floor_log10_pow2(int e) FMT_NOEXCEPT
void vformat_to(buffer< Char > &buf, basic_string_view< Char > fmt, basic_format_args< FMT_BUFFER_CONTEXT(type_identity_t< Char >)> args, detail::locale_ref loc={})
void fwrite_fully(const void *ptr, size_t size, size_t count, FILE *stream)
constexpr const_pointer data() const noexcept
void push_back(const T &value)
#define FMT_END_NAMESPACE
FMT_FUNC int count_digits< 4 >(detail::fallback_uintptr n)
bigint & operator*=(Int value)
significand_type significand
basic_string_view< char > string_view
decimal_fp< T > to_decimal(T x) FMT_NOEXCEPT
constexpr size_type size() const noexcept
void operator=(const bigint &)=delete
void try_reserve(size_t new_capacity)
fp get_cached_power(int min_exponent, int &pow10_exponent)
CompareResults OIIO_API compare(const ImageBuf &A, const ImageBuf &B, float failthresh, float warnthresh, ROI roi={}, int nthreads=0)
static bool compute_mul_parity(carrier_uint two_f, const cache_entry_type &cache, int beta_minus_1) FMT_NOEXCEPT
static uint32_t compute_delta(const cache_entry_type &cache, int beta_minus_1) FMT_NOEXCEPT
IMATH_NAMESPACE::V2f float
int floor_log10_pow2_minus_log10_4_over_3(int e) FMT_NOEXCEPT
bool is_center_integer(typename float_info< T >::carrier_uint two_f, int exponent, int minus_k) FMT_NOEXCEPT
friend int add_compare(const bigint &lhs1, const bigint &lhs2, const bigint &rhs)
FMT_FUNC void print(std::FILE *f, string_view text)
GLint GLint GLsizei GLint GLenum format
friend int compare(const bigint &lhs, const bigint &rhs)
static uint128_wrapper get_cached_power(int k) FMT_NOEXCEPT
static carrier_uint compute_mul(carrier_uint u, const cache_entry_type &cache) FMT_NOEXCEPT
static uint32_t compute_delta(cache_entry_type const &cache, int beta_minus_1) FMT_NOEXCEPT
uint64_t umul128_upper64(uint64_t x, uint64_t y) FMT_NOEXCEPT
auto capacity() const FMT_NOEXCEPT-> size_t
digits::result on_digit(char digit, uint64_t divisor, uint64_t remainder, uint64_t error, int, bool integral)
GLfloat GLfloat GLfloat alpha
void try_resize(size_t count)
IMATH_HOSTDEVICE constexpr int sign(T a) IMATH_NOEXCEPT
bool check_divisibility_and_divide_by_pow5(uint32_t &n) FMT_NOEXCEPT
round_direction get_round_direction(uint64_t divisor, uint64_t remainder, uint64_t error)
GLint GLenum GLboolean normalized
std::wstring OIIO_UTIL_API utf8_to_utf16(string_view utf8str) noexcept
GLboolean GLboolean GLboolean b
constexpr uint128_wrapper(uint64_t high, uint64_t low) FMT_NOEXCEPT
static const uint64_t log10_2_significand
auto fprintf(std::FILE *f, const S &fmt, const T &...args) -> int
void assign(const bigint &other)
int format_float(T value, int precision, float_specs specs, buffer< char > &buf)
GLenum GLint GLint * precision
constexpr auto begin() const FMT_NOEXCEPT-> iterator
uint128_wrapper()=default
FMT_NOINLINE bigint & operator<<=(int shift)
bool divisible_by_power_of_2(uint64_t x, int exp) FMT_NOEXCEPT
static carrier_uint compute_left_endpoint_for_shorter_interval_case(const cache_entry_type &cache, int beta_minus_1) FMT_NOEXCEPT
uint64_t divide_by_10_to_kappa_plus_1(uint64_t n) FMT_NOEXCEPT
int snprintf_float(T value, int precision, float_specs specs, buffer< char > &buf)
auto bit_cast(const Source &source) -> Dest
typename basic_string_view< Char >::iterator iterator
std::string lower(string_view a)
Return an all-upper case version of a (locale-independent).
constexpr uint64_t low() const FMT_NOEXCEPT
uint64_t umul192_upper64(uint64_t x, uint128_wrapper y) FMT_NOEXCEPT
ImageBuf OIIO_API max(Image_or_Const A, Image_or_Const B, ROI roi={}, int nthreads=0)
GA_API const UT_StringHolder N
static uint64_t get_cached_power(int k) FMT_NOEXCEPT
FMT_INLINE auto format_to(OutputIt out, format_string< T...> fmt, T &&...args) -> OutputIt
uint128_wrapper umul128(uint64_t x, uint64_t y) FMT_NOEXCEPT
FMT_FUNC void report_error(format_func func, int error_code, const char *message) FMT_NOEXCEPT
**If you just want to fire and args
bool is_endpoint_integer(typename float_info< T >::carrier_uint two_f, int exponent, int minus_k) FMT_NOEXCEPT
static bool compute_mul_parity(carrier_uint two_f, const cache_entry_type &cache, int beta_minus_1) FMT_NOEXCEPT
void resize(size_t count)
uint64_t power_of_10_64(int exp)
bool is_left_endpoint_integer_shorter_interval(int exponent) FMT_NOEXCEPT
float_info< double >::carrier_uint carrier_uint
#define FMT_ASSERT(condition, message)
#define FMT_BEGIN_NAMESPACE
void align(const bigint &other)
IMATH_HOSTDEVICE void intermediate(const Quat< T > &q0, const Quat< T > &q1, const Quat< T > &q2, const Quat< T > &q3, Quat< T > &qa, Quat< T > &qb) IMATH_NOEXCEPT
FMT_CONSTEXPR auto out() -> iterator
auto size() const FMT_NOEXCEPT-> size_t
FMT_CONSTEXPR void for_each_codepoint(string_view s, F f)
fp(uint64_t f_val, int e_val)
bool divisible_by_power_of_5(uint64_t x, int exp) FMT_NOEXCEPT
std::integral_constant< bool, B > bool_constant
auto get() const -> Locale
uint64_t multiply(uint64_t lhs, uint64_t rhs)
uint64_t cache_entry_type
uint64_t umul192_middle64(uint64_t x, uint128_wrapper y) FMT_NOEXCEPT
FMT_FUNC void assert_fail(const char *file, int line, const char *message)
static FMT_CONSTEXPR_DECL const int significand_size
digits::result on_start(uint64_t divisor, uint64_t remainder, uint64_t error, int &exp)
PcpNodeRef_ChildrenIterator begin(const PcpNodeRef::child_const_range &r)
Support for range-based for loops for PcpNodeRef children ranges.