38#ifndef FASTFLOAT_FAST_FLOAT_H
39#define FASTFLOAT_FAST_FLOAT_H
41#include <system_error>
102#ifndef FASTFLOAT_FLOAT_COMMON_H
103#define FASTFLOAT_FLOAT_COMMON_H
110#if (defined(__x86_64) || defined(__x86_64__) || defined(_M_X64) \
111 || defined(__amd64) || defined(__aarch64__) || defined(_M_ARM64) \
112 || defined(__MINGW64__) \
113 || defined(__s390x__) \
114 || (defined(__ppc64__) || defined(__PPC64__) || defined(__ppc64le__) || defined(__PPC64LE__)) \
115 || defined(__EMSCRIPTEN__))
116#define FASTFLOAT_64BIT
117#elif (defined(__i386) || defined(__i386__) || defined(_M_IX86) \
118 || defined(__arm__) || defined(_M_ARM) \
119 || defined(__MINGW32__))
120#define FASTFLOAT_32BIT
125 #if SIZE_MAX == 0xffff
126 #error Unknown platform (16-bit, unsupported)
127 #elif SIZE_MAX == 0xffffffff
128 #define FASTFLOAT_32BIT
129 #elif SIZE_MAX == 0xffffffffffffffff
130 #define FASTFLOAT_64BIT
132 #error Unknown platform (not 32-bit, not 64-bit?)
136#if ((defined(_WIN32) || defined(_WIN64)) && !defined(__clang__))
140#if defined(_MSC_VER) && !defined(__clang__)
141#define FASTFLOAT_VISUAL_STUDIO 1
145#define FASTFLOAT_IS_BIG_ENDIAN 0
147#if defined(__APPLE__) || defined(__FreeBSD__)
148#include <machine/endian.h>
149#elif defined(sun) || defined(__sun)
150#include <sys/byteorder.h>
155#ifndef __BYTE_ORDER__
157#define FASTFLOAT_IS_BIG_ENDIAN 0
160#ifndef __ORDER_LITTLE_ENDIAN__
162#define FASTFLOAT_IS_BIG_ENDIAN 0
165#if __BYTE_ORDER__ == __ORDER_LITTLE_ENDIAN__
166#define FASTFLOAT_IS_BIG_ENDIAN 0
168#define FASTFLOAT_IS_BIG_ENDIAN 1
172#ifdef FASTFLOAT_VISUAL_STUDIO
173#define fastfloat_really_inline __forceinline
175#define fastfloat_really_inline inline __attribute__((always_inline))
178#ifndef FASTFLOAT_ASSERT
179#define FASTFLOAT_ASSERT(x) { if (!(x)) abort(); }
182#ifndef FASTFLOAT_DEBUG_ASSERT
184#define FASTFLOAT_DEBUG_ASSERT(x) assert(x)
188#define FASTFLOAT_TRY(x) { if (!(x)) return false; }
195 char running_diff{0};
196 for (
size_t i = 0; i < length; i++) {
197 running_diff |= (input1[i] ^ input2[i]);
199 return (running_diff == 0) || (running_diff == 32);
202#ifndef FLT_EVAL_METHOD
203#error "FLT_EVAL_METHOD should be defined, please include cfloat."
214 constexpr size_t len() const noexcept {
233 assert(input_num > 0);
234#ifdef FASTFLOAT_VISUAL_STUDIO
235 #if defined(_M_X64) || defined(_M_ARM64)
236 unsigned long leading_zero = 0;
239 _BitScanReverse64(&leading_zero, input_num);
240 return (
int)(63 - leading_zero);
243 if(input_num & uint64_t(0xffffffff00000000)) input_num >>= 32, last_bit |= 32;
244 if(input_num & uint64_t( 0xffff0000)) input_num >>= 16, last_bit |= 16;
245 if(input_num & uint64_t( 0xff00)) input_num >>= 8, last_bit |= 8;
246 if(input_num & uint64_t( 0xf0)) input_num >>= 4, last_bit |= 4;
247 if(input_num & uint64_t( 0xc)) input_num >>= 2, last_bit |= 2;
248 if(input_num & uint64_t( 0x2)) input_num >>= 1, last_bit |= 1;
249 return 63 - last_bit;
252 return __builtin_clzll(input_num);
256#ifdef FASTFLOAT_32BIT
260 return x * (uint64_t)y;
264#if !defined(__MINGW64__)
267 uint64_t ad = emulu((uint32_t)(ab >> 32), (uint32_t)cd);
268 uint64_t bd = emulu((uint32_t)ab, (uint32_t)cd);
269 uint64_t adbc = ad + emulu((uint32_t)ab, (uint32_t)(cd >> 32));
270 uint64_t adbc_carry = !!(adbc < ad);
271 uint64_t lo = bd + (adbc << 32);
272 *hi = emulu((uint32_t)(ab >> 32), (uint32_t)(cd >> 32)) + (adbc >> 32) +
273 (adbc_carry << 32) + !!(lo < bd);
287 answer.
high = __umulh(a, b);
289#elif defined(FASTFLOAT_32BIT) || (defined(_WIN64) && !defined(__clang__))
290 answer.
low = _umul128(a, b, &answer.
high);
291#elif defined(FASTFLOAT_64BIT)
292 __uint128_t r = ((__uint128_t)a) * b;
293 answer.
low = uint64_t(r);
294 answer.
high = uint64_t(r >> 64);
296 #error Not implemented
317 1e0, 1e1, 1e2, 1e3, 1e4, 1e5, 1e6, 1e7, 1e8, 1e9, 1e10, 1e11,
318 1e12, 1e13, 1e14, 1e15, 1e16, 1e17, 1e18, 1e19, 1e20, 1e21, 1e22};
320 1e6, 1e7, 1e8, 1e9, 1e10};
379#if (FLT_EVAL_METHOD != 1) && (FLT_EVAL_METHOD != 0)
386#if (FLT_EVAL_METHOD != 1) && (FLT_EVAL_METHOD != 0)
401 return uint64_t(2) << mantissa_explicit_bits();
404 return uint64_t(2) << mantissa_explicit_bits();
449#if FASTFLOAT_IS_BIG_ENDIAN == 1
450 if (std::is_same<T, float>::value) {
451 ::memcpy(&value, (
char *)&word + 4,
sizeof(T));
453 ::memcpy(&value, &word,
sizeof(T));
457 ::memcpy(&value, &word,
sizeof(T));
466#ifndef FASTFLOAT_ASCII_NUMBER_H
467#define FASTFLOAT_ASCII_NUMBER_H
482 return (val & 0xFF00000000000000) >> 56
483 | (val & 0x00FF000000000000) >> 40
484 | (val & 0x0000FF0000000000) >> 24
485 | (val & 0x000000FF00000000) >> 8
486 | (val & 0x00000000FF000000) << 8
487 | (val & 0x0000000000FF0000) << 24
488 | (val & 0x000000000000FF00) << 40
489 | (val & 0x00000000000000FF) << 56;
494 ::memcpy(&val, chars,
sizeof(uint64_t));
495#if FASTFLOAT_IS_BIG_ENDIAN == 1
503#if FASTFLOAT_IS_BIG_ENDIAN == 1
507 ::memcpy(chars, &val,
sizeof(uint64_t));
512 const uint64_t mask = 0x000000FF000000FF;
513 const uint64_t mul1 = 0x000F424000000064;
514 const uint64_t mul2 = 0x0000271000000001;
515 val -= 0x3030303030303030;
516 val = (val * 10) + (val >> 8);
517 val = (((val & mask) * mul1) + (((val >> 16) & mask) * mul2)) >> 32;
518 return uint32_t(val);
527 return !((((val + 0x4646464646464646) | (val - 0x3030303030303030)) &
528 0x8080808080808080));
554 const char decimal_point = options.decimal_point;
557 answer.
valid =
false;
565 if (!
is_integer(*p) && (*p != decimal_point)) {
569 const char *
const start_digits = p;
584 const char *
const end_of_integer_part = p;
585 int64_t digit_count = int64_t(end_of_integer_part - start_digits);
587 int64_t exponent = 0;
588 if ((p != pend) && (*p == decimal_point)) {
590 const char* before = p;
598 uint8_t digit = uint8_t(*p -
'0');
602 exponent = before - p;
604 digit_count -= exponent;
607 if (digit_count == 0) {
610 int64_t exp_number = 0;
612 const char * location_of_e = p;
614 bool neg_exp =
false;
615 if ((p != pend) && (
'-' == *p)) {
618 }
else if ((p != pend) && (
'+' == *p)) {
630 uint8_t digit = uint8_t(*p -
'0');
631 if (exp_number < 0x10000000) {
632 exp_number = 10 * exp_number + digit;
636 if(neg_exp) { exp_number = - exp_number; }
637 exponent += exp_number;
651 if (digit_count > 19) {
656 const char *start = start_digits;
657 while ((start != pend) && (*start ==
'0' || *start == decimal_point)) {
658 if(*start ==
'0') { digit_count --; }
661 if (digit_count > 19) {
668 const char* int_end = p + answer.
integer.
len();
669 const uint64_t minimal_nineteen_digit_integer{1000000000000000000};
670 while((i < minimal_nineteen_digit_integer) && (p != int_end)) {
671 i = i * 10 + uint64_t(*p -
'0');
674 if (i >= minimal_nineteen_digit_integer) {
675 exponent = end_of_integer_part - p + exp_number;
679 while((i < minimal_nineteen_digit_integer) && (p != frac_end)) {
680 i = i * 10 + uint64_t(*p -
'0');
698#ifndef FASTFLOAT_FAST_TABLE_H
699#define FASTFLOAT_FAST_TABLE_H
729template <
class unused =
void>
739template <
class unused>
741 0xeef453d6923bd65a,0x113faa2906a13b3f,
742 0x9558b4661b6565f8,0x4ac7ca59a424c507,
743 0xbaaee17fa23ebf76,0x5d79bcf00d2df649,
744 0xe95a99df8ace6f53,0xf4d82c2c107973dc,
745 0x91d8a02bb6c10594,0x79071b9b8a4be869,
746 0xb64ec836a47146f9,0x9748e2826cdee284,
747 0xe3e27a444d8d98b7,0xfd1b1b2308169b25,
748 0x8e6d8c6ab0787f72,0xfe30f0f5e50e20f7,
749 0xb208ef855c969f4f,0xbdbd2d335e51a935,
750 0xde8b2b66b3bc4723,0xad2c788035e61382,
751 0x8b16fb203055ac76,0x4c3bcb5021afcc31,
752 0xaddcb9e83c6b1793,0xdf4abe242a1bbf3d,
753 0xd953e8624b85dd78,0xd71d6dad34a2af0d,
754 0x87d4713d6f33aa6b,0x8672648c40e5ad68,
755 0xa9c98d8ccb009506,0x680efdaf511f18c2,
756 0xd43bf0effdc0ba48,0x212bd1b2566def2,
757 0x84a57695fe98746d,0x14bb630f7604b57,
758 0xa5ced43b7e3e9188,0x419ea3bd35385e2d,
759 0xcf42894a5dce35ea,0x52064cac828675b9,
760 0x818995ce7aa0e1b2,0x7343efebd1940993,
761 0xa1ebfb4219491a1f,0x1014ebe6c5f90bf8,
762 0xca66fa129f9b60a6,0xd41a26e077774ef6,
763 0xfd00b897478238d0,0x8920b098955522b4,
764 0x9e20735e8cb16382,0x55b46e5f5d5535b0,
765 0xc5a890362fddbc62,0xeb2189f734aa831d,
766 0xf712b443bbd52b7b,0xa5e9ec7501d523e4,
767 0x9a6bb0aa55653b2d,0x47b233c92125366e,
768 0xc1069cd4eabe89f8,0x999ec0bb696e840a,
769 0xf148440a256e2c76,0xc00670ea43ca250d,
770 0x96cd2a865764dbca,0x380406926a5e5728,
771 0xbc807527ed3e12bc,0xc605083704f5ecf2,
772 0xeba09271e88d976b,0xf7864a44c633682e,
773 0x93445b8731587ea3,0x7ab3ee6afbe0211d,
774 0xb8157268fdae9e4c,0x5960ea05bad82964,
775 0xe61acf033d1a45df,0x6fb92487298e33bd,
776 0x8fd0c16206306bab,0xa5d3b6d479f8e056,
777 0xb3c4f1ba87bc8696,0x8f48a4899877186c,
778 0xe0b62e2929aba83c,0x331acdabfe94de87,
779 0x8c71dcd9ba0b4925,0x9ff0c08b7f1d0b14,
780 0xaf8e5410288e1b6f,0x7ecf0ae5ee44dd9,
781 0xdb71e91432b1a24a,0xc9e82cd9f69d6150,
782 0x892731ac9faf056e,0xbe311c083a225cd2,
783 0xab70fe17c79ac6ca,0x6dbd630a48aaf406,
784 0xd64d3d9db981787d,0x92cbbccdad5b108,
785 0x85f0468293f0eb4e,0x25bbf56008c58ea5,
786 0xa76c582338ed2621,0xaf2af2b80af6f24e,
787 0xd1476e2c07286faa,0x1af5af660db4aee1,
788 0x82cca4db847945ca,0x50d98d9fc890ed4d,
789 0xa37fce126597973c,0xe50ff107bab528a0,
790 0xcc5fc196fefd7d0c,0x1e53ed49a96272c8,
791 0xff77b1fcbebcdc4f,0x25e8e89c13bb0f7a,
792 0x9faacf3df73609b1,0x77b191618c54e9ac,
793 0xc795830d75038c1d,0xd59df5b9ef6a2417,
794 0xf97ae3d0d2446f25,0x4b0573286b44ad1d,
795 0x9becce62836ac577,0x4ee367f9430aec32,
796 0xc2e801fb244576d5,0x229c41f793cda73f,
797 0xf3a20279ed56d48a,0x6b43527578c1110f,
798 0x9845418c345644d6,0x830a13896b78aaa9,
799 0xbe5691ef416bd60c,0x23cc986bc656d553,
800 0xedec366b11c6cb8f,0x2cbfbe86b7ec8aa8,
801 0x94b3a202eb1c3f39,0x7bf7d71432f3d6a9,
802 0xb9e08a83a5e34f07,0xdaf5ccd93fb0cc53,
803 0xe858ad248f5c22c9,0xd1b3400f8f9cff68,
804 0x91376c36d99995be,0x23100809b9c21fa1,
805 0xb58547448ffffb2d,0xabd40a0c2832a78a,
806 0xe2e69915b3fff9f9,0x16c90c8f323f516c,
807 0x8dd01fad907ffc3b,0xae3da7d97f6792e3,
808 0xb1442798f49ffb4a,0x99cd11cfdf41779c,
809 0xdd95317f31c7fa1d,0x40405643d711d583,
810 0x8a7d3eef7f1cfc52,0x482835ea666b2572,
811 0xad1c8eab5ee43b66,0xda3243650005eecf,
812 0xd863b256369d4a40,0x90bed43e40076a82,
813 0x873e4f75e2224e68,0x5a7744a6e804a291,
814 0xa90de3535aaae202,0x711515d0a205cb36,
815 0xd3515c2831559a83,0xd5a5b44ca873e03,
816 0x8412d9991ed58091,0xe858790afe9486c2,
817 0xa5178fff668ae0b6,0x626e974dbe39a872,
818 0xce5d73ff402d98e3,0xfb0a3d212dc8128f,
819 0x80fa687f881c7f8e,0x7ce66634bc9d0b99,
820 0xa139029f6a239f72,0x1c1fffc1ebc44e80,
821 0xc987434744ac874e,0xa327ffb266b56220,
822 0xfbe9141915d7a922,0x4bf1ff9f0062baa8,
823 0x9d71ac8fada6c9b5,0x6f773fc3603db4a9,
824 0xc4ce17b399107c22,0xcb550fb4384d21d3,
825 0xf6019da07f549b2b,0x7e2a53a146606a48,
826 0x99c102844f94e0fb,0x2eda7444cbfc426d,
827 0xc0314325637a1939,0xfa911155fefb5308,
828 0xf03d93eebc589f88,0x793555ab7eba27ca,
829 0x96267c7535b763b5,0x4bc1558b2f3458de,
830 0xbbb01b9283253ca2,0x9eb1aaedfb016f16,
831 0xea9c227723ee8bcb,0x465e15a979c1cadc,
832 0x92a1958a7675175f,0xbfacd89ec191ec9,
833 0xb749faed14125d36,0xcef980ec671f667b,
834 0xe51c79a85916f484,0x82b7e12780e7401a,
835 0x8f31cc0937ae58d2,0xd1b2ecb8b0908810,
836 0xb2fe3f0b8599ef07,0x861fa7e6dcb4aa15,
837 0xdfbdcece67006ac9,0x67a791e093e1d49a,
838 0x8bd6a141006042bd,0xe0c8bb2c5c6d24e0,
839 0xaecc49914078536d,0x58fae9f773886e18,
840 0xda7f5bf590966848,0xaf39a475506a899e,
841 0x888f99797a5e012d,0x6d8406c952429603,
842 0xaab37fd7d8f58178,0xc8e5087ba6d33b83,
843 0xd5605fcdcf32e1d6,0xfb1e4a9a90880a64,
844 0x855c3be0a17fcd26,0x5cf2eea09a55067f,
845 0xa6b34ad8c9dfc06f,0xf42faa48c0ea481e,
846 0xd0601d8efc57b08b,0xf13b94daf124da26,
847 0x823c12795db6ce57,0x76c53d08d6b70858,
848 0xa2cb1717b52481ed,0x54768c4b0c64ca6e,
849 0xcb7ddcdda26da268,0xa9942f5dcf7dfd09,
850 0xfe5d54150b090b02,0xd3f93b35435d7c4c,
851 0x9efa548d26e5a6e1,0xc47bc5014a1a6daf,
852 0xc6b8e9b0709f109a,0x359ab6419ca1091b,
853 0xf867241c8cc6d4c0,0xc30163d203c94b62,
854 0x9b407691d7fc44f8,0x79e0de63425dcf1d,
855 0xc21094364dfb5636,0x985915fc12f542e4,
856 0xf294b943e17a2bc4,0x3e6f5b7b17b2939d,
857 0x979cf3ca6cec5b5a,0xa705992ceecf9c42,
858 0xbd8430bd08277231,0x50c6ff782a838353,
859 0xece53cec4a314ebd,0xa4f8bf5635246428,
860 0x940f4613ae5ed136,0x871b7795e136be99,
861 0xb913179899f68584,0x28e2557b59846e3f,
862 0xe757dd7ec07426e5,0x331aeada2fe589cf,
863 0x9096ea6f3848984f,0x3ff0d2c85def7621,
864 0xb4bca50b065abe63,0xfed077a756b53a9,
865 0xe1ebce4dc7f16dfb,0xd3e8495912c62894,
866 0x8d3360f09cf6e4bd,0x64712dd7abbbd95c,
867 0xb080392cc4349dec,0xbd8d794d96aacfb3,
868 0xdca04777f541c567,0xecf0d7a0fc5583a0,
869 0x89e42caaf9491b60,0xf41686c49db57244,
870 0xac5d37d5b79b6239,0x311c2875c522ced5,
871 0xd77485cb25823ac7,0x7d633293366b828b,
872 0x86a8d39ef77164bc,0xae5dff9c02033197,
873 0xa8530886b54dbdeb,0xd9f57f830283fdfc,
874 0xd267caa862a12d66,0xd072df63c324fd7b,
875 0x8380dea93da4bc60,0x4247cb9e59f71e6d,
876 0xa46116538d0deb78,0x52d9be85f074e608,
877 0xcd795be870516656,0x67902e276c921f8b,
878 0x806bd9714632dff6,0xba1cd8a3db53b6,
879 0xa086cfcd97bf97f3,0x80e8a40eccd228a4,
880 0xc8a883c0fdaf7df0,0x6122cd128006b2cd,
881 0xfad2a4b13d1b5d6c,0x796b805720085f81,
882 0x9cc3a6eec6311a63,0xcbe3303674053bb0,
883 0xc3f490aa77bd60fc,0xbedbfc4411068a9c,
884 0xf4f1b4d515acb93b,0xee92fb5515482d44,
885 0x991711052d8bf3c5,0x751bdd152d4d1c4a,
886 0xbf5cd54678eef0b6,0xd262d45a78a0635d,
887 0xef340a98172aace4,0x86fb897116c87c34,
888 0x9580869f0e7aac0e,0xd45d35e6ae3d4da0,
889 0xbae0a846d2195712,0x8974836059cca109,
890 0xe998d258869facd7,0x2bd1a438703fc94b,
891 0x91ff83775423cc06,0x7b6306a34627ddcf,
892 0xb67f6455292cbf08,0x1a3bc84c17b1d542,
893 0xe41f3d6a7377eeca,0x20caba5f1d9e4a93,
894 0x8e938662882af53e,0x547eb47b7282ee9c,
895 0xb23867fb2a35b28d,0xe99e619a4f23aa43,
896 0xdec681f9f4c31f31,0x6405fa00e2ec94d4,
897 0x8b3c113c38f9f37e,0xde83bc408dd3dd04,
898 0xae0b158b4738705e,0x9624ab50b148d445,
899 0xd98ddaee19068c76,0x3badd624dd9b0957,
900 0x87f8a8d4cfa417c9,0xe54ca5d70a80e5d6,
901 0xa9f6d30a038d1dbc,0x5e9fcf4ccd211f4c,
902 0xd47487cc8470652b,0x7647c3200069671f,
903 0x84c8d4dfd2c63f3b,0x29ecd9f40041e073,
904 0xa5fb0a17c777cf09,0xf468107100525890,
905 0xcf79cc9db955c2cc,0x7182148d4066eeb4,
906 0x81ac1fe293d599bf,0xc6f14cd848405530,
907 0xa21727db38cb002f,0xb8ada00e5a506a7c,
908 0xca9cf1d206fdc03b,0xa6d90811f0e4851c,
909 0xfd442e4688bd304a,0x908f4a166d1da663,
910 0x9e4a9cec15763e2e,0x9a598e4e043287fe,
911 0xc5dd44271ad3cdba,0x40eff1e1853f29fd,
912 0xf7549530e188c128,0xd12bee59e68ef47c,
913 0x9a94dd3e8cf578b9,0x82bb74f8301958ce,
914 0xc13a148e3032d6e7,0xe36a52363c1faf01,
915 0xf18899b1bc3f8ca1,0xdc44e6c3cb279ac1,
916 0x96f5600f15a7b7e5,0x29ab103a5ef8c0b9,
917 0xbcb2b812db11a5de,0x7415d448f6b6f0e7,
918 0xebdf661791d60f56,0x111b495b3464ad21,
919 0x936b9fcebb25c995,0xcab10dd900beec34,
920 0xb84687c269ef3bfb,0x3d5d514f40eea742,
921 0xe65829b3046b0afa,0xcb4a5a3112a5112,
922 0x8ff71a0fe2c2e6dc,0x47f0e785eaba72ab,
923 0xb3f4e093db73a093,0x59ed216765690f56,
924 0xe0f218b8d25088b8,0x306869c13ec3532c,
925 0x8c974f7383725573,0x1e414218c73a13fb,
926 0xafbd2350644eeacf,0xe5d1929ef90898fa,
927 0xdbac6c247d62a583,0xdf45f746b74abf39,
928 0x894bc396ce5da772,0x6b8bba8c328eb783,
929 0xab9eb47c81f5114f,0x66ea92f3f326564,
930 0xd686619ba27255a2,0xc80a537b0efefebd,
931 0x8613fd0145877585,0xbd06742ce95f5f36,
932 0xa798fc4196e952e7,0x2c48113823b73704,
933 0xd17f3b51fca3a7a0,0xf75a15862ca504c5,
934 0x82ef85133de648c4,0x9a984d73dbe722fb,
935 0xa3ab66580d5fdaf5,0xc13e60d0d2e0ebba,
936 0xcc963fee10b7d1b3,0x318df905079926a8,
937 0xffbbcfe994e5c61f,0xfdf17746497f7052,
938 0x9fd561f1fd0f9bd3,0xfeb6ea8bedefa633,
939 0xc7caba6e7c5382c8,0xfe64a52ee96b8fc0,
940 0xf9bd690a1b68637b,0x3dfdce7aa3c673b0,
941 0x9c1661a651213e2d,0x6bea10ca65c084e,
942 0xc31bfa0fe5698db8,0x486e494fcff30a62,
943 0xf3e2f893dec3f126,0x5a89dba3c3efccfa,
944 0x986ddb5c6b3a76b7,0xf89629465a75e01c,
945 0xbe89523386091465,0xf6bbb397f1135823,
946 0xee2ba6c0678b597f,0x746aa07ded582e2c,
947 0x94db483840b717ef,0xa8c2a44eb4571cdc,
948 0xba121a4650e4ddeb,0x92f34d62616ce413,
949 0xe896a0d7e51e1566,0x77b020baf9c81d17,
950 0x915e2486ef32cd60,0xace1474dc1d122e,
951 0xb5b5ada8aaff80b8,0xd819992132456ba,
952 0xe3231912d5bf60e6,0x10e1fff697ed6c69,
953 0x8df5efabc5979c8f,0xca8d3ffa1ef463c1,
954 0xb1736b96b6fd83b3,0xbd308ff8a6b17cb2,
955 0xddd0467c64bce4a0,0xac7cb3f6d05ddbde,
956 0x8aa22c0dbef60ee4,0x6bcdf07a423aa96b,
957 0xad4ab7112eb3929d,0x86c16c98d2c953c6,
958 0xd89d64d57a607744,0xe871c7bf077ba8b7,
959 0x87625f056c7c4a8b,0x11471cd764ad4972,
960 0xa93af6c6c79b5d2d,0xd598e40d3dd89bcf,
961 0xd389b47879823479,0x4aff1d108d4ec2c3,
962 0x843610cb4bf160cb,0xcedf722a585139ba,
963 0xa54394fe1eedb8fe,0xc2974eb4ee658828,
964 0xce947a3da6a9273e,0x733d226229feea32,
965 0x811ccc668829b887,0x806357d5a3f525f,
966 0xa163ff802a3426a8,0xca07c2dcb0cf26f7,
967 0xc9bcff6034c13052,0xfc89b393dd02f0b5,
968 0xfc2c3f3841f17c67,0xbbac2078d443ace2,
969 0x9d9ba7832936edc0,0xd54b944b84aa4c0d,
970 0xc5029163f384a931,0xa9e795e65d4df11,
971 0xf64335bcf065d37d,0x4d4617b5ff4a16d5,
972 0x99ea0196163fa42e,0x504bced1bf8e4e45,
973 0xc06481fb9bcf8d39,0xe45ec2862f71e1d6,
974 0xf07da27a82c37088,0x5d767327bb4e5a4c,
975 0x964e858c91ba2655,0x3a6a07f8d510f86f,
976 0xbbe226efb628afea,0x890489f70a55368b,
977 0xeadab0aba3b2dbe5,0x2b45ac74ccea842e,
978 0x92c8ae6b464fc96f,0x3b0b8bc90012929d,
979 0xb77ada0617e3bbcb,0x9ce6ebb40173744,
980 0xe55990879ddcaabd,0xcc420a6a101d0515,
981 0x8f57fa54c2a9eab6,0x9fa946824a12232d,
982 0xb32df8e9f3546564,0x47939822dc96abf9,
983 0xdff9772470297ebd,0x59787e2b93bc56f7,
984 0x8bfbea76c619ef36,0x57eb4edb3c55b65a,
985 0xaefae51477a06b03,0xede622920b6b23f1,
986 0xdab99e59958885c4,0xe95fab368e45eced,
987 0x88b402f7fd75539b,0x11dbcb0218ebb414,
988 0xaae103b5fcd2a881,0xd652bdc29f26a119,
989 0xd59944a37c0752a2,0x4be76d3346f0495f,
990 0x857fcae62d8493a5,0x6f70a4400c562ddb,
991 0xa6dfbd9fb8e5b88e,0xcb4ccd500f6bb952,
992 0xd097ad07a71f26b2,0x7e2000a41346a7a7,
993 0x825ecc24c873782f,0x8ed400668c0c28c8,
994 0xa2f67f2dfa90563b,0x728900802f0f32fa,
995 0xcbb41ef979346bca,0x4f2b40a03ad2ffb9,
996 0xfea126b7d78186bc,0xe2f610c84987bfa8,
997 0x9f24b832e6b0f436,0xdd9ca7d2df4d7c9,
998 0xc6ede63fa05d3143,0x91503d1c79720dbb,
999 0xf8a95fcf88747d94,0x75a44c6397ce912a,
1000 0x9b69dbe1b548ce7c,0xc986afbe3ee11aba,
1001 0xc24452da229b021b,0xfbe85badce996168,
1002 0xf2d56790ab41c2a2,0xfae27299423fb9c3,
1003 0x97c560ba6b0919a5,0xdccd879fc967d41a,
1004 0xbdb6b8e905cb600f,0x5400e987bbc1c920,
1005 0xed246723473e3813,0x290123e9aab23b68,
1006 0x9436c0760c86e30b,0xf9a0b6720aaf6521,
1007 0xb94470938fa89bce,0xf808e40e8d5b3e69,
1008 0xe7958cb87392c2c2,0xb60b1d1230b20e04,
1009 0x90bd77f3483bb9b9,0xb1c6f22b5e6f48c2,
1010 0xb4ecd5f01a4aa828,0x1e38aeb6360b1af3,
1011 0xe2280b6c20dd5232,0x25c6da63c38de1b0,
1012 0x8d590723948a535f,0x579c487e5a38ad0e,
1013 0xb0af48ec79ace837,0x2d835a9df0c6d851,
1014 0xdcdb1b2798182244,0xf8e431456cf88e65,
1015 0x8a08f0f8bf0f156b,0x1b8e9ecb641b58ff,
1016 0xac8b2d36eed2dac5,0xe272467e3d222f3f,
1017 0xd7adf884aa879177,0x5b0ed81dcc6abb0f,
1018 0x86ccbb52ea94baea,0x98e947129fc2b4e9,
1019 0xa87fea27a539e9a5,0x3f2398d747b36224,
1020 0xd29fe4b18e88640e,0x8eec7f0d19a03aad,
1021 0x83a3eeeef9153e89,0x1953cf68300424ac,
1022 0xa48ceaaab75a8e2b,0x5fa8c3423c052dd7,
1023 0xcdb02555653131b6,0x3792f412cb06794d,
1024 0x808e17555f3ebf11,0xe2bbd88bbee40bd0,
1025 0xa0b19d2ab70e6ed6,0x5b6aceaeae9d0ec4,
1026 0xc8de047564d20a8b,0xf245825a5a445275,
1027 0xfb158592be068d2e,0xeed6e2f0f0d56712,
1028 0x9ced737bb6c4183d,0x55464dd69685606b,
1029 0xc428d05aa4751e4c,0xaa97e14c3c26b886,
1030 0xf53304714d9265df,0xd53dd99f4b3066a8,
1031 0x993fe2c6d07b7fab,0xe546a8038efe4029,
1032 0xbf8fdb78849a5f96,0xde98520472bdd033,
1033 0xef73d256a5c0f77c,0x963e66858f6d4440,
1034 0x95a8637627989aad,0xdde7001379a44aa8,
1035 0xbb127c53b17ec159,0x5560c018580d5d52,
1036 0xe9d71b689dde71af,0xaab8f01e6e10b4a6,
1037 0x9226712162ab070d,0xcab3961304ca70e8,
1038 0xb6b00d69bb55c8d1,0x3d607b97c5fd0d22,
1039 0xe45c10c42a2b3b05,0x8cb89a7db77c506a,
1040 0x8eb98a7a9a5b04e3,0x77f3608e92adb242,
1041 0xb267ed1940f1c61c,0x55f038b237591ed3,
1042 0xdf01e85f912e37a3,0x6b6c46dec52f6688,
1043 0x8b61313bbabce2c6,0x2323ac4b3b3da015,
1044 0xae397d8aa96c1b77,0xabec975e0a0d081a,
1045 0xd9c7dced53c72255,0x96e7bd358c904a21,
1046 0x881cea14545c7575,0x7e50d64177da2e54,
1047 0xaa242499697392d2,0xdde50bd1d5d0b9e9,
1048 0xd4ad2dbfc3d07787,0x955e4ec64b44e864,
1049 0x84ec3c97da624ab4,0xbd5af13bef0b113e,
1050 0xa6274bbdd0fadd61,0xecb1ad8aeacdd58e,
1051 0xcfb11ead453994ba,0x67de18eda5814af2,
1052 0x81ceb32c4b43fcf4,0x80eacf948770ced7,
1053 0xa2425ff75e14fc31,0xa1258379a94d028d,
1054 0xcad2f7f5359a3b3e,0x96ee45813a04330,
1055 0xfd87b5f28300ca0d,0x8bca9d6e188853fc,
1056 0x9e74d1b791e07e48,0x775ea264cf55347e,
1057 0xc612062576589dda,0x95364afe032a819e,
1058 0xf79687aed3eec551,0x3a83ddbd83f52205,
1059 0x9abe14cd44753b52,0xc4926a9672793543,
1060 0xc16d9a0095928a27,0x75b7053c0f178294,
1061 0xf1c90080baf72cb1,0x5324c68b12dd6339,
1062 0x971da05074da7bee,0xd3f6fc16ebca5e04,
1063 0xbce5086492111aea,0x88f4bb1ca6bcf585,
1064 0xec1e4a7db69561a5,0x2b31e9e3d06c32e6,
1065 0x9392ee8e921d5d07,0x3aff322e62439fd0,
1066 0xb877aa3236a4b449,0x9befeb9fad487c3,
1067 0xe69594bec44de15b,0x4c2ebe687989a9b4,
1068 0x901d7cf73ab0acd9,0xf9d37014bf60a11,
1069 0xb424dc35095cd80f,0x538484c19ef38c95,
1070 0xe12e13424bb40e13,0x2865a5f206b06fba,
1071 0x8cbccc096f5088cb,0xf93f87b7442e45d4,
1072 0xafebff0bcb24aafe,0xf78f69a51539d749,
1073 0xdbe6fecebdedd5be,0xb573440e5a884d1c,
1074 0x89705f4136b4a597,0x31680a88f8953031,
1075 0xabcc77118461cefc,0xfdc20d2b36ba7c3e,
1076 0xd6bf94d5e57a42bc,0x3d32907604691b4d,
1077 0x8637bd05af6c69b5,0xa63f9a49c2c1b110,
1078 0xa7c5ac471b478423,0xfcf80dc33721d54,
1079 0xd1b71758e219652b,0xd3c36113404ea4a9,
1080 0x83126e978d4fdf3b,0x645a1cac083126ea,
1081 0xa3d70a3d70a3d70a,0x3d70a3d70a3d70a4,
1082 0xcccccccccccccccc,0xcccccccccccccccd,
1083 0x8000000000000000,0x0,
1084 0xa000000000000000,0x0,
1085 0xc800000000000000,0x0,
1086 0xfa00000000000000,0x0,
1087 0x9c40000000000000,0x0,
1088 0xc350000000000000,0x0,
1089 0xf424000000000000,0x0,
1090 0x9896800000000000,0x0,
1091 0xbebc200000000000,0x0,
1092 0xee6b280000000000,0x0,
1093 0x9502f90000000000,0x0,
1094 0xba43b74000000000,0x0,
1095 0xe8d4a51000000000,0x0,
1096 0x9184e72a00000000,0x0,
1097 0xb5e620f480000000,0x0,
1098 0xe35fa931a0000000,0x0,
1099 0x8e1bc9bf04000000,0x0,
1100 0xb1a2bc2ec5000000,0x0,
1101 0xde0b6b3a76400000,0x0,
1102 0x8ac7230489e80000,0x0,
1103 0xad78ebc5ac620000,0x0,
1104 0xd8d726b7177a8000,0x0,
1105 0x878678326eac9000,0x0,
1106 0xa968163f0a57b400,0x0,
1107 0xd3c21bcecceda100,0x0,
1108 0x84595161401484a0,0x0,
1109 0xa56fa5b99019a5c8,0x0,
1110 0xcecb8f27f4200f3a,0x0,
1111 0x813f3978f8940984,0x4000000000000000,
1112 0xa18f07d736b90be5,0x5000000000000000,
1113 0xc9f2c9cd04674ede,0xa400000000000000,
1114 0xfc6f7c4045812296,0x4d00000000000000,
1115 0x9dc5ada82b70b59d,0xf020000000000000,
1116 0xc5371912364ce305,0x6c28000000000000,
1117 0xf684df56c3e01bc6,0xc732000000000000,
1118 0x9a130b963a6c115c,0x3c7f400000000000,
1119 0xc097ce7bc90715b3,0x4b9f100000000000,
1120 0xf0bdc21abb48db20,0x1e86d40000000000,
1121 0x96769950b50d88f4,0x1314448000000000,
1122 0xbc143fa4e250eb31,0x17d955a000000000,
1123 0xeb194f8e1ae525fd,0x5dcfab0800000000,
1124 0x92efd1b8d0cf37be,0x5aa1cae500000000,
1125 0xb7abc627050305ad,0xf14a3d9e40000000,
1126 0xe596b7b0c643c719,0x6d9ccd05d0000000,
1127 0x8f7e32ce7bea5c6f,0xe4820023a2000000,
1128 0xb35dbf821ae4f38b,0xdda2802c8a800000,
1129 0xe0352f62a19e306e,0xd50b2037ad200000,
1130 0x8c213d9da502de45,0x4526f422cc340000,
1131 0xaf298d050e4395d6,0x9670b12b7f410000,
1132 0xdaf3f04651d47b4c,0x3c0cdd765f114000,
1133 0x88d8762bf324cd0f,0xa5880a69fb6ac800,
1134 0xab0e93b6efee0053,0x8eea0d047a457a00,
1135 0xd5d238a4abe98068,0x72a4904598d6d880,
1136 0x85a36366eb71f041,0x47a6da2b7f864750,
1137 0xa70c3c40a64e6c51,0x999090b65f67d924,
1138 0xd0cf4b50cfe20765,0xfff4b4e3f741cf6d,
1139 0x82818f1281ed449f,0xbff8f10e7a8921a4,
1140 0xa321f2d7226895c7,0xaff72d52192b6a0d,
1141 0xcbea6f8ceb02bb39,0x9bf4f8a69f764490,
1142 0xfee50b7025c36a08,0x2f236d04753d5b4,
1143 0x9f4f2726179a2245,0x1d762422c946590,
1144 0xc722f0ef9d80aad6,0x424d3ad2b7b97ef5,
1145 0xf8ebad2b84e0d58b,0xd2e0898765a7deb2,
1146 0x9b934c3b330c8577,0x63cc55f49f88eb2f,
1147 0xc2781f49ffcfa6d5,0x3cbf6b71c76b25fb,
1148 0xf316271c7fc3908a,0x8bef464e3945ef7a,
1149 0x97edd871cfda3a56,0x97758bf0e3cbb5ac,
1150 0xbde94e8e43d0c8ec,0x3d52eeed1cbea317,
1151 0xed63a231d4c4fb27,0x4ca7aaa863ee4bdd,
1152 0x945e455f24fb1cf8,0x8fe8caa93e74ef6a,
1153 0xb975d6b6ee39e436,0xb3e2fd538e122b44,
1154 0xe7d34c64a9c85d44,0x60dbbca87196b616,
1155 0x90e40fbeea1d3a4a,0xbc8955e946fe31cd,
1156 0xb51d13aea4a488dd,0x6babab6398bdbe41,
1157 0xe264589a4dcdab14,0xc696963c7eed2dd1,
1158 0x8d7eb76070a08aec,0xfc1e1de5cf543ca2,
1159 0xb0de65388cc8ada8,0x3b25a55f43294bcb,
1160 0xdd15fe86affad912,0x49ef0eb713f39ebe,
1161 0x8a2dbf142dfcc7ab,0x6e3569326c784337,
1162 0xacb92ed9397bf996,0x49c2c37f07965404,
1163 0xd7e77a8f87daf7fb,0xdc33745ec97be906,
1164 0x86f0ac99b4e8dafd,0x69a028bb3ded71a3,
1165 0xa8acd7c0222311bc,0xc40832ea0d68ce0c,
1166 0xd2d80db02aabd62b,0xf50a3fa490c30190,
1167 0x83c7088e1aab65db,0x792667c6da79e0fa,
1168 0xa4b8cab1a1563f52,0x577001b891185938,
1169 0xcde6fd5e09abcf26,0xed4c0226b55e6f86,
1170 0x80b05e5ac60b6178,0x544f8158315b05b4,
1171 0xa0dc75f1778e39d6,0x696361ae3db1c721,
1172 0xc913936dd571c84c,0x3bc3a19cd1e38e9,
1173 0xfb5878494ace3a5f,0x4ab48a04065c723,
1174 0x9d174b2dcec0e47b,0x62eb0d64283f9c76,
1175 0xc45d1df942711d9a,0x3ba5d0bd324f8394,
1176 0xf5746577930d6500,0xca8f44ec7ee36479,
1177 0x9968bf6abbe85f20,0x7e998b13cf4e1ecb,
1178 0xbfc2ef456ae276e8,0x9e3fedd8c321a67e,
1179 0xefb3ab16c59b14a2,0xc5cfe94ef3ea101e,
1180 0x95d04aee3b80ece5,0xbba1f1d158724a12,
1181 0xbb445da9ca61281f,0x2a8a6e45ae8edc97,
1182 0xea1575143cf97226,0xf52d09d71a3293bd,
1183 0x924d692ca61be758,0x593c2626705f9c56,
1184 0xb6e0c377cfa2e12e,0x6f8b2fb00c77836c,
1185 0xe498f455c38b997a,0xb6dfb9c0f956447,
1186 0x8edf98b59a373fec,0x4724bd4189bd5eac,
1187 0xb2977ee300c50fe7,0x58edec91ec2cb657,
1188 0xdf3d5e9bc0f653e1,0x2f2967b66737e3ed,
1189 0x8b865b215899f46c,0xbd79e0d20082ee74,
1190 0xae67f1e9aec07187,0xecd8590680a3aa11,
1191 0xda01ee641a708de9,0xe80e6f4820cc9495,
1192 0x884134fe908658b2,0x3109058d147fdcdd,
1193 0xaa51823e34a7eede,0xbd4b46f0599fd415,
1194 0xd4e5e2cdc1d1ea96,0x6c9e18ac7007c91a,
1195 0x850fadc09923329e,0x3e2cf6bc604ddb0,
1196 0xa6539930bf6bff45,0x84db8346b786151c,
1197 0xcfe87f7cef46ff16,0xe612641865679a63,
1198 0x81f14fae158c5f6e,0x4fcb7e8f3f60c07e,
1199 0xa26da3999aef7749,0xe3be5e330f38f09d,
1200 0xcb090c8001ab551c,0x5cadf5bfd3072cc5,
1201 0xfdcb4fa002162a63,0x73d9732fc7c8f7f6,
1202 0x9e9f11c4014dda7e,0x2867e7fddcdd9afa,
1203 0xc646d63501a1511d,0xb281e1fd541501b8,
1204 0xf7d88bc24209a565,0x1f225a7ca91a4226,
1205 0x9ae757596946075f,0x3375788de9b06958,
1206 0xc1a12d2fc3978937,0x52d6b1641c83ae,
1207 0xf209787bb47d6b84,0xc0678c5dbd23a49a,
1208 0x9745eb4d50ce6332,0xf840b7ba963646e0,
1209 0xbd176620a501fbff,0xb650e5a93bc3d898,
1210 0xec5d3fa8ce427aff,0xa3e51f138ab4cebe,
1211 0x93ba47c980e98cdf,0xc66f336c36b10137,
1212 0xb8a8d9bbe123f017,0xb80b0047445d4184,
1213 0xe6d3102ad96cec1d,0xa60dc059157491e5,
1214 0x9043ea1ac7e41392,0x87c89837ad68db2f,
1215 0xb454e4a179dd1877,0x29babe4598c311fb,
1216 0xe16a1dc9d8545e94,0xf4296dd6fef3d67a,
1217 0x8ce2529e2734bb1d,0x1899e4a65f58660c,
1218 0xb01ae745b101e9e4,0x5ec05dcff72e7f8f,
1219 0xdc21a1171d42645d,0x76707543f4fa1f73,
1220 0x899504ae72497eba,0x6a06494a791c53a8,
1221 0xabfa45da0edbde69,0x487db9d17636892,
1222 0xd6f8d7509292d603,0x45a9d2845d3c42b6,
1223 0x865b86925b9bc5c2,0xb8a2392ba45a9b2,
1224 0xa7f26836f282b732,0x8e6cac7768d7141e,
1225 0xd1ef0244af2364ff,0x3207d795430cd926,
1226 0x8335616aed761f1f,0x7f44e6bd49e807b8,
1227 0xa402b9c5a8d3a6e7,0x5f16206c9c6209a6,
1228 0xcd036837130890a1,0x36dba887c37a8c0f,
1229 0x802221226be55a64,0xc2494954da2c9789,
1230 0xa02aa96b06deb0fd,0xf2db9baa10b7bd6c,
1231 0xc83553c5c8965d3d,0x6f92829494e5acc7,
1232 0xfa42a8b73abbf48c,0xcb772339ba1f17f9,
1233 0x9c69a97284b578d7,0xff2a760414536efb,
1234 0xc38413cf25e2d70d,0xfef5138519684aba,
1235 0xf46518c2ef5b8cd1,0x7eb258665fc25d69,
1236 0x98bf2f79d5993802,0xef2f773ffbd97a61,
1237 0xbeeefb584aff8603,0xaafb550ffacfd8fa,
1238 0xeeaaba2e5dbf6784,0x95ba2a53f983cf38,
1239 0x952ab45cfa97a0b2,0xdd945a747bf26183,
1240 0xba756174393d88df,0x94f971119aeef9e4,
1241 0xe912b9d1478ceb17,0x7a37cd5601aab85d,
1242 0x91abb422ccb812ee,0xac62e055c10ab33a,
1243 0xb616a12b7fe617aa,0x577b986b314d6009,
1244 0xe39c49765fdf9d94,0xed5a7e85fda0b80b,
1245 0x8e41ade9fbebc27d,0x14588f13be847307,
1246 0xb1d219647ae6b31c,0x596eb2d8ae258fc8,
1247 0xde469fbd99a05fe3,0x6fca5f8ed9aef3bb,
1248 0x8aec23d680043bee,0x25de7bb9480d5854,
1249 0xada72ccc20054ae9,0xaf561aa79a10ae6a,
1250 0xd910f7ff28069da4,0x1b2ba1518094da04,
1251 0x87aa9aff79042286,0x90fb44d2f05d0842,
1252 0xa99541bf57452b28,0x353a1607ac744a53,
1253 0xd3fa922f2d1675f2,0x42889b8997915ce8,
1254 0x847c9b5d7c2e09b7,0x69956135febada11,
1255 0xa59bc234db398c25,0x43fab9837e699095,
1256 0xcf02b2c21207ef2e,0x94f967e45e03f4bb,
1257 0x8161afb94b44f57d,0x1d1be0eebac278f5,
1258 0xa1ba1ba79e1632dc,0x6462d92a69731732,
1259 0xca28a291859bbf93,0x7d7b8f7503cfdcfe,
1260 0xfcb2cb35e702af78,0x5cda735244c3d43e,
1261 0x9defbf01b061adab,0x3a0888136afa64a7,
1262 0xc56baec21c7a1916,0x88aaa1845b8fdd0,
1263 0xf6c69a72a3989f5b,0x8aad549e57273d45,
1264 0x9a3c2087a63f6399,0x36ac54e2f678864b,
1265 0xc0cb28a98fcf3c7f,0x84576a1bb416a7dd,
1266 0xf0fdf2d3f3c30b9f,0x656d44a2a11c51d5,
1267 0x969eb7c47859e743,0x9f644ae5a4b1b325,
1268 0xbc4665b596706114,0x873d5d9f0dde1fee,
1269 0xeb57ff22fc0c7959,0xa90cb506d155a7ea,
1270 0x9316ff75dd87cbd8,0x9a7f12442d588f2,
1271 0xb7dcbf5354e9bece,0xc11ed6d538aeb2f,
1272 0xe5d3ef282a242e81,0x8f1668c8a86da5fa,
1273 0x8fa475791a569d10,0xf96e017d694487bc,
1274 0xb38d92d760ec4455,0x37c981dcc395a9ac,
1275 0xe070f78d3927556a,0x85bbe253f47b1417,
1276 0x8c469ab843b89562,0x93956d7478ccec8e,
1277 0xaf58416654a6babb,0x387ac8d1970027b2,
1278 0xdb2e51bfe9d0696a,0x6997b05fcc0319e,
1279 0x88fcf317f22241e2,0x441fece3bdf81f03,
1280 0xab3c2fddeeaad25a,0xd527e81cad7626c3,
1281 0xd60b3bd56a5586f1,0x8a71e223d8d3b074,
1282 0x85c7056562757456,0xf6872d5667844e49,
1283 0xa738c6bebb12d16c,0xb428f8ac016561db,
1284 0xd106f86e69d785c7,0xe13336d701beba52,
1285 0x82a45b450226b39c,0xecc0024661173473,
1286 0xa34d721642b06084,0x27f002d7f95d0190,
1287 0xcc20ce9bd35c78a5,0x31ec038df7b441f4,
1288 0xff290242c83396ce,0x7e67047175a15271,
1289 0x9f79a169bd203e41,0xf0062c6e984d386,
1290 0xc75809c42c684dd1,0x52c07b78a3e60868,
1291 0xf92e0c3537826145,0xa7709a56ccdf8a82,
1292 0x9bbcc7a142b17ccb,0x88a66076400bb691,
1293 0xc2abf989935ddbfe,0x6acff893d00ea435,
1294 0xf356f7ebf83552fe,0x583f6b8c4124d43,
1295 0x98165af37b2153de,0xc3727a337a8b704a,
1296 0xbe1bf1b059e9a8d6,0x744f18c0592e4c5c,
1297 0xeda2ee1c7064130c,0x1162def06f79df73,
1298 0x9485d4d1c63e8be7,0x8addcb5645ac2ba8,
1299 0xb9a74a0637ce2ee1,0x6d953e2bd7173692,
1300 0xe8111c87c5c1ba99,0xc8fa8db6ccdd0437,
1301 0x910ab1d4db9914a0,0x1d9c9892400a22a2,
1302 0xb54d5e4a127f59c8,0x2503beb6d00cab4b,
1303 0xe2a0b5dc971f303a,0x2e44ae64840fd61d,
1304 0x8da471a9de737e24,0x5ceaecfed289e5d2,
1305 0xb10d8e1456105dad,0x7425a83e872c5f47,
1306 0xdd50f1996b947518,0xd12f124e28f77719,
1307 0x8a5296ffe33cc92f,0x82bd6b70d99aaa6f,
1308 0xace73cbfdc0bfb7b,0x636cc64d1001550b,
1309 0xd8210befd30efa5a,0x3c47f7e05401aa4e,
1310 0x8714a775e3e95c78,0x65acfaec34810a71,
1311 0xa8d9d1535ce3b396,0x7f1839a741a14d0d,
1312 0xd31045a8341ca07c,0x1ede48111209a050,
1313 0x83ea2b892091e44d,0x934aed0aab460432,
1314 0xa4e4b66b68b65d60,0xf81da84d5617853f,
1315 0xce1de40642e3f4b9,0x36251260ab9d668e,
1316 0x80d2ae83e9ce78f3,0xc1d72b7c6b426019,
1317 0xa1075a24e4421730,0xb24cf65b8612f81f,
1318 0xc94930ae1d529cfc,0xdee033f26797b627,
1319 0xfb9b7cd9a4a7443c,0x169840ef017da3b1,
1320 0x9d412e0806e88aa5,0x8e1f289560ee864e,
1321 0xc491798a08a2ad4e,0xf1a6f2bab92a27e2,
1322 0xf5b5d7ec8acb58a2,0xae10af696774b1db,
1323 0x9991a6f3d6bf1765,0xacca6da1e0a8ef29,
1324 0xbff610b0cc6edd3f,0x17fd090a58d32af3,
1325 0xeff394dcff8a948e,0xddfc4b4cef07f5b0,
1326 0x95f83d0a1fb69cd9,0x4abdaf101564f98e,
1327 0xbb764c4ca7a4440f,0x9d6d1ad41abe37f1,
1328 0xea53df5fd18d5513,0x84c86189216dc5ed,
1329 0x92746b9be2f8552c,0x32fd3cf5b4e49bb4,
1330 0xb7118682dbb66a77,0x3fbc8c33221dc2a1,
1331 0xe4d5e82392a40515,0xfabaf3feaa5334a,
1332 0x8f05b1163ba6832d,0x29cb4d87f2a7400e,
1333 0xb2c71d5bca9023f8,0x743e20e9ef511012,
1334 0xdf78e4b2bd342cf6,0x914da9246b255416,
1335 0x8bab8eefb6409c1a,0x1ad089b6c2f7548e,
1336 0xae9672aba3d0c320,0xa184ac2473b529b1,
1337 0xda3c0f568cc4f3e8,0xc9e5d72d90a2741e,
1338 0x8865899617fb1871,0x7e2fa67c7a658892,
1339 0xaa7eebfb9df9de8d,0xddbb901b98feeab7,
1340 0xd51ea6fa85785631,0x552a74227f3ea565,
1341 0x8533285c936b35de,0xd53a88958f87275f,
1342 0xa67ff273b8460356,0x8a892abaf368f137,
1343 0xd01fef10a657842c,0x2d2b7569b0432d85,
1344 0x8213f56a67f6b29b,0x9c3b29620e29fc73,
1345 0xa298f2c501f45f42,0x8349f3ba91b47b8f,
1346 0xcb3f2f7642717713,0x241c70a936219a73,
1347 0xfe0efb53d30dd4d7,0xed238cd383aa0110,
1348 0x9ec95d1463e8a506,0xf4363804324a40aa,
1349 0xc67bb4597ce2ce48,0xb143c6053edcd0d5,
1350 0xf81aa16fdc1b81da,0xdd94b7868e94050a,
1351 0x9b10a4e5e9913128,0xca7cf2b4191c8326,
1352 0xc1d4ce1f63f57d72,0xfd1c2f611f63a3f0,
1353 0xf24a01a73cf2dccf,0xbc633b39673c8cec,
1354 0x976e41088617ca01,0xd5be0503e085d813,
1355 0xbd49d14aa79dbc82,0x4b2d8644d8a74e18,
1356 0xec9c459d51852ba2,0xddf8e7d60ed1219e,
1357 0x93e1ab8252f33b45,0xcabb90e5c942b503,
1358 0xb8da1662e7b00a17,0x3d6a751f3b936243,
1359 0xe7109bfba19c0c9d,0xcc512670a783ad4,
1360 0x906a617d450187e2,0x27fb2b80668b24c5,
1361 0xb484f9dc9641e9da,0xb1f9f660802dedf6,
1362 0xe1a63853bbd26451,0x5e7873f8a0396973,
1363 0x8d07e33455637eb2,0xdb0b487b6423e1e8,
1364 0xb049dc016abc5e5f,0x91ce1a9a3d2cda62,
1365 0xdc5c5301c56b75f7,0x7641a140cc7810fb,
1366 0x89b9b3e11b6329ba,0xa9e904c87fcb0a9d,
1367 0xac2820d9623bf429,0x546345fa9fbdcd44,
1368 0xd732290fbacaf133,0xa97c177947ad4095,
1369 0x867f59a9d4bed6c0,0x49ed8eabcccc485d,
1370 0xa81f301449ee8c70,0x5c68f256bfff5a74,
1371 0xd226fc195c6a2f8c,0x73832eec6fff3111,
1372 0x83585d8fd9c25db7,0xc831fd53c5ff7eab,
1373 0xa42e74f3d032f525,0xba3e7ca8b77f5e55,
1374 0xcd3a1230c43fb26f,0x28ce1bd2e55f35eb,
1375 0x80444b5e7aa7cf85,0x7980d163cf5b81b3,
1376 0xa0555e361951c366,0xd7e105bcc332621f,
1377 0xc86ab5c39fa63440,0x8dd9472bf3fefaa7,
1378 0xfa856334878fc150,0xb14f98f6f0feb951,
1379 0x9c935e00d4b9d8d2,0x6ed1bf9a569f33d3,
1380 0xc3b8358109e84f07,0xa862f80ec4700c8,
1381 0xf4a642e14c6262c8,0xcd27bb612758c0fa,
1382 0x98e7e9cccfbd7dbd,0x8038d51cb897789c,
1383 0xbf21e44003acdd2c,0xe0470a63e6bd56c3,
1384 0xeeea5d5004981478,0x1858ccfce06cac74,
1385 0x95527a5202df0ccb,0xf37801e0c43ebc8,
1386 0xbaa718e68396cffd,0xd30560258f54e6ba,
1387 0xe950df20247c83fd,0x47c6b82ef32a2069,
1388 0x91d28b7416cdd27e,0x4cdc331d57fa5441,
1389 0xb6472e511c81471d,0xe0133fe4adf8e952,
1390 0xe3d8f9e563a198e5,0x58180fddd97723a6,
1391 0x8e679c2f5e44ff8f,0x570f09eaa7ea7648,};
1399#ifndef FASTFLOAT_DECIMAL_TO_BINARY_H
1400#define FASTFLOAT_DECIMAL_TO_BINARY_H
1415template <
int bit_precision>
1423 static_assert((bit_precision >= 0) && (bit_precision <= 64),
" precision should be in (0,64]");
1424 constexpr uint64_t precision_mask = (bit_precision < 64) ?
1425 (uint64_t(0xFFFFFFFFFFFFFFFF) >> bit_precision)
1426 : uint64_t(0xFFFFFFFFFFFFFFFF);
1427 if((firstproduct.
high & precision_mask) == precision_mask) {
1430 firstproduct.
low += secondproduct.
high;
1431 if(secondproduct.
high > firstproduct.
low) {
1432 firstproduct.
high++;
1435 return firstproduct;
1455 return (((152170 + 65536) * q) >> 16) + 63;
1461template <
typename binary>
1464 int hilz = int(w >> 63) ^ 1;
1467 int bias = binary::mantissa_explicit_bits() - binary::minimum_exponent();
1474template <
typename binary>
1479 value128 product = compute_product_approximation<binary::mantissa_explicit_bits() + 3>(q, w);
1480 return compute_error_scaled<binary>(q, product.
high, lz);
1488template <
typename binary>
1492 if ((w == 0) || (q < binary::smallest_power_of_ten())) {
1498 if (q > binary::largest_power_of_ten()) {
1500 answer.
power2 = binary::infinite_power();
1515 value128 product = compute_product_approximation<binary::mantissa_explicit_bits() + 3>(q, w);
1516 if(product.
low == 0xFFFFFFFFFFFFFFFF) {
1520 const bool inside_safe_exponent = (q >= -27) && (q <= 55);
1522 if(!inside_safe_exponent) {
1523 return compute_error_scaled<binary>(q, product.
high, lz);
1530 int upperbit = int(product.
high >> 63);
1532 answer.
mantissa = product.
high >> (upperbit + 64 - binary::mantissa_explicit_bits() - 3);
1534 answer.
power2 = int32_t(
detail::power(int32_t(q)) + upperbit - lz - binary::minimum_exponent());
1535 if (answer.
power2 <= 0) {
1537 if(-answer.
power2 + 1 >= 64) {
1556 answer.
power2 = (answer.
mantissa < (uint64_t(1) << binary::mantissa_explicit_bits())) ? 0 : 1;
1563 if ((product.
low <= 1) && (q >= binary::min_exponent_round_to_even()) && (q <= binary::max_exponent_round_to_even()) &&
1568 if((answer.
mantissa << (upperbit + 64 - binary::mantissa_explicit_bits() - 3)) == product.
high) {
1575 if (answer.
mantissa >= (uint64_t(2) << binary::mantissa_explicit_bits())) {
1576 answer.
mantissa = (uint64_t(1) << binary::mantissa_explicit_bits());
1580 answer.
mantissa &= ~(uint64_t(1) << binary::mantissa_explicit_bits());
1581 if (answer.
power2 >= binary::infinite_power()) {
1582 answer.
power2 = binary::infinite_power();
1593#ifndef FASTFLOAT_BIGINT_H
1594#define FASTFLOAT_BIGINT_H
1610#if defined(FASTFLOAT_64BIT) && !defined(__sparc)
1611#define FASTFLOAT_64BIT_LIMB
1612typedef uint64_t
limb;
1615#define FASTFLOAT_32BIT_LIMB
1631template <u
int16_t size>
1667 constexpr size_t len() const noexcept {
1693 ::memcpy((
void*)ptr, (
const void*)s.ptr,
sizeof(
limb) * s.len());
1709 if (new_len >
len()) {
1710 size_t count = new_len -
len();
1712 limb* last = first + count;
1713 ::std::fill(first, last, value);
1732 while (index <
len()) {
1733 if (
rindex(index) != 0) {
1762uint64_t
uint64_hi64(uint64_t r0, uint64_t r1,
bool& truncated)
noexcept {
1765 truncated = r1 != 0;
1769 truncated = (r1 << shl) != 0;
1770 return (r0 << shl) | (r1 >> shr);
1780uint64_t
uint32_hi64(uint32_t r0, uint32_t r1,
bool& truncated)
noexcept {
1787uint64_t
uint32_hi64(uint32_t r0, uint32_t r1, uint32_t r2,
bool& truncated)
noexcept {
1791 return uint64_hi64(x0, (x1 << 32) | x2, truncated);
1803#if defined(__has_builtin)
1804 #if __has_builtin(__builtin_add_overflow)
1805 overflow = __builtin_add_overflow(x, y, &z);
1819#ifdef FASTFLOAT_64BIT_LIMB
1820 #if defined(__SIZEOF_INT128__)
1822 __uint128_t z = __uint128_t(x) * __uint128_t(y) + __uint128_t(carry);
1831 z.high += uint64_t(overflow);
1836 uint64_t z = uint64_t(x) * uint64_t(y) + uint64_t(carry);
1844template <u
int16_t size>
1846 size_t index = start;
1849 while (carry != 0 && index < vec.len()) {
1850 vec[index] =
scalar_add(vec[index], carry, overflow);
1851 carry =
limb(overflow);
1861template <u
int16_t size>
1867template <u
int16_t size>
1870 for (
size_t index = 0; index < vec.len(); index++) {
1871 vec[index] =
scalar_mul(vec[index], y, carry);
1881template <u
int16_t size>
1885 if (x.len() < start || y.len() > x.len() - start) {
1890 for (
size_t index = 0; index < y.len(); index++) {
1891 limb xi = x[index + start];
1899 x[index + start] = xi;
1911template <u
int16_t size>
1917template <u
int16_t size>
1926 for (
size_t index = 1; index < y.len(); index++) {
1945template <u
int16_t size>
1970#ifdef FASTFLOAT_64BIT_LIMB
1981 uint64_t
hi64(
bool& truncated)
const noexcept {
1982#ifdef FASTFLOAT_64BIT_LIMB
1985 }
else if (
vec.
len() == 1) {
1995 }
else if (
vec.
len() == 1) {
1997 }
else if (
vec.
len() == 2) {
2014 if (
vec.
len() > other.vec.len()) {
2016 }
else if (
vec.
len() < other.vec.len()) {
2019 for (
size_t index =
vec.
len(); index > 0; index--) {
2021 limb yi = other.vec[index - 1];
2024 }
else if (xi < yi) {
2046 for (
size_t index = 0; index <
vec.
len(); index++) {
2048 vec[index] = (xi <<
shl) | (prev >> shr);
2052 limb carry = prev >> shr;
2068 ::memmove(dst, src,
sizeof(
limb) *
vec.
len());
2071 limb* last = first + n;
2072 ::std::fill(first, last, 0);
2098#ifdef FASTFLOAT_64BIT_LIMB
2130 static constexpr uint32_t large_step = 135;
2131 static constexpr uint64_t small_power_of_5[] = {
2132 1UL, 5UL, 25UL, 125UL, 625UL, 3125UL, 15625UL, 78125UL, 390625UL,
2133 1953125UL, 9765625UL, 48828125UL, 244140625UL, 1220703125UL,
2134 6103515625UL, 30517578125UL, 152587890625UL, 762939453125UL,
2135 3814697265625UL, 19073486328125UL, 95367431640625UL, 476837158203125UL,
2136 2384185791015625UL, 11920928955078125UL, 59604644775390625UL,
2137 298023223876953125UL, 1490116119384765625UL, 7450580596923828125UL,
2139#ifdef FASTFLOAT_64BIT_LIMB
2140 constexpr static limb large_power_of_5[] = {
2141 1414648277510068013UL, 9180637584431281687UL, 4539964771860779200UL,
2142 10482974169319127550UL, 198276706040285095UL};
2144 constexpr static limb large_power_of_5[] = {
2145 4279965485U, 329373468U, 4020270615U, 2137533757U, 4287402176U,
2146 1057042919U, 1071430142U, 2440757623U, 381945767U, 46164893U};
2148 size_t large_length =
sizeof(large_power_of_5) /
sizeof(
limb);
2150 while (exp >= large_step) {
2154#ifdef FASTFLOAT_64BIT_LIMB
2155 uint32_t small_step = 27;
2156 limb max_native = 7450580596923828125UL;
2158 uint32_t small_step = 13;
2159 limb max_native = 1220703125U;
2161 while (exp >= small_step) {
2184#ifndef FASTFLOAT_ASCII_NUMBER_H
2185#define FASTFLOAT_ASCII_NUMBER_H
2200 return (val & 0xFF00000000000000) >> 56
2201 | (val & 0x00FF000000000000) >> 40
2202 | (val & 0x0000FF0000000000) >> 24
2203 | (val & 0x000000FF00000000) >> 8
2204 | (val & 0x00000000FF000000) << 8
2205 | (val & 0x0000000000FF0000) << 24
2206 | (val & 0x000000000000FF00) << 40
2207 | (val & 0x00000000000000FF) << 56;
2212 ::memcpy(&val, chars,
sizeof(uint64_t));
2213#if FASTFLOAT_IS_BIG_ENDIAN == 1
2221#if FASTFLOAT_IS_BIG_ENDIAN == 1
2225 ::memcpy(chars, &val,
sizeof(uint64_t));
2230 const uint64_t mask = 0x000000FF000000FF;
2231 const uint64_t mul1 = 0x000F424000000064;
2232 const uint64_t mul2 = 0x0000271000000001;
2233 val -= 0x3030303030303030;
2234 val = (val * 10) + (val >> 8);
2235 val = (((val & mask) * mul1) + (((val >> 16) & mask) * mul2)) >> 32;
2236 return uint32_t(val);
2245 return !((((val + 0x4646464646464646) | (val - 0x3030303030303030)) &
2246 0x8080808080808080));
2255struct parsed_number_string {
2270parsed_number_string
parse_number_string(
const char *p,
const char *pend, parse_options options)
noexcept {
2272 const char decimal_point = options.decimal_point;
2274 parsed_number_string answer;
2275 answer.valid =
false;
2276 answer.too_many_digits =
false;
2277 answer.negative = (*p ==
'-');
2283 if (!
is_integer(*p) && (*p != decimal_point)) {
2287 const char *
const start_digits = p;
2302 const char *
const end_of_integer_part = p;
2303 int64_t digit_count = int64_t(end_of_integer_part - start_digits);
2304 answer.integer =
byte_span(start_digits,
size_t(digit_count));
2305 int64_t exponent = 0;
2306 if ((p != pend) && (*p == decimal_point)) {
2308 const char* before = p;
2316 uint8_t digit = uint8_t(*p -
'0');
2320 exponent = before - p;
2321 answer.fraction =
byte_span(before,
size_t(p - before));
2322 digit_count -= exponent;
2325 if (digit_count == 0) {
2328 int64_t exp_number = 0;
2330 const char * location_of_e = p;
2332 bool neg_exp =
false;
2333 if ((p != pend) && (
'-' == *p)) {
2336 }
else if ((p != pend) && (
'+' == *p)) {
2348 uint8_t digit = uint8_t(*p -
'0');
2349 if (exp_number < 0x10000000) {
2350 exp_number = 10 * exp_number + digit;
2354 if(neg_exp) { exp_number = - exp_number; }
2355 exponent += exp_number;
2361 answer.lastmatch = p;
2362 answer.valid =
true;
2369 if (digit_count > 19) {
2374 const char *start = start_digits;
2375 while ((start != pend) && (*start ==
'0' || *start == decimal_point)) {
2376 if(*start ==
'0') { digit_count --; }
2379 if (digit_count > 19) {
2380 answer.too_many_digits =
true;
2385 p = answer.integer.ptr;
2386 const char* int_end = p + answer.integer.len();
2387 const uint64_t minimal_nineteen_digit_integer{1000000000000000000};
2388 while((i < minimal_nineteen_digit_integer) && (p != int_end)) {
2389 i = i * 10 + uint64_t(*p -
'0');
2392 if (i >= minimal_nineteen_digit_integer) {
2393 exponent = end_of_integer_part - p + exp_number;
2395 p = answer.fraction.ptr;
2396 const char* frac_end = p + answer.fraction.len();
2397 while((i < minimal_nineteen_digit_integer) && (p != frac_end)) {
2398 i = i * 10 + uint64_t(*p -
'0');
2401 exponent = answer.fraction.ptr - p + exp_number;
2406 answer.exponent = exponent;
2407 answer.mantissa = i;
2416#ifndef FASTFLOAT_DIGIT_COMPARISON_H
2417#define FASTFLOAT_DIGIT_COMPARISON_H
2429 1UL, 10UL, 100UL, 1000UL, 10000UL, 100000UL, 1000000UL, 10000000UL, 100000000UL,
2430 1000000000UL, 10000000000UL, 100000000000UL, 1000000000000UL, 10000000000000UL,
2431 100000000000000UL, 1000000000000000UL, 10000000000000000UL, 100000000000000000UL,
2432 1000000000000000000UL, 10000000000000000000UL};
2439 uint64_t mantissa = num.mantissa;
2440 int32_t exponent = int32_t(num.exponent);
2441 while (mantissa >= 10000) {
2445 while (mantissa >= 100) {
2449 while (mantissa >= 10) {
2457template <
typename T>
2461 if (std::is_same<T, float>::value) {
2462 constexpr uint32_t exponent_mask = 0x7F800000;
2463 constexpr uint32_t mantissa_mask = 0x007FFFFF;
2464 constexpr uint64_t hidden_bit_mask = 0x00800000;
2466 ::memcpy(&bits, &value,
sizeof(T));
2467 if ((bits & exponent_mask) == 0) {
2470 am.
mantissa = bits & mantissa_mask;
2475 am.
mantissa = (bits & mantissa_mask) | hidden_bit_mask;
2478 constexpr uint64_t exponent_mask = 0x7FF0000000000000;
2479 constexpr uint64_t mantissa_mask = 0x000FFFFFFFFFFFFF;
2480 constexpr uint64_t hidden_bit_mask = 0x0010000000000000;
2482 ::memcpy(&bits, &value,
sizeof(T));
2483 if ((bits & exponent_mask) == 0) {
2486 am.
mantissa = bits & mantissa_mask;
2491 am.
mantissa = (bits & mantissa_mask) | hidden_bit_mask;
2501template <
typename T>
2511template <
typename T,
typename callback>
2514 if (-am.power2 >= mantissa_shift) {
2516 int32_t shift = -am.power2 + 1;
2524 cb(am, mantissa_shift);
2540template <
typename callback>
2548 mask = (uint64_t(1) << shift) - 1;
2553 halfway = uint64_t(1) << (shift - 1);
2555 uint64_t truncated_bits = am.mantissa & mask;
2556 uint64_t is_above = truncated_bits > halfway;
2557 uint64_t is_halfway = truncated_bits == halfway;
2563 am.mantissa >>= shift;
2567 bool is_odd = (am.mantissa & 1) == 1;
2568 am.mantissa += uint64_t(cb(is_odd, is_halfway, is_above));
2575 am.mantissa >>= shift;
2582 while (std::distance(first, last) >= 8) {
2583 ::memcpy(&val, first,
sizeof(uint64_t));
2584 if (val != 0x3030303030303030) {
2589 while (first != last) {
2590 if (*first !=
'0') {
2602 while (std::distance(first, last) >= 8) {
2603 ::memcpy(&val, first,
sizeof(uint64_t));
2604 if (val != 0x3030303030303030) {
2609 while (first != last) {
2610 if (*first !=
'0') {
2632 value = value * 10 +
limb(*p -
'0');
2659#ifdef FASTFLOAT_64BIT_LIMB
2666 const char* p = num.integer.ptr;
2667 const char* pend = p + num.integer.len();
2671 while ((std::distance(p, pend) >= 8) && (step - counter >= 8) && (max_digits - digits >= 8)) {
2674 while (counter < step && p != pend && digits < max_digits) {
2677 if (digits == max_digits) {
2681 if (num.fraction.ptr !=
nullptr) {
2696 if (num.fraction.ptr !=
nullptr) {
2697 p = num.fraction.ptr;
2698 pend = p + num.fraction.len();
2704 while ((std::distance(p, pend) >= 8) && (step - counter >= 8) && (max_digits - digits >= 8)) {
2707 while (counter < step && p != pend && digits < max_digits) {
2710 if (digits == max_digits) {
2731template <
typename T>
2736 answer.
mantissa = bigmant.hi64(truncated);
2738 answer.
power2 = bigmant.bit_length() - 64 + bias;
2742 return is_above || (is_halfway && truncated) || (is_odd && is_halfway);
2754template <
typename T>
2756 bigint& real_digits = bigmant;
2757 int32_t real_exp = exponent;
2767 int32_t theor_exp = theor.
power2;
2770 int32_t pow2_exp = theor_exp - real_exp;
2771 uint32_t pow5_exp = uint32_t(-real_exp);
2772 if (pow5_exp != 0) {
2777 }
else if (pow2_exp < 0) {
2782 int ord = real_digits.
compare(theor_digits);
2790 }
else if (ord < 0) {
2814template <
typename T>
2825 int32_t exponent = sci_exp + 1 - int32_t(digits);
2826 if (exponent >= 0) {
2827 return positive_digit_comp<T>(bigmant, exponent);
2829 return negative_digit_comp<T>(bigmant, am, exponent);
2838#ifndef FASTFLOAT_PARSE_NUMBER_H
2839#define FASTFLOAT_PARSE_NUMBER_H
2845#include <system_error>
2856template <
typename T>
2860 answer.
ec = std::errc();
2861 bool minusSign =
false;
2862 if (*first ==
'-') {
2866 if (last - first >= 3) {
2868 answer.
ptr = (first += 3);
2869 value = minusSign ? -std::numeric_limits<T>::quiet_NaN() : std::numeric_limits<T>::quiet_NaN();
2871 if(first != last && *first ==
'(') {
2872 for(
const char* ptr = first + 1; ptr != last; ++ptr) {
2874 answer.
ptr = ptr + 1;
2877 else if(!((
'a' <= *ptr && *ptr <=
'z') || (
'A' <= *ptr && *ptr <=
'Z') || (
'0' <= *ptr && *ptr <=
'9') || *ptr ==
'_'))
2885 answer.
ptr = first + 8;
2887 answer.
ptr = first + 3;
2889 value = minusSign ? -std::numeric_limits<T>::infinity() : std::numeric_limits<T>::infinity();
2893 answer.
ec = std::errc::invalid_argument;
2909 static_assert (std::is_same<T, double>::value || std::is_same<T, float>::value,
"only float and double are supported");
2913 if (first == last) {
2914 answer.
ec = std::errc::invalid_argument;
2922 answer.
ec = std::errc();
2923 answer.
ptr = pns.lastmatch;
2926 value = T(pns.mantissa);
2929 if (pns.negative) { value = -value; }
2932 adjusted_mantissa am = compute_float<binary_format<T>>(pns.exponent, pns.mantissa);
2933 if(pns.too_many_digits && am.
power2 >= 0) {
2935 am = compute_error<binary_format<T>>(pns.exponent, pns.mantissa);
2940 if(am.
power2 < 0) { am = digit_comp<T>(pns, am); }
#define FASTFLOAT_ASSERT(x)
#define FASTFLOAT_DEBUG_ASSERT(x)
#define fastfloat_really_inline
from_chars_result parse_infnan(const char *first, const char *last, T &value) noexcept
constexpr fastfloat_really_inline int32_t power(int32_t q) noexcept
from_chars_result from_chars(const char *first, const char *last, T &value, chars_format fmt=chars_format::general) noexcept
fastfloat_really_inline adjusted_mantissa to_extended_halfway(T value) noexcept
fastfloat_really_inline limb scalar_add(limb x, limb y, bool &overflow) noexcept
fastfloat_really_inline void round_down(adjusted_mantissa &am, int32_t shift) noexcept
fastfloat_really_inline uint64_t uint32_hi64(uint32_t r0, bool &truncated) noexcept
fastfloat_really_inline void parse_one_digit(const char *&p, limb &value, size_t &counter, size_t &count) noexcept
fastfloat_really_inline void to_float(bool negative, adjusted_mantissa am, T &value)
fastfloat_really_inline limb scalar_mul(limb x, limb y, limb &carry) noexcept
fastfloat_really_inline uint64_t empty_hi64(bool &truncated) noexcept
fastfloat_really_inline uint32_t parse_eight_digits_unrolled(uint64_t val)
fastfloat_really_inline int leading_zeroes(uint64_t input_num)
fastfloat_really_inline uint64_t byteswap(uint64_t val)
constexpr size_t bigint_bits
bool long_mul(stackvec< size > &x, limb_span y) noexcept
constexpr size_t limb_bits
fastfloat_really_inline int32_t scientific_exponent(parsed_number_string &num) noexcept
bool large_add_from(stackvec< size > &x, limb_span y, size_t start) noexcept
static constexpr int32_t invalid_am_bias
bool small_add_from(stackvec< size > &vec, limb y, size_t start) noexcept
fastfloat_really_inline void parse_eight_digits(const char *&p, limb &value, size_t &counter, size_t &count) noexcept
fastfloat_really_inline value128 compute_product_approximation(int64_t q, uint64_t w)
adjusted_mantissa digit_comp(parsed_number_string &num, adjusted_mantissa am) noexcept
fastfloat_really_inline void skip_zeros(const char *&first, const char *last) noexcept
bool large_mul(stackvec< size > &x, limb_span y) noexcept
span< const char > byte_span
bool small_mul(stackvec< size > &vec, limb y) noexcept
constexpr size_t bigint_limbs
fastfloat_really_inline void write_u64(uint8_t *chars, uint64_t val)
fastfloat_really_inline adjusted_mantissa compute_error(int64_t q, uint64_t w) noexcept
fastfloat_really_inline parsed_number_string parse_number_string(const char *p, const char *pend, parse_options options) noexcept
from_chars_result from_chars_advanced(const char *first, const char *last, T &value, parse_options options) noexcept
fastfloat_really_inline uint64_t read_u64(const char *chars)
fastfloat_really_inline void round_nearest_tie_even(adjusted_mantissa &am, int32_t shift, callback cb) noexcept
fastfloat_really_inline adjusted_mantissa compute_float(int64_t q, uint64_t w) noexcept
fastfloat_really_inline bool is_truncated(const char *first, const char *last) noexcept
bool fastfloat_strncasecmp(const char *input1, const char *input2, size_t length)
static constexpr float powers_of_ten_float[]
adjusted_mantissa negative_digit_comp(bigint &bigmant, adjusted_mantissa am, int32_t exponent) noexcept
fastfloat_really_inline adjusted_mantissa to_extended(T value) noexcept
fastfloat_really_inline value128 full_multiplication(uint64_t a, uint64_t b)
fastfloat_really_inline uint64_t uint64_hi64(uint64_t r0, bool &truncated) noexcept
fastfloat_really_inline bool is_integer(char c) noexcept
void parse_mantissa(bigint &result, parsed_number_string &num, size_t max_digits, size_t &digits) noexcept
fastfloat_really_inline bool small_add(stackvec< size > &vec, limb y) noexcept
fastfloat_really_inline void round(adjusted_mantissa &am, callback cb) noexcept
fastfloat_really_inline void round_up_bigint(bigint &big, size_t &count) noexcept
static constexpr double powers_of_ten_double[]
fastfloat_really_inline bool is_made_of_eight_digits_fast(uint64_t val) noexcept
fastfloat_really_inline adjusted_mantissa compute_error_scaled(int64_t q, uint64_t w, int lz) noexcept
static constexpr uint64_t powers_of_ten_uint64[]
fastfloat_really_inline void add_native(bigint &big, limb power, limb value) noexcept
adjusted_mantissa positive_digit_comp(bigint &bigmant, int32_t exponent) noexcept
bool operator==(const adjusted_mantissa &o) const
adjusted_mantissa()=default
bool operator!=(const adjusted_mantissa &o) const
stackvec< bigint_limbs > vec
uint64_t hi64(bool &truncated) const noexcept
bool shl_limbs(size_t n) noexcept
int ctlz() const noexcept
bool add(limb y) noexcept
bool shl_bits(size_t n) noexcept
bigint & operator=(const bigint &)=delete
bool pow2(uint32_t exp) noexcept
bool pow10(uint32_t exp) noexcept
bool pow5(uint32_t exp) noexcept
bool mul(limb y) noexcept
bool shl(size_t n) noexcept
bigint(const bigint &)=delete
bigint & operator=(bigint &&other)=delete
int bit_length() const noexcept
int compare(const bigint &other) const noexcept
constexpr parse_options(chars_format fmt=chars_format::general, char dot='.')
static constexpr int smallest_power_of_five
static constexpr int largest_power_of_five
static const uint64_t power_of_five_128[number_of_entries]
static constexpr int number_of_entries
const T & operator[](size_t index) const noexcept
constexpr size_t len() const noexcept
span(const T *_ptr, size_t _length)
void resize_unchecked(size_t new_len, limb value) noexcept
bool nonzero(size_t index) const noexcept
limb & operator[](size_t index) noexcept
constexpr size_t capacity() const noexcept
bool try_push(limb value) noexcept
constexpr size_t len() const noexcept
constexpr bool is_empty() const noexcept
stackvec(stackvec &&)=delete
void set_len(size_t len) noexcept
const limb & operator[](size_t index) const noexcept
bool try_extend(limb_span s) noexcept
void extend_unchecked(limb_span s) noexcept
stackvec & operator=(const stackvec &)=delete
stackvec(const stackvec &)=delete
void push_unchecked(limb value) noexcept
bool try_resize(size_t new_len, limb value) noexcept
stackvec & operator=(stackvec &&other)=delete
const limb & rindex(size_t index) const noexcept
void normalize() noexcept
value128(uint64_t _low, uint64_t _high)