Replace Dragonbox cache which allows simpler cache recovery & integer checks

This commit is contained in:
Junekey Jeon 2022-01-12 16:17:57 -08:00 committed by Victor Zverovich
parent f4dd1b1b8b
commit 1882a7a2c1

View File

@ -1061,13 +1061,13 @@ template <> struct cache_accessor<float> {
0xb1a2bc2ec5000000, 0xde0b6b3a76400000, 0x8ac7230489e80000,
0xad78ebc5ac620000, 0xd8d726b7177a8000, 0x878678326eac9000,
0xa968163f0a57b400, 0xd3c21bcecceda100, 0x84595161401484a0,
0xa56fa5b99019a5c8, 0xcecb8f27f4200f3a, 0x813f3978f8940984,
0xa18f07d736b90be5, 0xc9f2c9cd04674ede, 0xfc6f7c4045812296,
0x9dc5ada82b70b59d, 0xc5371912364ce305, 0xf684df56c3e01bc6,
0x9a130b963a6c115c, 0xc097ce7bc90715b3, 0xf0bdc21abb48db20,
0x96769950b50d88f4, 0xbc143fa4e250eb31, 0xeb194f8e1ae525fd,
0x92efd1b8d0cf37be, 0xb7abc627050305ad, 0xe596b7b0c643c719,
0x8f7e32ce7bea5c6f, 0xb35dbf821ae4f38b, 0xe0352f62a19e306e};
0xa56fa5b99019a5c8, 0xcecb8f27f4200f3a, 0x813f3978f8940985,
0xa18f07d736b90be6, 0xc9f2c9cd04674edf, 0xfc6f7c4045812297,
0x9dc5ada82b70b59e, 0xc5371912364ce306, 0xf684df56c3e01bc7,
0x9a130b963a6c115d, 0xc097ce7bc90715b4, 0xf0bdc21abb48db21,
0x96769950b50d88f5, 0xbc143fa4e250eb32, 0xeb194f8e1ae525fe,
0x92efd1b8d0cf37bf, 0xb7abc627050305ae, 0xe596b7b0c643c71a,
0x8f7e32ce7bea5c70, 0xb35dbf821ae4f38c, 0xe0352f62a19e306f};
return pow10_significands[k - float_info<float>::min_k];
}
@ -1472,278 +1472,278 @@ template <> struct cache_accessor<double> {
{0x85a36366eb71f041, 0x47a6da2b7f864750},
{0xa70c3c40a64e6c51, 0x999090b65f67d924},
{0xd0cf4b50cfe20765, 0xfff4b4e3f741cf6d},
{0x82818f1281ed449f, 0xbff8f10e7a8921a4},
{0xa321f2d7226895c7, 0xaff72d52192b6a0d},
{0xcbea6f8ceb02bb39, 0x9bf4f8a69f764490},
{0xfee50b7025c36a08, 0x02f236d04753d5b4},
{0x9f4f2726179a2245, 0x01d762422c946590},
{0xc722f0ef9d80aad6, 0x424d3ad2b7b97ef5},
{0xf8ebad2b84e0d58b, 0xd2e0898765a7deb2},
{0x9b934c3b330c8577, 0x63cc55f49f88eb2f},
{0xc2781f49ffcfa6d5, 0x3cbf6b71c76b25fb},
{0xf316271c7fc3908a, 0x8bef464e3945ef7a},
{0x97edd871cfda3a56, 0x97758bf0e3cbb5ac},
{0xbde94e8e43d0c8ec, 0x3d52eeed1cbea317},
{0xed63a231d4c4fb27, 0x4ca7aaa863ee4bdd},
{0x945e455f24fb1cf8, 0x8fe8caa93e74ef6a},
{0xb975d6b6ee39e436, 0xb3e2fd538e122b44},
{0xe7d34c64a9c85d44, 0x60dbbca87196b616},
{0x90e40fbeea1d3a4a, 0xbc8955e946fe31cd},
{0xb51d13aea4a488dd, 0x6babab6398bdbe41},
{0xe264589a4dcdab14, 0xc696963c7eed2dd1},
{0x8d7eb76070a08aec, 0xfc1e1de5cf543ca2},
{0xb0de65388cc8ada8, 0x3b25a55f43294bcb},
{0xdd15fe86affad912, 0x49ef0eb713f39ebe},
{0x8a2dbf142dfcc7ab, 0x6e3569326c784337},
{0xacb92ed9397bf996, 0x49c2c37f07965404},
{0xd7e77a8f87daf7fb, 0xdc33745ec97be906},
{0x86f0ac99b4e8dafd, 0x69a028bb3ded71a3},
{0xa8acd7c0222311bc, 0xc40832ea0d68ce0c},
{0xd2d80db02aabd62b, 0xf50a3fa490c30190},
{0x83c7088e1aab65db, 0x792667c6da79e0fa},
{0xa4b8cab1a1563f52, 0x577001b891185938},
{0xcde6fd5e09abcf26, 0xed4c0226b55e6f86},
{0x80b05e5ac60b6178, 0x544f8158315b05b4},
{0xa0dc75f1778e39d6, 0x696361ae3db1c721},
{0xc913936dd571c84c, 0x03bc3a19cd1e38e9},
{0xfb5878494ace3a5f, 0x04ab48a04065c723},
{0x9d174b2dcec0e47b, 0x62eb0d64283f9c76},
{0xc45d1df942711d9a, 0x3ba5d0bd324f8394},
{0xf5746577930d6500, 0xca8f44ec7ee36479},
{0x9968bf6abbe85f20, 0x7e998b13cf4e1ecb},
{0xbfc2ef456ae276e8, 0x9e3fedd8c321a67e},
{0xefb3ab16c59b14a2, 0xc5cfe94ef3ea101e},
{0x95d04aee3b80ece5, 0xbba1f1d158724a12},
{0xbb445da9ca61281f, 0x2a8a6e45ae8edc97},
{0xea1575143cf97226, 0xf52d09d71a3293bd},
{0x924d692ca61be758, 0x593c2626705f9c56},
{0xb6e0c377cfa2e12e, 0x6f8b2fb00c77836c},
{0xe498f455c38b997a, 0x0b6dfb9c0f956447},
{0x8edf98b59a373fec, 0x4724bd4189bd5eac},
{0xb2977ee300c50fe7, 0x58edec91ec2cb657},
{0xdf3d5e9bc0f653e1, 0x2f2967b66737e3ed},
{0x8b865b215899f46c, 0xbd79e0d20082ee74},
{0xae67f1e9aec07187, 0xecd8590680a3aa11},
{0xda01ee641a708de9, 0xe80e6f4820cc9495},
{0x884134fe908658b2, 0x3109058d147fdcdd},
{0xaa51823e34a7eede, 0xbd4b46f0599fd415},
{0xd4e5e2cdc1d1ea96, 0x6c9e18ac7007c91a},
{0x850fadc09923329e, 0x03e2cf6bc604ddb0},
{0xa6539930bf6bff45, 0x84db8346b786151c},
{0xcfe87f7cef46ff16, 0xe612641865679a63},
{0x81f14fae158c5f6e, 0x4fcb7e8f3f60c07e},
{0xa26da3999aef7749, 0xe3be5e330f38f09d},
{0xcb090c8001ab551c, 0x5cadf5bfd3072cc5},
{0xfdcb4fa002162a63, 0x73d9732fc7c8f7f6},
{0x9e9f11c4014dda7e, 0x2867e7fddcdd9afa},
{0xc646d63501a1511d, 0xb281e1fd541501b8},
{0xf7d88bc24209a565, 0x1f225a7ca91a4226},
{0x9ae757596946075f, 0x3375788de9b06958},
{0xc1a12d2fc3978937, 0x0052d6b1641c83ae},
{0xf209787bb47d6b84, 0xc0678c5dbd23a49a},
{0x9745eb4d50ce6332, 0xf840b7ba963646e0},
{0xbd176620a501fbff, 0xb650e5a93bc3d898},
{0xec5d3fa8ce427aff, 0xa3e51f138ab4cebe},
{0x93ba47c980e98cdf, 0xc66f336c36b10137},
{0xb8a8d9bbe123f017, 0xb80b0047445d4184},
{0xe6d3102ad96cec1d, 0xa60dc059157491e5},
{0x9043ea1ac7e41392, 0x87c89837ad68db2f},
{0xb454e4a179dd1877, 0x29babe4598c311fb},
{0xe16a1dc9d8545e94, 0xf4296dd6fef3d67a},
{0x8ce2529e2734bb1d, 0x1899e4a65f58660c},
{0xb01ae745b101e9e4, 0x5ec05dcff72e7f8f},
{0xdc21a1171d42645d, 0x76707543f4fa1f73},
{0x899504ae72497eba, 0x6a06494a791c53a8},
{0xabfa45da0edbde69, 0x0487db9d17636892},
{0xd6f8d7509292d603, 0x45a9d2845d3c42b6},
{0x865b86925b9bc5c2, 0x0b8a2392ba45a9b2},
{0xa7f26836f282b732, 0x8e6cac7768d7141e},
{0xd1ef0244af2364ff, 0x3207d795430cd926},
{0x8335616aed761f1f, 0x7f44e6bd49e807b8},
{0xa402b9c5a8d3a6e7, 0x5f16206c9c6209a6},
{0xcd036837130890a1, 0x36dba887c37a8c0f},
{0x802221226be55a64, 0xc2494954da2c9789},
{0xa02aa96b06deb0fd, 0xf2db9baa10b7bd6c},
{0xc83553c5c8965d3d, 0x6f92829494e5acc7},
{0xfa42a8b73abbf48c, 0xcb772339ba1f17f9},
{0x9c69a97284b578d7, 0xff2a760414536efb},
{0xc38413cf25e2d70d, 0xfef5138519684aba},
{0xf46518c2ef5b8cd1, 0x7eb258665fc25d69},
{0x98bf2f79d5993802, 0xef2f773ffbd97a61},
{0xbeeefb584aff8603, 0xaafb550ffacfd8fa},
{0xeeaaba2e5dbf6784, 0x95ba2a53f983cf38},
{0x952ab45cfa97a0b2, 0xdd945a747bf26183},
{0xba756174393d88df, 0x94f971119aeef9e4},
{0xe912b9d1478ceb17, 0x7a37cd5601aab85d},
{0x91abb422ccb812ee, 0xac62e055c10ab33a},
{0xb616a12b7fe617aa, 0x577b986b314d6009},
{0xe39c49765fdf9d94, 0xed5a7e85fda0b80b},
{0x8e41ade9fbebc27d, 0x14588f13be847307},
{0xb1d219647ae6b31c, 0x596eb2d8ae258fc8},
{0xde469fbd99a05fe3, 0x6fca5f8ed9aef3bb},
{0x8aec23d680043bee, 0x25de7bb9480d5854},
{0xada72ccc20054ae9, 0xaf561aa79a10ae6a},
{0xd910f7ff28069da4, 0x1b2ba1518094da04},
{0x87aa9aff79042286, 0x90fb44d2f05d0842},
{0xa99541bf57452b28, 0x353a1607ac744a53},
{0xd3fa922f2d1675f2, 0x42889b8997915ce8},
{0x847c9b5d7c2e09b7, 0x69956135febada11},
{0xa59bc234db398c25, 0x43fab9837e699095},
{0xcf02b2c21207ef2e, 0x94f967e45e03f4bb},
{0x8161afb94b44f57d, 0x1d1be0eebac278f5},
{0xa1ba1ba79e1632dc, 0x6462d92a69731732},
{0xca28a291859bbf93, 0x7d7b8f7503cfdcfe},
{0xfcb2cb35e702af78, 0x5cda735244c3d43e},
{0x9defbf01b061adab, 0x3a0888136afa64a7},
{0xc56baec21c7a1916, 0x088aaa1845b8fdd0},
{0xf6c69a72a3989f5b, 0x8aad549e57273d45},
{0x9a3c2087a63f6399, 0x36ac54e2f678864b},
{0xc0cb28a98fcf3c7f, 0x84576a1bb416a7dd},
{0xf0fdf2d3f3c30b9f, 0x656d44a2a11c51d5},
{0x969eb7c47859e743, 0x9f644ae5a4b1b325},
{0xbc4665b596706114, 0x873d5d9f0dde1fee},
{0xeb57ff22fc0c7959, 0xa90cb506d155a7ea},
{0x9316ff75dd87cbd8, 0x09a7f12442d588f2},
{0xb7dcbf5354e9bece, 0x0c11ed6d538aeb2f},
{0xe5d3ef282a242e81, 0x8f1668c8a86da5fa},
{0x8fa475791a569d10, 0xf96e017d694487bc},
{0xb38d92d760ec4455, 0x37c981dcc395a9ac},
{0xe070f78d3927556a, 0x85bbe253f47b1417},
{0x8c469ab843b89562, 0x93956d7478ccec8e},
{0xaf58416654a6babb, 0x387ac8d1970027b2},
{0xdb2e51bfe9d0696a, 0x06997b05fcc0319e},
{0x88fcf317f22241e2, 0x441fece3bdf81f03},
{0xab3c2fddeeaad25a, 0xd527e81cad7626c3},
{0xd60b3bd56a5586f1, 0x8a71e223d8d3b074},
{0x85c7056562757456, 0xf6872d5667844e49},
{0xa738c6bebb12d16c, 0xb428f8ac016561db},
{0xd106f86e69d785c7, 0xe13336d701beba52},
{0x82a45b450226b39c, 0xecc0024661173473},
{0xa34d721642b06084, 0x27f002d7f95d0190},
{0xcc20ce9bd35c78a5, 0x31ec038df7b441f4},
{0xff290242c83396ce, 0x7e67047175a15271},
{0x9f79a169bd203e41, 0x0f0062c6e984d386},
{0xc75809c42c684dd1, 0x52c07b78a3e60868},
{0xf92e0c3537826145, 0xa7709a56ccdf8a82},
{0x9bbcc7a142b17ccb, 0x88a66076400bb691},
{0xc2abf989935ddbfe, 0x6acff893d00ea435},
{0xf356f7ebf83552fe, 0x0583f6b8c4124d43},
{0x98165af37b2153de, 0xc3727a337a8b704a},
{0xbe1bf1b059e9a8d6, 0x744f18c0592e4c5c},
{0xeda2ee1c7064130c, 0x1162def06f79df73},
{0x9485d4d1c63e8be7, 0x8addcb5645ac2ba8},
{0xb9a74a0637ce2ee1, 0x6d953e2bd7173692},
{0xe8111c87c5c1ba99, 0xc8fa8db6ccdd0437},
{0x910ab1d4db9914a0, 0x1d9c9892400a22a2},
{0xb54d5e4a127f59c8, 0x2503beb6d00cab4b},
{0xe2a0b5dc971f303a, 0x2e44ae64840fd61d},
{0x8da471a9de737e24, 0x5ceaecfed289e5d2},
{0xb10d8e1456105dad, 0x7425a83e872c5f47},
{0xdd50f1996b947518, 0xd12f124e28f77719},
{0x8a5296ffe33cc92f, 0x82bd6b70d99aaa6f},
{0xace73cbfdc0bfb7b, 0x636cc64d1001550b},
{0xd8210befd30efa5a, 0x3c47f7e05401aa4e},
{0x8714a775e3e95c78, 0x65acfaec34810a71},
{0xa8d9d1535ce3b396, 0x7f1839a741a14d0d},
{0xd31045a8341ca07c, 0x1ede48111209a050},
{0x83ea2b892091e44d, 0x934aed0aab460432},
{0xa4e4b66b68b65d60, 0xf81da84d5617853f},
{0xce1de40642e3f4b9, 0x36251260ab9d668e},
{0x80d2ae83e9ce78f3, 0xc1d72b7c6b426019},
{0xa1075a24e4421730, 0xb24cf65b8612f81f},
{0xc94930ae1d529cfc, 0xdee033f26797b627},
{0xfb9b7cd9a4a7443c, 0x169840ef017da3b1},
{0x9d412e0806e88aa5, 0x8e1f289560ee864e},
{0xc491798a08a2ad4e, 0xf1a6f2bab92a27e2},
{0xf5b5d7ec8acb58a2, 0xae10af696774b1db},
{0x9991a6f3d6bf1765, 0xacca6da1e0a8ef29},
{0xbff610b0cc6edd3f, 0x17fd090a58d32af3},
{0xeff394dcff8a948e, 0xddfc4b4cef07f5b0},
{0x95f83d0a1fb69cd9, 0x4abdaf101564f98e},
{0xbb764c4ca7a4440f, 0x9d6d1ad41abe37f1},
{0xea53df5fd18d5513, 0x84c86189216dc5ed},
{0x92746b9be2f8552c, 0x32fd3cf5b4e49bb4},
{0xb7118682dbb66a77, 0x3fbc8c33221dc2a1},
{0xe4d5e82392a40515, 0x0fabaf3feaa5334a},
{0x8f05b1163ba6832d, 0x29cb4d87f2a7400e},
{0xb2c71d5bca9023f8, 0x743e20e9ef511012},
{0xdf78e4b2bd342cf6, 0x914da9246b255416},
{0x8bab8eefb6409c1a, 0x1ad089b6c2f7548e},
{0xae9672aba3d0c320, 0xa184ac2473b529b1},
{0xda3c0f568cc4f3e8, 0xc9e5d72d90a2741e},
{0x8865899617fb1871, 0x7e2fa67c7a658892},
{0xaa7eebfb9df9de8d, 0xddbb901b98feeab7},
{0xd51ea6fa85785631, 0x552a74227f3ea565},
{0x8533285c936b35de, 0xd53a88958f87275f},
{0xa67ff273b8460356, 0x8a892abaf368f137},
{0xd01fef10a657842c, 0x2d2b7569b0432d85},
{0x8213f56a67f6b29b, 0x9c3b29620e29fc73},
{0xa298f2c501f45f42, 0x8349f3ba91b47b8f},
{0xcb3f2f7642717713, 0x241c70a936219a73},
{0xfe0efb53d30dd4d7, 0xed238cd383aa0110},
{0x9ec95d1463e8a506, 0xf4363804324a40aa},
{0xc67bb4597ce2ce48, 0xb143c6053edcd0d5},
{0xf81aa16fdc1b81da, 0xdd94b7868e94050a},
{0x9b10a4e5e9913128, 0xca7cf2b4191c8326},
{0xc1d4ce1f63f57d72, 0xfd1c2f611f63a3f0},
{0xf24a01a73cf2dccf, 0xbc633b39673c8cec},
{0x976e41088617ca01, 0xd5be0503e085d813},
{0xbd49d14aa79dbc82, 0x4b2d8644d8a74e18},
{0xec9c459d51852ba2, 0xddf8e7d60ed1219e},
{0x93e1ab8252f33b45, 0xcabb90e5c942b503},
{0xb8da1662e7b00a17, 0x3d6a751f3b936243},
{0xe7109bfba19c0c9d, 0x0cc512670a783ad4},
{0x906a617d450187e2, 0x27fb2b80668b24c5},
{0xb484f9dc9641e9da, 0xb1f9f660802dedf6},
{0xe1a63853bbd26451, 0x5e7873f8a0396973},
{0x8d07e33455637eb2, 0xdb0b487b6423e1e8},
{0xb049dc016abc5e5f, 0x91ce1a9a3d2cda62},
{0xdc5c5301c56b75f7, 0x7641a140cc7810fb},
{0x89b9b3e11b6329ba, 0xa9e904c87fcb0a9d},
{0xac2820d9623bf429, 0x546345fa9fbdcd44},
{0xd732290fbacaf133, 0xa97c177947ad4095},
{0x867f59a9d4bed6c0, 0x49ed8eabcccc485d},
{0xa81f301449ee8c70, 0x5c68f256bfff5a74},
{0xd226fc195c6a2f8c, 0x73832eec6fff3111},
{0x83585d8fd9c25db7, 0xc831fd53c5ff7eab},
{0xa42e74f3d032f525, 0xba3e7ca8b77f5e55},
{0xcd3a1230c43fb26f, 0x28ce1bd2e55f35eb},
{0x80444b5e7aa7cf85, 0x7980d163cf5b81b3},
{0xa0555e361951c366, 0xd7e105bcc332621f},
{0xc86ab5c39fa63440, 0x8dd9472bf3fefaa7},
{0xfa856334878fc150, 0xb14f98f6f0feb951},
{0x9c935e00d4b9d8d2, 0x6ed1bf9a569f33d3},
{0xc3b8358109e84f07, 0x0a862f80ec4700c8},
{0xf4a642e14c6262c8, 0xcd27bb612758c0fa},
{0x98e7e9cccfbd7dbd, 0x8038d51cb897789c},
{0xbf21e44003acdd2c, 0xe0470a63e6bd56c3},
{0xeeea5d5004981478, 0x1858ccfce06cac74},
{0x95527a5202df0ccb, 0x0f37801e0c43ebc8},
{0xbaa718e68396cffd, 0xd30560258f54e6ba},
{0xe950df20247c83fd, 0x47c6b82ef32a2069},
{0x91d28b7416cdd27e, 0x4cdc331d57fa5441},
{0xb6472e511c81471d, 0xe0133fe4adf8e952},
{0xe3d8f9e563a198e5, 0x58180fddd97723a6},
{0x8e679c2f5e44ff8f, 0x570f09eaa7ea7648},
{0xb201833b35d63f73, 0x2cd2cc6551e513da},
{0xde81e40a034bcf4f, 0xf8077f7ea65e58d1},
{0x8b112e86420f6191, 0xfb04afaf27faf782},
{0xadd57a27d29339f6, 0x79c5db9af1f9b563},
{0xd94ad8b1c7380874, 0x18375281ae7822bc},
{0x87cec76f1c830548, 0x8f2293910d0b15b5},
{0xa9c2794ae3a3c69a, 0xb2eb3875504ddb22},
{0xd433179d9c8cb841, 0x5fa60692a46151eb},
{0x849feec281d7f328, 0xdbc7c41ba6bcd333},
{0xa5c7ea73224deff3, 0x12b9b522906c0800},
{0xcf39e50feae16bef, 0xd768226b34870a00},
{0x81842f29f2cce375, 0xe6a1158300d46640},
{0xa1e53af46f801c53, 0x60495ae3c1097fd0},
{0xca5e89b18b602368, 0x385bb19cb14bdfc4},
{0xfcf62c1dee382c42, 0x46729e03dd9ed7b5},
{0x9e19db92b4e31ba9, 0x6c07a2c26a8346d1},
{0xc5a05277621be293, 0xc7098b7305241885},
{0x82818f1281ed449f, 0xbff8f10e7a8921a5},
{0xa321f2d7226895c7, 0xaff72d52192b6a0e},
{0xcbea6f8ceb02bb39, 0x9bf4f8a69f764491},
{0xfee50b7025c36a08, 0x02f236d04753d5b5},
{0x9f4f2726179a2245, 0x01d762422c946591},
{0xc722f0ef9d80aad6, 0x424d3ad2b7b97ef6},
{0xf8ebad2b84e0d58b, 0xd2e0898765a7deb3},
{0x9b934c3b330c8577, 0x63cc55f49f88eb30},
{0xc2781f49ffcfa6d5, 0x3cbf6b71c76b25fc},
{0xf316271c7fc3908a, 0x8bef464e3945ef7b},
{0x97edd871cfda3a56, 0x97758bf0e3cbb5ad},
{0xbde94e8e43d0c8ec, 0x3d52eeed1cbea318},
{0xed63a231d4c4fb27, 0x4ca7aaa863ee4bde},
{0x945e455f24fb1cf8, 0x8fe8caa93e74ef6b},
{0xb975d6b6ee39e436, 0xb3e2fd538e122b45},
{0xe7d34c64a9c85d44, 0x60dbbca87196b617},
{0x90e40fbeea1d3a4a, 0xbc8955e946fe31ce},
{0xb51d13aea4a488dd, 0x6babab6398bdbe42},
{0xe264589a4dcdab14, 0xc696963c7eed2dd2},
{0x8d7eb76070a08aec, 0xfc1e1de5cf543ca3},
{0xb0de65388cc8ada8, 0x3b25a55f43294bcc},
{0xdd15fe86affad912, 0x49ef0eb713f39ebf},
{0x8a2dbf142dfcc7ab, 0x6e3569326c784338},
{0xacb92ed9397bf996, 0x49c2c37f07965405},
{0xd7e77a8f87daf7fb, 0xdc33745ec97be907},
{0x86f0ac99b4e8dafd, 0x69a028bb3ded71a4},
{0xa8acd7c0222311bc, 0xc40832ea0d68ce0d},
{0xd2d80db02aabd62b, 0xf50a3fa490c30191},
{0x83c7088e1aab65db, 0x792667c6da79e0fb},
{0xa4b8cab1a1563f52, 0x577001b891185939},
{0xcde6fd5e09abcf26, 0xed4c0226b55e6f87},
{0x80b05e5ac60b6178, 0x544f8158315b05b5},
{0xa0dc75f1778e39d6, 0x696361ae3db1c722},
{0xc913936dd571c84c, 0x03bc3a19cd1e38ea},
{0xfb5878494ace3a5f, 0x04ab48a04065c724},
{0x9d174b2dcec0e47b, 0x62eb0d64283f9c77},
{0xc45d1df942711d9a, 0x3ba5d0bd324f8395},
{0xf5746577930d6500, 0xca8f44ec7ee3647a},
{0x9968bf6abbe85f20, 0x7e998b13cf4e1ecc},
{0xbfc2ef456ae276e8, 0x9e3fedd8c321a67f},
{0xefb3ab16c59b14a2, 0xc5cfe94ef3ea101f},
{0x95d04aee3b80ece5, 0xbba1f1d158724a13},
{0xbb445da9ca61281f, 0x2a8a6e45ae8edc98},
{0xea1575143cf97226, 0xf52d09d71a3293be},
{0x924d692ca61be758, 0x593c2626705f9c57},
{0xb6e0c377cfa2e12e, 0x6f8b2fb00c77836d},
{0xe498f455c38b997a, 0x0b6dfb9c0f956448},
{0x8edf98b59a373fec, 0x4724bd4189bd5ead},
{0xb2977ee300c50fe7, 0x58edec91ec2cb658},
{0xdf3d5e9bc0f653e1, 0x2f2967b66737e3ee},
{0x8b865b215899f46c, 0xbd79e0d20082ee75},
{0xae67f1e9aec07187, 0xecd8590680a3aa12},
{0xda01ee641a708de9, 0xe80e6f4820cc9496},
{0x884134fe908658b2, 0x3109058d147fdcde},
{0xaa51823e34a7eede, 0xbd4b46f0599fd416},
{0xd4e5e2cdc1d1ea96, 0x6c9e18ac7007c91b},
{0x850fadc09923329e, 0x03e2cf6bc604ddb1},
{0xa6539930bf6bff45, 0x84db8346b786151d},
{0xcfe87f7cef46ff16, 0xe612641865679a64},
{0x81f14fae158c5f6e, 0x4fcb7e8f3f60c07f},
{0xa26da3999aef7749, 0xe3be5e330f38f09e},
{0xcb090c8001ab551c, 0x5cadf5bfd3072cc6},
{0xfdcb4fa002162a63, 0x73d9732fc7c8f7f7},
{0x9e9f11c4014dda7e, 0x2867e7fddcdd9afb},
{0xc646d63501a1511d, 0xb281e1fd541501b9},
{0xf7d88bc24209a565, 0x1f225a7ca91a4227},
{0x9ae757596946075f, 0x3375788de9b06959},
{0xc1a12d2fc3978937, 0x0052d6b1641c83af},
{0xf209787bb47d6b84, 0xc0678c5dbd23a49b},
{0x9745eb4d50ce6332, 0xf840b7ba963646e1},
{0xbd176620a501fbff, 0xb650e5a93bc3d899},
{0xec5d3fa8ce427aff, 0xa3e51f138ab4cebf},
{0x93ba47c980e98cdf, 0xc66f336c36b10138},
{0xb8a8d9bbe123f017, 0xb80b0047445d4185},
{0xe6d3102ad96cec1d, 0xa60dc059157491e6},
{0x9043ea1ac7e41392, 0x87c89837ad68db30},
{0xb454e4a179dd1877, 0x29babe4598c311fc},
{0xe16a1dc9d8545e94, 0xf4296dd6fef3d67b},
{0x8ce2529e2734bb1d, 0x1899e4a65f58660d},
{0xb01ae745b101e9e4, 0x5ec05dcff72e7f90},
{0xdc21a1171d42645d, 0x76707543f4fa1f74},
{0x899504ae72497eba, 0x6a06494a791c53a9},
{0xabfa45da0edbde69, 0x0487db9d17636893},
{0xd6f8d7509292d603, 0x45a9d2845d3c42b7},
{0x865b86925b9bc5c2, 0x0b8a2392ba45a9b3},
{0xa7f26836f282b732, 0x8e6cac7768d7141f},
{0xd1ef0244af2364ff, 0x3207d795430cd927},
{0x8335616aed761f1f, 0x7f44e6bd49e807b9},
{0xa402b9c5a8d3a6e7, 0x5f16206c9c6209a7},
{0xcd036837130890a1, 0x36dba887c37a8c10},
{0x802221226be55a64, 0xc2494954da2c978a},
{0xa02aa96b06deb0fd, 0xf2db9baa10b7bd6d},
{0xc83553c5c8965d3d, 0x6f92829494e5acc8},
{0xfa42a8b73abbf48c, 0xcb772339ba1f17fa},
{0x9c69a97284b578d7, 0xff2a760414536efc},
{0xc38413cf25e2d70d, 0xfef5138519684abb},
{0xf46518c2ef5b8cd1, 0x7eb258665fc25d6a},
{0x98bf2f79d5993802, 0xef2f773ffbd97a62},
{0xbeeefb584aff8603, 0xaafb550ffacfd8fb},
{0xeeaaba2e5dbf6784, 0x95ba2a53f983cf39},
{0x952ab45cfa97a0b2, 0xdd945a747bf26184},
{0xba756174393d88df, 0x94f971119aeef9e5},
{0xe912b9d1478ceb17, 0x7a37cd5601aab85e},
{0x91abb422ccb812ee, 0xac62e055c10ab33b},
{0xb616a12b7fe617aa, 0x577b986b314d600a},
{0xe39c49765fdf9d94, 0xed5a7e85fda0b80c},
{0x8e41ade9fbebc27d, 0x14588f13be847308},
{0xb1d219647ae6b31c, 0x596eb2d8ae258fc9},
{0xde469fbd99a05fe3, 0x6fca5f8ed9aef3bc},
{0x8aec23d680043bee, 0x25de7bb9480d5855},
{0xada72ccc20054ae9, 0xaf561aa79a10ae6b},
{0xd910f7ff28069da4, 0x1b2ba1518094da05},
{0x87aa9aff79042286, 0x90fb44d2f05d0843},
{0xa99541bf57452b28, 0x353a1607ac744a54},
{0xd3fa922f2d1675f2, 0x42889b8997915ce9},
{0x847c9b5d7c2e09b7, 0x69956135febada12},
{0xa59bc234db398c25, 0x43fab9837e699096},
{0xcf02b2c21207ef2e, 0x94f967e45e03f4bc},
{0x8161afb94b44f57d, 0x1d1be0eebac278f6},
{0xa1ba1ba79e1632dc, 0x6462d92a69731733},
{0xca28a291859bbf93, 0x7d7b8f7503cfdcff},
{0xfcb2cb35e702af78, 0x5cda735244c3d43f},
{0x9defbf01b061adab, 0x3a0888136afa64a8},
{0xc56baec21c7a1916, 0x088aaa1845b8fdd1},
{0xf6c69a72a3989f5b, 0x8aad549e57273d46},
{0x9a3c2087a63f6399, 0x36ac54e2f678864c},
{0xc0cb28a98fcf3c7f, 0x84576a1bb416a7de},
{0xf0fdf2d3f3c30b9f, 0x656d44a2a11c51d6},
{0x969eb7c47859e743, 0x9f644ae5a4b1b326},
{0xbc4665b596706114, 0x873d5d9f0dde1fef},
{0xeb57ff22fc0c7959, 0xa90cb506d155a7eb},
{0x9316ff75dd87cbd8, 0x09a7f12442d588f3},
{0xb7dcbf5354e9bece, 0x0c11ed6d538aeb30},
{0xe5d3ef282a242e81, 0x8f1668c8a86da5fb},
{0x8fa475791a569d10, 0xf96e017d694487bd},
{0xb38d92d760ec4455, 0x37c981dcc395a9ad},
{0xe070f78d3927556a, 0x85bbe253f47b1418},
{0x8c469ab843b89562, 0x93956d7478ccec8f},
{0xaf58416654a6babb, 0x387ac8d1970027b3},
{0xdb2e51bfe9d0696a, 0x06997b05fcc0319f},
{0x88fcf317f22241e2, 0x441fece3bdf81f04},
{0xab3c2fddeeaad25a, 0xd527e81cad7626c4},
{0xd60b3bd56a5586f1, 0x8a71e223d8d3b075},
{0x85c7056562757456, 0xf6872d5667844e4a},
{0xa738c6bebb12d16c, 0xb428f8ac016561dc},
{0xd106f86e69d785c7, 0xe13336d701beba53},
{0x82a45b450226b39c, 0xecc0024661173474},
{0xa34d721642b06084, 0x27f002d7f95d0191},
{0xcc20ce9bd35c78a5, 0x31ec038df7b441f5},
{0xff290242c83396ce, 0x7e67047175a15272},
{0x9f79a169bd203e41, 0x0f0062c6e984d387},
{0xc75809c42c684dd1, 0x52c07b78a3e60869},
{0xf92e0c3537826145, 0xa7709a56ccdf8a83},
{0x9bbcc7a142b17ccb, 0x88a66076400bb692},
{0xc2abf989935ddbfe, 0x6acff893d00ea436},
{0xf356f7ebf83552fe, 0x0583f6b8c4124d44},
{0x98165af37b2153de, 0xc3727a337a8b704b},
{0xbe1bf1b059e9a8d6, 0x744f18c0592e4c5d},
{0xeda2ee1c7064130c, 0x1162def06f79df74},
{0x9485d4d1c63e8be7, 0x8addcb5645ac2ba9},
{0xb9a74a0637ce2ee1, 0x6d953e2bd7173693},
{0xe8111c87c5c1ba99, 0xc8fa8db6ccdd0438},
{0x910ab1d4db9914a0, 0x1d9c9892400a22a3},
{0xb54d5e4a127f59c8, 0x2503beb6d00cab4c},
{0xe2a0b5dc971f303a, 0x2e44ae64840fd61e},
{0x8da471a9de737e24, 0x5ceaecfed289e5d3},
{0xb10d8e1456105dad, 0x7425a83e872c5f48},
{0xdd50f1996b947518, 0xd12f124e28f7771a},
{0x8a5296ffe33cc92f, 0x82bd6b70d99aaa70},
{0xace73cbfdc0bfb7b, 0x636cc64d1001550c},
{0xd8210befd30efa5a, 0x3c47f7e05401aa4f},
{0x8714a775e3e95c78, 0x65acfaec34810a72},
{0xa8d9d1535ce3b396, 0x7f1839a741a14d0e},
{0xd31045a8341ca07c, 0x1ede48111209a051},
{0x83ea2b892091e44d, 0x934aed0aab460433},
{0xa4e4b66b68b65d60, 0xf81da84d56178540},
{0xce1de40642e3f4b9, 0x36251260ab9d668f},
{0x80d2ae83e9ce78f3, 0xc1d72b7c6b42601a},
{0xa1075a24e4421730, 0xb24cf65b8612f820},
{0xc94930ae1d529cfc, 0xdee033f26797b628},
{0xfb9b7cd9a4a7443c, 0x169840ef017da3b2},
{0x9d412e0806e88aa5, 0x8e1f289560ee864f},
{0xc491798a08a2ad4e, 0xf1a6f2bab92a27e3},
{0xf5b5d7ec8acb58a2, 0xae10af696774b1dc},
{0x9991a6f3d6bf1765, 0xacca6da1e0a8ef2a},
{0xbff610b0cc6edd3f, 0x17fd090a58d32af4},
{0xeff394dcff8a948e, 0xddfc4b4cef07f5b1},
{0x95f83d0a1fb69cd9, 0x4abdaf101564f98f},
{0xbb764c4ca7a4440f, 0x9d6d1ad41abe37f2},
{0xea53df5fd18d5513, 0x84c86189216dc5ee},
{0x92746b9be2f8552c, 0x32fd3cf5b4e49bb5},
{0xb7118682dbb66a77, 0x3fbc8c33221dc2a2},
{0xe4d5e82392a40515, 0x0fabaf3feaa5334b},
{0x8f05b1163ba6832d, 0x29cb4d87f2a7400f},
{0xb2c71d5bca9023f8, 0x743e20e9ef511013},
{0xdf78e4b2bd342cf6, 0x914da9246b255417},
{0x8bab8eefb6409c1a, 0x1ad089b6c2f7548f},
{0xae9672aba3d0c320, 0xa184ac2473b529b2},
{0xda3c0f568cc4f3e8, 0xc9e5d72d90a2741f},
{0x8865899617fb1871, 0x7e2fa67c7a658893},
{0xaa7eebfb9df9de8d, 0xddbb901b98feeab8},
{0xd51ea6fa85785631, 0x552a74227f3ea566},
{0x8533285c936b35de, 0xd53a88958f872760},
{0xa67ff273b8460356, 0x8a892abaf368f138},
{0xd01fef10a657842c, 0x2d2b7569b0432d86},
{0x8213f56a67f6b29b, 0x9c3b29620e29fc74},
{0xa298f2c501f45f42, 0x8349f3ba91b47b90},
{0xcb3f2f7642717713, 0x241c70a936219a74},
{0xfe0efb53d30dd4d7, 0xed238cd383aa0111},
{0x9ec95d1463e8a506, 0xf4363804324a40ab},
{0xc67bb4597ce2ce48, 0xb143c6053edcd0d6},
{0xf81aa16fdc1b81da, 0xdd94b7868e94050b},
{0x9b10a4e5e9913128, 0xca7cf2b4191c8327},
{0xc1d4ce1f63f57d72, 0xfd1c2f611f63a3f1},
{0xf24a01a73cf2dccf, 0xbc633b39673c8ced},
{0x976e41088617ca01, 0xd5be0503e085d814},
{0xbd49d14aa79dbc82, 0x4b2d8644d8a74e19},
{0xec9c459d51852ba2, 0xddf8e7d60ed1219f},
{0x93e1ab8252f33b45, 0xcabb90e5c942b504},
{0xb8da1662e7b00a17, 0x3d6a751f3b936244},
{0xe7109bfba19c0c9d, 0x0cc512670a783ad5},
{0x906a617d450187e2, 0x27fb2b80668b24c6},
{0xb484f9dc9641e9da, 0xb1f9f660802dedf7},
{0xe1a63853bbd26451, 0x5e7873f8a0396974},
{0x8d07e33455637eb2, 0xdb0b487b6423e1e9},
{0xb049dc016abc5e5f, 0x91ce1a9a3d2cda63},
{0xdc5c5301c56b75f7, 0x7641a140cc7810fc},
{0x89b9b3e11b6329ba, 0xa9e904c87fcb0a9e},
{0xac2820d9623bf429, 0x546345fa9fbdcd45},
{0xd732290fbacaf133, 0xa97c177947ad4096},
{0x867f59a9d4bed6c0, 0x49ed8eabcccc485e},
{0xa81f301449ee8c70, 0x5c68f256bfff5a75},
{0xd226fc195c6a2f8c, 0x73832eec6fff3112},
{0x83585d8fd9c25db7, 0xc831fd53c5ff7eac},
{0xa42e74f3d032f525, 0xba3e7ca8b77f5e56},
{0xcd3a1230c43fb26f, 0x28ce1bd2e55f35ec},
{0x80444b5e7aa7cf85, 0x7980d163cf5b81b4},
{0xa0555e361951c366, 0xd7e105bcc3326220},
{0xc86ab5c39fa63440, 0x8dd9472bf3fefaa8},
{0xfa856334878fc150, 0xb14f98f6f0feb952},
{0x9c935e00d4b9d8d2, 0x6ed1bf9a569f33d4},
{0xc3b8358109e84f07, 0x0a862f80ec4700c9},
{0xf4a642e14c6262c8, 0xcd27bb612758c0fb},
{0x98e7e9cccfbd7dbd, 0x8038d51cb897789d},
{0xbf21e44003acdd2c, 0xe0470a63e6bd56c4},
{0xeeea5d5004981478, 0x1858ccfce06cac75},
{0x95527a5202df0ccb, 0x0f37801e0c43ebc9},
{0xbaa718e68396cffd, 0xd30560258f54e6bb},
{0xe950df20247c83fd, 0x47c6b82ef32a206a},
{0x91d28b7416cdd27e, 0x4cdc331d57fa5442},
{0xb6472e511c81471d, 0xe0133fe4adf8e953},
{0xe3d8f9e563a198e5, 0x58180fddd97723a7},
{0x8e679c2f5e44ff8f, 0x570f09eaa7ea7649},
{0xb201833b35d63f73, 0x2cd2cc6551e513db},
{0xde81e40a034bcf4f, 0xf8077f7ea65e58d2},
{0x8b112e86420f6191, 0xfb04afaf27faf783},
{0xadd57a27d29339f6, 0x79c5db9af1f9b564},
{0xd94ad8b1c7380874, 0x18375281ae7822bd},
{0x87cec76f1c830548, 0x8f2293910d0b15b6},
{0xa9c2794ae3a3c69a, 0xb2eb3875504ddb23},
{0xd433179d9c8cb841, 0x5fa60692a46151ec},
{0x849feec281d7f328, 0xdbc7c41ba6bcd334},
{0xa5c7ea73224deff3, 0x12b9b522906c0801},
{0xcf39e50feae16bef, 0xd768226b34870a01},
{0x81842f29f2cce375, 0xe6a1158300d46641},
{0xa1e53af46f801c53, 0x60495ae3c1097fd1},
{0xca5e89b18b602368, 0x385bb19cb14bdfc5},
{0xfcf62c1dee382c42, 0x46729e03dd9ed7b6},
{0x9e19db92b4e31ba9, 0x6c07a2c26a8346d2},
{0xc5a05277621be293, 0xc7098b7305241886},
{ 0xf70867153aa2db38,
0xb8cbee4fc66d1ea7 }
0xb8cbee4fc66d1ea8 }
#else
{0xff77b1fcbebcdc4f, 0x25e8e89c13bb0f7b},
{0xce5d73ff402d98e3, 0xfb0a3d212dc81290},
@ -1758,17 +1758,17 @@ template <> struct cache_accessor<double> {
{0xf1c90080baf72cb1, 0x5324c68b12dd6339},
{0xc350000000000000, 0x0000000000000000},
{0x9dc5ada82b70b59d, 0xf020000000000000},
{0xfee50b7025c36a08, 0x02f236d04753d5b4},
{0xcde6fd5e09abcf26, 0xed4c0226b55e6f86},
{0xa6539930bf6bff45, 0x84db8346b786151c},
{0x865b86925b9bc5c2, 0x0b8a2392ba45a9b2},
{0xd910f7ff28069da4, 0x1b2ba1518094da04},
{0xaf58416654a6babb, 0x387ac8d1970027b2},
{0x8da471a9de737e24, 0x5ceaecfed289e5d2},
{0xe4d5e82392a40515, 0x0fabaf3feaa5334a},
{0xb8da1662e7b00a17, 0x3d6a751f3b936243},
{0xfee50b7025c36a08, 0x02f236d04753d5b5},
{0xcde6fd5e09abcf26, 0xed4c0226b55e6f87},
{0xa6539930bf6bff45, 0x84db8346b786151d},
{0x865b86925b9bc5c2, 0x0b8a2392ba45a9b3},
{0xd910f7ff28069da4, 0x1b2ba1518094da05},
{0xaf58416654a6babb, 0x387ac8d1970027b3},
{0x8da471a9de737e24, 0x5ceaecfed289e5d3},
{0xe4d5e82392a40515, 0x0fabaf3feaa5334b},
{0xb8da1662e7b00a17, 0x3d6a751f3b936244},
{ 0x95527a5202df0ccb,
0x0f37801e0c43ebc8 }
0x0f37801e0c43ebc9 }
#endif
};
@ -1787,13 +1787,13 @@ template <> struct cache_accessor<double> {
0x00d3c21bcecceda1, 0x0422ca8b0a00a425, 0x14adf4b7320334b9};
static constexpr const uint32_t pow10_recovery_errors[] = {
0x50001400, 0x54044100, 0x54014555, 0x55954415, 0x54115555, 0x00000001,
0x50000000, 0x00104000, 0x54010004, 0x05004001, 0x55555544, 0x41545555,
0x54040551, 0x15445545, 0x51555514, 0x10000015, 0x00101100, 0x01100015,
0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x04450514, 0x45414110,
0x55555145, 0x50544050, 0x15040155, 0x11054140, 0x50111514, 0x11451454,
0x00400541, 0x00000000, 0x55555450, 0x10056551, 0x10054011, 0x55551014,
0x69514555, 0x05151109, 0x00155555};
0x01450050, 0x01100010, 0x00500400, 0x00000140, 0x05040004, 0x5a6959a0,
0x04956996, 0x51451150, 0x00541551, 0x50551554, 0x04000101, 0x00151014,
0x00415000, 0x40000010, 0x01000000, 0x54565900, 0x05554155, 0x54454140,
0x55515551, 0x55555555, 0x55555455, 0x00555555, 0x41100001, 0x10001445,
0x00000400, 0x05111001, 0x41455440, 0x95555514, 0x01154555, 0x00104100,
0x55244004, 0x55656555, 0x01041502, 0x40540014, 0x41500044, 0x00410540,
0x00000000, 0x40404540, 0x00040001};
static const int compression_ratio = 27;
@ -1813,8 +1813,7 @@ template <> struct cache_accessor<double> {
// Try to recover the real cache.
uint64_t pow5 = powers_of_5_64[offset];
uint128_wrapper recovered_cache = umul128(base_cache.high(), pow5);
uint128_wrapper middle_low =
umul128(base_cache.low() - (kb < 0 ? 1u : 0u), pow5);
uint128_wrapper middle_low = umul128(base_cache.low(), pow5);
recovered_cache += middle_low.high();
@ -1825,8 +1824,6 @@ template <> struct cache_accessor<double> {
uint128_wrapper{(recovered_cache.low() >> alpha) | high_to_middle,
((middle_low.low() >> alpha) | middle_to_low)};
if (kb < 0) recovered_cache += 1;
// Get error.
int error_idx = (k - float_info<double>::min_k) / 16;
uint32_t error = (pow10_recovery_errors[error_idx] >>
@ -1834,8 +1831,10 @@ template <> struct cache_accessor<double> {
0x3;
// Add the error back.
FMT_ASSERT(recovered_cache.low() + error >= recovered_cache.low(), "");
return {recovered_cache.high(), recovered_cache.low() + error};
FMT_ASSERT(
recovered_cache.low() + 1 >= error && recovered_cache.low() + 1 != 0,
"");
return {recovered_cache.high(), recovered_cache.low() + 1 - error};
#endif
}