8#ifndef FMT_FORMAT_INL_H_
9#define FMT_FORMAT_INL_H_
21#ifndef FMT_STATIC_THOUSANDS_SEPARATOR
53 static const char SEP[] =
": ";
54 static const char ERROR_STR[] =
"error ";
56 size_t error_code_size =
sizeof(SEP) +
sizeof(ERROR_STR) - 2;
59 abs_value = 0 - abs_value;
71 const char* message)
noexcept {
73 func(full_message, error_code, message);
75 if (std::fwrite(full_message.data(), full_message.size(), 1, stderr) > 0)
76 std::fputc(
'\n', stderr);
85#ifndef FMT_STATIC_THOUSANDS_SEPARATOR
86template <
typename Locale>
88 static_assert(std::is_same<Locale, std::locale>::value,
"");
92 static_assert(std::is_same<Locale, std::locale>::value,
"");
93 return locale_ ? *
static_cast<const std::locale*
>(locale_) : std::locale();
96template <
typename Char>
98 auto& facet = std::use_facet<std::numpunct<Char>>(loc.get<std::locale>());
99 auto grouping = facet.grouping();
100 auto thousands_sep = grouping.empty() ? Char() : facet.thousands_sep();
104 return std::use_facet<std::numpunct<Char>>(loc.
get<std::locale>())
108template <
typename Char>
110 return {
"\03", FMT_STATIC_THOUSANDS_SEPARATOR};
124 auto ec = std::error_code(error_code, std::generic_category());
131 return x.
f ==
y.f && x.
e ==
y.e;
137 return (n >> r) | (n << (32 - r));
141 return (n >> r) | (n << (64 - r));
149#elif defined(_MSC_VER) && defined(_M_X64)
166 uint64_t intermediate = (bd >> 32) + (ad & mask) + (bc & mask);
168 return {ac + (intermediate >> 32) + (ad >> 32) + (bc >> 32),
169 (intermediate << 32) + (bd & mask)};
179 return static_cast<uint64_t>(p >> 64);
180#elif defined(_MSC_VER) && defined(_M_X64)
181 return __umulh(x,
y);
208 return {high + high_low.
high(), high_low.
low()};
220 FMT_ASSERT(e <= 2620 && e >= -2620,
"too large exponent");
221 static_assert((-1 >> 1) == -1,
"right shift is not arithmetic");
222 return (
e * 315653) >> 20;
227 FMT_ASSERT(e <= 1233 && e >= -1233,
"too large exponent");
228 return (
e * 1741647) >> 19;
231 FMT_ASSERT(e <= 2936 && e >= -2985,
"too large exponent");
232 return (
e * 631305 - 261663) >> 21;
235static constexpr struct {
257 FMT_ASSERT(n <= info.divisor * 10,
"n is too large");
259 (1u << info.shift_amount) / info.divisor + 1;
261 const uint32_t comparison_mask = (1u << info.shift_amount) - 1;
262 bool result = (n & comparison_mask) < magic_number;
263 n >>= info.shift_amount;
271 FMT_ASSERT(n <= info.divisor * 10,
"n is too large");
273 (1u << info.shift_amount) / info.divisor + 1;
274 return (n * magic_number) >> info.shift_amount;
280 return static_cast<uint32_t>((
static_cast<uint64_t>(n) * 1374389535) >> 37);
296 FMT_ASSERT(k >= float_info<float>::min_k && k <= float_info<float>::max_k,
297 "k is out of range");
298 static constexpr const uint64_t pow10_significands[] = {
299 0x81ceb32c4b43fcf5, 0xa2425ff75e14fc32, 0xcad2f7f5359a3b3f,
300 0xfd87b5f28300ca0e, 0x9e74d1b791e07e49, 0xc612062576589ddb,
301 0xf79687aed3eec552, 0x9abe14cd44753b53, 0xc16d9a0095928a28,
302 0xf1c90080baf72cb2, 0x971da05074da7bef, 0xbce5086492111aeb,
303 0xec1e4a7db69561a6, 0x9392ee8e921d5d08, 0xb877aa3236a4b44a,
304 0xe69594bec44de15c, 0x901d7cf73ab0acda, 0xb424dc35095cd810,
305 0xe12e13424bb40e14, 0x8cbccc096f5088cc, 0xafebff0bcb24aaff,
306 0xdbe6fecebdedd5bf, 0x89705f4136b4a598, 0xabcc77118461cefd,
307 0xd6bf94d5e57a42bd, 0x8637bd05af6c69b6, 0xa7c5ac471b478424,
308 0xd1b71758e219652c, 0x83126e978d4fdf3c, 0xa3d70a3d70a3d70b,
309 0xcccccccccccccccd, 0x8000000000000000, 0xa000000000000000,
310 0xc800000000000000, 0xfa00000000000000, 0x9c40000000000000,
311 0xc350000000000000, 0xf424000000000000, 0x9896800000000000,
312 0xbebc200000000000, 0xee6b280000000000, 0x9502f90000000000,
313 0xba43b74000000000, 0xe8d4a51000000000, 0x9184e72a00000000,
314 0xb5e620f480000000, 0xe35fa931a0000000, 0x8e1bc9bf04000000,
315 0xb1a2bc2ec5000000, 0xde0b6b3a76400000, 0x8ac7230489e80000,
316 0xad78ebc5ac620000, 0xd8d726b7177a8000, 0x878678326eac9000,
317 0xa968163f0a57b400, 0xd3c21bcecceda100, 0x84595161401484a0,
318 0xa56fa5b99019a5c8, 0xcecb8f27f4200f3a, 0x813f3978f8940985,
319 0xa18f07d736b90be6, 0xc9f2c9cd04674edf, 0xfc6f7c4045812297,
320 0x9dc5ada82b70b59e, 0xc5371912364ce306, 0xf684df56c3e01bc7,
321 0x9a130b963a6c115d, 0xc097ce7bc90715b4, 0xf0bdc21abb48db21,
322 0x96769950b50d88f5, 0xbc143fa4e250eb32, 0xeb194f8e1ae525fe,
323 0x92efd1b8d0cf37bf, 0xb7abc627050305ae, 0xe596b7b0c643c71a,
324 0x8f7e32ce7bea5c70, 0xb35dbf821ae4f38c, 0xe0352f62a19e306f};
325 return pow10_significands[k - float_info<float>::min_k];
328 struct compute_mul_result {
332 struct compute_mul_parity_result {
355 return {((r >> (64 -
beta)) & 1) != 0,
362 (cache - (cache >> (num_significand_bits<float>() + 2))) >>
363 (64 - num_significand_bits<float>() - 1 -
beta));
369 (cache + (cache >> (num_significand_bits<float>() + 1))) >>
370 (64 - num_significand_bits<float>() - 1 -
beta));
376 cache >> (64 - num_significand_bits<float>() - 2 -
beta)) +
387 FMT_ASSERT(k >= float_info<double>::min_k && k <= float_info<double>::max_k,
388 "k is out of range");
391#if FMT_USE_FULL_CACHE_DRAGONBOX
392 {0xff77b1fcbebcdc4f, 0x25e8e89c13bb0f7b},
393 {0x9faacf3df73609b1, 0x77b191618c54e9ad},
394 {0xc795830d75038c1d, 0xd59df5b9ef6a2418},
395 {0xf97ae3d0d2446f25, 0x4b0573286b44ad1e},
396 {0x9becce62836ac577, 0x4ee367f9430aec33},
397 {0xc2e801fb244576d5, 0x229c41f793cda740},
398 {0xf3a20279ed56d48a, 0x6b43527578c11110},
399 {0x9845418c345644d6, 0x830a13896b78aaaa},
400 {0xbe5691ef416bd60c, 0x23cc986bc656d554},
401 {0xedec366b11c6cb8f, 0x2cbfbe86b7ec8aa9},
402 {0x94b3a202eb1c3f39, 0x7bf7d71432f3d6aa},
403 {0xb9e08a83a5e34f07, 0xdaf5ccd93fb0cc54},
404 {0xe858ad248f5c22c9, 0xd1b3400f8f9cff69},
405 {0x91376c36d99995be, 0x23100809b9c21fa2},
406 {0xb58547448ffffb2d, 0xabd40a0c2832a78b},
407 {0xe2e69915b3fff9f9, 0x16c90c8f323f516d},
408 {0x8dd01fad907ffc3b, 0xae3da7d97f6792e4},
409 {0xb1442798f49ffb4a, 0x99cd11cfdf41779d},
410 {0xdd95317f31c7fa1d, 0x40405643d711d584},
411 {0x8a7d3eef7f1cfc52, 0x482835ea666b2573},
412 {0xad1c8eab5ee43b66, 0xda3243650005eed0},
413 {0xd863b256369d4a40, 0x90bed43e40076a83},
414 {0x873e4f75e2224e68, 0x5a7744a6e804a292},
415 {0xa90de3535aaae202, 0x711515d0a205cb37},
416 {0xd3515c2831559a83, 0x0d5a5b44ca873e04},
417 {0x8412d9991ed58091, 0xe858790afe9486c3},
418 {0xa5178fff668ae0b6, 0x626e974dbe39a873},
419 {0xce5d73ff402d98e3, 0xfb0a3d212dc81290},
420 {0x80fa687f881c7f8e, 0x7ce66634bc9d0b9a},
421 {0xa139029f6a239f72, 0x1c1fffc1ebc44e81},
422 {0xc987434744ac874e, 0xa327ffb266b56221},
423 {0xfbe9141915d7a922, 0x4bf1ff9f0062baa9},
424 {0x9d71ac8fada6c9b5, 0x6f773fc3603db4aa},
425 {0xc4ce17b399107c22, 0xcb550fb4384d21d4},
426 {0xf6019da07f549b2b, 0x7e2a53a146606a49},
427 {0x99c102844f94e0fb, 0x2eda7444cbfc426e},
428 {0xc0314325637a1939, 0xfa911155fefb5309},
429 {0xf03d93eebc589f88, 0x793555ab7eba27cb},
430 {0x96267c7535b763b5, 0x4bc1558b2f3458df},
431 {0xbbb01b9283253ca2, 0x9eb1aaedfb016f17},
432 {0xea9c227723ee8bcb, 0x465e15a979c1cadd},
433 {0x92a1958a7675175f, 0x0bfacd89ec191eca},
434 {0xb749faed14125d36, 0xcef980ec671f667c},
435 {0xe51c79a85916f484, 0x82b7e12780e7401b},
436 {0x8f31cc0937ae58d2, 0xd1b2ecb8b0908811},
437 {0xb2fe3f0b8599ef07, 0x861fa7e6dcb4aa16},
438 {0xdfbdcece67006ac9, 0x67a791e093e1d49b},
439 {0x8bd6a141006042bd, 0xe0c8bb2c5c6d24e1},
440 {0xaecc49914078536d, 0x58fae9f773886e19},
441 {0xda7f5bf590966848, 0xaf39a475506a899f},
442 {0x888f99797a5e012d, 0x6d8406c952429604},
443 {0xaab37fd7d8f58178, 0xc8e5087ba6d33b84},
444 {0xd5605fcdcf32e1d6, 0xfb1e4a9a90880a65},
445 {0x855c3be0a17fcd26, 0x5cf2eea09a550680},
446 {0xa6b34ad8c9dfc06f, 0xf42faa48c0ea481f},
447 {0xd0601d8efc57b08b, 0xf13b94daf124da27},
448 {0x823c12795db6ce57, 0x76c53d08d6b70859},
449 {0xa2cb1717b52481ed, 0x54768c4b0c64ca6f},
450 {0xcb7ddcdda26da268, 0xa9942f5dcf7dfd0a},
451 {0xfe5d54150b090b02, 0xd3f93b35435d7c4d},
452 {0x9efa548d26e5a6e1, 0xc47bc5014a1a6db0},
453 {0xc6b8e9b0709f109a, 0x359ab6419ca1091c},
454 {0xf867241c8cc6d4c0, 0xc30163d203c94b63},
455 {0x9b407691d7fc44f8, 0x79e0de63425dcf1e},
456 {0xc21094364dfb5636, 0x985915fc12f542e5},
457 {0xf294b943e17a2bc4, 0x3e6f5b7b17b2939e},
458 {0x979cf3ca6cec5b5a, 0xa705992ceecf9c43},
459 {0xbd8430bd08277231, 0x50c6ff782a838354},
460 {0xece53cec4a314ebd, 0xa4f8bf5635246429},
461 {0x940f4613ae5ed136, 0x871b7795e136be9a},
462 {0xb913179899f68584, 0x28e2557b59846e40},
463 {0xe757dd7ec07426e5, 0x331aeada2fe589d0},
464 {0x9096ea6f3848984f, 0x3ff0d2c85def7622},
465 {0xb4bca50b065abe63, 0x0fed077a756b53aa},
466 {0xe1ebce4dc7f16dfb, 0xd3e8495912c62895},
467 {0x8d3360f09cf6e4bd, 0x64712dd7abbbd95d},
468 {0xb080392cc4349dec, 0xbd8d794d96aacfb4},
469 {0xdca04777f541c567, 0xecf0d7a0fc5583a1},
470 {0x89e42caaf9491b60, 0xf41686c49db57245},
471 {0xac5d37d5b79b6239, 0x311c2875c522ced6},
472 {0xd77485cb25823ac7, 0x7d633293366b828c},
473 {0x86a8d39ef77164bc, 0xae5dff9c02033198},
474 {0xa8530886b54dbdeb, 0xd9f57f830283fdfd},
475 {0xd267caa862a12d66, 0xd072df63c324fd7c},
476 {0x8380dea93da4bc60, 0x4247cb9e59f71e6e},
477 {0xa46116538d0deb78, 0x52d9be85f074e609},
478 {0xcd795be870516656, 0x67902e276c921f8c},
479 {0x806bd9714632dff6, 0x00ba1cd8a3db53b7},
480 {0xa086cfcd97bf97f3, 0x80e8a40eccd228a5},
481 {0xc8a883c0fdaf7df0, 0x6122cd128006b2ce},
482 {0xfad2a4b13d1b5d6c, 0x796b805720085f82},
483 {0x9cc3a6eec6311a63, 0xcbe3303674053bb1},
484 {0xc3f490aa77bd60fc, 0xbedbfc4411068a9d},
485 {0xf4f1b4d515acb93b, 0xee92fb5515482d45},
486 {0x991711052d8bf3c5, 0x751bdd152d4d1c4b},
487 {0xbf5cd54678eef0b6, 0xd262d45a78a0635e},
488 {0xef340a98172aace4, 0x86fb897116c87c35},
489 {0x9580869f0e7aac0e, 0xd45d35e6ae3d4da1},
490 {0xbae0a846d2195712, 0x8974836059cca10a},
491 {0xe998d258869facd7, 0x2bd1a438703fc94c},
492 {0x91ff83775423cc06, 0x7b6306a34627ddd0},
493 {0xb67f6455292cbf08, 0x1a3bc84c17b1d543},
494 {0xe41f3d6a7377eeca, 0x20caba5f1d9e4a94},
495 {0x8e938662882af53e, 0x547eb47b7282ee9d},
496 {0xb23867fb2a35b28d, 0xe99e619a4f23aa44},
497 {0xdec681f9f4c31f31, 0x6405fa00e2ec94d5},
498 {0x8b3c113c38f9f37e, 0xde83bc408dd3dd05},
499 {0xae0b158b4738705e, 0x9624ab50b148d446},
500 {0xd98ddaee19068c76, 0x3badd624dd9b0958},
501 {0x87f8a8d4cfa417c9, 0xe54ca5d70a80e5d7},
502 {0xa9f6d30a038d1dbc, 0x5e9fcf4ccd211f4d},
503 {0xd47487cc8470652b, 0x7647c32000696720},
504 {0x84c8d4dfd2c63f3b, 0x29ecd9f40041e074},
505 {0xa5fb0a17c777cf09, 0xf468107100525891},
506 {0xcf79cc9db955c2cc, 0x7182148d4066eeb5},
507 {0x81ac1fe293d599bf, 0xc6f14cd848405531},
508 {0xa21727db38cb002f, 0xb8ada00e5a506a7d},
509 {0xca9cf1d206fdc03b, 0xa6d90811f0e4851d},
510 {0xfd442e4688bd304a, 0x908f4a166d1da664},
511 {0x9e4a9cec15763e2e, 0x9a598e4e043287ff},
512 {0xc5dd44271ad3cdba, 0x40eff1e1853f29fe},
513 {0xf7549530e188c128, 0xd12bee59e68ef47d},
514 {0x9a94dd3e8cf578b9, 0x82bb74f8301958cf},
515 {0xc13a148e3032d6e7, 0xe36a52363c1faf02},
516 {0xf18899b1bc3f8ca1, 0xdc44e6c3cb279ac2},
517 {0x96f5600f15a7b7e5, 0x29ab103a5ef8c0ba},
518 {0xbcb2b812db11a5de, 0x7415d448f6b6f0e8},
519 {0xebdf661791d60f56, 0x111b495b3464ad22},
520 {0x936b9fcebb25c995, 0xcab10dd900beec35},
521 {0xb84687c269ef3bfb, 0x3d5d514f40eea743},
522 {0xe65829b3046b0afa, 0x0cb4a5a3112a5113},
523 {0x8ff71a0fe2c2e6dc, 0x47f0e785eaba72ac},
524 {0xb3f4e093db73a093, 0x59ed216765690f57},
525 {0xe0f218b8d25088b8, 0x306869c13ec3532d},
526 {0x8c974f7383725573, 0x1e414218c73a13fc},
527 {0xafbd2350644eeacf, 0xe5d1929ef90898fb},
528 {0xdbac6c247d62a583, 0xdf45f746b74abf3a},
529 {0x894bc396ce5da772, 0x6b8bba8c328eb784},
530 {0xab9eb47c81f5114f, 0x066ea92f3f326565},
531 {0xd686619ba27255a2, 0xc80a537b0efefebe},
532 {0x8613fd0145877585, 0xbd06742ce95f5f37},
533 {0xa798fc4196e952e7, 0x2c48113823b73705},
534 {0xd17f3b51fca3a7a0, 0xf75a15862ca504c6},
535 {0x82ef85133de648c4, 0x9a984d73dbe722fc},
536 {0xa3ab66580d5fdaf5, 0xc13e60d0d2e0ebbb},
537 {0xcc963fee10b7d1b3, 0x318df905079926a9},
538 {0xffbbcfe994e5c61f, 0xfdf17746497f7053},
539 {0x9fd561f1fd0f9bd3, 0xfeb6ea8bedefa634},
540 {0xc7caba6e7c5382c8, 0xfe64a52ee96b8fc1},
541 {0xf9bd690a1b68637b, 0x3dfdce7aa3c673b1},
542 {0x9c1661a651213e2d, 0x06bea10ca65c084f},
543 {0xc31bfa0fe5698db8, 0x486e494fcff30a63},
544 {0xf3e2f893dec3f126, 0x5a89dba3c3efccfb},
545 {0x986ddb5c6b3a76b7, 0xf89629465a75e01d},
546 {0xbe89523386091465, 0xf6bbb397f1135824},
547 {0xee2ba6c0678b597f, 0x746aa07ded582e2d},
548 {0x94db483840b717ef, 0xa8c2a44eb4571cdd},
549 {0xba121a4650e4ddeb, 0x92f34d62616ce414},
550 {0xe896a0d7e51e1566, 0x77b020baf9c81d18},
551 {0x915e2486ef32cd60, 0x0ace1474dc1d122f},
552 {0xb5b5ada8aaff80b8, 0x0d819992132456bb},
553 {0xe3231912d5bf60e6, 0x10e1fff697ed6c6a},
554 {0x8df5efabc5979c8f, 0xca8d3ffa1ef463c2},
555 {0xb1736b96b6fd83b3, 0xbd308ff8a6b17cb3},
556 {0xddd0467c64bce4a0, 0xac7cb3f6d05ddbdf},
557 {0x8aa22c0dbef60ee4, 0x6bcdf07a423aa96c},
558 {0xad4ab7112eb3929d, 0x86c16c98d2c953c7},
559 {0xd89d64d57a607744, 0xe871c7bf077ba8b8},
560 {0x87625f056c7c4a8b, 0x11471cd764ad4973},
561 {0xa93af6c6c79b5d2d, 0xd598e40d3dd89bd0},
562 {0xd389b47879823479, 0x4aff1d108d4ec2c4},
563 {0x843610cb4bf160cb, 0xcedf722a585139bb},
564 {0xa54394fe1eedb8fe, 0xc2974eb4ee658829},
565 {0xce947a3da6a9273e, 0x733d226229feea33},
566 {0x811ccc668829b887, 0x0806357d5a3f5260},
567 {0xa163ff802a3426a8, 0xca07c2dcb0cf26f8},
568 {0xc9bcff6034c13052, 0xfc89b393dd02f0b6},
569 {0xfc2c3f3841f17c67, 0xbbac2078d443ace3},
570 {0x9d9ba7832936edc0, 0xd54b944b84aa4c0e},
571 {0xc5029163f384a931, 0x0a9e795e65d4df12},
572 {0xf64335bcf065d37d, 0x4d4617b5ff4a16d6},
573 {0x99ea0196163fa42e, 0x504bced1bf8e4e46},
574 {0xc06481fb9bcf8d39, 0xe45ec2862f71e1d7},
575 {0xf07da27a82c37088, 0x5d767327bb4e5a4d},
576 {0x964e858c91ba2655, 0x3a6a07f8d510f870},
577 {0xbbe226efb628afea, 0x890489f70a55368c},
578 {0xeadab0aba3b2dbe5, 0x2b45ac74ccea842f},
579 {0x92c8ae6b464fc96f, 0x3b0b8bc90012929e},
580 {0xb77ada0617e3bbcb, 0x09ce6ebb40173745},
581 {0xe55990879ddcaabd, 0xcc420a6a101d0516},
582 {0x8f57fa54c2a9eab6, 0x9fa946824a12232e},
583 {0xb32df8e9f3546564, 0x47939822dc96abfa},
584 {0xdff9772470297ebd, 0x59787e2b93bc56f8},
585 {0x8bfbea76c619ef36, 0x57eb4edb3c55b65b},
586 {0xaefae51477a06b03, 0xede622920b6b23f2},
587 {0xdab99e59958885c4, 0xe95fab368e45ecee},
588 {0x88b402f7fd75539b, 0x11dbcb0218ebb415},
589 {0xaae103b5fcd2a881, 0xd652bdc29f26a11a},
590 {0xd59944a37c0752a2, 0x4be76d3346f04960},
591 {0x857fcae62d8493a5, 0x6f70a4400c562ddc},
592 {0xa6dfbd9fb8e5b88e, 0xcb4ccd500f6bb953},
593 {0xd097ad07a71f26b2, 0x7e2000a41346a7a8},
594 {0x825ecc24c873782f, 0x8ed400668c0c28c9},
595 {0xa2f67f2dfa90563b, 0x728900802f0f32fb},
596 {0xcbb41ef979346bca, 0x4f2b40a03ad2ffba},
597 {0xfea126b7d78186bc, 0xe2f610c84987bfa9},
598 {0x9f24b832e6b0f436, 0x0dd9ca7d2df4d7ca},
599 {0xc6ede63fa05d3143, 0x91503d1c79720dbc},
600 {0xf8a95fcf88747d94, 0x75a44c6397ce912b},
601 {0x9b69dbe1b548ce7c, 0xc986afbe3ee11abb},
602 {0xc24452da229b021b, 0xfbe85badce996169},
603 {0xf2d56790ab41c2a2, 0xfae27299423fb9c4},
604 {0x97c560ba6b0919a5, 0xdccd879fc967d41b},
605 {0xbdb6b8e905cb600f, 0x5400e987bbc1c921},
606 {0xed246723473e3813, 0x290123e9aab23b69},
607 {0x9436c0760c86e30b, 0xf9a0b6720aaf6522},
608 {0xb94470938fa89bce, 0xf808e40e8d5b3e6a},
609 {0xe7958cb87392c2c2, 0xb60b1d1230b20e05},
610 {0x90bd77f3483bb9b9, 0xb1c6f22b5e6f48c3},
611 {0xb4ecd5f01a4aa828, 0x1e38aeb6360b1af4},
612 {0xe2280b6c20dd5232, 0x25c6da63c38de1b1},
613 {0x8d590723948a535f, 0x579c487e5a38ad0f},
614 {0xb0af48ec79ace837, 0x2d835a9df0c6d852},
615 {0xdcdb1b2798182244, 0xf8e431456cf88e66},
616 {0x8a08f0f8bf0f156b, 0x1b8e9ecb641b5900},
617 {0xac8b2d36eed2dac5, 0xe272467e3d222f40},
618 {0xd7adf884aa879177, 0x5b0ed81dcc6abb10},
619 {0x86ccbb52ea94baea, 0x98e947129fc2b4ea},
620 {0xa87fea27a539e9a5, 0x3f2398d747b36225},
621 {0xd29fe4b18e88640e, 0x8eec7f0d19a03aae},
622 {0x83a3eeeef9153e89, 0x1953cf68300424ad},
623 {0xa48ceaaab75a8e2b, 0x5fa8c3423c052dd8},
624 {0xcdb02555653131b6, 0x3792f412cb06794e},
625 {0x808e17555f3ebf11, 0xe2bbd88bbee40bd1},
626 {0xa0b19d2ab70e6ed6, 0x5b6aceaeae9d0ec5},
627 {0xc8de047564d20a8b, 0xf245825a5a445276},
628 {0xfb158592be068d2e, 0xeed6e2f0f0d56713},
629 {0x9ced737bb6c4183d, 0x55464dd69685606c},
630 {0xc428d05aa4751e4c, 0xaa97e14c3c26b887},
631 {0xf53304714d9265df, 0xd53dd99f4b3066a9},
632 {0x993fe2c6d07b7fab, 0xe546a8038efe402a},
633 {0xbf8fdb78849a5f96, 0xde98520472bdd034},
634 {0xef73d256a5c0f77c, 0x963e66858f6d4441},
635 {0x95a8637627989aad, 0xdde7001379a44aa9},
636 {0xbb127c53b17ec159, 0x5560c018580d5d53},
637 {0xe9d71b689dde71af, 0xaab8f01e6e10b4a7},
638 {0x9226712162ab070d, 0xcab3961304ca70e9},
639 {0xb6b00d69bb55c8d1, 0x3d607b97c5fd0d23},
640 {0xe45c10c42a2b3b05, 0x8cb89a7db77c506b},
641 {0x8eb98a7a9a5b04e3, 0x77f3608e92adb243},
642 {0xb267ed1940f1c61c, 0x55f038b237591ed4},
643 {0xdf01e85f912e37a3, 0x6b6c46dec52f6689},
644 {0x8b61313bbabce2c6, 0x2323ac4b3b3da016},
645 {0xae397d8aa96c1b77, 0xabec975e0a0d081b},
646 {0xd9c7dced53c72255, 0x96e7bd358c904a22},
647 {0x881cea14545c7575, 0x7e50d64177da2e55},
648 {0xaa242499697392d2, 0xdde50bd1d5d0b9ea},
649 {0xd4ad2dbfc3d07787, 0x955e4ec64b44e865},
650 {0x84ec3c97da624ab4, 0xbd5af13bef0b113f},
651 {0xa6274bbdd0fadd61, 0xecb1ad8aeacdd58f},
652 {0xcfb11ead453994ba, 0x67de18eda5814af3},
653 {0x81ceb32c4b43fcf4, 0x80eacf948770ced8},
654 {0xa2425ff75e14fc31, 0xa1258379a94d028e},
655 {0xcad2f7f5359a3b3e, 0x096ee45813a04331},
656 {0xfd87b5f28300ca0d, 0x8bca9d6e188853fd},
657 {0x9e74d1b791e07e48, 0x775ea264cf55347e},
658 {0xc612062576589dda, 0x95364afe032a819e},
659 {0xf79687aed3eec551, 0x3a83ddbd83f52205},
660 {0x9abe14cd44753b52, 0xc4926a9672793543},
661 {0xc16d9a0095928a27, 0x75b7053c0f178294},
662 {0xf1c90080baf72cb1, 0x5324c68b12dd6339},
663 {0x971da05074da7bee, 0xd3f6fc16ebca5e04},
664 {0xbce5086492111aea, 0x88f4bb1ca6bcf585},
665 {0xec1e4a7db69561a5, 0x2b31e9e3d06c32e6},
666 {0x9392ee8e921d5d07, 0x3aff322e62439fd0},
667 {0xb877aa3236a4b449, 0x09befeb9fad487c3},
668 {0xe69594bec44de15b, 0x4c2ebe687989a9b4},
669 {0x901d7cf73ab0acd9, 0x0f9d37014bf60a11},
670 {0xb424dc35095cd80f, 0x538484c19ef38c95},
671 {0xe12e13424bb40e13, 0x2865a5f206b06fba},
672 {0x8cbccc096f5088cb, 0xf93f87b7442e45d4},
673 {0xafebff0bcb24aafe, 0xf78f69a51539d749},
674 {0xdbe6fecebdedd5be, 0xb573440e5a884d1c},
675 {0x89705f4136b4a597, 0x31680a88f8953031},
676 {0xabcc77118461cefc, 0xfdc20d2b36ba7c3e},
677 {0xd6bf94d5e57a42bc, 0x3d32907604691b4d},
678 {0x8637bd05af6c69b5, 0xa63f9a49c2c1b110},
679 {0xa7c5ac471b478423, 0x0fcf80dc33721d54},
680 {0xd1b71758e219652b, 0xd3c36113404ea4a9},
681 {0x83126e978d4fdf3b, 0x645a1cac083126ea},
682 {0xa3d70a3d70a3d70a, 0x3d70a3d70a3d70a4},
683 {0xcccccccccccccccc, 0xcccccccccccccccd},
684 {0x8000000000000000, 0x0000000000000000},
685 {0xa000000000000000, 0x0000000000000000},
686 {0xc800000000000000, 0x0000000000000000},
687 {0xfa00000000000000, 0x0000000000000000},
688 {0x9c40000000000000, 0x0000000000000000},
689 {0xc350000000000000, 0x0000000000000000},
690 {0xf424000000000000, 0x0000000000000000},
691 {0x9896800000000000, 0x0000000000000000},
692 {0xbebc200000000000, 0x0000000000000000},
693 {0xee6b280000000000, 0x0000000000000000},
694 {0x9502f90000000000, 0x0000000000000000},
695 {0xba43b74000000000, 0x0000000000000000},
696 {0xe8d4a51000000000, 0x0000000000000000},
697 {0x9184e72a00000000, 0x0000000000000000},
698 {0xb5e620f480000000, 0x0000000000000000},
699 {0xe35fa931a0000000, 0x0000000000000000},
700 {0x8e1bc9bf04000000, 0x0000000000000000},
701 {0xb1a2bc2ec5000000, 0x0000000000000000},
702 {0xde0b6b3a76400000, 0x0000000000000000},
703 {0x8ac7230489e80000, 0x0000000000000000},
704 {0xad78ebc5ac620000, 0x0000000000000000},
705 {0xd8d726b7177a8000, 0x0000000000000000},
706 {0x878678326eac9000, 0x0000000000000000},
707 {0xa968163f0a57b400, 0x0000000000000000},
708 {0xd3c21bcecceda100, 0x0000000000000000},
709 {0x84595161401484a0, 0x0000000000000000},
710 {0xa56fa5b99019a5c8, 0x0000000000000000},
711 {0xcecb8f27f4200f3a, 0x0000000000000000},
712 {0x813f3978f8940984, 0x4000000000000000},
713 {0xa18f07d736b90be5, 0x5000000000000000},
714 {0xc9f2c9cd04674ede, 0xa400000000000000},
715 {0xfc6f7c4045812296, 0x4d00000000000000},
716 {0x9dc5ada82b70b59d, 0xf020000000000000},
717 {0xc5371912364ce305, 0x6c28000000000000},
718 {0xf684df56c3e01bc6, 0xc732000000000000},
719 {0x9a130b963a6c115c, 0x3c7f400000000000},
720 {0xc097ce7bc90715b3, 0x4b9f100000000000},
721 {0xf0bdc21abb48db20, 0x1e86d40000000000},
722 {0x96769950b50d88f4, 0x1314448000000000},
723 {0xbc143fa4e250eb31, 0x17d955a000000000},
724 {0xeb194f8e1ae525fd, 0x5dcfab0800000000},
725 {0x92efd1b8d0cf37be, 0x5aa1cae500000000},
726 {0xb7abc627050305ad, 0xf14a3d9e40000000},
727 {0xe596b7b0c643c719, 0x6d9ccd05d0000000},
728 {0x8f7e32ce7bea5c6f, 0xe4820023a2000000},
729 {0xb35dbf821ae4f38b, 0xdda2802c8a800000},
730 {0xe0352f62a19e306e, 0xd50b2037ad200000},
731 {0x8c213d9da502de45, 0x4526f422cc340000},
732 {0xaf298d050e4395d6, 0x9670b12b7f410000},
733 {0xdaf3f04651d47b4c, 0x3c0cdd765f114000},
734 {0x88d8762bf324cd0f, 0xa5880a69fb6ac800},
735 {0xab0e93b6efee0053, 0x8eea0d047a457a00},
736 {0xd5d238a4abe98068, 0x72a4904598d6d880},
737 {0x85a36366eb71f041, 0x47a6da2b7f864750},
738 {0xa70c3c40a64e6c51, 0x999090b65f67d924},
739 {0xd0cf4b50cfe20765, 0xfff4b4e3f741cf6d},
740 {0x82818f1281ed449f, 0xbff8f10e7a8921a5},
741 {0xa321f2d7226895c7, 0xaff72d52192b6a0e},
742 {0xcbea6f8ceb02bb39, 0x9bf4f8a69f764491},
743 {0xfee50b7025c36a08, 0x02f236d04753d5b5},
744 {0x9f4f2726179a2245, 0x01d762422c946591},
745 {0xc722f0ef9d80aad6, 0x424d3ad2b7b97ef6},
746 {0xf8ebad2b84e0d58b, 0xd2e0898765a7deb3},
747 {0x9b934c3b330c8577, 0x63cc55f49f88eb30},
748 {0xc2781f49ffcfa6d5, 0x3cbf6b71c76b25fc},
749 {0xf316271c7fc3908a, 0x8bef464e3945ef7b},
750 {0x97edd871cfda3a56, 0x97758bf0e3cbb5ad},
751 {0xbde94e8e43d0c8ec, 0x3d52eeed1cbea318},
752 {0xed63a231d4c4fb27, 0x4ca7aaa863ee4bde},
753 {0x945e455f24fb1cf8, 0x8fe8caa93e74ef6b},
754 {0xb975d6b6ee39e436, 0xb3e2fd538e122b45},
755 {0xe7d34c64a9c85d44, 0x60dbbca87196b617},
756 {0x90e40fbeea1d3a4a, 0xbc8955e946fe31ce},
757 {0xb51d13aea4a488dd, 0x6babab6398bdbe42},
758 {0xe264589a4dcdab14, 0xc696963c7eed2dd2},
759 {0x8d7eb76070a08aec, 0xfc1e1de5cf543ca3},
760 {0xb0de65388cc8ada8, 0x3b25a55f43294bcc},
761 {0xdd15fe86affad912, 0x49ef0eb713f39ebf},
762 {0x8a2dbf142dfcc7ab, 0x6e3569326c784338},
763 {0xacb92ed9397bf996, 0x49c2c37f07965405},
764 {0xd7e77a8f87daf7fb, 0xdc33745ec97be907},
765 {0x86f0ac99b4e8dafd, 0x69a028bb3ded71a4},
766 {0xa8acd7c0222311bc, 0xc40832ea0d68ce0d},
767 {0xd2d80db02aabd62b, 0xf50a3fa490c30191},
768 {0x83c7088e1aab65db, 0x792667c6da79e0fb},
769 {0xa4b8cab1a1563f52, 0x577001b891185939},
770 {0xcde6fd5e09abcf26, 0xed4c0226b55e6f87},
771 {0x80b05e5ac60b6178, 0x544f8158315b05b5},
772 {0xa0dc75f1778e39d6, 0x696361ae3db1c722},
773 {0xc913936dd571c84c, 0x03bc3a19cd1e38ea},
774 {0xfb5878494ace3a5f, 0x04ab48a04065c724},
775 {0x9d174b2dcec0e47b, 0x62eb0d64283f9c77},
776 {0xc45d1df942711d9a, 0x3ba5d0bd324f8395},
777 {0xf5746577930d6500, 0xca8f44ec7ee3647a},
778 {0x9968bf6abbe85f20, 0x7e998b13cf4e1ecc},
779 {0xbfc2ef456ae276e8, 0x9e3fedd8c321a67f},
780 {0xefb3ab16c59b14a2, 0xc5cfe94ef3ea101f},
781 {0x95d04aee3b80ece5, 0xbba1f1d158724a13},
782 {0xbb445da9ca61281f, 0x2a8a6e45ae8edc98},
783 {0xea1575143cf97226, 0xf52d09d71a3293be},
784 {0x924d692ca61be758, 0x593c2626705f9c57},
785 {0xb6e0c377cfa2e12e, 0x6f8b2fb00c77836d},
786 {0xe498f455c38b997a, 0x0b6dfb9c0f956448},
787 {0x8edf98b59a373fec, 0x4724bd4189bd5ead},
788 {0xb2977ee300c50fe7, 0x58edec91ec2cb658},
789 {0xdf3d5e9bc0f653e1, 0x2f2967b66737e3ee},
790 {0x8b865b215899f46c, 0xbd79e0d20082ee75},
791 {0xae67f1e9aec07187, 0xecd8590680a3aa12},
792 {0xda01ee641a708de9, 0xe80e6f4820cc9496},
793 {0x884134fe908658b2, 0x3109058d147fdcde},
794 {0xaa51823e34a7eede, 0xbd4b46f0599fd416},
795 {0xd4e5e2cdc1d1ea96, 0x6c9e18ac7007c91b},
796 {0x850fadc09923329e, 0x03e2cf6bc604ddb1},
797 {0xa6539930bf6bff45, 0x84db8346b786151d},
798 {0xcfe87f7cef46ff16, 0xe612641865679a64},
799 {0x81f14fae158c5f6e, 0x4fcb7e8f3f60c07f},
800 {0xa26da3999aef7749, 0xe3be5e330f38f09e},
801 {0xcb090c8001ab551c, 0x5cadf5bfd3072cc6},
802 {0xfdcb4fa002162a63, 0x73d9732fc7c8f7f7},
803 {0x9e9f11c4014dda7e, 0x2867e7fddcdd9afb},
804 {0xc646d63501a1511d, 0xb281e1fd541501b9},
805 {0xf7d88bc24209a565, 0x1f225a7ca91a4227},
806 {0x9ae757596946075f, 0x3375788de9b06959},
807 {0xc1a12d2fc3978937, 0x0052d6b1641c83af},
808 {0xf209787bb47d6b84, 0xc0678c5dbd23a49b},
809 {0x9745eb4d50ce6332, 0xf840b7ba963646e1},
810 {0xbd176620a501fbff, 0xb650e5a93bc3d899},
811 {0xec5d3fa8ce427aff, 0xa3e51f138ab4cebf},
812 {0x93ba47c980e98cdf, 0xc66f336c36b10138},
813 {0xb8a8d9bbe123f017, 0xb80b0047445d4185},
814 {0xe6d3102ad96cec1d, 0xa60dc059157491e6},
815 {0x9043ea1ac7e41392, 0x87c89837ad68db30},
816 {0xb454e4a179dd1877, 0x29babe4598c311fc},
817 {0xe16a1dc9d8545e94, 0xf4296dd6fef3d67b},
818 {0x8ce2529e2734bb1d, 0x1899e4a65f58660d},
819 {0xb01ae745b101e9e4, 0x5ec05dcff72e7f90},
820 {0xdc21a1171d42645d, 0x76707543f4fa1f74},
821 {0x899504ae72497eba, 0x6a06494a791c53a9},
822 {0xabfa45da0edbde69, 0x0487db9d17636893},
823 {0xd6f8d7509292d603, 0x45a9d2845d3c42b7},
824 {0x865b86925b9bc5c2, 0x0b8a2392ba45a9b3},
825 {0xa7f26836f282b732, 0x8e6cac7768d7141f},
826 {0xd1ef0244af2364ff, 0x3207d795430cd927},
827 {0x8335616aed761f1f, 0x7f44e6bd49e807b9},
828 {0xa402b9c5a8d3a6e7, 0x5f16206c9c6209a7},
829 {0xcd036837130890a1, 0x36dba887c37a8c10},
830 {0x802221226be55a64, 0xc2494954da2c978a},
831 {0xa02aa96b06deb0fd, 0xf2db9baa10b7bd6d},
832 {0xc83553c5c8965d3d, 0x6f92829494e5acc8},
833 {0xfa42a8b73abbf48c, 0xcb772339ba1f17fa},
834 {0x9c69a97284b578d7, 0xff2a760414536efc},
835 {0xc38413cf25e2d70d, 0xfef5138519684abb},
836 {0xf46518c2ef5b8cd1, 0x7eb258665fc25d6a},
837 {0x98bf2f79d5993802, 0xef2f773ffbd97a62},
838 {0xbeeefb584aff8603, 0xaafb550ffacfd8fb},
839 {0xeeaaba2e5dbf6784, 0x95ba2a53f983cf39},
840 {0x952ab45cfa97a0b2, 0xdd945a747bf26184},
841 {0xba756174393d88df, 0x94f971119aeef9e5},
842 {0xe912b9d1478ceb17, 0x7a37cd5601aab85e},
843 {0x91abb422ccb812ee, 0xac62e055c10ab33b},
844 {0xb616a12b7fe617aa, 0x577b986b314d600a},
845 {0xe39c49765fdf9d94, 0xed5a7e85fda0b80c},
846 {0x8e41ade9fbebc27d, 0x14588f13be847308},
847 {0xb1d219647ae6b31c, 0x596eb2d8ae258fc9},
848 {0xde469fbd99a05fe3, 0x6fca5f8ed9aef3bc},
849 {0x8aec23d680043bee, 0x25de7bb9480d5855},
850 {0xada72ccc20054ae9, 0xaf561aa79a10ae6b},
851 {0xd910f7ff28069da4, 0x1b2ba1518094da05},
852 {0x87aa9aff79042286, 0x90fb44d2f05d0843},
853 {0xa99541bf57452b28, 0x353a1607ac744a54},
854 {0xd3fa922f2d1675f2, 0x42889b8997915ce9},
855 {0x847c9b5d7c2e09b7, 0x69956135febada12},
856 {0xa59bc234db398c25, 0x43fab9837e699096},
857 {0xcf02b2c21207ef2e, 0x94f967e45e03f4bc},
858 {0x8161afb94b44f57d, 0x1d1be0eebac278f6},
859 {0xa1ba1ba79e1632dc, 0x6462d92a69731733},
860 {0xca28a291859bbf93, 0x7d7b8f7503cfdcff},
861 {0xfcb2cb35e702af78, 0x5cda735244c3d43f},
862 {0x9defbf01b061adab, 0x3a0888136afa64a8},
863 {0xc56baec21c7a1916, 0x088aaa1845b8fdd1},
864 {0xf6c69a72a3989f5b, 0x8aad549e57273d46},
865 {0x9a3c2087a63f6399, 0x36ac54e2f678864c},
866 {0xc0cb28a98fcf3c7f, 0x84576a1bb416a7de},
867 {0xf0fdf2d3f3c30b9f, 0x656d44a2a11c51d6},
868 {0x969eb7c47859e743, 0x9f644ae5a4b1b326},
869 {0xbc4665b596706114, 0x873d5d9f0dde1fef},
870 {0xeb57ff22fc0c7959, 0xa90cb506d155a7eb},
871 {0x9316ff75dd87cbd8, 0x09a7f12442d588f3},
872 {0xb7dcbf5354e9bece, 0x0c11ed6d538aeb30},
873 {0xe5d3ef282a242e81, 0x8f1668c8a86da5fb},
874 {0x8fa475791a569d10, 0xf96e017d694487bd},
875 {0xb38d92d760ec4455, 0x37c981dcc395a9ad},
876 {0xe070f78d3927556a, 0x85bbe253f47b1418},
877 {0x8c469ab843b89562, 0x93956d7478ccec8f},
878 {0xaf58416654a6babb, 0x387ac8d1970027b3},
879 {0xdb2e51bfe9d0696a, 0x06997b05fcc0319f},
880 {0x88fcf317f22241e2, 0x441fece3bdf81f04},
881 {0xab3c2fddeeaad25a, 0xd527e81cad7626c4},
882 {0xd60b3bd56a5586f1, 0x8a71e223d8d3b075},
883 {0x85c7056562757456, 0xf6872d5667844e4a},
884 {0xa738c6bebb12d16c, 0xb428f8ac016561dc},
885 {0xd106f86e69d785c7, 0xe13336d701beba53},
886 {0x82a45b450226b39c, 0xecc0024661173474},
887 {0xa34d721642b06084, 0x27f002d7f95d0191},
888 {0xcc20ce9bd35c78a5, 0x31ec038df7b441f5},
889 {0xff290242c83396ce, 0x7e67047175a15272},
890 {0x9f79a169bd203e41, 0x0f0062c6e984d387},
891 {0xc75809c42c684dd1, 0x52c07b78a3e60869},
892 {0xf92e0c3537826145, 0xa7709a56ccdf8a83},
893 {0x9bbcc7a142b17ccb, 0x88a66076400bb692},
894 {0xc2abf989935ddbfe, 0x6acff893d00ea436},
895 {0xf356f7ebf83552fe, 0x0583f6b8c4124d44},
896 {0x98165af37b2153de, 0xc3727a337a8b704b},
897 {0xbe1bf1b059e9a8d6, 0x744f18c0592e4c5d},
898 {0xeda2ee1c7064130c, 0x1162def06f79df74},
899 {0x9485d4d1c63e8be7, 0x8addcb5645ac2ba9},
900 {0xb9a74a0637ce2ee1, 0x6d953e2bd7173693},
901 {0xe8111c87c5c1ba99, 0xc8fa8db6ccdd0438},
902 {0x910ab1d4db9914a0, 0x1d9c9892400a22a3},
903 {0xb54d5e4a127f59c8, 0x2503beb6d00cab4c},
904 {0xe2a0b5dc971f303a, 0x2e44ae64840fd61e},
905 {0x8da471a9de737e24, 0x5ceaecfed289e5d3},
906 {0xb10d8e1456105dad, 0x7425a83e872c5f48},
907 {0xdd50f1996b947518, 0xd12f124e28f7771a},
908 {0x8a5296ffe33cc92f, 0x82bd6b70d99aaa70},
909 {0xace73cbfdc0bfb7b, 0x636cc64d1001550c},
910 {0xd8210befd30efa5a, 0x3c47f7e05401aa4f},
911 {0x8714a775e3e95c78, 0x65acfaec34810a72},
912 {0xa8d9d1535ce3b396, 0x7f1839a741a14d0e},
913 {0xd31045a8341ca07c, 0x1ede48111209a051},
914 {0x83ea2b892091e44d, 0x934aed0aab460433},
915 {0xa4e4b66b68b65d60, 0xf81da84d56178540},
916 {0xce1de40642e3f4b9, 0x36251260ab9d668f},
917 {0x80d2ae83e9ce78f3, 0xc1d72b7c6b42601a},
918 {0xa1075a24e4421730, 0xb24cf65b8612f820},
919 {0xc94930ae1d529cfc, 0xdee033f26797b628},
920 {0xfb9b7cd9a4a7443c, 0x169840ef017da3b2},
921 {0x9d412e0806e88aa5, 0x8e1f289560ee864f},
922 {0xc491798a08a2ad4e, 0xf1a6f2bab92a27e3},
923 {0xf5b5d7ec8acb58a2, 0xae10af696774b1dc},
924 {0x9991a6f3d6bf1765, 0xacca6da1e0a8ef2a},
925 {0xbff610b0cc6edd3f, 0x17fd090a58d32af4},
926 {0xeff394dcff8a948e, 0xddfc4b4cef07f5b1},
927 {0x95f83d0a1fb69cd9, 0x4abdaf101564f98f},
928 {0xbb764c4ca7a4440f, 0x9d6d1ad41abe37f2},
929 {0xea53df5fd18d5513, 0x84c86189216dc5ee},
930 {0x92746b9be2f8552c, 0x32fd3cf5b4e49bb5},
931 {0xb7118682dbb66a77, 0x3fbc8c33221dc2a2},
932 {0xe4d5e82392a40515, 0x0fabaf3feaa5334b},
933 {0x8f05b1163ba6832d, 0x29cb4d87f2a7400f},
934 {0xb2c71d5bca9023f8, 0x743e20e9ef511013},
935 {0xdf78e4b2bd342cf6, 0x914da9246b255417},
936 {0x8bab8eefb6409c1a, 0x1ad089b6c2f7548f},
937 {0xae9672aba3d0c320, 0xa184ac2473b529b2},
938 {0xda3c0f568cc4f3e8, 0xc9e5d72d90a2741f},
939 {0x8865899617fb1871, 0x7e2fa67c7a658893},
940 {0xaa7eebfb9df9de8d, 0xddbb901b98feeab8},
941 {0xd51ea6fa85785631, 0x552a74227f3ea566},
942 {0x8533285c936b35de, 0xd53a88958f872760},
943 {0xa67ff273b8460356, 0x8a892abaf368f138},
944 {0xd01fef10a657842c, 0x2d2b7569b0432d86},
945 {0x8213f56a67f6b29b, 0x9c3b29620e29fc74},
946 {0xa298f2c501f45f42, 0x8349f3ba91b47b90},
947 {0xcb3f2f7642717713, 0x241c70a936219a74},
948 {0xfe0efb53d30dd4d7, 0xed238cd383aa0111},
949 {0x9ec95d1463e8a506, 0xf4363804324a40ab},
950 {0xc67bb4597ce2ce48, 0xb143c6053edcd0d6},
951 {0xf81aa16fdc1b81da, 0xdd94b7868e94050b},
952 {0x9b10a4e5e9913128, 0xca7cf2b4191c8327},
953 {0xc1d4ce1f63f57d72, 0xfd1c2f611f63a3f1},
954 {0xf24a01a73cf2dccf, 0xbc633b39673c8ced},
955 {0x976e41088617ca01, 0xd5be0503e085d814},
956 {0xbd49d14aa79dbc82, 0x4b2d8644d8a74e19},
957 {0xec9c459d51852ba2, 0xddf8e7d60ed1219f},
958 {0x93e1ab8252f33b45, 0xcabb90e5c942b504},
959 {0xb8da1662e7b00a17, 0x3d6a751f3b936244},
960 {0xe7109bfba19c0c9d, 0x0cc512670a783ad5},
961 {0x906a617d450187e2, 0x27fb2b80668b24c6},
962 {0xb484f9dc9641e9da, 0xb1f9f660802dedf7},
963 {0xe1a63853bbd26451, 0x5e7873f8a0396974},
964 {0x8d07e33455637eb2, 0xdb0b487b6423e1e9},
965 {0xb049dc016abc5e5f, 0x91ce1a9a3d2cda63},
966 {0xdc5c5301c56b75f7, 0x7641a140cc7810fc},
967 {0x89b9b3e11b6329ba, 0xa9e904c87fcb0a9e},
968 {0xac2820d9623bf429, 0x546345fa9fbdcd45},
969 {0xd732290fbacaf133, 0xa97c177947ad4096},
970 {0x867f59a9d4bed6c0, 0x49ed8eabcccc485e},
971 {0xa81f301449ee8c70, 0x5c68f256bfff5a75},
972 {0xd226fc195c6a2f8c, 0x73832eec6fff3112},
973 {0x83585d8fd9c25db7, 0xc831fd53c5ff7eac},
974 {0xa42e74f3d032f525, 0xba3e7ca8b77f5e56},
975 {0xcd3a1230c43fb26f, 0x28ce1bd2e55f35ec},
976 {0x80444b5e7aa7cf85, 0x7980d163cf5b81b4},
977 {0xa0555e361951c366, 0xd7e105bcc3326220},
978 {0xc86ab5c39fa63440, 0x8dd9472bf3fefaa8},
979 {0xfa856334878fc150, 0xb14f98f6f0feb952},
980 {0x9c935e00d4b9d8d2, 0x6ed1bf9a569f33d4},
981 {0xc3b8358109e84f07, 0x0a862f80ec4700c9},
982 {0xf4a642e14c6262c8, 0xcd27bb612758c0fb},
983 {0x98e7e9cccfbd7dbd, 0x8038d51cb897789d},
984 {0xbf21e44003acdd2c, 0xe0470a63e6bd56c4},
985 {0xeeea5d5004981478, 0x1858ccfce06cac75},
986 {0x95527a5202df0ccb, 0x0f37801e0c43ebc9},
987 {0xbaa718e68396cffd, 0xd30560258f54e6bb},
988 {0xe950df20247c83fd, 0x47c6b82ef32a206a},
989 {0x91d28b7416cdd27e, 0x4cdc331d57fa5442},
990 {0xb6472e511c81471d, 0xe0133fe4adf8e953},
991 {0xe3d8f9e563a198e5, 0x58180fddd97723a7},
992 {0x8e679c2f5e44ff8f, 0x570f09eaa7ea7649},
993 {0xb201833b35d63f73, 0x2cd2cc6551e513db},
994 {0xde81e40a034bcf4f, 0xf8077f7ea65e58d2},
995 {0x8b112e86420f6191, 0xfb04afaf27faf783},
996 {0xadd57a27d29339f6, 0x79c5db9af1f9b564},
997 {0xd94ad8b1c7380874, 0x18375281ae7822bd},
998 {0x87cec76f1c830548, 0x8f2293910d0b15b6},
999 {0xa9c2794ae3a3c69a, 0xb2eb3875504ddb23},
1000 {0xd433179d9c8cb841, 0x5fa60692a46151ec},
1001 {0x849feec281d7f328, 0xdbc7c41ba6bcd334},
1002 {0xa5c7ea73224deff3, 0x12b9b522906c0801},
1003 {0xcf39e50feae16bef, 0xd768226b34870a01},
1004 {0x81842f29f2cce375, 0xe6a1158300d46641},
1005 {0xa1e53af46f801c53, 0x60495ae3c1097fd1},
1006 {0xca5e89b18b602368, 0x385bb19cb14bdfc5},
1007 {0xfcf62c1dee382c42, 0x46729e03dd9ed7b6},
1008 {0x9e19db92b4e31ba9, 0x6c07a2c26a8346d2},
1009 {0xc5a05277621be293, 0xc7098b7305241886},
1010 { 0xf70867153aa2db38,
1011 0xb8cbee4fc66d1ea8 }
1013 {0xff77b1fcbebcdc4f, 0x25e8e89c13bb0f7b},
1014 {0xce5d73ff402d98e3, 0xfb0a3d212dc81290},
1015 {0xa6b34ad8c9dfc06f, 0xf42faa48c0ea481f},
1016 {0x86a8d39ef77164bc, 0xae5dff9c02033198},
1017 {0xd98ddaee19068c76, 0x3badd624dd9b0958},
1018 {0xafbd2350644eeacf, 0xe5d1929ef90898fb},
1019 {0x8df5efabc5979c8f, 0xca8d3ffa1ef463c2},
1020 {0xe55990879ddcaabd, 0xcc420a6a101d0516},
1021 {0xb94470938fa89bce, 0xf808e40e8d5b3e6a},
1022 {0x95a8637627989aad, 0xdde7001379a44aa9},
1023 {0xf1c90080baf72cb1, 0x5324c68b12dd6339},
1024 {0xc350000000000000, 0x0000000000000000},
1025 {0x9dc5ada82b70b59d, 0xf020000000000000},
1026 {0xfee50b7025c36a08, 0x02f236d04753d5b5},
1027 {0xcde6fd5e09abcf26, 0xed4c0226b55e6f87},
1028 {0xa6539930bf6bff45, 0x84db8346b786151d},
1029 {0x865b86925b9bc5c2, 0x0b8a2392ba45a9b3},
1030 {0xd910f7ff28069da4, 0x1b2ba1518094da05},
1031 {0xaf58416654a6babb, 0x387ac8d1970027b3},
1032 {0x8da471a9de737e24, 0x5ceaecfed289e5d3},
1033 {0xe4d5e82392a40515, 0x0fabaf3feaa5334b},
1034 {0xb8da1662e7b00a17, 0x3d6a751f3b936244},
1035 { 0x95527a5202df0ccb,
1036 0x0f37801e0c43ebc9 }
1040#if FMT_USE_FULL_CACHE_DRAGONBOX
1041 return pow10_significands[k - float_info<double>::min_k];
1043 static constexpr const uint64_t powers_of_5_64[] = {
1044 0x0000000000000001, 0x0000000000000005, 0x0000000000000019,
1045 0x000000000000007d, 0x0000000000000271, 0x0000000000000c35,
1046 0x0000000000003d09, 0x000000000001312d, 0x000000000005f5e1,
1047 0x00000000001dcd65, 0x00000000009502f9, 0x0000000002e90edd,
1048 0x000000000e8d4a51, 0x0000000048c27395, 0x000000016bcc41e9,
1049 0x000000071afd498d, 0x0000002386f26fc1, 0x000000b1a2bc2ec5,
1050 0x000003782dace9d9, 0x00001158e460913d, 0x000056bc75e2d631,
1051 0x0001b1ae4d6e2ef5, 0x000878678326eac9, 0x002a5a058fc295ed,
1052 0x00d3c21bcecceda1, 0x0422ca8b0a00a425, 0x14adf4b7320334b9};
1054 static const int compression_ratio = 27;
1057 int cache_index = (k - float_info<double>::min_k) / compression_ratio;
1058 int kb = cache_index * compression_ratio + float_info<double>::min_k;
1059 int offset = k - kb;
1063 if (offset == 0)
return base_cache;
1067 FMT_ASSERT(alpha > 0 && alpha < 64,
"shifting error detected");
1070 uint64_t pow5 = powers_of_5_64[offset];
1074 recovered_cache += middle_low.
high();
1076 uint64_t high_to_middle = recovered_cache.
high() << (64 - alpha);
1077 uint64_t middle_to_low = recovered_cache.
low() << (64 - alpha);
1081 ((middle_low.
low() >> alpha) | middle_to_low)};
1083 return {recovered_cache.
high(), recovered_cache.
low() + 1};
1087 struct compute_mul_result {
1091 struct compute_mul_parity_result {
1099 return {r.high(), r.low() == 0};
1103 int beta)
noexcept {
1104 return static_cast<uint32_t>(cache.high() >> (64 - 1 -
beta));
1113 return {((r.high() >> (64 -
beta)) & 1) != 0,
1114 ((r.high() <<
beta) | (r.low() >> (64 -
beta))) == 0};
1119 return (cache.high() -
1120 (cache.high() >> (num_significand_bits<double>() + 2))) >>
1121 (64 - num_significand_bits<double>() - 1 -
beta);
1126 return (cache.high() +
1127 (cache.high() >> (num_significand_bits<double>() + 1))) >>
1128 (64 - num_significand_bits<double>() - 1 -
beta);
1133 return ((cache.high() >> (64 - num_significand_bits<double>() - 2 -
beta)) +
1142 const int case_shorter_interval_left_endpoint_lower_threshold = 2;
1143 const int case_shorter_interval_left_endpoint_upper_threshold = 3;
1144 return exponent >= case_shorter_interval_left_endpoint_lower_threshold &&
1145 exponent <= case_shorter_interval_left_endpoint_upper_threshold;
1151 const uint32_t mod_inv_5 = 0xcccccccd;
1152 const uint32_t mod_inv_25 = mod_inv_5 * mod_inv_5;
1156 auto q =
rotr(n * mod_inv_25, 2);
1157 if (q > max_value<uint32_t>() / 100)
break;
1161 auto q =
rotr(n * mod_inv_5, 1);
1162 if (q <= max_value<uint32_t>() / 10) {
1175 constexpr uint64_t magic_number = 12379400392853802749ull;
1176 auto nm =
umul128(n, magic_number);
1179 if ((nm.high() & ((1ull << (90 - 64)) - 1)) == 0 && nm.low() < magic_number) {
1181 auto n32 =
static_cast<uint32_t>(nm.high() >> (90 - 64));
1183 const uint32_t mod_inv_5 = 0xcccccccd;
1184 const uint32_t mod_inv_25 = mod_inv_5 * mod_inv_5;
1188 auto q =
rotr(n32 * mod_inv_25, 2);
1189 if (q > max_value<uint32_t>() / 100)
break;
1193 auto q =
rotr(n32 * mod_inv_5, 1);
1194 if (q <= max_value<uint32_t>() / 10) {
1204 const uint64_t mod_inv_5 = 0xcccccccccccccccd;
1205 const uint64_t mod_inv_25 = mod_inv_5 * mod_inv_5;
1209 auto q =
rotr(n * mod_inv_25, 2);
1210 if (q > max_value<uint64_t>() / 100)
break;
1214 auto q =
rotr(n * mod_inv_5, 1);
1215 if (q <= max_value<uint64_t>() / 10) {
1226 decimal_fp<T> ret_value;
1241 if (!is_left_endpoint_integer_shorter_interval<T>(exponent)) ++xi;
1244 ret_value.significand = zi / 10;
1247 if (ret_value.significand * 10 >= xi) {
1248 ret_value.exponent = minus_k + 1;
1254 ret_value.significand =
1257 ret_value.exponent = minus_k;
1260 if (exponent >= float_info<T>::shorter_interval_tie_lower_threshold &&
1261 exponent <= float_info<T>::shorter_interval_tie_upper_threshold) {
1262 ret_value.significand = ret_value.significand % 2 == 0
1263 ? ret_value.significand
1264 : ret_value.significand - 1;
1265 }
else if (ret_value.significand < xi) {
1266 ++ret_value.significand;
1274 using carrier_uint =
typename float_info<T>::carrier_uint;
1276 auto br = bit_cast<carrier_uint>(x);
1279 const carrier_uint significand_mask =
1280 (
static_cast<carrier_uint
>(1) << num_significand_bits<T>()) - 1;
1281 carrier_uint significand = (br & significand_mask);
1283 static_cast<int>((br & exponent_mask<T>()) >> num_significand_bits<T>());
1285 if (exponent != 0) {
1286 exponent -= exponent_bias<T>() + num_significand_bits<T>();
1291 if (significand == 0)
return shorter_interval_case<T>(exponent);
1293 significand |= (
static_cast<carrier_uint
>(1) << num_significand_bits<T>());
1296 if (significand == 0)
return {0, 0};
1298 std::numeric_limits<T>::min_exponent - num_significand_bits<T>() - 1;
1301 const bool include_left_endpoint = (significand % 2 == 0);
1302 const bool include_right_endpoint = include_left_endpoint;
1312 const carrier_uint two_fc = significand << 1;
1331 decimal_fp<T> ret_value;
1333 uint32_t r =
static_cast<uint32_t>(z_mul.result - float_info<T>::big_divisor *
1334 ret_value.significand);
1338 if (r == 0 && (z_mul.is_integer & !include_right_endpoint)) {
1339 --ret_value.significand;
1340 r = float_info<T>::big_divisor;
1341 goto small_divisor_case_label;
1343 }
else if (r > deltai) {
1344 goto small_divisor_case_label;
1350 if (!(x_mul.parity | (x_mul.is_integer & include_left_endpoint)))
1351 goto small_divisor_case_label;
1353 ret_value.exponent = minus_k + float_info<T>::kappa + 1;
1361small_divisor_case_label:
1362 ret_value.significand *= 10;
1363 ret_value.exponent = minus_k + float_info<T>::kappa;
1365 uint32_t dist = r - (deltai / 2) + (float_info<T>::small_divisor / 2);
1366 const bool approx_y_parity =
1367 ((dist ^ (float_info<T>::small_divisor / 2)) & 1) != 0;
1370 const bool divisible_by_small_divisor =
1371 check_divisibility_and_divide_by_pow10<float_info<T>::kappa>(dist);
1374 ret_value.significand += dist;
1376 if (!divisible_by_small_divisor)
return ret_value;
1388 if (y_mul.parity != approx_y_parity)
1389 --ret_value.significand;
1390 else if (y_mul.is_integer & (ret_value.significand % 2 != 0))
1391 --ret_value.significand;
1397FMT_FUNC auto fmt_snprintf(
char* buf,
size_t size,
const char* fmt, ...)
1399 auto args = va_list();
1400 va_start(args, fmt);
1401 int result = vsnprintf_s(buf,
size, _TRUNCATE, fmt, args);
1414 template <
typename FormatContext>
1415 auto format(
const detail::bigint& n, FormatContext& ctx)
const ->
1416 typename FormatContext::iterator {
1417 auto out = ctx.out();
1419 for (
auto i = n.bigits_.size(); i > 0; --i) {
1420 auto value = n.bigits_[i - 1u];
1430 n.exp_ * detail::bigint::bigit_bits);
1439 buffer_.push_back(
static_cast<wchar_t>(cp));
1442 buffer_.push_back(
static_cast<wchar_t>(0xD800 + (cp >> 10)));
1443 buffer_.push_back(
static_cast<wchar_t>(0xDC00 + (cp & 0x3FF)));
1447 buffer_.push_back(0);
1451 const char* message)
noexcept {
1453 auto ec = std::error_code(error_code, std::generic_category());
1462 const char* message)
noexcept {
1476using dword =
conditional_t<
sizeof(long) == 4,
unsigned long,
unsigned>;
1477extern "C" __declspec(dllimport)
int __stdcall WriteConsoleW(
1478 void*,
const void*, dword, dword*,
void*);
1481 auto fd = _fileno(f);
1484 auto written = detail::dword();
1485 if (detail::WriteConsoleW(
reinterpret_cast<void*
>(_get_osfhandle(fd)),
1486 u16.c_str(),
static_cast<uint32_t>(u16.size()),
1487 &written,
nullptr)) {
1501 if (write_console(f, text))
return;
1525 vprint(stdout, format_str, args);
1536 size_t singletons_size,
1537 const unsigned char* singleton_lowers,
1538 const unsigned char* normal,
size_t normal_size)
1540 auto upper = x >> 8;
1541 auto lower_start = 0;
1542 for (
size_t i = 0; i < singletons_size; ++i) {
1543 auto s = singletons[i];
1544 auto lower_end = lower_start + s.lower_count;
1545 if (upper < s.upper)
break;
1546 if (upper == s.upper) {
1547 for (
auto j = lower_start; j < lower_end; ++j) {
1548 if (singleton_lowers[j] == (x & 0xff))
return false;
1551 lower_start = lower_end;
1554 auto xsigned =
static_cast<int>(x);
1555 auto current =
true;
1556 for (
size_t i = 0; i < normal_size; ++i) {
1557 auto v =
static_cast<int>(normal[i]);
1558 auto len = (v & 0x80) != 0 ? (v & 0x7f) << 8 | normal[++i] : v;
1560 if (xsigned < 0)
break;
1568 static constexpr singleton singletons0[] = {
1569 {0x00, 1}, {0x03, 5}, {0x05, 6}, {0x06, 3}, {0x07, 6}, {0x08, 8},
1570 {0x09, 17}, {0x0a, 28}, {0x0b, 25}, {0x0c, 20}, {0x0d, 16}, {0x0e, 13},
1571 {0x0f, 4}, {0x10, 3}, {0x12, 18}, {0x13, 9}, {0x16, 1}, {0x17, 5},
1572 {0x18, 2}, {0x19, 3}, {0x1a, 7}, {0x1c, 2}, {0x1d, 1}, {0x1f, 22},
1573 {0x20, 3}, {0x2b, 3}, {0x2c, 2}, {0x2d, 11}, {0x2e, 1}, {0x30, 3},
1574 {0x31, 2}, {0x32, 1}, {0xa7, 2}, {0xa9, 2}, {0xaa, 4}, {0xab, 8},
1575 {0xfa, 2}, {0xfb, 5}, {0xfd, 4}, {0xfe, 3}, {0xff, 9},
1577 static constexpr unsigned char singletons0_lower[] = {
1578 0xad, 0x78, 0x79, 0x8b, 0x8d, 0xa2, 0x30, 0x57, 0x58, 0x8b, 0x8c, 0x90,
1579 0x1c, 0x1d, 0xdd, 0x0e, 0x0f, 0x4b, 0x4c, 0xfb, 0xfc, 0x2e, 0x2f, 0x3f,
1580 0x5c, 0x5d, 0x5f, 0xb5, 0xe2, 0x84, 0x8d, 0x8e, 0x91, 0x92, 0xa9, 0xb1,
1581 0xba, 0xbb, 0xc5, 0xc6, 0xc9, 0xca, 0xde, 0xe4, 0xe5, 0xff, 0x00, 0x04,
1582 0x11, 0x12, 0x29, 0x31, 0x34, 0x37, 0x3a, 0x3b, 0x3d, 0x49, 0x4a, 0x5d,
1583 0x84, 0x8e, 0x92, 0xa9, 0xb1, 0xb4, 0xba, 0xbb, 0xc6, 0xca, 0xce, 0xcf,
1584 0xe4, 0xe5, 0x00, 0x04, 0x0d, 0x0e, 0x11, 0x12, 0x29, 0x31, 0x34, 0x3a,
1585 0x3b, 0x45, 0x46, 0x49, 0x4a, 0x5e, 0x64, 0x65, 0x84, 0x91, 0x9b, 0x9d,
1586 0xc9, 0xce, 0xcf, 0x0d, 0x11, 0x29, 0x45, 0x49, 0x57, 0x64, 0x65, 0x8d,
1587 0x91, 0xa9, 0xb4, 0xba, 0xbb, 0xc5, 0xc9, 0xdf, 0xe4, 0xe5, 0xf0, 0x0d,
1588 0x11, 0x45, 0x49, 0x64, 0x65, 0x80, 0x84, 0xb2, 0xbc, 0xbe, 0xbf, 0xd5,
1589 0xd7, 0xf0, 0xf1, 0x83, 0x85, 0x8b, 0xa4, 0xa6, 0xbe, 0xbf, 0xc5, 0xc7,
1590 0xce, 0xcf, 0xda, 0xdb, 0x48, 0x98, 0xbd, 0xcd, 0xc6, 0xce, 0xcf, 0x49,
1591 0x4e, 0x4f, 0x57, 0x59, 0x5e, 0x5f, 0x89, 0x8e, 0x8f, 0xb1, 0xb6, 0xb7,
1592 0xbf, 0xc1, 0xc6, 0xc7, 0xd7, 0x11, 0x16, 0x17, 0x5b, 0x5c, 0xf6, 0xf7,
1593 0xfe, 0xff, 0x80, 0x0d, 0x6d, 0x71, 0xde, 0xdf, 0x0e, 0x0f, 0x1f, 0x6e,
1594 0x6f, 0x1c, 0x1d, 0x5f, 0x7d, 0x7e, 0xae, 0xaf, 0xbb, 0xbc, 0xfa, 0x16,
1595 0x17, 0x1e, 0x1f, 0x46, 0x47, 0x4e, 0x4f, 0x58, 0x5a, 0x5c, 0x5e, 0x7e,
1596 0x7f, 0xb5, 0xc5, 0xd4, 0xd5, 0xdc, 0xf0, 0xf1, 0xf5, 0x72, 0x73, 0x8f,
1597 0x74, 0x75, 0x96, 0x2f, 0x5f, 0x26, 0x2e, 0x2f, 0xa7, 0xaf, 0xb7, 0xbf,
1598 0xc7, 0xcf, 0xd7, 0xdf, 0x9a, 0x40, 0x97, 0x98, 0x30, 0x8f, 0x1f, 0xc0,
1599 0xc1, 0xce, 0xff, 0x4e, 0x4f, 0x5a, 0x5b, 0x07, 0x08, 0x0f, 0x10, 0x27,
1600 0x2f, 0xee, 0xef, 0x6e, 0x6f, 0x37, 0x3d, 0x3f, 0x42, 0x45, 0x90, 0x91,
1601 0xfe, 0xff, 0x53, 0x67, 0x75, 0xc8, 0xc9, 0xd0, 0xd1, 0xd8, 0xd9, 0xe7,
1604 static constexpr singleton singletons1[] = {
1605 {0x00, 6}, {0x01, 1}, {0x03, 1}, {0x04, 2}, {0x08, 8}, {0x09, 2},
1606 {0x0a, 5}, {0x0b, 2}, {0x0e, 4}, {0x10, 1}, {0x11, 2}, {0x12, 5},
1607 {0x13, 17}, {0x14, 1}, {0x15, 2}, {0x17, 2}, {0x19, 13}, {0x1c, 5},
1608 {0x1d, 8}, {0x24, 1}, {0x6a, 3}, {0x6b, 2}, {0xbc, 2}, {0xd1, 2},
1609 {0xd4, 12}, {0xd5, 9}, {0xd6, 2}, {0xd7, 2}, {0xda, 1}, {0xe0, 5},
1610 {0xe1, 2}, {0xe8, 2}, {0xee, 32}, {0xf0, 4}, {0xf8, 2}, {0xf9, 2},
1611 {0xfa, 2}, {0xfb, 1},
1613 static constexpr unsigned char singletons1_lower[] = {
1614 0x0c, 0x27, 0x3b, 0x3e, 0x4e, 0x4f, 0x8f, 0x9e, 0x9e, 0x9f, 0x06, 0x07,
1615 0x09, 0x36, 0x3d, 0x3e, 0x56, 0xf3, 0xd0, 0xd1, 0x04, 0x14, 0x18, 0x36,
1616 0x37, 0x56, 0x57, 0x7f, 0xaa, 0xae, 0xaf, 0xbd, 0x35, 0xe0, 0x12, 0x87,
1617 0x89, 0x8e, 0x9e, 0x04, 0x0d, 0x0e, 0x11, 0x12, 0x29, 0x31, 0x34, 0x3a,
1618 0x45, 0x46, 0x49, 0x4a, 0x4e, 0x4f, 0x64, 0x65, 0x5c, 0xb6, 0xb7, 0x1b,
1619 0x1c, 0x07, 0x08, 0x0a, 0x0b, 0x14, 0x17, 0x36, 0x39, 0x3a, 0xa8, 0xa9,
1620 0xd8, 0xd9, 0x09, 0x37, 0x90, 0x91, 0xa8, 0x07, 0x0a, 0x3b, 0x3e, 0x66,
1621 0x69, 0x8f, 0x92, 0x6f, 0x5f, 0xee, 0xef, 0x5a, 0x62, 0x9a, 0x9b, 0x27,
1622 0x28, 0x55, 0x9d, 0xa0, 0xa1, 0xa3, 0xa4, 0xa7, 0xa8, 0xad, 0xba, 0xbc,
1623 0xc4, 0x06, 0x0b, 0x0c, 0x15, 0x1d, 0x3a, 0x3f, 0x45, 0x51, 0xa6, 0xa7,
1624 0xcc, 0xcd, 0xa0, 0x07, 0x19, 0x1a, 0x22, 0x25, 0x3e, 0x3f, 0xc5, 0xc6,
1625 0x04, 0x20, 0x23, 0x25, 0x26, 0x28, 0x33, 0x38, 0x3a, 0x48, 0x4a, 0x4c,
1626 0x50, 0x53, 0x55, 0x56, 0x58, 0x5a, 0x5c, 0x5e, 0x60, 0x63, 0x65, 0x66,
1627 0x6b, 0x73, 0x78, 0x7d, 0x7f, 0x8a, 0xa4, 0xaa, 0xaf, 0xb0, 0xc0, 0xd0,
1628 0xae, 0xaf, 0x79, 0xcc, 0x6e, 0x6f, 0x93,
1630 static constexpr unsigned char normal0[] = {
1631 0x00, 0x20, 0x5f, 0x22, 0x82, 0xdf, 0x04, 0x82, 0x44, 0x08, 0x1b, 0x04,
1632 0x06, 0x11, 0x81, 0xac, 0x0e, 0x80, 0xab, 0x35, 0x28, 0x0b, 0x80, 0xe0,
1633 0x03, 0x19, 0x08, 0x01, 0x04, 0x2f, 0x04, 0x34, 0x04, 0x07, 0x03, 0x01,
1634 0x07, 0x06, 0x07, 0x11, 0x0a, 0x50, 0x0f, 0x12, 0x07, 0x55, 0x07, 0x03,
1635 0x04, 0x1c, 0x0a, 0x09, 0x03, 0x08, 0x03, 0x07, 0x03, 0x02, 0x03, 0x03,
1636 0x03, 0x0c, 0x04, 0x05, 0x03, 0x0b, 0x06, 0x01, 0x0e, 0x15, 0x05, 0x3a,
1637 0x03, 0x11, 0x07, 0x06, 0x05, 0x10, 0x07, 0x57, 0x07, 0x02, 0x07, 0x15,
1638 0x0d, 0x50, 0x04, 0x43, 0x03, 0x2d, 0x03, 0x01, 0x04, 0x11, 0x06, 0x0f,
1639 0x0c, 0x3a, 0x04, 0x1d, 0x25, 0x5f, 0x20, 0x6d, 0x04, 0x6a, 0x25, 0x80,
1640 0xc8, 0x05, 0x82, 0xb0, 0x03, 0x1a, 0x06, 0x82, 0xfd, 0x03, 0x59, 0x07,
1641 0x15, 0x0b, 0x17, 0x09, 0x14, 0x0c, 0x14, 0x0c, 0x6a, 0x06, 0x0a, 0x06,
1642 0x1a, 0x06, 0x59, 0x07, 0x2b, 0x05, 0x46, 0x0a, 0x2c, 0x04, 0x0c, 0x04,
1643 0x01, 0x03, 0x31, 0x0b, 0x2c, 0x04, 0x1a, 0x06, 0x0b, 0x03, 0x80, 0xac,
1644 0x06, 0x0a, 0x06, 0x21, 0x3f, 0x4c, 0x04, 0x2d, 0x03, 0x74, 0x08, 0x3c,
1645 0x03, 0x0f, 0x03, 0x3c, 0x07, 0x38, 0x08, 0x2b, 0x05, 0x82, 0xff, 0x11,
1646 0x18, 0x08, 0x2f, 0x11, 0x2d, 0x03, 0x20, 0x10, 0x21, 0x0f, 0x80, 0x8c,
1647 0x04, 0x82, 0x97, 0x19, 0x0b, 0x15, 0x88, 0x94, 0x05, 0x2f, 0x05, 0x3b,
1648 0x07, 0x02, 0x0e, 0x18, 0x09, 0x80, 0xb3, 0x2d, 0x74, 0x0c, 0x80, 0xd6,
1649 0x1a, 0x0c, 0x05, 0x80, 0xff, 0x05, 0x80, 0xdf, 0x0c, 0xee, 0x0d, 0x03,
1650 0x84, 0x8d, 0x03, 0x37, 0x09, 0x81, 0x5c, 0x14, 0x80, 0xb8, 0x08, 0x80,
1651 0xcb, 0x2a, 0x38, 0x03, 0x0a, 0x06, 0x38, 0x08, 0x46, 0x08, 0x0c, 0x06,
1652 0x74, 0x0b, 0x1e, 0x03, 0x5a, 0x04, 0x59, 0x09, 0x80, 0x83, 0x18, 0x1c,
1653 0x0a, 0x16, 0x09, 0x4c, 0x04, 0x80, 0x8a, 0x06, 0xab, 0xa4, 0x0c, 0x17,
1654 0x04, 0x31, 0xa1, 0x04, 0x81, 0xda, 0x26, 0x07, 0x0c, 0x05, 0x05, 0x80,
1655 0xa5, 0x11, 0x81, 0x6d, 0x10, 0x78, 0x28, 0x2a, 0x06, 0x4c, 0x04, 0x80,
1656 0x8d, 0x04, 0x80, 0xbe, 0x03, 0x1b, 0x03, 0x0f, 0x0d,
1658 static constexpr unsigned char normal1[] = {
1659 0x5e, 0x22, 0x7b, 0x05, 0x03, 0x04, 0x2d, 0x03, 0x66, 0x03, 0x01, 0x2f,
1660 0x2e, 0x80, 0x82, 0x1d, 0x03, 0x31, 0x0f, 0x1c, 0x04, 0x24, 0x09, 0x1e,
1661 0x05, 0x2b, 0x05, 0x44, 0x04, 0x0e, 0x2a, 0x80, 0xaa, 0x06, 0x24, 0x04,
1662 0x24, 0x04, 0x28, 0x08, 0x34, 0x0b, 0x01, 0x80, 0x90, 0x81, 0x37, 0x09,
1663 0x16, 0x0a, 0x08, 0x80, 0x98, 0x39, 0x03, 0x63, 0x08, 0x09, 0x30, 0x16,
1664 0x05, 0x21, 0x03, 0x1b, 0x05, 0x01, 0x40, 0x38, 0x04, 0x4b, 0x05, 0x2f,
1665 0x04, 0x0a, 0x07, 0x09, 0x07, 0x40, 0x20, 0x27, 0x04, 0x0c, 0x09, 0x36,
1666 0x03, 0x3a, 0x05, 0x1a, 0x07, 0x04, 0x0c, 0x07, 0x50, 0x49, 0x37, 0x33,
1667 0x0d, 0x33, 0x07, 0x2e, 0x08, 0x0a, 0x81, 0x26, 0x52, 0x4e, 0x28, 0x08,
1668 0x2a, 0x56, 0x1c, 0x14, 0x17, 0x09, 0x4e, 0x04, 0x1e, 0x0f, 0x43, 0x0e,
1669 0x19, 0x07, 0x0a, 0x06, 0x48, 0x08, 0x27, 0x09, 0x75, 0x0b, 0x3f, 0x41,
1670 0x2a, 0x06, 0x3b, 0x05, 0x0a, 0x06, 0x51, 0x06, 0x01, 0x05, 0x10, 0x03,
1671 0x05, 0x80, 0x8b, 0x62, 0x1e, 0x48, 0x08, 0x0a, 0x80, 0xa6, 0x5e, 0x22,
1672 0x45, 0x0b, 0x0a, 0x06, 0x0d, 0x13, 0x39, 0x07, 0x0a, 0x36, 0x2c, 0x04,
1673 0x10, 0x80, 0xc0, 0x3c, 0x64, 0x53, 0x0c, 0x48, 0x09, 0x0a, 0x46, 0x45,
1674 0x1b, 0x48, 0x08, 0x53, 0x1d, 0x39, 0x81, 0x07, 0x46, 0x0a, 0x1d, 0x03,
1675 0x47, 0x49, 0x37, 0x03, 0x0e, 0x08, 0x0a, 0x06, 0x39, 0x07, 0x0a, 0x81,
1676 0x36, 0x19, 0x80, 0xb7, 0x01, 0x0f, 0x32, 0x0d, 0x83, 0x9b, 0x66, 0x75,
1677 0x0b, 0x80, 0xc4, 0x8a, 0xbc, 0x84, 0x2f, 0x8f, 0xd1, 0x82, 0x47, 0xa1,
1678 0xb9, 0x82, 0x39, 0x07, 0x2a, 0x04, 0x02, 0x60, 0x26, 0x0a, 0x46, 0x0a,
1679 0x28, 0x05, 0x13, 0x82, 0xb0, 0x5b, 0x65, 0x4b, 0x04, 0x39, 0x07, 0x11,
1680 0x40, 0x05, 0x0b, 0x02, 0x0e, 0x97, 0xf8, 0x08, 0x84, 0xd6, 0x2a, 0x09,
1681 0xa2, 0xf7, 0x81, 0x1f, 0x31, 0x03, 0x11, 0x04, 0x08, 0x81, 0x8c, 0x89,
1682 0x04, 0x6b, 0x05, 0x0d, 0x03, 0x09, 0x07, 0x10, 0x93, 0x60, 0x80, 0xf6,
1683 0x0a, 0x73, 0x08, 0x6e, 0x17, 0x46, 0x80, 0x9a, 0x14, 0x0c, 0x57, 0x09,
1684 0x19, 0x80, 0x87, 0x81, 0x47, 0x03, 0x85, 0x42, 0x0f, 0x15, 0x85, 0x50,
1685 0x2b, 0x80, 0xd5, 0x2d, 0x03, 0x1a, 0x04, 0x02, 0x81, 0x70, 0x3a, 0x05,
1686 0x01, 0x85, 0x00, 0x80, 0xd7, 0x29, 0x4c, 0x04, 0x0a, 0x04, 0x02, 0x83,
1687 0x11, 0x44, 0x4c, 0x3d, 0x80, 0xc2, 0x3c, 0x06, 0x01, 0x04, 0x55, 0x05,
1688 0x1b, 0x34, 0x02, 0x81, 0x0e, 0x2c, 0x04, 0x64, 0x0c, 0x56, 0x0a, 0x80,
1689 0xae, 0x38, 0x1d, 0x0d, 0x2c, 0x04, 0x09, 0x07, 0x02, 0x0e, 0x06, 0x80,
1690 0x9a, 0x83, 0xd8, 0x08, 0x0d, 0x03, 0x0d, 0x03, 0x74, 0x0c, 0x59, 0x07,
1691 0x0c, 0x14, 0x0c, 0x04, 0x38, 0x08, 0x0a, 0x06, 0x28, 0x08, 0x22, 0x4e,
1692 0x81, 0x54, 0x0c, 0x15, 0x03, 0x03, 0x05, 0x07, 0x09, 0x19, 0x07, 0x07,
1693 0x09, 0x03, 0x0d, 0x07, 0x29, 0x80, 0xcb, 0x25, 0x0a, 0x84, 0x06,
1695 auto lower =
static_cast<uint16_t>(cp);
1698 sizeof(singletons0) /
sizeof(*singletons0),
1699 singletons0_lower, normal0,
sizeof(normal0));
1703 sizeof(singletons1) /
sizeof(*singletons1),
1704 singletons1_lower, normal1,
sizeof(normal1));
1706 if (0x2a6de <= cp && cp < 0x2a700)
return false;
1707 if (0x2b735 <= cp && cp < 0x2b740)
return false;
1708 if (0x2b81e <= cp && cp < 0x2b820)
return false;
1709 if (0x2cea2 <= cp && cp < 0x2ceb0)
return false;
1710 if (0x2ebe1 <= cp && cp < 0x2f800)
return false;
1711 if (0x2fa1e <= cp && cp < 0x30000)
return false;
1712 if (0x3134b <= cp && cp < 0xe0100)
return false;
1713 if (0xe01f0 <= cp && cp < 0x110000)
return false;
1714 return cp < 0x110000;
then any Derivative Works that You distribute must include a readable copy of the attribution notices contained within such NOTICE file
Definition: ThirdPartyNotices.txt:195
constexpr common_return_t< T1, T2 > beta(const T1 a, const T2 b) noexcept
Compile-time beta function.
Definition: beta.hpp:36
\rst Parsing context consisting of a format string range being parsed and an argument counter for aut...
Definition: core.h:654
typename basic_string_view< Char >::iterator iterator
Definition: core.h:663
\rst A dynamically growing memory buffer for trivially copyable/constructible types with the first SI...
Definition: format.h:819
constexpr auto size() const noexcept -> size_t
Returns the string size.
Definition: core.h:475
constexpr auto data() const noexcept -> const Char *
Returns a pointer to the string data.
Definition: core.h:472
Definition: format.h:2707
\rst A contiguous memory buffer with an optional growing ability.
Definition: core.h:862
FMT_CONSTEXPR auto data() noexcept -> T *
Returns a pointer to the buffer data.
Definition: core.h:908
constexpr auto size() const noexcept -> size_t
Returns the size of this buffer.
Definition: core.h:902
constexpr uint64_t low() const noexcept
Definition: format.h:333
constexpr uint64_t high() const noexcept
Definition: format.h:332
constexpr locale_ref()
Definition: core.h:1715
auto get() const -> Locale
#define FMT_ASSERT(condition, message)
Definition: core.h:369
basic_string_view< char > string_view
Definition: core.h:520
uint128_opt
Definition: core.h:400
FMT_API void vprint_mojibake(std::FILE *, string_view, format_args)
Definition: core.h:3020
constexpr auto count() -> size_t
Definition: core.h:1204
#define FMT_CONSTEXPR
Definition: core.h:106
#define FMT_BEGIN_NAMESPACE
Definition: core.h:214
#define FMT_API
Definition: core.h:246
conditional_t< std::is_same< T, char >::value, appender, std::back_insert_iterator< buffer< T > > > buffer_appender
Definition: core.h:1106
#define FMT_INLINE
Definition: core.h:199
FMT_CONSTEXPR auto to_unsigned(Int value) -> typename std::make_unsigned< Int >::type
Definition: core.h:407
typename std::conditional< B, T, F >::type conditional_t
Definition: core.h:300
#define FMT_END_NAMESPACE
Definition: core.h:217
const Scalar & y
Definition: MathFunctions.h:821
EIGEN_CONSTEXPR Index size(const T &x)
Definition: Meta.h:479
EIGEN_CONSTEXPR Index first(const T &x) EIGEN_NOEXCEPT
Definition: IndexedViewHelper.h:81
::uint64_t uint64_t
Definition: Meta.h:58
::uint16_t uint16_t
Definition: Meta.h:54
::uint32_t uint32_t
Definition: Meta.h:56
uint32_t divide_by_10_to_kappa_plus_1(uint32_t n) noexcept
Definition: format-inl.h:278
bool is_left_endpoint_integer_shorter_interval(int exponent) noexcept
Definition: format-inl.h:1141
uint32_t small_division_by_pow10(uint32_t n) noexcept
Definition: format-inl.h:269
FMT_INLINE int remove_trailing_zeros(uint32_t &n) noexcept
Definition: format-inl.h:1149
uint64_t umul96_upper64(uint32_t x, uint64_t y) noexcept
Definition: format-inl.h:198
int shift_amount
Definition: format-inl.h:237
uint32_t divisor
Definition: format-inl.h:236
int floor_log2_pow10(int e) noexcept
Definition: format-inl.h:226
uint64_t umul128_upper64(uint64_t x, uint64_t y) noexcept
Definition: format-inl.h:176
static constexpr struct detail::dragonbox::@783 div_small_pow10_infos[]
uint64_t umul96_lower64(uint32_t x, uint64_t y) noexcept
Definition: format-inl.h:213
FMT_INLINE decimal_fp< T > shorter_interval_case(int exponent) noexcept
Definition: format-inl.h:1225
int floor_log10_pow2_minus_log10_4_over_3(int e) noexcept
Definition: format-inl.h:230
uint128_fallback umul192_upper128(uint64_t x, uint128_fallback y) noexcept
Definition: format-inl.h:189
int floor_log10_pow2(int e) noexcept
Definition: format-inl.h:219
bool check_divisibility_and_divide_by_pow10(uint32_t &n) noexcept
Definition: format-inl.h:244
uint128_fallback umul192_lower128(uint64_t x, uint128_fallback y) noexcept
Definition: format-inl.h:204
decimal_fp< T > to_decimal(T x) noexcept
Definition: format-inl.h:1271
uint128_fallback umul128(uint64_t x, uint64_t y) noexcept
Definition: format-inl.h:145
FMT_FUNC void format_error_code(detail::buffer< char > &out, int error_code, string_view message) noexcept
Definition: format-inl.h:47
auto write(OutputIt out, const std::tm &time, const std::locale &loc, char format, char modifier=0) -> OutputIt
Definition: chrono.h:426
FMT_FUNC void print(std::FILE *f, string_view text)
Definition: format-inl.h:1499
FMT_CONSTEXPR uint32_t rotr(uint32_t n, uint32_t r) noexcept
Definition: format-inl.h:135
FMT_FUNC void report_error(format_func func, int error_code, const char *message) noexcept
Definition: format-inl.h:70
constexpr uint32_t invalid_code_point
Definition: format.h:639
FMT_FUNC void throw_format_error(const char *message)
Definition: format-inl.h:43
FMT_FUNC void assert_fail(const char *file, int line, const char *message)
Definition: format-inl.h:34
bool operator==(basic_fp< F > x, basic_fp< F > y)
Definition: format-inl.h:130
void fwrite_fully(const void *ptr, size_t size, size_t count, FILE *stream)
Definition: format-inl.h:80
FMT_FUNC Char decimal_point_impl(locale_ref loc)
Definition: format-inl.h:103
auto is_printable(uint16_t x, const singleton *singletons, size_t singletons_size, const unsigned char *singleton_lowers, const unsigned char *normal, size_t normal_size) -> bool
Definition: format-inl.h:1535
FMT_CONSTEXPR void for_each_codepoint(string_view s, F f)
Definition: format.h:644
result
Definition: format.h:2556
Definition: format.h:1286
static constexpr const charge::coulomb_t e(1.6021766208e-19)
elementary charge.
static constexpr const velocity::meters_per_second_t c(299792458.0)
Speed of light in vacuum.
std::string to_string(const T &t)
Definition: base.h:93
auto fprintf(std::FILE *f, const S &fmt, const T &... args) -> int
\rst Prints formatted data to the file f.
Definition: printf.h:607
Definition: format.h:1390
int e
Definition: format.h:1392
F f
Definition: format.h:1391
bool is_integer
Definition: format-inl.h:1093
bool parity
Definition: format-inl.h:1092
carrier_uint result
Definition: format-inl.h:1088
bool is_integer
Definition: format-inl.h:1089
static compute_mul_result compute_mul(carrier_uint u, const cache_entry_type &cache) noexcept
Definition: format-inl.h:1096
static uint32_t compute_delta(cache_entry_type const &cache, int beta) noexcept
Definition: format-inl.h:1102
float_info< double >::carrier_uint carrier_uint
Definition: format-inl.h:383
static carrier_uint compute_right_endpoint_for_shorter_interval_case(const cache_entry_type &cache, int beta) noexcept
Definition: format-inl.h:1124
static compute_mul_parity_result compute_mul_parity(carrier_uint two_f, const cache_entry_type &cache, int beta) noexcept
Definition: format-inl.h:1107
static carrier_uint compute_round_up_for_shorter_interval_case(const cache_entry_type &cache, int beta) noexcept
Definition: format-inl.h:1131
static carrier_uint compute_left_endpoint_for_shorter_interval_case(const cache_entry_type &cache, int beta) noexcept
Definition: format-inl.h:1117
static uint128_fallback get_cached_power(int k) noexcept
Definition: format-inl.h:386
bool parity
Definition: format-inl.h:333
bool is_integer
Definition: format-inl.h:334
carrier_uint result
Definition: format-inl.h:329
bool is_integer
Definition: format-inl.h:330
float_info< float >::carrier_uint carrier_uint
Definition: format-inl.h:292
uint64_t cache_entry_type
Definition: format-inl.h:293
static uint64_t get_cached_power(int k) noexcept
Definition: format-inl.h:295
static carrier_uint compute_right_endpoint_for_shorter_interval_case(const cache_entry_type &cache, int beta) noexcept
Definition: format-inl.h:366
static carrier_uint compute_left_endpoint_for_shorter_interval_case(const cache_entry_type &cache, int beta) noexcept
Definition: format-inl.h:359
static carrier_uint compute_round_up_for_shorter_interval_case(const cache_entry_type &cache, int beta) noexcept
Definition: format-inl.h:373
static compute_mul_parity_result compute_mul_parity(carrier_uint two_f, const cache_entry_type &cache, int beta) noexcept
Definition: format-inl.h:349
static uint32_t compute_delta(const cache_entry_type &cache, int beta) noexcept
Definition: format-inl.h:344
static compute_mul_result compute_mul(carrier_uint u, const cache_entry_type &cache) noexcept
Definition: format-inl.h:337
Definition: format-inl.h:289
Definition: format-inl.h:1530
unsigned char lower_count
Definition: format-inl.h:1532
unsigned char upper
Definition: format-inl.h:1531
Definition: format.h:1160
auto vformat_to(OutputIt out, const S &format_str, basic_format_args< buffer_context< type_identity_t< Char > > > args) -> OutputIt
Definition: xchar.h:124
auto format_to(OutputIt out, const S &fmt, Args &&... args) -> OutputIt
Definition: xchar.h:136