0x90, 0x91, 0x92, 0x93, 0x94, 0x95, 0x96, 0x97, 0x98, 0x99};\r
\r
static readonly ulong[] MantissaBitsTable = {\r
- 4556951262222748432, 9113902524445496865, 18227805048890993730, \r
+ 4556951262222748432, 9113902524445496865, 1822780504889099373, \r
3645561009778198746, 7291122019556397492, 14582244039112794984, \r
2916448807822558996, 5832897615645117993, 11665795231290235987, \r
2333159046258047197, 4666318092516094394, 9332636185032188789, \r
3575555834521367442, 7151111669042734884, 14302223338085469768, \r
2860444667617093953, 5720889335234187907, 11441778670468375814, \r
2288355734093675162, 4576711468187350325, 9153422936374700651, \r
- 18306845872749401303, 3661369174549880260, 7322738349099760521, \r
+ 1830684587274940130, 3661369174549880260, 7322738349099760521, \r
14645476698199521043, 2929095339639904208, 5858190679279808417, \r
11716381358559616834, 2343276271711923366, 4686552543423846733, \r
9373105086847693467, 1874621017369538693, 3749242034739077387, \r
3541058984203561811, 7082117968407123623, 14164235936814247246, \r
2832847187362849449, 5665694374725698898, 11331388749451397797, \r
2266277749890279559, 4532555499780559119, 9065110999561118238, \r
- 18130221999122236476, 3626044399824447295, 7252088799648894590, \r
+ 1813022199912223647, 3626044399824447295, 7252088799648894590, \r
14504177599297789180, 2900835519859557836, 5801671039719115672, \r
11603342079438231344, 2320668415887646268, 4641336831775292537, \r
9282673663550585075, 1856534732710117015, 3713069465420234030, \r
17955302187076837701, 3591060437415367540, 7182120874830735080, \r
14364241749661470161, 2872848349932294032, 5745696699864588064, \r
11491393399729176129, 2298278679945835225, 4596557359891670451, \r
- 9193114719783340903, 18386229439566681806, 3677245887913336361, \r
+ 9193114719783340903, 1838622943956668180, 3677245887913336361, \r
7354491775826672722, 14708983551653345445, 2941796710330669089, \r
5883593420661338178, 11767186841322676356, 2353437368264535271, \r
4706874736529070542, 9413749473058141084, 1882749894611628216, \r
17782069995880619867, 3556413999176123973, 7112827998352247947, \r
14225655996704495894, 2845131199340899178, 5690262398681798357, \r
11380524797363596715, 2276104959472719343, 4552209918945438686, \r
- 9104419837890877372, 18208839675781754744, 3641767935156350948, \r
+ 9104419837890877372, 1820883967578175474, 3641767935156350948, \r
7283535870312701897, 14567071740625403795, 2913414348125080759, \r
5826828696250161518, 11653657392500323036, 2330731478500064607, \r
4661462957000129214, 9322925914000258429, 1864585182800051685, \r
8929588994392773298, 17859177988785546597, 3571835597757109319, \r
7143671195514218638, 14287342391028437277, 2857468478205687455, \r
5714936956411374911, 11429873912822749822, 2285974782564549964, \r
- 4571949565129099928, 9143899130258199857, 18287798260516399715, \r
+ 4571949565129099928, 9143899130258199857, 1828779826051639971, \r
3657559652103279943, 7315119304206559886, 14630238608413119772, \r
2926047721682623954, 5852095443365247908, 11704190886730495817, \r
2340838177346099163, 4681676354692198327, 9363352709384396654, \r
8843436600416711296, 17686873200833422592, 3537374640166684518, \r
7074749280333369037, 14149498560666738074, 2829899712133347614, \r
5659799424266695229, 11319598848533390459, 2263919769706678091, \r
- 4527839539413356183, 9055679078826712367, 18111358157653424735, \r
+ 4527839539413356183, 9055679078826712367, 1811135815765342473, \r
3622271631530684947, 7244543263061369894, 14489086526122739788, \r
2897817305224547957, 5795634610449095915, 11591269220898191830, \r
2318253844179638366, 4636507688359276732, 9273015376718553464, \r
3587324068671531701, 7174648137343063403, 14349296274686126806, \r
2869859254937225361, 5739718509874450722, 11479437019748901445, \r
2295887403949780289, 4591774807899560578, 9183549615799121156, \r
- 18367099231598242312, 3673419846319648462, 7346839692639296924, \r
+ 1836709923159824231, 3673419846319648462, 7346839692639296924, \r
14693679385278593849, 2938735877055718769, 5877471754111437539, \r
11754943508222875079, 2350988701644575015, 4701977403289150031, \r
9403954806578300063, 1880790961315660012, 3761581922631320025, \r
3552713678800500929, 7105427357601001858, 14210854715202003717, \r
2842170943040400743, 5684341886080801486, 11368683772161602973, \r
2273736754432320594, 4547473508864641189, 9094947017729282379, \r
- 18189894035458564758, 3637978807091712951, 7275957614183425903, \r
+ 1818989403545856475, 3637978807091712951, 7275957614183425903, \r
14551915228366851806, 2910383045673370361, 5820766091346740722, \r
11641532182693481445, 2328306436538696289, 4656612873077392578, \r
9313225746154785156, 1862645149230957031, 3725290298461914062, \r
17840596158824498513, 3568119231764899702, 7136238463529799405, \r
14272476927059598810, 2854495385411919762, 5708990770823839524, \r
11417981541647679048, 2283596308329535809, 4567192616659071619, \r
- 9134385233318143238, 18268770466636286477, 3653754093327257295, \r
+ 9134385233318143238, 1826877046663628647, 3653754093327257295, \r
7307508186654514591, 14615016373309029182, 2923003274661805836, \r
5846006549323611672, 11692013098647223345, 2338402619729444669, \r
4676805239458889338, 9353610478917778676, 1870722095783555735, \r
8958978968711216842, 17917957937422433684, 3583591587484486736, \r
7167183174968973473, 14334366349937946947, 2866873269987589389, \r
5733746539975178779, 11467493079950357558, 2293498615990071511, \r
- 4586997231980143023, 9173994463960286046, 18347988927920572092, \r
+ 4586997231980143023, 9173994463960286046, 1834798892792057209, \r
3669597785584114418, 7339195571168228837, 14678391142336457674, \r
2935678228467291534, 5871356456934583069, 11742712913869166139, \r
2348542582773833227, 4697085165547666455, 9394170331095332911, \r
8872543021186607550, 17745086042373215101, 3549017208474643020, \r
7098034416949286040, 14196068833898572081, 2839213766779714416, \r
5678427533559428832, 11356855067118857664, 2271371013423771532, \r
- 4542742026847543065, 9085484053695086131, 18170968107390172263, \r
+ 4542742026847543065, 9085484053695086131, 1817096810739017226, \r
3634193621478034452, 7268387242956068905, 14536774485912137810, \r
2907354897182427562, 5814709794364855124, 11629419588729710248, \r
2325883917745942049, 4651767835491884099, 9303535670983768199, \r
3599131035634557106, 7198262071269114212, 14396524142538228424, \r
2879304828507645684, 5758609657015291369, 11517219314030582739, \r
2303443862806116547, 4606887725612233095, 9213775451224466191, \r
- 18427550902448932383, 3685510180489786476, 7371020360979572953, \r
+ 1842755090244893238, 3685510180489786476, 7371020360979572953, \r
14742040721959145907, 2948408144391829181, 5896816288783658362, \r
11793632577567316725, 2358726515513463345, 4717453031026926690, \r
9434906062053853380, 1886981212410770676, 3773962424821541352, \r
3564406732517340014, 7128813465034680029, 14257626930069360058, \r
2851525386013872011, 5703050772027744023, 11406101544055488046, \r
2281220308811097609, 4562440617622195218, 9124881235244390437, \r
- 18249762470488780874, 3649952494097756174, 7299904988195512349, \r
+ 1824976247048878087, 3649952494097756174, 7299904988195512349, \r
14599809976391024699, 2919961995278204939, 5839923990556409879, \r
11679847981112819759, 2335969596222563951, 4671939192445127903, \r
9343878384890255807, 1868775676978051161, 3737551353956102323, \r
17899314949046850752, 3579862989809370150, 7159725979618740301, \r
14319451959237480602, 2863890391847496120, 5727780783694992240, \r
11455561567389984481, 2291112313477996896, 4582224626955993792, \r
- 9164449253911987585, 18328898507823975170, 3665779701564795034, \r
+ 9164449253911987585, 1832889850782397517, 3665779701564795034, \r
7331559403129590068, 14663118806259180136, 2932623761251836027, \r
5865247522503672054, 11730495045007344109, 2346099009001468821, \r
4692198018002937643, 9384396036005875287, 1876879207201175057, \r
8988465674311579538, 17976931348623159077, 3595386269724631815, \r
7190772539449263630, 14381545078898527261, 2876309015779705452, \r
5752618031559410904, 11505236063118821809, 2301047212623764361, \r
- 4602094425247528723, 9204188850495057447, 18408377700990114895, \r
+ 4602094425247528723, 9204188850495057447, 1840837770099011489, \r
3681675540198022979, 7363351080396045958, \r
};\r
\r
static readonly int[] TensExponentTable = {\r
- -323, -323, -323, -322, -322, -322, -321, -321, -321, -320, -320, -320, \r
+ -323, -323, -322, -322, -322, -322, -321, -321, -321, -320, -320, -320, \r
-319, -319, -319, -319, -318, -318, -318, -317, -317, -317, -316, -316, \r
-316, -316, -315, -315, -315, -314, -314, -314, -313, -313, -313, -313, \r
-312, -312, -312, -311, -311, -311, -310, -310, -310, -310, -309, -309, \r
-276, -276, -276, -275, -275, -275, -274, -274, -274, -273, -273, -273, \r
-273, -272, -272, -272, -271, -271, -271, -270, -270, -270, -270, -269, \r
-269, -269, -268, -268, -268, -267, -267, -267, -267, -266, -266, -266, \r
- -265, -265, -265, -264, -264, -264, -264, -263, -263, -263, -262, -262, \r
+ -265, -265, -265, -264, -264, -264, -263, -263, -263, -263, -262, -262, \r
-262, -261, -261, -261, -260, -260, -260, -260, -259, -259, -259, -258, \r
-258, -258, -257, -257, -257, -257, -256, -256, -256, -255, -255, -255, \r
-254, -254, -254, -254, -253, -253, -253, -252, -252, -252, -251, -251, \r
-247, -247, -247, -246, -246, -246, -245, -245, -245, -245, -244, -244, \r
-244, -243, -243, -243, -242, -242, -242, -242, -241, -241, -241, -240, \r
-240, -240, -239, -239, -239, -239, -238, -238, -238, -237, -237, -237, \r
- -236, -236, -236, -236, -235, -235, -235, -234, -234, -234, -233, -233, \r
+ -236, -236, -236, -235, -235, -235, -235, -234, -234, -234, -233, -233, \r
-233, -232, -232, -232, -232, -231, -231, -231, -230, -230, -230, -229, \r
-229, -229, -229, -228, -228, -228, -227, -227, -227, -226, -226, -226, \r
-226, -225, -225, -225, -224, -224, -224, -223, -223, -223, -223, -222, \r
-218, -218, -218, -217, -217, -217, -217, -216, -216, -216, -215, -215, \r
-215, -214, -214, -214, -214, -213, -213, -213, -212, -212, -212, -211, \r
-211, -211, -211, -210, -210, -210, -209, -209, -209, -208, -208, -208, \r
- -208, -207, -207, -207, -206, -206, -206, -205, -205, -205, -205, -204, \r
+ -208, -207, -207, -207, -206, -206, -206, -205, -205, -205, -204, -204, \r
-204, -204, -203, -203, -203, -202, -202, -202, -201, -201, -201, -201, \r
-200, -200, -200, -199, -199, -199, -198, -198, -198, -198, -197, -197, \r
-197, -196, -196, -196, -195, -195, -195, -195, -194, -194, -194, -193, \r
-189, -189, -189, -189, -188, -188, -188, -187, -187, -187, -186, -186, \r
-186, -186, -185, -185, -185, -184, -184, -184, -183, -183, -183, -183, \r
-182, -182, -182, -181, -181, -181, -180, -180, -180, -180, -179, -179, \r
- -179, -178, -178, -178, -177, -177, -177, -177, -176, -176, -176, -175, \r
+ -179, -178, -178, -178, -177, -177, -177, -176, -176, -176, -176, -175, \r
-175, -175, -174, -174, -174, -173, -173, -173, -173, -172, -172, -172, \r
-171, -171, -171, -170, -170, -170, -170, -169, -169, -169, -168, -168, \r
-168, -167, -167, -167, -167, -166, -166, -166, -165, -165, -165, -164, \r
-132, -131, -131, -131, -130, -130, -130, -130, -129, -129, -129, -128, \r
-128, -128, -127, -127, -127, -127, -126, -126, -126, -125, -125, -125, \r
-124, -124, -124, -124, -123, -123, -123, -122, -122, -122, -121, -121, \r
- -121, -121, -120, -120, -120, -119, -119, -119, -118, -118, -118, -118, \r
+ -121, -121, -120, -120, -120, -119, -119, -119, -118, -118, -118, -117, \r
-117, -117, -117, -116, -116, -116, -115, -115, -115, -114, -114, -114, \r
-114, -113, -113, -113, -112, -112, -112, -111, -111, -111, -111, -110, \r
-110, -110, -109, -109, -109, -108, -108, -108, -108, -107, -107, -107, \r
-103, -102, -102, -102, -102, -101, -101, -101, -100, -100, -100, -99, \r
-99, -99, -99, -98, -98, -98, -97, -97, -97, -96, -96, -96, \r
-96, -95, -95, -95, -94, -94, -94, -93, -93, -93, -93, -92, \r
- -92, -92, -91, -91, -91, -90, -90, -90, -90, -89, -89, -89, \r
+ -92, -92, -91, -91, -91, -90, -90, -90, -89, -89, -89, -89, \r
-88, -88, -88, -87, -87, -87, -86, -86, -86, -86, -85, -85, \r
-85, -84, -84, -84, -83, -83, -83, -83, -82, -82, -82, -81, \r
-81, -81, -80, -80, -80, -80, -79, -79, -79, -78, -78, -78, \r
-70, -70, -70, -69, -69, -69, -68, -68, -68, -68, -67, -67, \r
-67, -66, -66, -66, -65, -65, -65, -65, -64, -64, -64, -63, \r
-63, -63, -62, -62, -62, -62, -61, -61, -61, -60, -60, -60, \r
- -59, -59, -59, -59, -58, -58, -58, -57, -57, -57, -56, -56, \r
+ -59, -59, -59, -58, -58, -58, -58, -57, -57, -57, -56, -56, \r
-56, -55, -55, -55, -55, -54, -54, -54, -53, -53, -53, -52, \r
-52, -52, -52, -51, -51, -51, -50, -50, -50, -49, -49, -49, \r
-49, -48, -48, -48, -47, -47, -47, -46, -46, -46, -46, -45, \r
-41, -41, -41, -40, -40, -40, -40, -39, -39, -39, -38, -38, \r
-38, -37, -37, -37, -37, -36, -36, -36, -35, -35, -35, -34, \r
-34, -34, -34, -33, -33, -33, -32, -32, -32, -31, -31, -31, \r
- -31, -30, -30, -30, -29, -29, -29, -28, -28, -28, -27, -27, \r
+ -30, -30, -30, -30, -29, -29, -29, -28, -28, -28, -27, -27, \r
-27, -27, -26, -26, -26, -25, -25, -25, -24, -24, -24, -24, \r
-23, -23, -23, -22, -22, -22, -21, -21, -21, -21, -20, -20, \r
-20, -19, -19, -19, -18, -18, -18, -18, -17, -17, -17, -16, \r
16, 17, 17, 17, 18, 18, 18, 19, 19, 19, 19, 20, \r
20, 20, 21, 21, 21, 22, 22, 22, 22, 23, 23, 23, \r
24, 24, 24, 25, 25, 25, 25, 26, 26, 26, 27, 27, \r
- 27, 28, 28, 28, 28, 29, 29, 29, 30, 30, 30, 31, \r
+ 27, 28, 28, 28, 29, 29, 29, 29, 30, 30, 30, 31, \r
31, 31, 32, 32, 32, 32, 33, 33, 33, 34, 34, 34, \r
35, 35, 35, 35, 36, 36, 36, 37, 37, 37, 38, 38, \r
38, 38, 39, 39, 39, 40, 40, 40, 41, 41, 41, 41, \r
74, 75, 75, 75, 75, 76, 76, 76, 77, 77, 77, 78, \r
78, 78, 78, 79, 79, 79, 80, 80, 80, 81, 81, 81, \r
81, 82, 82, 82, 83, 83, 83, 84, 84, 84, 84, 85, \r
- 85, 85, 86, 86, 86, 87, 87, 87, 87, 88, 88, 88, \r
+ 85, 85, 86, 86, 86, 87, 87, 87, 88, 88, 88, 88, \r
89, 89, 89, 90, 90, 90, 91, 91, 91, 91, 92, 92, \r
92, 93, 93, 93, 94, 94, 94, 94, 95, 95, 95, 96, \r
96, 96, 97, 97, 97, 97, 98, 98, 98, 99, 99, 99, \r
103, 103, 104, 104, 104, 105, 105, 105, 106, 106, 106, 106, \r
107, 107, 107, 108, 108, 108, 109, 109, 109, 109, 110, 110, \r
110, 111, 111, 111, 112, 112, 112, 112, 113, 113, 113, 114, \r
- 114, 114, 115, 115, 115, 115, 116, 116, 116, 117, 117, 117, \r
+ 114, 114, 115, 115, 115, 116, 116, 116, 116, 117, 117, 117, \r
118, 118, 118, 119, 119, 119, 119, 120, 120, 120, 121, 121, \r
121, 122, 122, 122, 122, 123, 123, 123, 124, 124, 124, 125, \r
125, 125, 125, 126, 126, 126, 127, 127, 127, 128, 128, 128, \r
136, 136, 136, 137, 137, 137, 137, 138, 138, 138, 139, 139, \r
139, 140, 140, 140, 140, 141, 141, 141, 142, 142, 142, 143, \r
143, 143, 143, 144, 144, 144, 145, 145, 145, 146, 146, 146, \r
- 146, 147, 147, 147, 148, 148, 148, 149, 149, 149, 150, 150, \r
+ 147, 147, 147, 147, 148, 148, 148, 149, 149, 149, 150, 150, \r
150, 150, 151, 151, 151, 152, 152, 152, 153, 153, 153, 153, \r
154, 154, 154, 155, 155, 155, 156, 156, 156, 156, 157, 157, \r
157, 158, 158, 158, 159, 159, 159, 159, 160, 160, 160, 161, \r
161, 161, 162, 162, 162, 162, 163, 163, 163, 164, 164, 164, \r
165, 165, 165, 165, 166, 166, 166, 167, 167, 167, 168, 168, \r
168, 168, 169, 169, 169, 170, 170, 170, 171, 171, 171, 171, \r
- 172, 172, 172, 173, 173, 173, 174, 174, 174, 174, 175, 175, \r
+ 172, 172, 172, 173, 173, 173, 174, 174, 174, 175, 175, 175, \r
175, 176, 176, 176, 177, 177, 177, 178, 178, 178, 178, 179, \r
179, 179, 180, 180, 180, 181, 181, 181, 181, 182, 182, 182, \r
183, 183, 183, 184, 184, 184, 184, 185, 185, 185, 186, 186, \r
222, 223, 223, 223, 224, 224, 224, 224, 225, 225, 225, 226, \r
226, 226, 227, 227, 227, 227, 228, 228, 228, 229, 229, 229, \r
230, 230, 230, 230, 231, 231, 231, 232, 232, 232, 233, 233, \r
- 233, 233, 234, 234, 234, 235, 235, 235, 236, 236, 236, 237, \r
+ 233, 234, 234, 234, 234, 235, 235, 235, 236, 236, 236, 237, \r
237, 237, 237, 238, 238, 238, 239, 239, 239, 240, 240, 240, \r
240, 241, 241, 241, 242, 242, 242, 243, 243, 243, 243, 244, \r
244, 244, 245, 245, 245, 246, 246, 246, 246, 247, 247, 247, \r
280, 280, 281, 281, 281, 282, 282, 282, 283, 283, 283, 283, \r
284, 284, 284, 285, 285, 285, 286, 286, 286, 286, 287, 287, \r
287, 288, 288, 288, 289, 289, 289, 289, 290, 290, 290, 291, \r
- 291, 291, 292, 292, 292, 292, 293, 293, \r
+ 291, 291, 292, 292, 292, 293, 293, 293, \r
};\r
\r
#if false\r
// further the double ToString performance.\r
private const int ExponentMid = 1043;\r
private const int ExponentMax = 2047;\r
- private const ulong UpperMapMark = UInt64.MaxValue / 2;\r
- private const ulong LowerMapMark = UInt64.MaxValue / 5;\r
+\r
+ // Ensure that values won't cause overflow when multiplied with the double Mantissa.\r
+ private const ulong UpperMapMark = UInt64.MaxValue / 2 - (1 << 57);\r
+ private const ulong LowerMapMark = UInt64.MaxValue / 5 - (1 << 56);\r
\r
// The results of 2 ^ 64 / 5 * i for i in {0 .. 4}\r
private static ulong[] Div5 = new ulong[] {\r