8 #ifndef FMT_FORMAT_INL_H_ 9 #define FMT_FORMAT_INL_H_ 20 #ifndef FMT_STATIC_THOUSANDS_SEPARATOR 32 inline fmt::detail::null<>
strerror_r(
int,
char*, ...) {
return {}; }
33 inline fmt::detail::null<>
strerror_s(
char*,
size_t, ...) {
return {}; }
41 std::fprintf(stderr,
"%s:%d: assertion failed: %s", file, line, message);
48 # define FMT_SNPRINTF snprintf 50 inline int fmt_snprintf(
char* buffer,
size_t size,
const char*
format, ...) {
52 va_start(args, format);
53 int result = vsnprintf_s(buffer, size, _TRUNCATE, format, args);
57 # define FMT_SNPRINTF fmt_snprintf 80 void operator=(
const dispatcher&) {}
85 return result == -1 ? errno :
result;
90 int handle(
char* message) {
92 if (message == buffer_ && strlen(buffer_) == buffer_size_ - 1)
101 return fallback(
strerror_s(buffer_, buffer_size_, error_code_));
106 int fallback(
int result) {
108 return result == 0 && strlen(buffer_) == buffer_size_ - 1 ? ERANGE
116 buffer_ = strerror(error_code_);
122 dispatcher(
int err_code,
char*& buf,
size_t buf_size)
123 : error_code_(err_code), buffer_(buf), buffer_size_(buf_size) {}
125 int run() {
return handle(
strerror_r(error_code_, buffer_, buffer_size_)); }
136 static const char SEP[] =
": ";
137 static const char ERROR_STR[] =
"error ";
139 size_t error_code_size =
sizeof(SEP) +
sizeof(ERROR_STR) - 2;
142 abs_value = 0 - abs_value;
158 (
void)std::fwrite(full_message.
data(), full_message.
size(), 1, stderr);
159 std::fputc(
'\n', stderr);
165 size_t written = std::fwrite(ptr, size, count, stream);
170 #if !defined(FMT_STATIC_THOUSANDS_SEPARATOR) 173 template <
typename Locale>
180 return locale_ ? *
static_cast<const std::locale*
>(
locale_) : std::locale();
184 return std::use_facet<std::numpunct<Char>>(loc.
get<std::locale>()).grouping();
187 return std::use_facet<std::numpunct<Char>>(loc.
get<std::locale>())
191 return std::use_facet<std::numpunct<Char>>(loc.
get<std::locale>())
196 template <
typename Char>
201 return FMT_STATIC_THOUSANDS_SEPARATOR;
213 error_code_ = err_code;
216 std::runtime_error& base = *
this;
217 base = std::runtime_error(
to_string(buffer));
224 int i =
static_cast<int>(
sizeof(
void*)) - 1;
225 while (i > 0 && n.value[i] == 0) --i;
226 auto char_digits = std::numeric_limits<unsigned char>::digits / 4;
227 return i >= 0 ? i * char_digits + count_digits<4, unsigned>(n.value[i]) : 1;
230 template <
typename T>
232 {
'0',
'0'}, {
'0',
'1'}, {
'0',
'2'}, {
'0',
'3'}, {
'0',
'4'}, {
'0',
'5'},
233 {
'0',
'6'}, {
'0',
'7'}, {
'0',
'8'}, {
'0',
'9'}, {
'1',
'0'}, {
'1',
'1'},
234 {
'1',
'2'}, {
'1',
'3'}, {
'1',
'4'}, {
'1',
'5'}, {
'1',
'6'}, {
'1',
'7'},
235 {
'1',
'8'}, {
'1',
'9'}, {
'2',
'0'}, {
'2',
'1'}, {
'2',
'2'}, {
'2',
'3'},
236 {
'2',
'4'}, {
'2',
'5'}, {
'2',
'6'}, {
'2',
'7'}, {
'2',
'8'}, {
'2',
'9'},
237 {
'3',
'0'}, {
'3',
'1'}, {
'3',
'2'}, {
'3',
'3'}, {
'3',
'4'}, {
'3',
'5'},
238 {
'3',
'6'}, {
'3',
'7'}, {
'3',
'8'}, {
'3',
'9'}, {
'4',
'0'}, {
'4',
'1'},
239 {
'4',
'2'}, {
'4',
'3'}, {
'4',
'4'}, {
'4',
'5'}, {
'4',
'6'}, {
'4',
'7'},
240 {
'4',
'8'}, {
'4',
'9'}, {
'5',
'0'}, {
'5',
'1'}, {
'5',
'2'}, {
'5',
'3'},
241 {
'5',
'4'}, {
'5',
'5'}, {
'5',
'6'}, {
'5',
'7'}, {
'5',
'8'}, {
'5',
'9'},
242 {
'6',
'0'}, {
'6',
'1'}, {
'6',
'2'}, {
'6',
'3'}, {
'6',
'4'}, {
'6',
'5'},
243 {
'6',
'6'}, {
'6',
'7'}, {
'6',
'8'}, {
'6',
'9'}, {
'7',
'0'}, {
'7',
'1'},
244 {
'7',
'2'}, {
'7',
'3'}, {
'7',
'4'}, {
'7',
'5'}, {
'7',
'6'}, {
'7',
'7'},
245 {
'7',
'8'}, {
'7',
'9'}, {
'8',
'0'}, {
'8',
'1'}, {
'8',
'2'}, {
'8',
'3'},
246 {
'8',
'4'}, {
'8',
'5'}, {
'8',
'6'}, {
'8',
'7'}, {
'8',
'8'}, {
'8',
'9'},
247 {
'9',
'0'}, {
'9',
'1'}, {
'9',
'2'}, {
'9',
'3'}, {
'9',
'4'}, {
'9',
'5'},
248 {
'9',
'6'}, {
'9',
'7'}, {
'9',
'8'}, {
'9',
'9'}};
250 template <
typename T>
253 #define FMT_POWERS_OF_10(factor) \ 254 factor * 10, (factor)*100, (factor)*1000, (factor)*10000, (factor)*100000, \ 255 (factor)*1000000, (factor)*10000000, (factor)*100000000, \ 258 template <
typename T>
261 10000000000000000000ULL};
263 template <
typename T>
267 template <
typename T>
270 10000000000000000000ULL};
274 template <
typename T>
276 0xfa8fd5a0081c0288, 0xbaaee17fa23ebf76, 0x8b16fb203055ac76,
277 0xcf42894a5dce35ea, 0x9a6bb0aa55653b2d, 0xe61acf033d1a45df,
278 0xab70fe17c79ac6ca, 0xff77b1fcbebcdc4f, 0xbe5691ef416bd60c,
279 0x8dd01fad907ffc3c, 0xd3515c2831559a83, 0x9d71ac8fada6c9b5,
280 0xea9c227723ee8bcb, 0xaecc49914078536d, 0x823c12795db6ce57,
281 0xc21094364dfb5637, 0x9096ea6f3848984f, 0xd77485cb25823ac7,
282 0xa086cfcd97bf97f4, 0xef340a98172aace5, 0xb23867fb2a35b28e,
283 0x84c8d4dfd2c63f3b, 0xc5dd44271ad3cdba, 0x936b9fcebb25c996,
284 0xdbac6c247d62a584, 0xa3ab66580d5fdaf6, 0xf3e2f893dec3f126,
285 0xb5b5ada8aaff80b8, 0x87625f056c7c4a8b, 0xc9bcff6034c13053,
286 0x964e858c91ba2655, 0xdff9772470297ebd, 0xa6dfbd9fb8e5b88f,
287 0xf8a95fcf88747d94, 0xb94470938fa89bcf, 0x8a08f0f8bf0f156b,
288 0xcdb02555653131b6, 0x993fe2c6d07b7fac, 0xe45c10c42a2b3b06,
289 0xaa242499697392d3, 0xfd87b5f28300ca0e, 0xbce5086492111aeb,
290 0x8cbccc096f5088cc, 0xd1b71758e219652c, 0x9c40000000000000,
291 0xe8d4a51000000000, 0xad78ebc5ac620000, 0x813f3978f8940984,
292 0xc097ce7bc90715b3, 0x8f7e32ce7bea5c70, 0xd5d238a4abe98068,
293 0x9f4f2726179a2245, 0xed63a231d4c4fb27, 0xb0de65388cc8ada8,
294 0x83c7088e1aab65db, 0xc45d1df942711d9a, 0x924d692ca61be758,
295 0xda01ee641a708dea, 0xa26da3999aef774a, 0xf209787bb47d6b85,
296 0xb454e4a179dd1877, 0x865b86925b9bc5c2, 0xc83553c5c8965d3d,
297 0x952ab45cfa97a0b3, 0xde469fbd99a05fe3, 0xa59bc234db398c25,
298 0xf6c69a72a3989f5c, 0xb7dcbf5354e9bece, 0x88fcf317f22241e2,
299 0xcc20ce9bd35c78a5, 0x98165af37b2153df, 0xe2a0b5dc971f303a,
300 0xa8d9d1535ce3b396, 0xfb9b7cd9a4a7443c, 0xbb764c4ca7a44410,
301 0x8bab8eefb6409c1a, 0xd01fef10a657842c, 0x9b10a4e5e9913129,
302 0xe7109bfba19c0c9d, 0xac2820d9623bf429, 0x80444b5e7aa7cf85,
303 0xbf21e44003acdd2d, 0x8e679c2f5e44ff8f, 0xd433179d9c8cb841,
304 0x9e19db92b4e31ba9, 0xeb96bf6ebadf77d9, 0xaf87023b9bf0ee6b,
309 template <
typename T>
311 -1220, -1193, -1166, -1140, -1113, -1087, -1060, -1034, -1007, -980, -954,
312 -927, -901, -874, -847, -821, -794, -768, -741, -715, -688, -661,
313 -635, -608, -582, -555, -529, -502, -475, -449, -422, -396, -369,
314 -343, -316, -289, -263, -236, -210, -183, -157, -130, -103, -77,
315 -50, -24, 3, 30, 56, 83, 109, 136, 162, 189, 216,
316 242, 269, 295, 322, 348, 375, 402, 428, 455, 481, 508,
317 534, 561, 588, 614, 641, 667, 694, 720, 747, 774, 800,
318 827, 853, 880, 907, 933, 960, 986, 1013, 1039, 1066};
320 template <
typename T>
322 {{0x00000001, 0xffffffff}, {0xcccccccd, 0x33333333},
323 {0xc28f5c29, 0x0a3d70a3}, {0x26e978d5, 0x020c49ba},
324 {0x3afb7e91, 0x0068db8b}, {0x0bcbe61d, 0x0014f8b5},
325 {0x68c26139, 0x000431bd}, {0xae8d46a5, 0x0000d6bf},
326 {0x22e90e21, 0x00002af3}, {0x3a2e9c6d, 0x00000897},
327 {0x3ed61f49, 0x000001b7}};
329 template <
typename T>
331 {{0x0000000000000001, 0xffffffffffffffff},
332 {0xcccccccccccccccd, 0x3333333333333333},
333 {0x8f5c28f5c28f5c29, 0x0a3d70a3d70a3d70},
334 {0x1cac083126e978d5, 0x020c49ba5e353f7c},
335 {0xd288ce703afb7e91, 0x0068db8bac710cb2},
336 {0x5d4e8fb00bcbe61d, 0x0014f8b588e368f0},
337 {0x790fb65668c26139, 0x000431bde82d7b63},
338 {0xe5032477ae8d46a5, 0x0000d6bf94d5e57a},
339 {0xc767074b22e90e21, 0x00002af31dc46118},
340 {0x8e47ce423a2e9c6d, 0x0000089705f4136b},
341 {0x4fa7f60d3ed61f49, 0x000001b7cdfd9d7b},
342 {0x0fee64690c913975, 0x00000057f5ff85e5},
343 {0x3662e0e1cf503eb1, 0x000000119799812d},
344 {0xa47a2cf9f6433fbd, 0x0000000384b84d09},
345 {0x54186f653140a659, 0x00000000b424dc35},
346 {0x7738164770402145, 0x0000000024075f3d},
347 {0xe4a4d1417cd9a041, 0x000000000734aca5},
348 {0xc75429d9e5c5200d, 0x000000000170ef54},
349 {0xc1773b91fac10669, 0x000000000049c977},
350 {0x26b172506559ce15, 0x00000000000ec1e4},
351 {0xd489e3a9addec2d1, 0x000000000002f394},
352 {0x90e860bb892c8d5d, 0x000000000000971d},
353 {0x502e79bf1b6f4f79, 0x0000000000001e39},
354 {0xdcd618596be30fe5, 0x000000000000060b}};
356 template <
typename T>
358 0x81ceb32c4b43fcf5, 0xa2425ff75e14fc32, 0xcad2f7f5359a3b3f,
359 0xfd87b5f28300ca0e, 0x9e74d1b791e07e49, 0xc612062576589ddb,
360 0xf79687aed3eec552, 0x9abe14cd44753b53, 0xc16d9a0095928a28,
361 0xf1c90080baf72cb2, 0x971da05074da7bef, 0xbce5086492111aeb,
362 0xec1e4a7db69561a6, 0x9392ee8e921d5d08, 0xb877aa3236a4b44a,
363 0xe69594bec44de15c, 0x901d7cf73ab0acda, 0xb424dc35095cd810,
364 0xe12e13424bb40e14, 0x8cbccc096f5088cc, 0xafebff0bcb24aaff,
365 0xdbe6fecebdedd5bf, 0x89705f4136b4a598, 0xabcc77118461cefd,
366 0xd6bf94d5e57a42bd, 0x8637bd05af6c69b6, 0xa7c5ac471b478424,
367 0xd1b71758e219652c, 0x83126e978d4fdf3c, 0xa3d70a3d70a3d70b,
368 0xcccccccccccccccd, 0x8000000000000000, 0xa000000000000000,
369 0xc800000000000000, 0xfa00000000000000, 0x9c40000000000000,
370 0xc350000000000000, 0xf424000000000000, 0x9896800000000000,
371 0xbebc200000000000, 0xee6b280000000000, 0x9502f90000000000,
372 0xba43b74000000000, 0xe8d4a51000000000, 0x9184e72a00000000,
373 0xb5e620f480000000, 0xe35fa931a0000000, 0x8e1bc9bf04000000,
374 0xb1a2bc2ec5000000, 0xde0b6b3a76400000, 0x8ac7230489e80000,
375 0xad78ebc5ac620000, 0xd8d726b7177a8000, 0x878678326eac9000,
376 0xa968163f0a57b400, 0xd3c21bcecceda100, 0x84595161401484a0,
377 0xa56fa5b99019a5c8, 0xcecb8f27f4200f3a, 0x813f3978f8940984,
378 0xa18f07d736b90be5, 0xc9f2c9cd04674ede, 0xfc6f7c4045812296,
379 0x9dc5ada82b70b59d, 0xc5371912364ce305, 0xf684df56c3e01bc6,
380 0x9a130b963a6c115c, 0xc097ce7bc90715b3, 0xf0bdc21abb48db20,
381 0x96769950b50d88f4, 0xbc143fa4e250eb31, 0xeb194f8e1ae525fd,
382 0x92efd1b8d0cf37be, 0xb7abc627050305ad, 0xe596b7b0c643c719,
383 0x8f7e32ce7bea5c6f, 0xb35dbf821ae4f38b, 0xe0352f62a19e306e};
385 template <
typename T>
387 #if FMT_USE_FULL_CACHE_DRAGONBOX 388 {0xff77b1fcbebcdc4f, 0x25e8e89c13bb0f7b},
389 {0x9faacf3df73609b1, 0x77b191618c54e9ad},
390 {0xc795830d75038c1d, 0xd59df5b9ef6a2418},
391 {0xf97ae3d0d2446f25, 0x4b0573286b44ad1e},
392 {0x9becce62836ac577, 0x4ee367f9430aec33},
393 {0xc2e801fb244576d5, 0x229c41f793cda740},
394 {0xf3a20279ed56d48a, 0x6b43527578c11110},
395 {0x9845418c345644d6, 0x830a13896b78aaaa},
396 {0xbe5691ef416bd60c, 0x23cc986bc656d554},
397 {0xedec366b11c6cb8f, 0x2cbfbe86b7ec8aa9},
398 {0x94b3a202eb1c3f39, 0x7bf7d71432f3d6aa},
399 {0xb9e08a83a5e34f07, 0xdaf5ccd93fb0cc54},
400 {0xe858ad248f5c22c9, 0xd1b3400f8f9cff69},
401 {0x91376c36d99995be, 0x23100809b9c21fa2},
402 {0xb58547448ffffb2d, 0xabd40a0c2832a78b},
403 {0xe2e69915b3fff9f9, 0x16c90c8f323f516d},
404 {0x8dd01fad907ffc3b, 0xae3da7d97f6792e4},
405 {0xb1442798f49ffb4a, 0x99cd11cfdf41779d},
406 {0xdd95317f31c7fa1d, 0x40405643d711d584},
407 {0x8a7d3eef7f1cfc52, 0x482835ea666b2573},
408 {0xad1c8eab5ee43b66, 0xda3243650005eed0},
409 {0xd863b256369d4a40, 0x90bed43e40076a83},
410 {0x873e4f75e2224e68, 0x5a7744a6e804a292},
411 {0xa90de3535aaae202, 0x711515d0a205cb37},
412 {0xd3515c2831559a83, 0x0d5a5b44ca873e04},
413 {0x8412d9991ed58091, 0xe858790afe9486c3},
414 {0xa5178fff668ae0b6, 0x626e974dbe39a873},
415 {0xce5d73ff402d98e3, 0xfb0a3d212dc81290},
416 {0x80fa687f881c7f8e, 0x7ce66634bc9d0b9a},
417 {0xa139029f6a239f72, 0x1c1fffc1ebc44e81},
418 {0xc987434744ac874e, 0xa327ffb266b56221},
419 {0xfbe9141915d7a922, 0x4bf1ff9f0062baa9},
420 {0x9d71ac8fada6c9b5, 0x6f773fc3603db4aa},
421 {0xc4ce17b399107c22, 0xcb550fb4384d21d4},
422 {0xf6019da07f549b2b, 0x7e2a53a146606a49},
423 {0x99c102844f94e0fb, 0x2eda7444cbfc426e},
424 {0xc0314325637a1939, 0xfa911155fefb5309},
425 {0xf03d93eebc589f88, 0x793555ab7eba27cb},
426 {0x96267c7535b763b5, 0x4bc1558b2f3458df},
427 {0xbbb01b9283253ca2, 0x9eb1aaedfb016f17},
428 {0xea9c227723ee8bcb, 0x465e15a979c1cadd},
429 {0x92a1958a7675175f, 0x0bfacd89ec191eca},
430 {0xb749faed14125d36, 0xcef980ec671f667c},
431 {0xe51c79a85916f484, 0x82b7e12780e7401b},
432 {0x8f31cc0937ae58d2, 0xd1b2ecb8b0908811},
433 {0xb2fe3f0b8599ef07, 0x861fa7e6dcb4aa16},
434 {0xdfbdcece67006ac9, 0x67a791e093e1d49b},
435 {0x8bd6a141006042bd, 0xe0c8bb2c5c6d24e1},
436 {0xaecc49914078536d, 0x58fae9f773886e19},
437 {0xda7f5bf590966848, 0xaf39a475506a899f},
438 {0x888f99797a5e012d, 0x6d8406c952429604},
439 {0xaab37fd7d8f58178, 0xc8e5087ba6d33b84},
440 {0xd5605fcdcf32e1d6, 0xfb1e4a9a90880a65},
441 {0x855c3be0a17fcd26, 0x5cf2eea09a550680},
442 {0xa6b34ad8c9dfc06f, 0xf42faa48c0ea481f},
443 {0xd0601d8efc57b08b, 0xf13b94daf124da27},
444 {0x823c12795db6ce57, 0x76c53d08d6b70859},
445 {0xa2cb1717b52481ed, 0x54768c4b0c64ca6f},
446 {0xcb7ddcdda26da268, 0xa9942f5dcf7dfd0a},
447 {0xfe5d54150b090b02, 0xd3f93b35435d7c4d},
448 {0x9efa548d26e5a6e1, 0xc47bc5014a1a6db0},
449 {0xc6b8e9b0709f109a, 0x359ab6419ca1091c},
450 {0xf867241c8cc6d4c0, 0xc30163d203c94b63},
451 {0x9b407691d7fc44f8, 0x79e0de63425dcf1e},
452 {0xc21094364dfb5636, 0x985915fc12f542e5},
453 {0xf294b943e17a2bc4, 0x3e6f5b7b17b2939e},
454 {0x979cf3ca6cec5b5a, 0xa705992ceecf9c43},
455 {0xbd8430bd08277231, 0x50c6ff782a838354},
456 {0xece53cec4a314ebd, 0xa4f8bf5635246429},
457 {0x940f4613ae5ed136, 0x871b7795e136be9a},
458 {0xb913179899f68584, 0x28e2557b59846e40},
459 {0xe757dd7ec07426e5, 0x331aeada2fe589d0},
460 {0x9096ea6f3848984f, 0x3ff0d2c85def7622},
461 {0xb4bca50b065abe63, 0x0fed077a756b53aa},
462 {0xe1ebce4dc7f16dfb, 0xd3e8495912c62895},
463 {0x8d3360f09cf6e4bd, 0x64712dd7abbbd95d},
464 {0xb080392cc4349dec, 0xbd8d794d96aacfb4},
465 {0xdca04777f541c567, 0xecf0d7a0fc5583a1},
466 {0x89e42caaf9491b60, 0xf41686c49db57245},
467 {0xac5d37d5b79b6239, 0x311c2875c522ced6},
468 {0xd77485cb25823ac7, 0x7d633293366b828c},
469 {0x86a8d39ef77164bc, 0xae5dff9c02033198},
470 {0xa8530886b54dbdeb, 0xd9f57f830283fdfd},
471 {0xd267caa862a12d66, 0xd072df63c324fd7c},
472 {0x8380dea93da4bc60, 0x4247cb9e59f71e6e},
473 {0xa46116538d0deb78, 0x52d9be85f074e609},
474 {0xcd795be870516656, 0x67902e276c921f8c},
475 {0x806bd9714632dff6, 0x00ba1cd8a3db53b7},
476 {0xa086cfcd97bf97f3, 0x80e8a40eccd228a5},
477 {0xc8a883c0fdaf7df0, 0x6122cd128006b2ce},
478 {0xfad2a4b13d1b5d6c, 0x796b805720085f82},
479 {0x9cc3a6eec6311a63, 0xcbe3303674053bb1},
480 {0xc3f490aa77bd60fc, 0xbedbfc4411068a9d},
481 {0xf4f1b4d515acb93b, 0xee92fb5515482d45},
482 {0x991711052d8bf3c5, 0x751bdd152d4d1c4b},
483 {0xbf5cd54678eef0b6, 0xd262d45a78a0635e},
484 {0xef340a98172aace4, 0x86fb897116c87c35},
485 {0x9580869f0e7aac0e, 0xd45d35e6ae3d4da1},
486 {0xbae0a846d2195712, 0x8974836059cca10a},
487 {0xe998d258869facd7, 0x2bd1a438703fc94c},
488 {0x91ff83775423cc06, 0x7b6306a34627ddd0},
489 {0xb67f6455292cbf08, 0x1a3bc84c17b1d543},
490 {0xe41f3d6a7377eeca, 0x20caba5f1d9e4a94},
491 {0x8e938662882af53e, 0x547eb47b7282ee9d},
492 {0xb23867fb2a35b28d, 0xe99e619a4f23aa44},
493 {0xdec681f9f4c31f31, 0x6405fa00e2ec94d5},
494 {0x8b3c113c38f9f37e, 0xde83bc408dd3dd05},
495 {0xae0b158b4738705e, 0x9624ab50b148d446},
496 {0xd98ddaee19068c76, 0x3badd624dd9b0958},
497 {0x87f8a8d4cfa417c9, 0xe54ca5d70a80e5d7},
498 {0xa9f6d30a038d1dbc, 0x5e9fcf4ccd211f4d},
499 {0xd47487cc8470652b, 0x7647c32000696720},
500 {0x84c8d4dfd2c63f3b, 0x29ecd9f40041e074},
501 {0xa5fb0a17c777cf09, 0xf468107100525891},
502 {0xcf79cc9db955c2cc, 0x7182148d4066eeb5},
503 {0x81ac1fe293d599bf, 0xc6f14cd848405531},
504 {0xa21727db38cb002f, 0xb8ada00e5a506a7d},
505 {0xca9cf1d206fdc03b, 0xa6d90811f0e4851d},
506 {0xfd442e4688bd304a, 0x908f4a166d1da664},
507 {0x9e4a9cec15763e2e, 0x9a598e4e043287ff},
508 {0xc5dd44271ad3cdba, 0x40eff1e1853f29fe},
509 {0xf7549530e188c128, 0xd12bee59e68ef47d},
510 {0x9a94dd3e8cf578b9, 0x82bb74f8301958cf},
511 {0xc13a148e3032d6e7, 0xe36a52363c1faf02},
512 {0xf18899b1bc3f8ca1, 0xdc44e6c3cb279ac2},
513 {0x96f5600f15a7b7e5, 0x29ab103a5ef8c0ba},
514 {0xbcb2b812db11a5de, 0x7415d448f6b6f0e8},
515 {0xebdf661791d60f56, 0x111b495b3464ad22},
516 {0x936b9fcebb25c995, 0xcab10dd900beec35},
517 {0xb84687c269ef3bfb, 0x3d5d514f40eea743},
518 {0xe65829b3046b0afa, 0x0cb4a5a3112a5113},
519 {0x8ff71a0fe2c2e6dc, 0x47f0e785eaba72ac},
520 {0xb3f4e093db73a093, 0x59ed216765690f57},
521 {0xe0f218b8d25088b8, 0x306869c13ec3532d},
522 {0x8c974f7383725573, 0x1e414218c73a13fc},
523 {0xafbd2350644eeacf, 0xe5d1929ef90898fb},
524 {0xdbac6c247d62a583, 0xdf45f746b74abf3a},
525 {0x894bc396ce5da772, 0x6b8bba8c328eb784},
526 {0xab9eb47c81f5114f, 0x066ea92f3f326565},
527 {0xd686619ba27255a2, 0xc80a537b0efefebe},
528 {0x8613fd0145877585, 0xbd06742ce95f5f37},
529 {0xa798fc4196e952e7, 0x2c48113823b73705},
530 {0xd17f3b51fca3a7a0, 0xf75a15862ca504c6},
531 {0x82ef85133de648c4, 0x9a984d73dbe722fc},
532 {0xa3ab66580d5fdaf5, 0xc13e60d0d2e0ebbb},
533 {0xcc963fee10b7d1b3, 0x318df905079926a9},
534 {0xffbbcfe994e5c61f, 0xfdf17746497f7053},
535 {0x9fd561f1fd0f9bd3, 0xfeb6ea8bedefa634},
536 {0xc7caba6e7c5382c8, 0xfe64a52ee96b8fc1},
537 {0xf9bd690a1b68637b, 0x3dfdce7aa3c673b1},
538 {0x9c1661a651213e2d, 0x06bea10ca65c084f},
539 {0xc31bfa0fe5698db8, 0x486e494fcff30a63},
540 {0xf3e2f893dec3f126, 0x5a89dba3c3efccfb},
541 {0x986ddb5c6b3a76b7, 0xf89629465a75e01d},
542 {0xbe89523386091465, 0xf6bbb397f1135824},
543 {0xee2ba6c0678b597f, 0x746aa07ded582e2d},
544 {0x94db483840b717ef, 0xa8c2a44eb4571cdd},
545 {0xba121a4650e4ddeb, 0x92f34d62616ce414},
546 {0xe896a0d7e51e1566, 0x77b020baf9c81d18},
547 {0x915e2486ef32cd60, 0x0ace1474dc1d122f},
548 {0xb5b5ada8aaff80b8, 0x0d819992132456bb},
549 {0xe3231912d5bf60e6, 0x10e1fff697ed6c6a},
550 {0x8df5efabc5979c8f, 0xca8d3ffa1ef463c2},
551 {0xb1736b96b6fd83b3, 0xbd308ff8a6b17cb3},
552 {0xddd0467c64bce4a0, 0xac7cb3f6d05ddbdf},
553 {0x8aa22c0dbef60ee4, 0x6bcdf07a423aa96c},
554 {0xad4ab7112eb3929d, 0x86c16c98d2c953c7},
555 {0xd89d64d57a607744, 0xe871c7bf077ba8b8},
556 {0x87625f056c7c4a8b, 0x11471cd764ad4973},
557 {0xa93af6c6c79b5d2d, 0xd598e40d3dd89bd0},
558 {0xd389b47879823479, 0x4aff1d108d4ec2c4},
559 {0x843610cb4bf160cb, 0xcedf722a585139bb},
560 {0xa54394fe1eedb8fe, 0xc2974eb4ee658829},
561 {0xce947a3da6a9273e, 0x733d226229feea33},
562 {0x811ccc668829b887, 0x0806357d5a3f5260},
563 {0xa163ff802a3426a8, 0xca07c2dcb0cf26f8},
564 {0xc9bcff6034c13052, 0xfc89b393dd02f0b6},
565 {0xfc2c3f3841f17c67, 0xbbac2078d443ace3},
566 {0x9d9ba7832936edc0, 0xd54b944b84aa4c0e},
567 {0xc5029163f384a931, 0x0a9e795e65d4df12},
568 {0xf64335bcf065d37d, 0x4d4617b5ff4a16d6},
569 {0x99ea0196163fa42e, 0x504bced1bf8e4e46},
570 {0xc06481fb9bcf8d39, 0xe45ec2862f71e1d7},
571 {0xf07da27a82c37088, 0x5d767327bb4e5a4d},
572 {0x964e858c91ba2655, 0x3a6a07f8d510f870},
573 {0xbbe226efb628afea, 0x890489f70a55368c},
574 {0xeadab0aba3b2dbe5, 0x2b45ac74ccea842f},
575 {0x92c8ae6b464fc96f, 0x3b0b8bc90012929e},
576 {0xb77ada0617e3bbcb, 0x09ce6ebb40173745},
577 {0xe55990879ddcaabd, 0xcc420a6a101d0516},
578 {0x8f57fa54c2a9eab6, 0x9fa946824a12232e},
579 {0xb32df8e9f3546564, 0x47939822dc96abfa},
580 {0xdff9772470297ebd, 0x59787e2b93bc56f8},
581 {0x8bfbea76c619ef36, 0x57eb4edb3c55b65b},
582 {0xaefae51477a06b03, 0xede622920b6b23f2},
583 {0xdab99e59958885c4, 0xe95fab368e45ecee},
584 {0x88b402f7fd75539b, 0x11dbcb0218ebb415},
585 {0xaae103b5fcd2a881, 0xd652bdc29f26a11a},
586 {0xd59944a37c0752a2, 0x4be76d3346f04960},
587 {0x857fcae62d8493a5, 0x6f70a4400c562ddc},
588 {0xa6dfbd9fb8e5b88e, 0xcb4ccd500f6bb953},
589 {0xd097ad07a71f26b2, 0x7e2000a41346a7a8},
590 {0x825ecc24c873782f, 0x8ed400668c0c28c9},
591 {0xa2f67f2dfa90563b, 0x728900802f0f32fb},
592 {0xcbb41ef979346bca, 0x4f2b40a03ad2ffba},
593 {0xfea126b7d78186bc, 0xe2f610c84987bfa9},
594 {0x9f24b832e6b0f436, 0x0dd9ca7d2df4d7ca},
595 {0xc6ede63fa05d3143, 0x91503d1c79720dbc},
596 {0xf8a95fcf88747d94, 0x75a44c6397ce912b},
597 {0x9b69dbe1b548ce7c, 0xc986afbe3ee11abb},
598 {0xc24452da229b021b, 0xfbe85badce996169},
599 {0xf2d56790ab41c2a2, 0xfae27299423fb9c4},
600 {0x97c560ba6b0919a5, 0xdccd879fc967d41b},
601 {0xbdb6b8e905cb600f, 0x5400e987bbc1c921},
602 {0xed246723473e3813, 0x290123e9aab23b69},
603 {0x9436c0760c86e30b, 0xf9a0b6720aaf6522},
604 {0xb94470938fa89bce, 0xf808e40e8d5b3e6a},
605 {0xe7958cb87392c2c2, 0xb60b1d1230b20e05},
606 {0x90bd77f3483bb9b9, 0xb1c6f22b5e6f48c3},
607 {0xb4ecd5f01a4aa828, 0x1e38aeb6360b1af4},
608 {0xe2280b6c20dd5232, 0x25c6da63c38de1b1},
609 {0x8d590723948a535f, 0x579c487e5a38ad0f},
610 {0xb0af48ec79ace837, 0x2d835a9df0c6d852},
611 {0xdcdb1b2798182244, 0xf8e431456cf88e66},
612 {0x8a08f0f8bf0f156b, 0x1b8e9ecb641b5900},
613 {0xac8b2d36eed2dac5, 0xe272467e3d222f40},
614 {0xd7adf884aa879177, 0x5b0ed81dcc6abb10},
615 {0x86ccbb52ea94baea, 0x98e947129fc2b4ea},
616 {0xa87fea27a539e9a5, 0x3f2398d747b36225},
617 {0xd29fe4b18e88640e, 0x8eec7f0d19a03aae},
618 {0x83a3eeeef9153e89, 0x1953cf68300424ad},
619 {0xa48ceaaab75a8e2b, 0x5fa8c3423c052dd8},
620 {0xcdb02555653131b6, 0x3792f412cb06794e},
621 {0x808e17555f3ebf11, 0xe2bbd88bbee40bd1},
622 {0xa0b19d2ab70e6ed6, 0x5b6aceaeae9d0ec5},
623 {0xc8de047564d20a8b, 0xf245825a5a445276},
624 {0xfb158592be068d2e, 0xeed6e2f0f0d56713},
625 {0x9ced737bb6c4183d, 0x55464dd69685606c},
626 {0xc428d05aa4751e4c, 0xaa97e14c3c26b887},
627 {0xf53304714d9265df, 0xd53dd99f4b3066a9},
628 {0x993fe2c6d07b7fab, 0xe546a8038efe402a},
629 {0xbf8fdb78849a5f96, 0xde98520472bdd034},
630 {0xef73d256a5c0f77c, 0x963e66858f6d4441},
631 {0x95a8637627989aad, 0xdde7001379a44aa9},
632 {0xbb127c53b17ec159, 0x5560c018580d5d53},
633 {0xe9d71b689dde71af, 0xaab8f01e6e10b4a7},
634 {0x9226712162ab070d, 0xcab3961304ca70e9},
635 {0xb6b00d69bb55c8d1, 0x3d607b97c5fd0d23},
636 {0xe45c10c42a2b3b05, 0x8cb89a7db77c506b},
637 {0x8eb98a7a9a5b04e3, 0x77f3608e92adb243},
638 {0xb267ed1940f1c61c, 0x55f038b237591ed4},
639 {0xdf01e85f912e37a3, 0x6b6c46dec52f6689},
640 {0x8b61313bbabce2c6, 0x2323ac4b3b3da016},
641 {0xae397d8aa96c1b77, 0xabec975e0a0d081b},
642 {0xd9c7dced53c72255, 0x96e7bd358c904a22},
643 {0x881cea14545c7575, 0x7e50d64177da2e55},
644 {0xaa242499697392d2, 0xdde50bd1d5d0b9ea},
645 {0xd4ad2dbfc3d07787, 0x955e4ec64b44e865},
646 {0x84ec3c97da624ab4, 0xbd5af13bef0b113f},
647 {0xa6274bbdd0fadd61, 0xecb1ad8aeacdd58f},
648 {0xcfb11ead453994ba, 0x67de18eda5814af3},
649 {0x81ceb32c4b43fcf4, 0x80eacf948770ced8},
650 {0xa2425ff75e14fc31, 0xa1258379a94d028e},
651 {0xcad2f7f5359a3b3e, 0x096ee45813a04331},
652 {0xfd87b5f28300ca0d, 0x8bca9d6e188853fd},
653 {0x9e74d1b791e07e48, 0x775ea264cf55347e},
654 {0xc612062576589dda, 0x95364afe032a819e},
655 {0xf79687aed3eec551, 0x3a83ddbd83f52205},
656 {0x9abe14cd44753b52, 0xc4926a9672793543},
657 {0xc16d9a0095928a27, 0x75b7053c0f178294},
658 {0xf1c90080baf72cb1, 0x5324c68b12dd6339},
659 {0x971da05074da7bee, 0xd3f6fc16ebca5e04},
660 {0xbce5086492111aea, 0x88f4bb1ca6bcf585},
661 {0xec1e4a7db69561a5, 0x2b31e9e3d06c32e6},
662 {0x9392ee8e921d5d07, 0x3aff322e62439fd0},
663 {0xb877aa3236a4b449, 0x09befeb9fad487c3},
664 {0xe69594bec44de15b, 0x4c2ebe687989a9b4},
665 {0x901d7cf73ab0acd9, 0x0f9d37014bf60a11},
666 {0xb424dc35095cd80f, 0x538484c19ef38c95},
667 {0xe12e13424bb40e13, 0x2865a5f206b06fba},
668 {0x8cbccc096f5088cb, 0xf93f87b7442e45d4},
669 {0xafebff0bcb24aafe, 0xf78f69a51539d749},
670 {0xdbe6fecebdedd5be, 0xb573440e5a884d1c},
671 {0x89705f4136b4a597, 0x31680a88f8953031},
672 {0xabcc77118461cefc, 0xfdc20d2b36ba7c3e},
673 {0xd6bf94d5e57a42bc, 0x3d32907604691b4d},
674 {0x8637bd05af6c69b5, 0xa63f9a49c2c1b110},
675 {0xa7c5ac471b478423, 0x0fcf80dc33721d54},
676 {0xd1b71758e219652b, 0xd3c36113404ea4a9},
677 {0x83126e978d4fdf3b, 0x645a1cac083126ea},
678 {0xa3d70a3d70a3d70a, 0x3d70a3d70a3d70a4},
679 {0xcccccccccccccccc, 0xcccccccccccccccd},
680 {0x8000000000000000, 0x0000000000000000},
681 {0xa000000000000000, 0x0000000000000000},
682 {0xc800000000000000, 0x0000000000000000},
683 {0xfa00000000000000, 0x0000000000000000},
684 {0x9c40000000000000, 0x0000000000000000},
685 {0xc350000000000000, 0x0000000000000000},
686 {0xf424000000000000, 0x0000000000000000},
687 {0x9896800000000000, 0x0000000000000000},
688 {0xbebc200000000000, 0x0000000000000000},
689 {0xee6b280000000000, 0x0000000000000000},
690 {0x9502f90000000000, 0x0000000000000000},
691 {0xba43b74000000000, 0x0000000000000000},
692 {0xe8d4a51000000000, 0x0000000000000000},
693 {0x9184e72a00000000, 0x0000000000000000},
694 {0xb5e620f480000000, 0x0000000000000000},
695 {0xe35fa931a0000000, 0x0000000000000000},
696 {0x8e1bc9bf04000000, 0x0000000000000000},
697 {0xb1a2bc2ec5000000, 0x0000000000000000},
698 {0xde0b6b3a76400000, 0x0000000000000000},
699 {0x8ac7230489e80000, 0x0000000000000000},
700 {0xad78ebc5ac620000, 0x0000000000000000},
701 {0xd8d726b7177a8000, 0x0000000000000000},
702 {0x878678326eac9000, 0x0000000000000000},
703 {0xa968163f0a57b400, 0x0000000000000000},
704 {0xd3c21bcecceda100, 0x0000000000000000},
705 {0x84595161401484a0, 0x0000000000000000},
706 {0xa56fa5b99019a5c8, 0x0000000000000000},
707 {0xcecb8f27f4200f3a, 0x0000000000000000},
708 {0x813f3978f8940984, 0x4000000000000000},
709 {0xa18f07d736b90be5, 0x5000000000000000},
710 {0xc9f2c9cd04674ede, 0xa400000000000000},
711 {0xfc6f7c4045812296, 0x4d00000000000000},
712 {0x9dc5ada82b70b59d, 0xf020000000000000},
713 {0xc5371912364ce305, 0x6c28000000000000},
714 {0xf684df56c3e01bc6, 0xc732000000000000},
715 {0x9a130b963a6c115c, 0x3c7f400000000000},
716 {0xc097ce7bc90715b3, 0x4b9f100000000000},
717 {0xf0bdc21abb48db20, 0x1e86d40000000000},
718 {0x96769950b50d88f4, 0x1314448000000000},
719 {0xbc143fa4e250eb31, 0x17d955a000000000},
720 {0xeb194f8e1ae525fd, 0x5dcfab0800000000},
721 {0x92efd1b8d0cf37be, 0x5aa1cae500000000},
722 {0xb7abc627050305ad, 0xf14a3d9e40000000},
723 {0xe596b7b0c643c719, 0x6d9ccd05d0000000},
724 {0x8f7e32ce7bea5c6f, 0xe4820023a2000000},
725 {0xb35dbf821ae4f38b, 0xdda2802c8a800000},
726 {0xe0352f62a19e306e, 0xd50b2037ad200000},
727 {0x8c213d9da502de45, 0x4526f422cc340000},
728 {0xaf298d050e4395d6, 0x9670b12b7f410000},
729 {0xdaf3f04651d47b4c, 0x3c0cdd765f114000},
730 {0x88d8762bf324cd0f, 0xa5880a69fb6ac800},
731 {0xab0e93b6efee0053, 0x8eea0d047a457a00},
732 {0xd5d238a4abe98068, 0x72a4904598d6d880},
733 {0x85a36366eb71f041, 0x47a6da2b7f864750},
734 {0xa70c3c40a64e6c51, 0x999090b65f67d924},
735 {0xd0cf4b50cfe20765, 0xfff4b4e3f741cf6d},
736 {0x82818f1281ed449f, 0xbff8f10e7a8921a4},
737 {0xa321f2d7226895c7, 0xaff72d52192b6a0d},
738 {0xcbea6f8ceb02bb39, 0x9bf4f8a69f764490},
739 {0xfee50b7025c36a08, 0x02f236d04753d5b4},
740 {0x9f4f2726179a2245, 0x01d762422c946590},
741 {0xc722f0ef9d80aad6, 0x424d3ad2b7b97ef5},
742 {0xf8ebad2b84e0d58b, 0xd2e0898765a7deb2},
743 {0x9b934c3b330c8577, 0x63cc55f49f88eb2f},
744 {0xc2781f49ffcfa6d5, 0x3cbf6b71c76b25fb},
745 {0xf316271c7fc3908a, 0x8bef464e3945ef7a},
746 {0x97edd871cfda3a56, 0x97758bf0e3cbb5ac},
747 {0xbde94e8e43d0c8ec, 0x3d52eeed1cbea317},
748 {0xed63a231d4c4fb27, 0x4ca7aaa863ee4bdd},
749 {0x945e455f24fb1cf8, 0x8fe8caa93e74ef6a},
750 {0xb975d6b6ee39e436, 0xb3e2fd538e122b44},
751 {0xe7d34c64a9c85d44, 0x60dbbca87196b616},
752 {0x90e40fbeea1d3a4a, 0xbc8955e946fe31cd},
753 {0xb51d13aea4a488dd, 0x6babab6398bdbe41},
754 {0xe264589a4dcdab14, 0xc696963c7eed2dd1},
755 {0x8d7eb76070a08aec, 0xfc1e1de5cf543ca2},
756 {0xb0de65388cc8ada8, 0x3b25a55f43294bcb},
757 {0xdd15fe86affad912, 0x49ef0eb713f39ebe},
758 {0x8a2dbf142dfcc7ab, 0x6e3569326c784337},
759 {0xacb92ed9397bf996, 0x49c2c37f07965404},
760 {0xd7e77a8f87daf7fb, 0xdc33745ec97be906},
761 {0x86f0ac99b4e8dafd, 0x69a028bb3ded71a3},
762 {0xa8acd7c0222311bc, 0xc40832ea0d68ce0c},
763 {0xd2d80db02aabd62b, 0xf50a3fa490c30190},
764 {0x83c7088e1aab65db, 0x792667c6da79e0fa},
765 {0xa4b8cab1a1563f52, 0x577001b891185938},
766 {0xcde6fd5e09abcf26, 0xed4c0226b55e6f86},
767 {0x80b05e5ac60b6178, 0x544f8158315b05b4},
768 {0xa0dc75f1778e39d6, 0x696361ae3db1c721},
769 {0xc913936dd571c84c, 0x03bc3a19cd1e38e9},
770 {0xfb5878494ace3a5f, 0x04ab48a04065c723},
771 {0x9d174b2dcec0e47b, 0x62eb0d64283f9c76},
772 {0xc45d1df942711d9a, 0x3ba5d0bd324f8394},
773 {0xf5746577930d6500, 0xca8f44ec7ee36479},
774 {0x9968bf6abbe85f20, 0x7e998b13cf4e1ecb},
775 {0xbfc2ef456ae276e8, 0x9e3fedd8c321a67e},
776 {0xefb3ab16c59b14a2, 0xc5cfe94ef3ea101e},
777 {0x95d04aee3b80ece5, 0xbba1f1d158724a12},
778 {0xbb445da9ca61281f, 0x2a8a6e45ae8edc97},
779 {0xea1575143cf97226, 0xf52d09d71a3293bd},
780 {0x924d692ca61be758, 0x593c2626705f9c56},
781 {0xb6e0c377cfa2e12e, 0x6f8b2fb00c77836c},
782 {0xe498f455c38b997a, 0x0b6dfb9c0f956447},
783 {0x8edf98b59a373fec, 0x4724bd4189bd5eac},
784 {0xb2977ee300c50fe7, 0x58edec91ec2cb657},
785 {0xdf3d5e9bc0f653e1, 0x2f2967b66737e3ed},
786 {0x8b865b215899f46c, 0xbd79e0d20082ee74},
787 {0xae67f1e9aec07187, 0xecd8590680a3aa11},
788 {0xda01ee641a708de9, 0xe80e6f4820cc9495},
789 {0x884134fe908658b2, 0x3109058d147fdcdd},
790 {0xaa51823e34a7eede, 0xbd4b46f0599fd415},
791 {0xd4e5e2cdc1d1ea96, 0x6c9e18ac7007c91a},
792 {0x850fadc09923329e, 0x03e2cf6bc604ddb0},
793 {0xa6539930bf6bff45, 0x84db8346b786151c},
794 {0xcfe87f7cef46ff16, 0xe612641865679a63},
795 {0x81f14fae158c5f6e, 0x4fcb7e8f3f60c07e},
796 {0xa26da3999aef7749, 0xe3be5e330f38f09d},
797 {0xcb090c8001ab551c, 0x5cadf5bfd3072cc5},
798 {0xfdcb4fa002162a63, 0x73d9732fc7c8f7f6},
799 {0x9e9f11c4014dda7e, 0x2867e7fddcdd9afa},
800 {0xc646d63501a1511d, 0xb281e1fd541501b8},
801 {0xf7d88bc24209a565, 0x1f225a7ca91a4226},
802 {0x9ae757596946075f, 0x3375788de9b06958},
803 {0xc1a12d2fc3978937, 0x0052d6b1641c83ae},
804 {0xf209787bb47d6b84, 0xc0678c5dbd23a49a},
805 {0x9745eb4d50ce6332, 0xf840b7ba963646e0},
806 {0xbd176620a501fbff, 0xb650e5a93bc3d898},
807 {0xec5d3fa8ce427aff, 0xa3e51f138ab4cebe},
808 {0x93ba47c980e98cdf, 0xc66f336c36b10137},
809 {0xb8a8d9bbe123f017, 0xb80b0047445d4184},
810 {0xe6d3102ad96cec1d, 0xa60dc059157491e5},
811 {0x9043ea1ac7e41392, 0x87c89837ad68db2f},
812 {0xb454e4a179dd1877, 0x29babe4598c311fb},
813 {0xe16a1dc9d8545e94, 0xf4296dd6fef3d67a},
814 {0x8ce2529e2734bb1d, 0x1899e4a65f58660c},
815 {0xb01ae745b101e9e4, 0x5ec05dcff72e7f8f},
816 {0xdc21a1171d42645d, 0x76707543f4fa1f73},
817 {0x899504ae72497eba, 0x6a06494a791c53a8},
818 {0xabfa45da0edbde69, 0x0487db9d17636892},
819 {0xd6f8d7509292d603, 0x45a9d2845d3c42b6},
820 {0x865b86925b9bc5c2, 0x0b8a2392ba45a9b2},
821 {0xa7f26836f282b732, 0x8e6cac7768d7141e},
822 {0xd1ef0244af2364ff, 0x3207d795430cd926},
823 {0x8335616aed761f1f, 0x7f44e6bd49e807b8},
824 {0xa402b9c5a8d3a6e7, 0x5f16206c9c6209a6},
825 {0xcd036837130890a1, 0x36dba887c37a8c0f},
826 {0x802221226be55a64, 0xc2494954da2c9789},
827 {0xa02aa96b06deb0fd, 0xf2db9baa10b7bd6c},
828 {0xc83553c5c8965d3d, 0x6f92829494e5acc7},
829 {0xfa42a8b73abbf48c, 0xcb772339ba1f17f9},
830 {0x9c69a97284b578d7, 0xff2a760414536efb},
831 {0xc38413cf25e2d70d, 0xfef5138519684aba},
832 {0xf46518c2ef5b8cd1, 0x7eb258665fc25d69},
833 {0x98bf2f79d5993802, 0xef2f773ffbd97a61},
834 {0xbeeefb584aff8603, 0xaafb550ffacfd8fa},
835 {0xeeaaba2e5dbf6784, 0x95ba2a53f983cf38},
836 {0x952ab45cfa97a0b2, 0xdd945a747bf26183},
837 {0xba756174393d88df, 0x94f971119aeef9e4},
838 {0xe912b9d1478ceb17, 0x7a37cd5601aab85d},
839 {0x91abb422ccb812ee, 0xac62e055c10ab33a},
840 {0xb616a12b7fe617aa, 0x577b986b314d6009},
841 {0xe39c49765fdf9d94, 0xed5a7e85fda0b80b},
842 {0x8e41ade9fbebc27d, 0x14588f13be847307},
843 {0xb1d219647ae6b31c, 0x596eb2d8ae258fc8},
844 {0xde469fbd99a05fe3, 0x6fca5f8ed9aef3bb},
845 {0x8aec23d680043bee, 0x25de7bb9480d5854},
846 {0xada72ccc20054ae9, 0xaf561aa79a10ae6a},
847 {0xd910f7ff28069da4, 0x1b2ba1518094da04},
848 {0x87aa9aff79042286, 0x90fb44d2f05d0842},
849 {0xa99541bf57452b28, 0x353a1607ac744a53},
850 {0xd3fa922f2d1675f2, 0x42889b8997915ce8},
851 {0x847c9b5d7c2e09b7, 0x69956135febada11},
852 {0xa59bc234db398c25, 0x43fab9837e699095},
853 {0xcf02b2c21207ef2e, 0x94f967e45e03f4bb},
854 {0x8161afb94b44f57d, 0x1d1be0eebac278f5},
855 {0xa1ba1ba79e1632dc, 0x6462d92a69731732},
856 {0xca28a291859bbf93, 0x7d7b8f7503cfdcfe},
857 {0xfcb2cb35e702af78, 0x5cda735244c3d43e},
858 {0x9defbf01b061adab, 0x3a0888136afa64a7},
859 {0xc56baec21c7a1916, 0x088aaa1845b8fdd0},
860 {0xf6c69a72a3989f5b, 0x8aad549e57273d45},
861 {0x9a3c2087a63f6399, 0x36ac54e2f678864b},
862 {0xc0cb28a98fcf3c7f, 0x84576a1bb416a7dd},
863 {0xf0fdf2d3f3c30b9f, 0x656d44a2a11c51d5},
864 {0x969eb7c47859e743, 0x9f644ae5a4b1b325},
865 {0xbc4665b596706114, 0x873d5d9f0dde1fee},
866 {0xeb57ff22fc0c7959, 0xa90cb506d155a7ea},
867 {0x9316ff75dd87cbd8, 0x09a7f12442d588f2},
868 {0xb7dcbf5354e9bece, 0x0c11ed6d538aeb2f},
869 {0xe5d3ef282a242e81, 0x8f1668c8a86da5fa},
870 {0x8fa475791a569d10, 0xf96e017d694487bc},
871 {0xb38d92d760ec4455, 0x37c981dcc395a9ac},
872 {0xe070f78d3927556a, 0x85bbe253f47b1417},
873 {0x8c469ab843b89562, 0x93956d7478ccec8e},
874 {0xaf58416654a6babb, 0x387ac8d1970027b2},
875 {0xdb2e51bfe9d0696a, 0x06997b05fcc0319e},
876 {0x88fcf317f22241e2, 0x441fece3bdf81f03},
877 {0xab3c2fddeeaad25a, 0xd527e81cad7626c3},
878 {0xd60b3bd56a5586f1, 0x8a71e223d8d3b074},
879 {0x85c7056562757456, 0xf6872d5667844e49},
880 {0xa738c6bebb12d16c, 0xb428f8ac016561db},
881 {0xd106f86e69d785c7, 0xe13336d701beba52},
882 {0x82a45b450226b39c, 0xecc0024661173473},
883 {0xa34d721642b06084, 0x27f002d7f95d0190},
884 {0xcc20ce9bd35c78a5, 0x31ec038df7b441f4},
885 {0xff290242c83396ce, 0x7e67047175a15271},
886 {0x9f79a169bd203e41, 0x0f0062c6e984d386},
887 {0xc75809c42c684dd1, 0x52c07b78a3e60868},
888 {0xf92e0c3537826145, 0xa7709a56ccdf8a82},
889 {0x9bbcc7a142b17ccb, 0x88a66076400bb691},
890 {0xc2abf989935ddbfe, 0x6acff893d00ea435},
891 {0xf356f7ebf83552fe, 0x0583f6b8c4124d43},
892 {0x98165af37b2153de, 0xc3727a337a8b704a},
893 {0xbe1bf1b059e9a8d6, 0x744f18c0592e4c5c},
894 {0xeda2ee1c7064130c, 0x1162def06f79df73},
895 {0x9485d4d1c63e8be7, 0x8addcb5645ac2ba8},
896 {0xb9a74a0637ce2ee1, 0x6d953e2bd7173692},
897 {0xe8111c87c5c1ba99, 0xc8fa8db6ccdd0437},
898 {0x910ab1d4db9914a0, 0x1d9c9892400a22a2},
899 {0xb54d5e4a127f59c8, 0x2503beb6d00cab4b},
900 {0xe2a0b5dc971f303a, 0x2e44ae64840fd61d},
901 {0x8da471a9de737e24, 0x5ceaecfed289e5d2},
902 {0xb10d8e1456105dad, 0x7425a83e872c5f47},
903 {0xdd50f1996b947518, 0xd12f124e28f77719},
904 {0x8a5296ffe33cc92f, 0x82bd6b70d99aaa6f},
905 {0xace73cbfdc0bfb7b, 0x636cc64d1001550b},
906 {0xd8210befd30efa5a, 0x3c47f7e05401aa4e},
907 {0x8714a775e3e95c78, 0x65acfaec34810a71},
908 {0xa8d9d1535ce3b396, 0x7f1839a741a14d0d},
909 {0xd31045a8341ca07c, 0x1ede48111209a050},
910 {0x83ea2b892091e44d, 0x934aed0aab460432},
911 {0xa4e4b66b68b65d60, 0xf81da84d5617853f},
912 {0xce1de40642e3f4b9, 0x36251260ab9d668e},
913 {0x80d2ae83e9ce78f3, 0xc1d72b7c6b426019},
914 {0xa1075a24e4421730, 0xb24cf65b8612f81f},
915 {0xc94930ae1d529cfc, 0xdee033f26797b627},
916 {0xfb9b7cd9a4a7443c, 0x169840ef017da3b1},
917 {0x9d412e0806e88aa5, 0x8e1f289560ee864e},
918 {0xc491798a08a2ad4e, 0xf1a6f2bab92a27e2},
919 {0xf5b5d7ec8acb58a2, 0xae10af696774b1db},
920 {0x9991a6f3d6bf1765, 0xacca6da1e0a8ef29},
921 {0xbff610b0cc6edd3f, 0x17fd090a58d32af3},
922 {0xeff394dcff8a948e, 0xddfc4b4cef07f5b0},
923 {0x95f83d0a1fb69cd9, 0x4abdaf101564f98e},
924 {0xbb764c4ca7a4440f, 0x9d6d1ad41abe37f1},
925 {0xea53df5fd18d5513, 0x84c86189216dc5ed},
926 {0x92746b9be2f8552c, 0x32fd3cf5b4e49bb4},
927 {0xb7118682dbb66a77, 0x3fbc8c33221dc2a1},
928 {0xe4d5e82392a40515, 0x0fabaf3feaa5334a},
929 {0x8f05b1163ba6832d, 0x29cb4d87f2a7400e},
930 {0xb2c71d5bca9023f8, 0x743e20e9ef511012},
931 {0xdf78e4b2bd342cf6, 0x914da9246b255416},
932 {0x8bab8eefb6409c1a, 0x1ad089b6c2f7548e},
933 {0xae9672aba3d0c320, 0xa184ac2473b529b1},
934 {0xda3c0f568cc4f3e8, 0xc9e5d72d90a2741e},
935 {0x8865899617fb1871, 0x7e2fa67c7a658892},
936 {0xaa7eebfb9df9de8d, 0xddbb901b98feeab7},
937 {0xd51ea6fa85785631, 0x552a74227f3ea565},
938 {0x8533285c936b35de, 0xd53a88958f87275f},
939 {0xa67ff273b8460356, 0x8a892abaf368f137},
940 {0xd01fef10a657842c, 0x2d2b7569b0432d85},
941 {0x8213f56a67f6b29b, 0x9c3b29620e29fc73},
942 {0xa298f2c501f45f42, 0x8349f3ba91b47b8f},
943 {0xcb3f2f7642717713, 0x241c70a936219a73},
944 {0xfe0efb53d30dd4d7, 0xed238cd383aa0110},
945 {0x9ec95d1463e8a506, 0xf4363804324a40aa},
946 {0xc67bb4597ce2ce48, 0xb143c6053edcd0d5},
947 {0xf81aa16fdc1b81da, 0xdd94b7868e94050a},
948 {0x9b10a4e5e9913128, 0xca7cf2b4191c8326},
949 {0xc1d4ce1f63f57d72, 0xfd1c2f611f63a3f0},
950 {0xf24a01a73cf2dccf, 0xbc633b39673c8cec},
951 {0x976e41088617ca01, 0xd5be0503e085d813},
952 {0xbd49d14aa79dbc82, 0x4b2d8644d8a74e18},
953 {0xec9c459d51852ba2, 0xddf8e7d60ed1219e},
954 {0x93e1ab8252f33b45, 0xcabb90e5c942b503},
955 {0xb8da1662e7b00a17, 0x3d6a751f3b936243},
956 {0xe7109bfba19c0c9d, 0x0cc512670a783ad4},
957 {0x906a617d450187e2, 0x27fb2b80668b24c5},
958 {0xb484f9dc9641e9da, 0xb1f9f660802dedf6},
959 {0xe1a63853bbd26451, 0x5e7873f8a0396973},
960 {0x8d07e33455637eb2, 0xdb0b487b6423e1e8},
961 {0xb049dc016abc5e5f, 0x91ce1a9a3d2cda62},
962 {0xdc5c5301c56b75f7, 0x7641a140cc7810fb},
963 {0x89b9b3e11b6329ba, 0xa9e904c87fcb0a9d},
964 {0xac2820d9623bf429, 0x546345fa9fbdcd44},
965 {0xd732290fbacaf133, 0xa97c177947ad4095},
966 {0x867f59a9d4bed6c0, 0x49ed8eabcccc485d},
967 {0xa81f301449ee8c70, 0x5c68f256bfff5a74},
968 {0xd226fc195c6a2f8c, 0x73832eec6fff3111},
969 {0x83585d8fd9c25db7, 0xc831fd53c5ff7eab},
970 {0xa42e74f3d032f525, 0xba3e7ca8b77f5e55},
971 {0xcd3a1230c43fb26f, 0x28ce1bd2e55f35eb},
972 {0x80444b5e7aa7cf85, 0x7980d163cf5b81b3},
973 {0xa0555e361951c366, 0xd7e105bcc332621f},
974 {0xc86ab5c39fa63440, 0x8dd9472bf3fefaa7},
975 {0xfa856334878fc150, 0xb14f98f6f0feb951},
976 {0x9c935e00d4b9d8d2, 0x6ed1bf9a569f33d3},
977 {0xc3b8358109e84f07, 0x0a862f80ec4700c8},
978 {0xf4a642e14c6262c8, 0xcd27bb612758c0fa},
979 {0x98e7e9cccfbd7dbd, 0x8038d51cb897789c},
980 {0xbf21e44003acdd2c, 0xe0470a63e6bd56c3},
981 {0xeeea5d5004981478, 0x1858ccfce06cac74},
982 {0x95527a5202df0ccb, 0x0f37801e0c43ebc8},
983 {0xbaa718e68396cffd, 0xd30560258f54e6ba},
984 {0xe950df20247c83fd, 0x47c6b82ef32a2069},
985 {0x91d28b7416cdd27e, 0x4cdc331d57fa5441},
986 {0xb6472e511c81471d, 0xe0133fe4adf8e952},
987 {0xe3d8f9e563a198e5, 0x58180fddd97723a6},
988 {0x8e679c2f5e44ff8f, 0x570f09eaa7ea7648},
989 {0xb201833b35d63f73, 0x2cd2cc6551e513da},
990 {0xde81e40a034bcf4f, 0xf8077f7ea65e58d1},
991 {0x8b112e86420f6191, 0xfb04afaf27faf782},
992 {0xadd57a27d29339f6, 0x79c5db9af1f9b563},
993 {0xd94ad8b1c7380874, 0x18375281ae7822bc},
994 {0x87cec76f1c830548, 0x8f2293910d0b15b5},
995 {0xa9c2794ae3a3c69a, 0xb2eb3875504ddb22},
996 {0xd433179d9c8cb841, 0x5fa60692a46151eb},
997 {0x849feec281d7f328, 0xdbc7c41ba6bcd333},
998 {0xa5c7ea73224deff3, 0x12b9b522906c0800},
999 {0xcf39e50feae16bef, 0xd768226b34870a00},
1000 {0x81842f29f2cce375, 0xe6a1158300d46640},
1001 {0xa1e53af46f801c53, 0x60495ae3c1097fd0},
1002 {0xca5e89b18b602368, 0x385bb19cb14bdfc4},
1003 {0xfcf62c1dee382c42, 0x46729e03dd9ed7b5},
1004 {0x9e19db92b4e31ba9, 0x6c07a2c26a8346d1},
1005 {0xc5a05277621be293, 0xc7098b7305241885},
1006 {0xf70867153aa2db38, 0xb8cbee4fc66d1ea7}
1008 {0xff77b1fcbebcdc4f, 0x25e8e89c13bb0f7b},
1009 {0xce5d73ff402d98e3, 0xfb0a3d212dc81290},
1010 {0xa6b34ad8c9dfc06f, 0xf42faa48c0ea481f},
1011 {0x86a8d39ef77164bc, 0xae5dff9c02033198},
1012 {0xd98ddaee19068c76, 0x3badd624dd9b0958},
1013 {0xafbd2350644eeacf, 0xe5d1929ef90898fb},
1014 {0x8df5efabc5979c8f, 0xca8d3ffa1ef463c2},
1015 {0xe55990879ddcaabd, 0xcc420a6a101d0516},
1016 {0xb94470938fa89bce, 0xf808e40e8d5b3e6a},
1017 {0x95a8637627989aad, 0xdde7001379a44aa9},
1018 {0xf1c90080baf72cb1, 0x5324c68b12dd6339},
1019 {0xc350000000000000, 0x0000000000000000},
1020 {0x9dc5ada82b70b59d, 0xf020000000000000},
1021 {0xfee50b7025c36a08, 0x02f236d04753d5b4},
1022 {0xcde6fd5e09abcf26, 0xed4c0226b55e6f86},
1023 {0xa6539930bf6bff45, 0x84db8346b786151c},
1024 {0x865b86925b9bc5c2, 0x0b8a2392ba45a9b2},
1025 {0xd910f7ff28069da4, 0x1b2ba1518094da04},
1026 {0xaf58416654a6babb, 0x387ac8d1970027b2},
1027 {0x8da471a9de737e24, 0x5ceaecfed289e5d2},
1028 {0xe4d5e82392a40515, 0x0fabaf3feaa5334a},
1029 {0xb8da1662e7b00a17, 0x3d6a751f3b936243},
1030 {0x95527a5202df0ccb, 0x0f37801e0c43ebc8}
1034 #if !FMT_USE_FULL_CACHE_DRAGONBOX 1035 template <
typename T>
1037 0x0000000000000001, 0x0000000000000005, 0x0000000000000019,
1038 0x000000000000007d, 0x0000000000000271, 0x0000000000000c35,
1039 0x0000000000003d09, 0x000000000001312d, 0x000000000005f5e1,
1040 0x00000000001dcd65, 0x00000000009502f9, 0x0000000002e90edd,
1041 0x000000000e8d4a51, 0x0000000048c27395, 0x000000016bcc41e9,
1042 0x000000071afd498d, 0x0000002386f26fc1, 0x000000b1a2bc2ec5,
1043 0x000003782dace9d9, 0x00001158e460913d, 0x000056bc75e2d631,
1044 0x0001b1ae4d6e2ef5, 0x000878678326eac9, 0x002a5a058fc295ed,
1045 0x00d3c21bcecceda1, 0x0422ca8b0a00a425, 0x14adf4b7320334b9};
1047 template <
typename T>
1049 0x50001400, 0x54044100, 0x54014555, 0x55954415, 0x54115555, 0x00000001,
1050 0x50000000, 0x00104000, 0x54010004, 0x05004001, 0x55555544, 0x41545555,
1051 0x54040551, 0x15445545, 0x51555514, 0x10000015, 0x00101100, 0x01100015,
1052 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x04450514, 0x45414110,
1053 0x55555145, 0x50544050, 0x15040155, 0x11054140, 0x50111514, 0x11451454,
1054 0x00400541, 0x00000000, 0x55555450, 0x10056551, 0x10054011, 0x55551014,
1055 0x69514555, 0x05151109, 0x00155555};
1058 template <
typename T>
1060 template <
typename T>
1065 template <
typename T>
1067 template <
typename T>
1070 template <
typename T>
struct bits {
1072 static_cast<int>(
sizeof(T) * std::numeric_limits<unsigned char>::digits);
1091 template <
typename Float>
1093 sizeof(Float) ==
sizeof(uint32_t)>;
1103 std::numeric_limits<double>::digits - 1;
1105 1ULL << double_significand_size;
1110 fp(uint64_t f_val,
int e_val) : f(f_val), e(e_val) {}
1114 template <
typename Double>
explicit fp(Double
d) { assign(d); }
1120 using limits = std::numeric_limits<Float>;
1121 const int float_significand_size = limits::digits - 1;
1122 const int exponent_size =
1124 const uint64_t float_implicit_bit = 1ULL << float_significand_size;
1125 const uint64_t significand_mask = float_implicit_bit - 1;
1126 const uint64_t
exponent_mask = (~0ULL >> 1) & ~significand_mask;
1127 const int exponent_bias = (1 << exponent_size) - limits::max_exponent - 1;
1128 constexpr
bool is_double =
sizeof(Float) ==
sizeof(uint64_t);
1130 f = u & significand_mask;
1132 static_cast<int>((u &
exponent_mask) >> float_significand_size);
1135 bool is_predecessor_closer = f == 0 && biased_e > 1;
1137 f += float_implicit_bit;
1140 e = biased_e - exponent_bias - float_significand_size;
1141 return is_predecessor_closer;
1155 while ((value.
f & shifted_implicit_bit) == 0) {
1172 auto product =
static_cast<__uint128_t
>(lhs) * rhs;
1173 auto f =
static_cast<uint64_t
>(product >> 64);
1174 return (static_cast<uint64_t>(product) & (1ULL << 63)) != 0 ? f + 1 : f;
1177 uint64_t mask = (1ULL << 32) - 1;
1178 uint64_t a = lhs >> 32, b = lhs & mask;
1179 uint64_t
c = rhs >> 32, d = rhs & mask;
1180 uint64_t ac = a *
c, bc = b *
c, ad = a *
d, bd = b *
d;
1182 uint64_t mid = (bd >> 32) + (ad & mask) + (bc & mask) + (1U << 31);
1183 return ac + (ad >> 32) + (bc >> 32) + (mid >> 32);
1192 const int shift = 32;
1194 int index =
static_cast<int>(
1196 ((int64_t(1) << shift) - 1))
1200 const int first_dec_exp = -348;
1202 const int dec_exp_step = 8;
1203 index = (index - first_dec_exp - 1) / dec_exp_step + 1;
1204 pow10_exponent = first_dec_exp + index * dec_exp_step;
1216 explicit operator uint32_t()
const {
return static_cast<uint32_t
>(
lower); }
1220 if (lower < n) ++
upper;
1225 lower = (upper << 32) | (lower >> 32);
1236 enum { bigits_capacity = 32 };
1250 borrow =
static_cast<bigit>(
result >> (bigit_bits * 2 - 1));
1254 int num_bigits =
static_cast<int>(bigits_.
size()) - 1;
1255 while (num_bigits > 0 && (*
this)[num_bigits] == 0) --num_bigits;
1264 int i = other.
exp_ - exp_;
1265 for (
size_t j = 0, n = other.
bigits_.
size(); j != n; ++i, ++j)
1266 subtract_bigits(i, other.
bigits_[j], borrow);
1267 while (borrow > 0) subtract_bigits(i, 0, borrow);
1268 remove_leading_zeros();
1274 for (
size_t i = 0, n = bigits_.
size(); i < n; ++i) {
1277 carry =
static_cast<bigit>(result >> bigit_bits);
1279 if (carry != 0) bigits_.
push_back(carry);
1287 for (
size_t i = 0, n = bigits_.
size(); i < n; ++i) {
1290 bigits_[i] * upper + (result >> bigit_bits) + (carry >> bigit_bits);
1293 while (carry != 0) {
1295 carry >>= bigit_bits;
1305 void operator=(
const bigint&) =
delete;
1316 size_t num_bigits = 0;
1318 bigits_[num_bigits++] = n & ~
bigit(0);
1321 bigits_.
resize(num_bigits);
1329 exp_ += shift / bigit_bits;
1330 shift %= bigit_bits;
1331 if (shift == 0)
return *
this;
1333 for (
size_t i = 0, n = bigits_.
size(); i < n; ++i) {
1334 bigit c = bigits_[i] >> (bigit_bits - shift);
1335 bigits_[i] = (bigits_[i] << shift) + carry;
1338 if (carry != 0) bigits_.
push_back(carry);
1350 if (num_lhs_bigits != num_rhs_bigits)
1351 return num_lhs_bigits > num_rhs_bigits ? 1 : -1;
1355 if (end < 0) end = 0;
1356 for (; i >= end; --i, --j) {
1357 bigit lhs_bigit = lhs[i], rhs_bigit = rhs[j];
1358 if (lhs_bigit != rhs_bigit)
return lhs_bigit > rhs_bigit ? 1 : -1;
1360 if (i != j)
return i > j ? 1 : -1;
1369 if (max_lhs_bigits + 1 < num_rhs_bigits)
return -1;
1370 if (max_lhs_bigits > num_rhs_bigits)
return 1;
1371 auto get_bigit = [](
const bigint& n,
int i) ->
bigit {
1376 for (
int i = num_rhs_bigits - 1; i >= min_exp; --i) {
1378 static_cast<double_bigit>(get_bigit(lhs1, i)) + get_bigit(lhs2, i);
1379 bigit rhs_bigit = get_bigit(rhs, i);
1380 if (sum > rhs_bigit + borrow)
return 1;
1381 borrow = rhs_bigit + borrow - sum;
1382 if (borrow > 1)
return -1;
1383 borrow <<= bigit_bits;
1385 return borrow != 0 ? -1 : 0;
1391 if (exp == 0)
return assign(1);
1394 while (exp >= bitmask) bitmask <<= 1;
1400 while (bitmask != 0) {
1402 if ((exp & bitmask) != 0) *
this *= 5;
1410 int num_bigits =
static_cast<int>(bigits_.
size());
1411 int num_result_bigits = 2 * num_bigits;
1414 auto sum = accumulator_t();
1415 for (
int bigit_index = 0; bigit_index < num_bigits; ++bigit_index) {
1418 for (
int i = 0, j = bigit_index; j >= 0; ++i, --j) {
1422 (*this)[bigit_index] =
static_cast<bigit>(sum);
1426 for (
int bigit_index = num_bigits; bigit_index < num_result_bigits;
1428 for (
int j = num_bigits - 1, i = bigit_index - j; i < num_bigits;)
1429 sum += static_cast<double_bigit>(n[i++]) * n[j--];
1430 (*this)[bigit_index] =
static_cast<bigit>(sum);
1433 --num_result_bigits;
1434 remove_leading_zeros();
1441 int exp_difference = exp_ - other.
exp_;
1442 if (exp_difference <= 0)
return;
1443 int num_bigits =
static_cast<int>(bigits_.
size());
1445 for (
int i = num_bigits - 1, j = i + exp_difference; i >= 0; --i, --j)
1446 bigits_[j] = bigits_[i];
1447 std::uninitialized_fill_n(bigits_.
data(), exp_difference, 0);
1448 exp_ -= exp_difference;
1455 if (compare(*
this, divisor) < 0)
return 0;
1460 subtract_aligned(divisor);
1462 }
while (compare(*
this, divisor) >= 0);
1479 if (remainder <= divisor - remainder && error * 2 <= divisor - remainder * 2)
1482 if (remainder >= error &&
1483 remainder - error >= divisor - (remainder - error)) {
1500 template <
typename Handler>
1502 int&
exp, Handler& handler) {
1503 const fp one(1ULL << -value.
e, value.
e);
1507 auto integral =
static_cast<uint32_t
>(value.
f >> -one.
e);
1511 uint64_t fractional = value.
f & (one.
f - 1);
1515 value.
f / 10, error * 10, exp);
1520 auto divmod_integral = [&](uint32_t divisor) {
1521 digit = integral / divisor;
1522 integral %= divisor;
1528 divmod_integral(1000000000);
1531 divmod_integral(100000000);
1534 divmod_integral(10000000);
1537 divmod_integral(1000000);
1540 divmod_integral(100000);
1543 divmod_integral(10000);
1546 divmod_integral(1000);
1549 divmod_integral(100);
1552 divmod_integral(10);
1559 FMT_ASSERT(
false,
"invalid number of digits");
1562 auto remainder = (
static_cast<uint64_t
>(integral) << -one.
e) + fractional;
1563 result = handler.on_digit(static_cast<char>(
'0' + digit),
1572 char digit =
static_cast<char>(
'0' + (fractional >> -one.
e));
1573 fractional &= one.
f - 1;
1575 result = handler.on_digit(digit, one.
f, fractional, error, exp,
false);
1594 precision += exp + exp10;
1606 uint64_t error,
int,
bool integral) {
1608 buf[size++] =
digit;
1615 if (error >= divisor || error >= divisor - error)
return digits::error;
1623 for (
int i = size - 1; i > 0 && buf[i] >
'9'; --i) {
1629 if (fixed) buf[size++] =
'0';
1637 namespace dragonbox {
1642 return static_cast<uint128_t>(x) * static_cast<uint128_t>(y);
1643 #elif defined(_MSC_VER) && defined(_M_X64) 1645 result.
low_ = _umul128(x, y, &result.
high_);
1648 const uint64_t mask = (uint64_t(1) << 32) - uint64_t(1);
1650 uint64_t a = x >> 32;
1651 uint64_t b = x & mask;
1652 uint64_t
c = y >> 32;
1653 uint64_t d = y & mask;
1655 uint64_t ac = a *
c;
1656 uint64_t bc = b *
c;
1657 uint64_t ad = a *
d;
1658 uint64_t bd = b *
d;
1660 uint64_t intermediate = (bd >> 32) + (ad & mask) + (bc & mask);
1662 return {ac + (intermediate >> 32) + (ad >> 32) + (bc >> 32),
1663 (intermediate << 32) + (bd & mask)};
1671 auto p =
static_cast<uint128_t>(x) * static_cast<uint128_t>(y);
1672 return static_cast<uint64_t
>(p >> 64);
1673 #elif defined(_MSC_VER) && defined(_M_X64) 1674 return __umulh(x, y);
1699 uint64_t g01 = x * y.high();
1713 FMT_ASSERT(e <= 1700 && e >= -1700,
"too large exponent");
1714 const int shift = 22;
1721 FMT_ASSERT(e <= 1233 && e >= -1233,
"too large exponent");
1722 const uint64_t log2_10_integer_part = 3;
1723 const uint64_t log2_10_fractional_digits = 0x5269e12f346e2bf9;
1724 const int shift_amount = 19;
1725 return (e * static_cast<int>(
1726 (log2_10_integer_part << shift_amount) |
1727 (log2_10_fractional_digits >> (64 - shift_amount)))) >>
1731 FMT_ASSERT(e <= 1700 && e >= -1700,
"too large exponent");
1732 const uint64_t log10_4_over_3_fractional_digits = 0x1ffbfc2bbc780375;
1733 const int shift_amount = 22;
1735 (64 - shift_amount)) -
1736 static_cast<int>(log10_4_over_3_fractional_digits >>
1737 (64 - shift_amount))) >>
1745 #ifdef FMT_BUILTIN_CTZ 1746 return FMT_BUILTIN_CTZ(x) >=
exp;
1748 return exp < num_bits<uint32_t>() && x == ((x >>
exp) <<
exp);
1754 #ifdef FMT_BUILTIN_CTZLL 1755 return FMT_BUILTIN_CTZLL(x) >=
exp;
1757 return exp < num_bits<uint64_t>()) && x == ((x >>
exp) <<
exp);
1778 static constexpr
struct {
1779 uint32_t magic_number;
1780 int bits_for_comparison;
1783 } infos[] = {{0xcccd, 16, 0x3333, 18}, {0xa429, 8, 0x0a, 20}};
1784 constexpr
auto info = infos[N - 1];
1785 n *= info.magic_number;
1786 const uint32_t comparison_mask = (1u << info.bits_for_comparison) - 1;
1787 bool result = (n & comparison_mask) <= info.threshold;
1788 n >>= info.shift_amount;
1795 static constexpr
struct {
1796 uint32_t magic_number;
1798 uint32_t divisor_times_10;
1799 } infos[] = {{0xcccd, 19, 100}, {0xa3d8, 22, 1000}};
1800 constexpr
auto info = infos[N - 1];
1801 FMT_ASSERT(n <= info.divisor_times_10,
"n is too large");
1802 return n * info.magic_number >> info.shift_amount;
1823 "k is out of range");
1834 return static_cast<uint32_t
>(cache >> (64 - 1 - beta_minus_1));
1843 return ((
umul96_lower64(two_f, cache) >> (64 - beta_minus_1)) & 1) != 0;
1862 return (static_cast<carrier_uint>(
1876 "k is out of range");
1878 #if FMT_USE_FULL_CACHE_DRAGONBOX 1882 static const int compression_ratio = 27;
1887 int offset = k - kb;
1892 if (offset == 0)
return base_cache;
1896 FMT_ASSERT(alpha > 0 && alpha < 64,
"shifting error detected");
1902 umul128(base_cache.
low() - (kb < 0 ? 1 : 0), pow5);
1904 recovered_cache += middle_low.
high();
1906 uint64_t high_to_middle = recovered_cache.
high() << (64 - alpha);
1907 uint64_t middle_to_low = recovered_cache.
low() << (64 - alpha);
1911 ((middle_low.low() >> alpha) | middle_to_low)};
1913 if (kb < 0) recovered_cache += 1;
1916 int error_idx = (k - float_info<double>::min_k) / 16;
1918 ((k - float_info<double>::min_k) % 16) * 2) &
1923 return {recovered_cache.
high(), recovered_cache.
low() + error};
1934 return static_cast<uint32_t
>(cache.high() >> (64 - 1 - beta_minus_1));
1948 return (cache.high() -
1955 return (cache.high() +
1962 return ((cache.high() >>
1974 T>::case_shorter_interval_left_endpoint_lower_threshold &&
2004 #ifdef FMT_BUILTIN_CTZ 2005 int t = FMT_BUILTIN_CTZ(n);
2012 const uint32_t mod_inv1 = 0xcccccccd;
2013 const uint32_t max_quotient1 = 0x33333333;
2014 const uint32_t mod_inv2 = 0xc28f5c29;
2015 const uint32_t max_quotient2 = 0x0a3d70a3;
2018 for (; s < t - 1; s += 2) {
2019 if (n * mod_inv2 > max_quotient2)
break;
2022 if (s < t && n * mod_inv1 <= max_quotient1) {
2032 #ifdef FMT_BUILTIN_CTZLL 2033 int t = FMT_BUILTIN_CTZLL(n);
2043 const uint32_t mod_inv1 = 0xcccccccd;
2044 const uint32_t max_quotient1 = 0x33333333;
2045 const uint64_t mod_inv8 = 0xc767074b22e90e21;
2046 const uint64_t max_quotient8 = 0x00002af31dc46118;
2050 auto quotient_candidate = n * mod_inv8;
2052 if (quotient_candidate <= max_quotient8) {
2053 auto quotient =
static_cast<uint32_t
>(quotient_candidate >> 8);
2056 for (; s < t; ++s) {
2057 if (quotient * mod_inv1 > max_quotient1)
break;
2058 quotient *= mod_inv1;
2060 quotient >>= (s - 8);
2067 auto quotient =
static_cast<uint32_t
>(n / 100000000);
2068 auto remainder =
static_cast<uint32_t
>(n - 100000000 * quotient);
2070 if (t == 0 || remainder * mod_inv1 > max_quotient1) {
2073 remainder *= mod_inv1;
2075 if (t == 1 || remainder * mod_inv1 > max_quotient1) {
2076 n = (remainder >> 1) + quotient * 10000000ull;
2079 remainder *= mod_inv1;
2081 if (t == 2 || remainder * mod_inv1 > max_quotient1) {
2082 n = (remainder >> 2) + quotient * 1000000ull;
2085 remainder *= mod_inv1;
2087 if (t == 3 || remainder * mod_inv1 > max_quotient1) {
2088 n = (remainder >> 3) + quotient * 100000ull;
2091 remainder *= mod_inv1;
2093 if (t == 4 || remainder * mod_inv1 > max_quotient1) {
2094 n = (remainder >> 4) + quotient * 10000ull;
2097 remainder *= mod_inv1;
2099 if (t == 5 || remainder * mod_inv1 > max_quotient1) {
2100 n = (remainder >> 5) + quotient * 1000ull;
2103 remainder *= mod_inv1;
2105 if (t == 6 || remainder * mod_inv1 > max_quotient1) {
2106 n = (remainder >> 6) + quotient * 100ull;
2109 remainder *= mod_inv1;
2111 n = (remainder >> 7) + quotient * 10ull;
2129 cache, beta_minus_1);
2131 cache, beta_minus_1);
2134 if (!is_left_endpoint_integer_shorter_interval<T>(exponent)) ++xi;
2149 cache, beta_minus_1);
2164 template <
typename T>
2170 auto br =
bit_cast<carrier_uint>(x);
2173 const carrier_uint significand_mask =
2175 carrier_uint significand = (br & significand_mask);
2179 if (exponent != 0) {
2183 if (significand == 0)
return shorter_interval_case<T>(exponent);
2186 (
static_cast<carrier_uint
>(1) << float_info<T>::significand_bits);
2189 if (significand == 0)
return {0, 0};
2193 const bool include_left_endpoint = (significand % 2 == 0);
2194 const bool include_right_endpoint = include_left_endpoint;
2204 const carrier_uint two_fc = significand << 1;
2205 const carrier_uint two_fr = two_fc | 1;
2206 const carrier_uint zi =
2219 goto small_divisor_case_label;
2220 }
else if (r < deltai) {
2222 if (r == 0 && !include_right_endpoint &&
2223 is_endpoint_integer<T>(two_fr, exponent, minus_k)) {
2226 goto small_divisor_case_label;
2232 const carrier_uint two_fl = two_fc - 1;
2233 if ((!include_left_endpoint ||
2234 !is_endpoint_integer<T>(two_fl, exponent, minus_k)) &&
2236 goto small_divisor_case_label;
2247 small_divisor_case_label:
2249 ret_value.
exponent = minus_k + float_info<T>::kappa;
2251 const uint32_t mask = (1u << float_info<T>::kappa) - 1;
2255 if ((dist & mask) == 0) {
2256 const bool approx_y_parity =
2258 dist >>= float_info<T>::kappa;
2276 if (is_center_integer<T>(two_fc, exponent, minus_k)) {
2293 small_division_by_pow10<float_info<T>::kappa>(dist);
2302 template <
typename Double>
2315 const bool is_predecessor_closer =
2316 binary32 ? value.
assign(static_cast<float>(d)) : value.
assign(d);
2317 int shift = is_predecessor_closer ? 2 : 1;
2318 uint64_t significand = value.
f << shift;
2320 numerator.
assign(significand);
2321 numerator <<= value.
e;
2326 upper_store <<= value.
e + 1;
2327 upper = &upper_store;
2331 }
else if (exp10 < 0) {
2335 upper_store.
assign(numerator);
2337 upper = &upper_store;
2339 numerator *= significand;
2341 denominator <<= shift - value.
e;
2343 numerator.
assign(significand);
2345 denominator <<= shift - value.
e;
2348 upper_store.
assign(1ULL << 1);
2349 upper = &upper_store;
2353 if (num_digits < 0) {
2355 if (!upper) upper = &
lower;
2356 bool even = (value.
f & 1) == 0;
2361 bool low = compare(numerator, lower) - even < 0;
2363 bool high = add_compare(numerator, *upper, denominator) + even > 0;
2364 data[num_digits++] =
static_cast<char>(
'0' +
digit);
2367 ++data[num_digits - 1];
2369 int result = add_compare(numerator, numerator, denominator);
2371 if (result > 0 || (result == 0 && (digit % 2) != 0))
2372 ++data[num_digits - 1];
2375 exp10 -= num_digits - 1;
2380 if (upper != &lower) *upper *= 10;
2384 exp10 -= num_digits - 1;
2385 if (num_digits == 0) {
2388 buf[0] = add_compare(numerator, numerator, denominator) > 0 ?
'1' :
'0';
2392 for (
int i = 0; i < num_digits - 1; ++i) {
2394 buf[i] =
static_cast<char>(
'0' +
digit);
2398 auto result = add_compare(numerator, numerator, denominator);
2401 const auto overflow =
'0' + 10;
2402 buf[num_digits - 1] = overflow;
2404 for (
int i = num_digits - 1; i > 0 && buf[i] == overflow; --i) {
2408 if (buf[0] == overflow) {
2416 buf[num_digits - 1] =
static_cast<char>(
'0' +
digit);
2419 template <
typename T>
2426 if (precision <= 0 || !fixed) {
2431 std::uninitialized_fill_n(buf.
data(), precision,
'0');
2437 if (precision < 0) {
2442 return dec.exponent;
2446 return dec.exponent;
2452 const int min_exp = -60;
2453 int cached_exp10 = 0;
2457 normalized = normalized * cached_pow;
2460 const int max_double_digits = 767;
2461 if (precision > max_double_digits) precision = max_double_digits;
2464 exp += handler.size - cached_exp10 - 1;
2467 exp += handler.exp10;
2472 auto num_digits = buf.
size();
2473 while (num_digits > 0 && buf[num_digits - 1] ==
'0') {
2482 template <
typename T>
2493 precision = (precision >= 0 ? precision : 6) - 1;
2496 enum { max_format_size = 7 };
2497 char format[max_format_size];
2498 char* format_ptr =
format;
2499 *format_ptr++ =
'%';
2501 if (precision >= 0) {
2502 *format_ptr++ =
'.';
2503 *format_ptr++ =
'*';
2505 if (std::is_same<T, long double>()) *format_ptr++ =
'L';
2508 : (specs.
upper ?
'A' :
'a');
2512 auto offset = buf.
size();
2514 auto begin = buf.
data() + offset;
2515 auto capacity = buf.
capacity() - offset;
2517 if (precision > 100000)
2518 throw std::runtime_error(
2519 "fuzz mode - avoid large allocation inside snprintf");
2523 int (*snprintf_ptr)(
char*, size_t,
const char*, ...) =
FMT_SNPRINTF;
2524 int result = precision >= 0
2525 ? snprintf_ptr(begin, capacity, format, precision, value)
2526 : snprintf_ptr(begin, capacity, format, value);
2534 if (size >= capacity) {
2538 auto is_digit = [](
char c) {
return c >=
'0' &&
c <=
'9'; };
2540 if (precision == 0) {
2545 auto end = begin + size, p = end;
2548 }
while (is_digit(*p));
2549 int fraction_size =
static_cast<int>(end - p - 1);
2550 std::memmove(p, p + 1,
to_unsigned(fraction_size));
2552 return -fraction_size;
2559 auto end = begin + size, exp_pos = end;
2562 }
while (*exp_pos !=
'e');
2563 char sign = exp_pos[1];
2564 assert(sign ==
'+' || sign ==
'-');
2566 auto p = exp_pos + 2;
2569 exp = exp * 10 + (*p++ -
'0');
2571 if (sign ==
'-') exp = -
exp;
2572 int fraction_size = 0;
2573 if (exp_pos != begin + 1) {
2575 auto fraction_end = exp_pos - 1;
2576 while (*fraction_end ==
'0') --fraction_end;
2578 fraction_size =
static_cast<int>(fraction_end - begin - 1);
2579 std::memmove(begin + 1, begin + 2,
to_unsigned(fraction_size));
2582 return exp - fraction_size;
2604 static const char lengths[] = {1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
2605 1, 1, 1, 1, 1, 0, 0, 0, 0, 0, 0,
2606 0, 0, 2, 2, 2, 2, 3, 3, 4, 0};
2607 static const int masks[] = {0x00, 0x7f, 0x1f, 0x0f, 0x07};
2608 static const uint32_t mins[] = {4194304, 0, 128, 2048, 65536};
2609 static const int shiftc[] = {0, 18, 12, 6, 0};
2610 static const int shifte[] = {0, 6, 4, 2, 0};
2612 auto s =
reinterpret_cast<const unsigned char*
>(buf);
2613 int len = lengths[s[0] >> 3];
2618 const char*
next = buf + len + !
len;
2622 *c = uint32_t(s[0] & masks[len]) << 18;
2623 *c |= uint32_t(s[1] & 0x3f) << 12;
2624 *c |= uint32_t(s[2] & 0x3f) << 6;
2625 *c |= uint32_t(s[3] & 0x3f) << 0;
2629 *e = (*c < mins[
len]) << 6;
2630 *e |= ((*c >> 11) == 0x1b) << 7;
2631 *e |= (*c > 0x10FFFF) << 8;
2632 *e |= (s[1] & 0xc0) >> 2;
2633 *e |= (s[2] & 0xc0) >> 4;
2649 h.
format(parse_ctx, format_ctx);
2662 auto out = ctx.
out();
2680 auto transcode = [
this](
const char* p) {
2681 auto cp = uint32_t();
2684 if (error != 0)
FMT_THROW(std::runtime_error(
"invalid utf8"));
2686 buffer_.push_back(static_cast<wchar_t>(cp));
2689 buffer_.push_back(static_cast<wchar_t>(0xD800 + (cp >> 10)));
2690 buffer_.push_back(static_cast<wchar_t>(0xDC00 + (cp & 0x3FF)));
2695 const size_t block_size = 4;
2696 if (s.
size() >= block_size) {
2697 for (
auto end = p + s.
size() - block_size + 1; p < end;) p = transcode(p);
2699 if (
auto num_chars_left = s.
data() + s.
size() - p) {
2700 char buf[2 * block_size - 1] = {};
2705 }
while (p - buf < num_chars_left);
2707 buffer_.push_back(0);
2716 char* system_message = &buf[0];
2724 if (result != ERANGE)
2756 extern "C" __declspec(dllimport)
int __stdcall WriteConsoleW(
2757 void*,
const void*, dword, dword*,
void*);
2766 auto fd = _fileno(f);
2769 auto written = detail::dword();
2770 if (!detail::WriteConsoleW(reinterpret_cast<void*>(_get_osfhandle(fd)),
2771 u16.
c_str(),
static_cast<uint32_t
>(u16.
size()),
2772 &written,
nullptr)) {
2793 vprint(stdout, format_str, args);
2798 #endif // FMT_FORMAT_INL_H_
FMT_FUNC Char decimal_point_impl(locale_ref loc)
bool equal2(const Char *lhs, const char *rhs)
static carrier_uint compute_right_endpoint_for_shorter_interval_case(const cache_entry_type &cache, int beta_minus_1) FMT_NOEXCEPT
enum MQTTPropertyCodes value
constexpr const Char * data() const
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
bigit operator[](int index) const
void subtract_bigits(int index, bigit other, bigit &borrow)
int divmod_assign(const bigint &divisor)
void operator>>=(int shift)
FMT_INLINE std::basic_string< Char > format(const S &format_str, Args &&...args)
int floor_log2_pow10(int e) FMT_NOEXCEPT
void init(int err_code, string_view format_str, format_args args)
bool operator==(fp x, fp y)
const wchar_t * c_str() const
void try_reserve(size_t new_capacity)
typename std::conditional< B, T, F >::type conditional_t
static FMT_CONSTEXPR_DECL const uint64_t implicit_bit
static carrier_uint compute_mul(carrier_uint u, const cache_entry_type &cache) FMT_NOEXCEPT
FMT_FUNC void report_error(format_func func, int error_code, string_view message) FMT_NOEXCEPT
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)
void try_resize(size_t count)
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
static const char foreground_color[]
FMT_ALWAYS_INLINE int remove_trailing_zeros(uint64_t &n) FMT_NOEXCEPT
void subtract_aligned(const bigint &other)
uint64_t low() const FMT_NOEXCEPT
static const uint32_t zero_or_powers_of_10_32[]
static FMT_CONSTEXPR_DECL const int double_significand_size
size_t size() const FMT_NOEXCEPT
std::string operator()(basic_format_arg< format_context >::handle h) const
static carrier_uint compute_round_up_for_shorter_interval_case(const cache_entry_type &cache, int beta_minus_1) FMT_NOEXCEPT
void assign_pow10(int exp)
#define FMT_CONSTEXPR_DECL
void fallback_format(Double d, int num_digits, bool binary32, buffer< char > &buf, int &exp10)
int floor_log10_pow2(int e) FMT_NOEXCEPT
FMT_SAFEBUFFERS decimal_fp< T > to_decimal(T x) FMT_NOEXCEPT
basic_memory_buffer< bigit, bigits_capacity > bigits_
constexpr dragonbox::float_info< T >::carrier_uint exponent_mask()
void remove_leading_zeros()
void vprint_mojibake(std::FILE *, basic_string_view< Char >, const Args &)
void fwrite_fully(const void *ptr, size_t size, size_t count, FILE *stream)
static const int16_t grisu_pow10_exponents[]
static const uint64_t log10_2_significand
#define FMT_END_NAMESPACE
FMT_FUNC int count_digits< 4 >(detail::fallback_uintptr n)
bigint & operator*=(Int value)
basic_string_view< char > string_view
void(*)(detail::buffer< char > &, int, string_view) format_func
bigit & operator[](int index)
fp get_cached_power(int min_exponent, int &pow10_exponent)
static bool compute_mul_parity(carrier_uint two_f, const cache_entry_type &cache, int beta_minus_1) FMT_NOEXCEPT
FMT_CONSTEXPR std::make_unsigned< Int >::type to_unsigned(Int value)
bool_constant< sizeof(Float)==sizeof(uint64_t)||sizeof(Float)==sizeof(uint32_t)> is_supported_float
static uint32_t compute_delta(const cache_entry_type &cache, int beta_minus_1) FMT_NOEXCEPT
buffer_appender< Char > vformat_to(buffer< Char > &buf, basic_string_view< Char > format_str, basic_format_args< FMT_BUFFER_CONTEXT(type_identity_t< Char >)> args)
FMT_CONSTEXPR_DECL FMT_INLINE auto visit_format_arg(Visitor &&vis, const basic_format_arg< Context > &arg) -> decltype(vis(0))
static const uint64_t dragonbox_pow10_significands_64[]
void push_back(const T &value)
static const char left_padding_shifts[5]
void * align(std::size_t alignment, std::size_t size, void *&ptr, std::size_t &space, std::size_t &required_space)
int floor_log10_pow2_minus_log10_4_over_3(int e) FMT_NOEXCEPT
constexpr iterator begin() const FMT_NOEXCEPT
bool is_center_integer(typename float_info< T >::carrier_uint two_f, int exponent, int minus_k) FMT_NOEXCEPT
FMT_API utf8_to_utf16(string_view s)
friend int add_compare(const bigint &lhs1, const bigint &lhs2, const bigint &rhs)
FMT_SAFEBUFFERS uint64_t umul192_middle64(uint64_t x, uint128_wrapper y) FMT_NOEXCEPT
std::basic_string< Char > vformat(basic_string_view< Char > format_str, basic_format_args< buffer_context< type_identity_t< Char >>> args)
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 const uint64_t zero_or_powers_of_10_64[]
void multiply(uint64_t value)
static uint32_t compute_delta(cache_entry_type const &cache, int beta_minus_1) FMT_NOEXCEPT
static const char right_padding_shifts[5]
digits::result on_digit(char digit, uint64_t divisor, uint64_t remainder, uint64_t error, int, bool integral)
static const uint64_t powers_of_5_64[]
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)
conditional_t< num_bits< T >()<=32 &&!FMT_REDUCE_INT_INSTANTIATIONS, uint32_t, conditional_t< num_bits< T >()<=64, uint64_t, uint128_t >> uint32_or_64_or_128_t
static const uint64_t powers_of_10_64[]
significand_type significand
void assign(const bigint &other)
constexpr size_t size() const
int format_float(T value, int precision, float_specs specs, buffer< char > &buf)
detail::named_arg< Char, T > arg(const Char *name, const T &arg)
OutputIt format_to(OutputIt out, const S &format_str, Args &&...args)
FMT_INLINE std::string operator()(T value) const
const T & move(const T &v)
const char * utf8_decode(const char *buf, uint32_t *c, int *e)
FMT_SAFEBUFFERS uint64_t umul192_upper64(uint64_t x, uint128_wrapper y) FMT_NOEXCEPT
#define assert(a, b, c, d)
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
FMT_NORETURN FMT_API void on_error(const char *message)
Dest bit_cast(const Source &source)
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)
typename basic_string_view< Char >::iterator iterator
static FMT_CONSTEXPR_DECL const int bigit_bits
static const divtest_table_entry< uint64_t > divtest_table_for_pow5_64[]
static const uint128_wrapper dragonbox_pow10_significands_128[]
FMT_FUNC Char thousands_sep_impl(locale_ref loc)
static const uint32_t dragonbox_pow10_recovery_errors[]
static const wchar_t wreset_color[5]
void multiply(uint32_t value)
int safe_strerror(int error_code, char *&buffer, size_t buffer_size) FMT_NOEXCEPT
uint64_t significand_type
static const char reset_color[5]
static uint64_t get_cached_power(int k) FMT_NOEXCEPT
T * make_checked(T *p, size_t)
bool is_endpoint_integer(typename float_info< T >::carrier_uint two_f, int exponent, int minus_k) FMT_NOEXCEPT
FMT_SAFEBUFFERS uint128_wrapper umul128(uint64_t x, uint64_t y) FMT_NOEXCEPT
FMT_ALWAYS_INLINE digits::result grisu_gen_digits(fp value, uint64_t error, int &exp, Handler &handler)
static bool compute_mul_parity(carrier_uint two_f, const cache_entry_type &cache, int beta_minus_1) FMT_NOEXCEPT
uint64_t high() const FMT_NOEXCEPT
void resize(size_t count)
bool is_left_endpoint_integer_shorter_interval(int exponent) FMT_NOEXCEPT
static const char signs[]
float_info< double >::carrier_uint carrier_uint
#define FMT_ASSERT(condition, message)
FMT_SAFEBUFFERS uint64_t umul128_upper64(uint64_t x, uint64_t y) FMT_NOEXCEPT
#define FMT_BEGIN_NAMESPACE
void align(const bigint &other)
static const uint64_t grisu_pow10_significands[]
FMT_FUNC void format_error_code(detail::buffer< char > &out, int error_code, string_view message) FMT_NOEXCEPT
static const char background_color[]
FMT_FUNC std::string grouping_impl(locale_ref loc)
fp(uint64_t f_val, int e_val)
bool divisible_by_power_of_5(uint64_t x, int exp) FMT_NOEXCEPT
FMT_CONSTEXPR bool is_negative(T value)
std::integral_constant< bool, B > bool_constant
uint64_t multiply(uint64_t lhs, uint64_t rhs)
uint64_t cache_entry_type
static const divtest_table_entry< uint32_t > divtest_table_for_pow5_32[]
FMT_NORETURN FMT_API void assert_fail(const char *file, int line, const char *message)
static FMT_CONSTEXPR_DECL const int significand_size
FMT_ALWAYS_INLINE FMT_SAFEBUFFERS decimal_fp< T > shorter_interval_case(int exponent) FMT_NOEXCEPT
~system_error() FMT_NOEXCEPT FMT_OVERRIDE
int count_digits(uint64_t n)
size_t capacity() const FMT_NOEXCEPT
digits::result on_start(uint64_t divisor, uint64_t remainder, uint64_t error, int &exp)