2 #define UNSAFE_TABLES
\r
10 partial struct NumberFormatter
\r
12 partial class NumberFormatter
\r
15 static internal readonly char[] DigitLowerTable = { '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'a', 'b', 'c', 'd', 'e', 'f' };
\r
16 static internal readonly char[] DigitUpperTable = { '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'A', 'B', 'C', 'D', 'E', 'F' };
\r
18 private static readonly long[] TenPowersList = new long[] {
\r
37 1000000000000000000
\r
40 // DecHexDigits s a translation table from a decimal number to its
\r
41 // digits hexadecimal representation (e.g. DecHexDigits [34] = 0x34).
\r
42 static readonly int[] DecHexDigits = {
\r
43 0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09,
\r
44 0x10, 0x11, 0x12, 0x13, 0x14, 0x15, 0x16, 0x17, 0x18, 0x19,
\r
45 0x20, 0x21, 0x22, 0x23, 0x24, 0x25, 0x26, 0x27, 0x28, 0x29,
\r
46 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, 0x38, 0x39,
\r
47 0x40, 0x41, 0x42, 0x43, 0x44, 0x45, 0x46, 0x47, 0x48, 0x49,
\r
48 0x50, 0x51, 0x52, 0x53, 0x54, 0x55, 0x56, 0x57, 0x58, 0x59,
\r
49 0x60, 0x61, 0x62, 0x63, 0x64, 0x65, 0x66, 0x67, 0x68, 0x69,
\r
50 0x70, 0x71, 0x72, 0x73, 0x74, 0x75, 0x76, 0x77, 0x78, 0x79,
\r
51 0x80, 0x81, 0x82, 0x83, 0x84, 0x85, 0x86, 0x87, 0x88, 0x89,
\r
52 0x90, 0x91, 0x92, 0x93, 0x94, 0x95, 0x96, 0x97, 0x98, 0x99};
\r
54 static readonly ulong[] MantissaBitsTable = {
\r
55 4556951262222748432, 9113902524445496865, 18227805048890993730,
\r
56 3645561009778198746, 7291122019556397492, 14582244039112794984,
\r
57 2916448807822558996, 5832897615645117993, 11665795231290235987,
\r
58 2333159046258047197, 4666318092516094394, 9332636185032188789,
\r
59 1866527237006437757, 3733054474012875515, 7466108948025751031,
\r
60 14932217896051502063, 2986443579210300412, 5972887158420600825,
\r
61 11945774316841201651, 2389154863368240330, 4778309726736480660,
\r
62 9556619453472961320, 1911323890694592264, 3822647781389184528,
\r
63 7645295562778369056, 15290591125556738113, 3058118225111347622,
\r
64 6116236450222695245, 12232472900445390490, 2446494580089078098,
\r
65 4892989160178156196, 9785978320356312392, 1957195664071262478,
\r
66 3914391328142524957, 7828782656285049914, 15657565312570099828,
\r
67 3131513062514019965, 6263026125028039931, 12526052250056079862,
\r
68 2505210450011215972, 5010420900022431944, 10020841800044863889,
\r
69 2004168360008972777, 4008336720017945555, 8016673440035891111,
\r
70 16033346880071782223, 3206669376014356444, 6413338752028712889,
\r
71 12826677504057425779, 2565335500811485155, 5130671001622970311,
\r
72 10261342003245940623, 2052268400649188124, 4104536801298376249,
\r
73 8209073602596752498, 16418147205193504997, 3283629441038700999,
\r
74 6567258882077401998, 13134517764154803997, 2626903552830960799,
\r
75 5253807105661921599, 10507614211323843198, 2101522842264768639,
\r
76 4203045684529537279, 8406091369059074558, 16812182738118149117,
\r
77 3362436547623629823, 6724873095247259646, 13449746190494519293,
\r
78 2689949238098903858, 5379898476197807717, 10759796952395615435,
\r
79 2151959390479123087, 4303918780958246174, 8607837561916492348,
\r
80 17215675123832984696, 3443135024766596939, 6886270049533193878,
\r
81 13772540099066387756, 2754508019813277551, 5509016039626555102,
\r
82 11018032079253110205, 2203606415850622041, 4407212831701244082,
\r
83 8814425663402488164, 17628851326804976328, 3525770265360995265,
\r
84 7051540530721990531, 14103081061443981063, 2820616212288796212,
\r
85 5641232424577592425, 11282464849155184850, 2256492969831036970,
\r
86 4512985939662073940, 9025971879324147880, 18051943758648295760,
\r
87 3610388751729659152, 7220777503459318304, 14441555006918636608,
\r
88 2888311001383727321, 5776622002767454643, 11553244005534909286,
\r
89 2310648801106981857, 4621297602213963714, 9242595204427927429,
\r
90 1848519040885585485, 3697038081771170971, 7394076163542341943,
\r
91 14788152327084683887, 2957630465416936777, 5915260930833873554,
\r
92 11830521861667747109, 2366104372333549421, 4732208744667098843,
\r
93 9464417489334197687, 1892883497866839537, 3785766995733679075,
\r
94 7571533991467358150, 15143067982934716300, 3028613596586943260,
\r
95 6057227193173886520, 12114454386347773040, 2422890877269554608,
\r
96 4845781754539109216, 9691563509078218432, 1938312701815643686,
\r
97 3876625403631287372, 7753250807262574745, 15506501614525149491,
\r
98 3101300322905029898, 6202600645810059796, 12405201291620119593,
\r
99 2481040258324023918, 4962080516648047837, 9924161033296095674,
\r
100 1984832206659219134, 3969664413318438269, 7939328826636876539,
\r
101 15878657653273753079, 3175731530654750615, 6351463061309501231,
\r
102 12702926122619002463, 2540585224523800492, 5081170449047600985,
\r
103 10162340898095201970, 2032468179619040394, 4064936359238080788,
\r
104 8129872718476161576, 16259745436952323153, 3251949087390464630,
\r
105 6503898174780929261, 13007796349561858522, 2601559269912371704,
\r
106 5203118539824743409, 10406237079649486818, 2081247415929897363,
\r
107 4162494831859794727, 8324989663719589454, 16649979327439178909,
\r
108 3329995865487835781, 6659991730975671563, 13319983461951343127,
\r
109 2663996692390268625, 5327993384780537250, 10655986769561074501,
\r
110 2131197353912214900, 4262394707824429800, 8524789415648859601,
\r
111 17049578831297719202, 3409915766259543840, 6819831532519087681,
\r
112 13639663065038175362, 2727932613007635072, 5455865226015270144,
\r
113 10911730452030540289, 2182346090406108057, 4364692180812216115,
\r
114 8729384361624432231, 17458768723248864463, 3491753744649772892,
\r
115 6983507489299545785, 13967014978599091570, 2793402995719818314,
\r
116 5586805991439636628, 11173611982879273256, 2234722396575854651,
\r
117 4469444793151709302, 8938889586303418605, 17877779172606837210,
\r
118 3575555834521367442, 7151111669042734884, 14302223338085469768,
\r
119 2860444667617093953, 5720889335234187907, 11441778670468375814,
\r
120 2288355734093675162, 4576711468187350325, 9153422936374700651,
\r
121 18306845872749401303, 3661369174549880260, 7322738349099760521,
\r
122 14645476698199521043, 2929095339639904208, 5858190679279808417,
\r
123 11716381358559616834, 2343276271711923366, 4686552543423846733,
\r
124 9373105086847693467, 1874621017369538693, 3749242034739077387,
\r
125 7498484069478154774, 14996968138956309548, 2999393627791261909,
\r
126 5998787255582523819, 11997574511165047638, 2399514902233009527,
\r
127 4799029804466019055, 9598059608932038110, 1919611921786407622,
\r
128 3839223843572815244, 7678447687145630488, 15356895374291260977,
\r
129 3071379074858252195, 6142758149716504390, 12285516299433008781,
\r
130 2457103259886601756, 4914206519773203512, 9828413039546407025,
\r
131 1965682607909281405, 3931365215818562810, 7862730431637125620,
\r
132 15725460863274251240, 3145092172654850248, 6290184345309700496,
\r
133 12580368690619400992, 2516073738123880198, 5032147476247760397,
\r
134 10064294952495520794, 2012858990499104158, 4025717980998208317,
\r
135 8051435961996416635, 16102871923992833270, 3220574384798566654,
\r
136 6441148769597133308, 12882297539194266616, 2576459507838853323,
\r
137 5152919015677706646, 10305838031355413293, 2061167606271082658,
\r
138 4122335212542165317, 8244670425084330634, 16489340850168661269,
\r
139 3297868170033732253, 6595736340067464507, 13191472680134929015,
\r
140 2638294536026985803, 5276589072053971606, 10553178144107943212,
\r
141 2110635628821588642, 4221271257643177284, 8442542515286354569,
\r
142 16885085030572709139, 3377017006114541827, 6754034012229083655,
\r
143 13508068024458167311, 2701613604891633462, 5403227209783266924,
\r
144 10806454419566533849, 2161290883913306769, 4322581767826613539,
\r
145 8645163535653227079, 17290327071306454158, 3458065414261290831,
\r
146 6916130828522581663, 13832261657045163327, 2766452331409032665,
\r
147 5532904662818065330, 11065809325636130661, 2213161865127226132,
\r
148 4426323730254452264, 8852647460508904529, 17705294921017809058,
\r
149 3541058984203561811, 7082117968407123623, 14164235936814247246,
\r
150 2832847187362849449, 5665694374725698898, 11331388749451397797,
\r
151 2266277749890279559, 4532555499780559119, 9065110999561118238,
\r
152 18130221999122236476, 3626044399824447295, 7252088799648894590,
\r
153 14504177599297789180, 2900835519859557836, 5801671039719115672,
\r
154 11603342079438231344, 2320668415887646268, 4641336831775292537,
\r
155 9282673663550585075, 1856534732710117015, 3713069465420234030,
\r
156 7426138930840468060, 14852277861680936121, 2970455572336187224,
\r
157 5940911144672374448, 11881822289344748896, 2376364457868949779,
\r
158 4752728915737899558, 9505457831475799117, 1901091566295159823,
\r
159 3802183132590319647, 7604366265180639294, 15208732530361278588,
\r
160 3041746506072255717, 6083493012144511435, 12166986024289022870,
\r
161 2433397204857804574, 4866794409715609148, 9733588819431218296,
\r
162 1946717763886243659, 3893435527772487318, 7786871055544974637,
\r
163 15573742111089949274, 3114748422217989854, 6229496844435979709,
\r
164 12458993688871959419, 2491798737774391883, 4983597475548783767,
\r
165 9967194951097567535, 1993438990219513507, 3986877980439027014,
\r
166 7973755960878054028, 15947511921756108056, 3189502384351221611,
\r
167 6379004768702443222, 12758009537404886445, 2551601907480977289,
\r
168 5103203814961954578, 10206407629923909156, 2041281525984781831,
\r
169 4082563051969563662, 8165126103939127325, 16330252207878254650,
\r
170 3266050441575650930, 6532100883151301860, 13064201766302603720,
\r
171 2612840353260520744, 5225680706521041488, 10451361413042082976,
\r
172 2090272282608416595, 4180544565216833190, 8361089130433666380,
\r
173 16722178260867332761, 3344435652173466552, 6688871304346933104,
\r
174 13377742608693866209, 2675548521738773241, 5351097043477546483,
\r
175 10702194086955092967, 2140438817391018593, 4280877634782037187,
\r
176 8561755269564074374, 17123510539128148748, 3424702107825629749,
\r
177 6849404215651259499, 13698808431302518998, 2739761686260503799,
\r
178 5479523372521007599, 10959046745042015198, 2191809349008403039,
\r
179 4383618698016806079, 8767237396033612159, 17534474792067224318,
\r
180 3506894958413444863, 7013789916826889727, 14027579833653779454,
\r
181 2805515966730755890, 5611031933461511781, 11222063866923023563,
\r
182 2244412773384604712, 4488825546769209425, 8977651093538418850,
\r
183 17955302187076837701, 3591060437415367540, 7182120874830735080,
\r
184 14364241749661470161, 2872848349932294032, 5745696699864588064,
\r
185 11491393399729176129, 2298278679945835225, 4596557359891670451,
\r
186 9193114719783340903, 18386229439566681806, 3677245887913336361,
\r
187 7354491775826672722, 14708983551653345445, 2941796710330669089,
\r
188 5883593420661338178, 11767186841322676356, 2353437368264535271,
\r
189 4706874736529070542, 9413749473058141084, 1882749894611628216,
\r
190 3765499789223256433, 7530999578446512867, 15061999156893025735,
\r
191 3012399831378605147, 6024799662757210294, 12049599325514420588,
\r
192 2409919865102884117, 4819839730205768235, 9639679460411536470,
\r
193 1927935892082307294, 3855871784164614588, 7711743568329229176,
\r
194 15423487136658458353, 3084697427331691670, 6169394854663383341,
\r
195 12338789709326766682, 2467757941865353336, 4935515883730706673,
\r
196 9871031767461413346, 1974206353492282669, 3948412706984565338,
\r
197 7896825413969130677, 15793650827938261354, 3158730165587652270,
\r
198 6317460331175304541, 12634920662350609083, 2526984132470121816,
\r
199 5053968264940243633, 10107936529880487266, 2021587305976097453,
\r
200 4043174611952194906, 8086349223904389813, 16172698447808779626,
\r
201 3234539689561755925, 6469079379123511850, 12938158758247023701,
\r
202 2587631751649404740, 5175263503298809480, 10350527006597618960,
\r
203 2070105401319523792, 4140210802639047584, 8280421605278095168,
\r
204 16560843210556190337, 3312168642111238067, 6624337284222476135,
\r
205 13248674568444952270, 2649734913688990454, 5299469827377980908,
\r
206 10598939654755961816, 2119787930951192363, 4239575861902384726,
\r
207 8479151723804769452, 16958303447609538905, 3391660689521907781,
\r
208 6783321379043815562, 13566642758087631124, 2713328551617526224,
\r
209 5426657103235052449, 10853314206470104899, 2170662841294020979,
\r
210 4341325682588041959, 8682651365176083919, 17365302730352167839,
\r
211 3473060546070433567, 6946121092140867135, 13892242184281734271,
\r
212 2778448436856346854, 5556896873712693708, 11113793747425387417,
\r
213 2222758749485077483, 4445517498970154966, 8891034997940309933,
\r
214 17782069995880619867, 3556413999176123973, 7112827998352247947,
\r
215 14225655996704495894, 2845131199340899178, 5690262398681798357,
\r
216 11380524797363596715, 2276104959472719343, 4552209918945438686,
\r
217 9104419837890877372, 18208839675781754744, 3641767935156350948,
\r
218 7283535870312701897, 14567071740625403795, 2913414348125080759,
\r
219 5826828696250161518, 11653657392500323036, 2330731478500064607,
\r
220 4661462957000129214, 9322925914000258429, 1864585182800051685,
\r
221 3729170365600103371, 7458340731200206743, 14916681462400413486,
\r
222 2983336292480082697, 5966672584960165394, 11933345169920330789,
\r
223 2386669033984066157, 4773338067968132315, 9546676135936264631,
\r
224 1909335227187252926, 3818670454374505852, 7637340908749011705,
\r
225 15274681817498023410, 3054936363499604682, 6109872726999209364,
\r
226 12219745453998418728, 2443949090799683745, 4887898181599367491,
\r
227 9775796363198734982, 1955159272639746996, 3910318545279493993,
\r
228 7820637090558987986, 15641274181117975972, 3128254836223595194,
\r
229 6256509672447190388, 12513019344894380777, 2502603868978876155,
\r
230 5005207737957752311, 10010415475915504622, 2002083095183100924,
\r
231 4004166190366201848, 8008332380732403697, 16016664761464807395,
\r
232 3203332952292961479, 6406665904585922958, 12813331809171845916,
\r
233 2562666361834369183, 5125332723668738366, 10250665447337476733,
\r
234 2050133089467495346, 4100266178934990693, 8200532357869981386,
\r
235 16401064715739962772, 3280212943147992554, 6560425886295985109,
\r
236 13120851772591970218, 2624170354518394043, 5248340709036788087,
\r
237 10496681418073576174, 2099336283614715234, 4198672567229430469,
\r
238 8397345134458860939, 16794690268917721879, 3358938053783544375,
\r
239 6717876107567088751, 13435752215134177503, 2687150443026835500,
\r
240 5374300886053671001, 10748601772107342002, 2149720354421468400,
\r
241 4299440708842936801, 8598881417685873602, 17197762835371747204,
\r
242 3439552567074349440, 6879105134148698881, 13758210268297397763,
\r
243 2751642053659479552, 5503284107318959105, 11006568214637918210,
\r
244 2201313642927583642, 4402627285855167284, 8805254571710334568,
\r
245 17610509143420669137, 3522101828684133827, 7044203657368267654,
\r
246 14088407314736535309, 2817681462947307061, 5635362925894614123,
\r
247 11270725851789228247, 2254145170357845649, 4508290340715691299,
\r
248 9016580681431382598, 18033161362862765196, 3606632272572553039,
\r
249 7213264545145106078, 14426529090290212157, 2885305818058042431,
\r
250 5770611636116084862, 11541223272232169725, 2308244654446433945,
\r
251 4616489308892867890, 9232978617785735780, 1846595723557147156,
\r
252 3693191447114294312, 7386382894228588624, 14772765788457177249,
\r
253 2954553157691435449, 5909106315382870899, 11818212630765741799,
\r
254 2363642526153148359, 4727285052306296719, 9454570104612593439,
\r
255 1890914020922518687, 3781828041845037375, 7563656083690074751,
\r
256 15127312167380149503, 3025462433476029900, 6050924866952059801,
\r
257 12101849733904119602, 2420369946780823920, 4840739893561647841,
\r
258 9681479787123295682, 1936295957424659136, 3872591914849318272,
\r
259 7745183829698636545, 15490367659397273091, 3098073531879454618,
\r
260 6196147063758909236, 12392294127517818473, 2478458825503563694,
\r
261 4956917651007127389, 9913835302014254778, 1982767060402850955,
\r
262 3965534120805701911, 7931068241611403822, 15862136483222807645,
\r
263 3172427296644561529, 6344854593289123058, 12689709186578246116,
\r
264 2537941837315649223, 5075883674631298446, 10151767349262596893,
\r
265 2030353469852519378, 4060706939705038757, 8121413879410077514,
\r
266 16242827758820155028, 3248565551764031005, 6497131103528062011,
\r
267 12994262207056124023, 2598852441411224804, 5197704882822449609,
\r
268 10395409765644899218, 2079081953128979843, 4158163906257959687,
\r
269 8316327812515919374, 16632655625031838749, 3326531125006367749,
\r
270 6653062250012735499, 13306124500025470999, 2661224900005094199,
\r
271 5322449800010188399, 10644899600020376799, 2128979920004075359,
\r
272 4257959840008150719, 8515919680016301439, 17031839360032602879,
\r
273 3406367872006520575, 6812735744013041151, 13625471488026082303,
\r
274 2725094297605216460, 5450188595210432921, 10900377190420865842,
\r
275 2180075438084173168, 4360150876168346337, 8720301752336692674,
\r
276 17440603504673385348, 3488120700934677069, 6976241401869354139,
\r
277 13952482803738708279, 2790496560747741655, 5580993121495483311,
\r
278 11161986242990966623, 2232397248598193324, 4464794497196386649,
\r
279 8929588994392773298, 17859177988785546597, 3571835597757109319,
\r
280 7143671195514218638, 14287342391028437277, 2857468478205687455,
\r
281 5714936956411374911, 11429873912822749822, 2285974782564549964,
\r
282 4571949565129099928, 9143899130258199857, 18287798260516399715,
\r
283 3657559652103279943, 7315119304206559886, 14630238608413119772,
\r
284 2926047721682623954, 5852095443365247908, 11704190886730495817,
\r
285 2340838177346099163, 4681676354692198327, 9363352709384396654,
\r
286 1872670541876879330, 3745341083753758661, 7490682167507517323,
\r
287 14981364335015034646, 2996272867003006929, 5992545734006013858,
\r
288 11985091468012027717, 2397018293602405543, 4794036587204811087,
\r
289 9588073174409622174, 1917614634881924434, 3835229269763848869,
\r
290 7670458539527697739, 15340917079055395478, 3068183415811079095,
\r
291 6136366831622158191, 12272733663244316382, 2454546732648863276,
\r
292 4909093465297726553, 9818186930595453106, 1963637386119090621,
\r
293 3927274772238181242, 7854549544476362484, 15709099088952724969,
\r
294 3141819817790544993, 6283639635581089987, 12567279271162179975,
\r
295 2513455854232435995, 5026911708464871990, 10053823416929743980,
\r
296 2010764683385948796, 4021529366771897592, 8043058733543795184,
\r
297 16086117467087590369, 3217223493417518073, 6434446986835036147,
\r
298 12868893973670072295, 2573778794734014459, 5147557589468028918,
\r
299 10295115178936057836, 2059023035787211567, 4118046071574423134,
\r
300 8236092143148846269, 16472184286297692538, 3294436857259538507,
\r
301 6588873714519077015, 13177747429038154030, 2635549485807630806,
\r
302 5271098971615261612, 10542197943230523224, 2108439588646104644,
\r
303 4216879177292209289, 8433758354584418579, 16867516709168837158,
\r
304 3373503341833767431, 6747006683667534863, 13494013367335069727,
\r
305 2698802673467013945, 5397605346934027890, 10795210693868055781,
\r
306 2159042138773611156, 4318084277547222312, 8636168555094444625,
\r
307 17272337110188889250, 3454467422037777850, 6908934844075555700,
\r
308 13817869688151111400, 2763573937630222280, 5527147875260444560,
\r
309 11054295750520889120, 2210859150104177824, 4421718300208355648,
\r
310 8843436600416711296, 17686873200833422592, 3537374640166684518,
\r
311 7074749280333369037, 14149498560666738074, 2829899712133347614,
\r
312 5659799424266695229, 11319598848533390459, 2263919769706678091,
\r
313 4527839539413356183, 9055679078826712367, 18111358157653424735,
\r
314 3622271631530684947, 7244543263061369894, 14489086526122739788,
\r
315 2897817305224547957, 5795634610449095915, 11591269220898191830,
\r
316 2318253844179638366, 4636507688359276732, 9273015376718553464,
\r
317 1854603075343710692, 3709206150687421385, 7418412301374842771,
\r
318 14836824602749685542, 2967364920549937108, 5934729841099874217,
\r
319 11869459682199748434, 2373891936439949686, 4747783872879899373,
\r
320 9495567745759798747, 1899113549151959749, 3798227098303919498,
\r
321 7596454196607838997, 15192908393215677995, 3038581678643135599,
\r
322 6077163357286271198, 12154326714572542396, 2430865342914508479,
\r
323 4861730685829016958, 9723461371658033917, 1944692274331606783,
\r
324 3889384548663213566, 7778769097326427133, 15557538194652854267,
\r
325 3111507638930570853, 6223015277861141707, 12446030555722283414,
\r
326 2489206111144456682, 4978412222288913365, 9956824444577826731,
\r
327 1991364888915565346, 3982729777831130692, 7965459555662261385,
\r
328 15930919111324522770, 3186183822264904554, 6372367644529809108,
\r
329 12744735289059618216, 2548947057811923643, 5097894115623847286,
\r
330 10195788231247694572, 2039157646249538914, 4078315292499077829,
\r
331 8156630584998155658, 16313261169996311316, 3262652233999262263,
\r
332 6525304467998524526, 13050608935997049053, 2610121787199409810,
\r
333 5220243574398819621, 10440487148797639242, 2088097429759527848,
\r
334 4176194859519055697, 8352389719038111394, 16704779438076222788,
\r
335 3340955887615244557, 6681911775230489115, 13363823550460978230,
\r
336 2672764710092195646, 5345529420184391292, 10691058840368782584,
\r
337 2138211768073756516, 4276423536147513033, 8552847072295026067,
\r
338 17105694144590052135, 3421138828918010427, 6842277657836020854,
\r
339 13684555315672041708, 2736911063134408341, 5473822126268816683,
\r
340 10947644252537633366, 2189528850507526673, 4379057701015053346,
\r
341 8758115402030106693, 17516230804060213386, 3503246160812042677,
\r
342 7006492321624085354, 14012984643248170709, 2802596928649634141,
\r
343 5605193857299268283, 11210387714598536567, 2242077542919707313,
\r
344 4484155085839414626, 8968310171678829253, 17936620343357658507,
\r
345 3587324068671531701, 7174648137343063403, 14349296274686126806,
\r
346 2869859254937225361, 5739718509874450722, 11479437019748901445,
\r
347 2295887403949780289, 4591774807899560578, 9183549615799121156,
\r
348 18367099231598242312, 3673419846319648462, 7346839692639296924,
\r
349 14693679385278593849, 2938735877055718769, 5877471754111437539,
\r
350 11754943508222875079, 2350988701644575015, 4701977403289150031,
\r
351 9403954806578300063, 1880790961315660012, 3761581922631320025,
\r
352 7523163845262640050, 15046327690525280101, 3009265538105056020,
\r
353 6018531076210112040, 12037062152420224081, 2407412430484044816,
\r
354 4814824860968089632, 9629649721936179265, 1925929944387235853,
\r
355 3851859888774471706, 7703719777548943412, 15407439555097886824,
\r
356 3081487911019577364, 6162975822039154729, 12325951644078309459,
\r
357 2465190328815661891, 4930380657631323783, 9860761315262647567,
\r
358 1972152263052529513, 3944304526105059027, 7888609052210118054,
\r
359 15777218104420236108, 3155443620884047221, 6310887241768094443,
\r
360 12621774483536188886, 2524354896707237777, 5048709793414475554,
\r
361 10097419586828951109, 2019483917365790221, 4038967834731580443,
\r
362 8077935669463160887, 16155871338926321774, 3231174267785264354,
\r
363 6462348535570528709, 12924697071141057419, 2584939414228211483,
\r
364 5169878828456422967, 10339757656912845935, 2067951531382569187,
\r
365 4135903062765138374, 8271806125530276748, 16543612251060553497,
\r
366 3308722450212110699, 6617444900424221398, 13234889800848442797,
\r
367 2646977960169688559, 5293955920339377119, 10587911840678754238,
\r
368 2117582368135750847, 4235164736271501695, 8470329472543003390,
\r
369 16940658945086006781, 3388131789017201356, 6776263578034402712,
\r
370 13552527156068805425, 2710505431213761085, 5421010862427522170,
\r
371 10842021724855044340, 2168404344971008868, 4336808689942017736,
\r
372 8673617379884035472, 17347234759768070944, 3469446951953614188,
\r
373 6938893903907228377, 13877787807814456755, 2775557561562891351,
\r
374 5551115123125782702, 11102230246251565404, 2220446049250313080,
\r
375 4440892098500626161, 8881784197001252323, 17763568394002504646,
\r
376 3552713678800500929, 7105427357601001858, 14210854715202003717,
\r
377 2842170943040400743, 5684341886080801486, 11368683772161602973,
\r
378 2273736754432320594, 4547473508864641189, 9094947017729282379,
\r
379 18189894035458564758, 3637978807091712951, 7275957614183425903,
\r
380 14551915228366851806, 2910383045673370361, 5820766091346740722,
\r
381 11641532182693481445, 2328306436538696289, 4656612873077392578,
\r
382 9313225746154785156, 1862645149230957031, 3725290298461914062,
\r
383 7450580596923828125, 14901161193847656250, 2980232238769531250,
\r
384 5960464477539062500, 11920928955078125000, 2384185791015625000,
\r
385 4768371582031250000, 9536743164062500000, 1907348632812500000,
\r
386 3814697265625000000, 7629394531250000000, 15258789062500000000,
\r
387 3051757812500000000, 6103515625000000000, 12207031250000000000,
\r
388 2441406250000000000, 4882812500000000000, 9765625000000000000,
\r
389 1953125000000000000, 3906250000000000000, 7812500000000000000,
\r
390 15625000000000000000, 3125000000000000000, 6250000000000000000,
\r
391 12500000000000000000, 2500000000000000000, 5000000000000000000,
\r
392 10000000000000000000, 2000000000000000000, 4000000000000000000,
\r
393 8000000000000000000, 16000000000000000000, 3200000000000000000,
\r
394 6400000000000000000, 12800000000000000000, 2560000000000000000,
\r
395 5120000000000000000, 10240000000000000000, 2048000000000000000,
\r
396 4096000000000000000, 8192000000000000000, 16384000000000000000,
\r
397 3276800000000000000, 6553600000000000000, 13107200000000000000,
\r
398 2621440000000000000, 5242880000000000000, 10485760000000000000,
\r
399 2097152000000000000, 4194304000000000000, 8388608000000000000,
\r
400 16777216000000000000, 3355443200000000000, 6710886400000000000,
\r
401 13421772800000000000, 2684354560000000000, 5368709120000000000,
\r
402 10737418240000000000, 2147483648000000000, 4294967296000000000,
\r
403 8589934592000000000, 17179869184000000000, 3435973836800000000,
\r
404 6871947673600000000, 13743895347200000000, 2748779069440000000,
\r
405 5497558138880000000, 10995116277760000000, 2199023255552000000,
\r
406 4398046511104000000, 8796093022208000000, 17592186044416000000,
\r
407 3518437208883200000, 7036874417766400000, 14073748835532800000,
\r
408 2814749767106560000, 5629499534213120000, 11258999068426240000,
\r
409 2251799813685248000, 4503599627370496000, 9007199254740992000,
\r
410 18014398509481984000, 3602879701896396800, 7205759403792793600,
\r
411 14411518807585587200, 2882303761517117440, 5764607523034234880,
\r
412 11529215046068469760, 2305843009213693952, 4611686018427387904,
\r
413 9223372036854775808, 1844674407370955161, 3689348814741910323,
\r
414 7378697629483820646, 14757395258967641292, 2951479051793528258,
\r
415 5902958103587056517, 11805916207174113034, 2361183241434822606,
\r
416 4722366482869645213, 9444732965739290427, 1888946593147858085,
\r
417 3777893186295716170, 7555786372591432341, 15111572745182864683,
\r
418 3022314549036572936, 6044629098073145873, 12089258196146291747,
\r
419 2417851639229258349, 4835703278458516698, 9671406556917033397,
\r
420 1934281311383406679, 3868562622766813359, 7737125245533626718,
\r
421 15474250491067253436, 3094850098213450687, 6189700196426901374,
\r
422 12379400392853802748, 2475880078570760549, 4951760157141521099,
\r
423 9903520314283042199, 1980704062856608439, 3961408125713216879,
\r
424 7922816251426433759, 15845632502852867518, 3169126500570573503,
\r
425 6338253001141147007, 12676506002282294014, 2535301200456458802,
\r
426 5070602400912917605, 10141204801825835211, 2028240960365167042,
\r
427 4056481920730334084, 8112963841460668169, 16225927682921336339,
\r
428 3245185536584267267, 6490371073168534535, 12980742146337069071,
\r
429 2596148429267413814, 5192296858534827628, 10384593717069655257,
\r
430 2076918743413931051, 4153837486827862102, 8307674973655724205,
\r
431 16615349947311448411, 3323069989462289682, 6646139978924579364,
\r
432 13292279957849158729, 2658455991569831745, 5316911983139663491,
\r
433 10633823966279326983, 2126764793255865396, 4253529586511730793,
\r
434 8507059173023461586, 17014118346046923173, 3402823669209384634,
\r
435 6805647338418769269, 13611294676837538538, 2722258935367507707,
\r
436 5444517870735015415, 10889035741470030830, 2177807148294006166,
\r
437 4355614296588012332, 8711228593176024664, 17422457186352049329,
\r
438 3484491437270409865, 6968982874540819731, 13937965749081639463,
\r
439 2787593149816327892, 5575186299632655785, 11150372599265311570,
\r
440 2230074519853062314, 4460149039706124628, 8920298079412249256,
\r
441 17840596158824498513, 3568119231764899702, 7136238463529799405,
\r
442 14272476927059598810, 2854495385411919762, 5708990770823839524,
\r
443 11417981541647679048, 2283596308329535809, 4567192616659071619,
\r
444 9134385233318143238, 18268770466636286477, 3653754093327257295,
\r
445 7307508186654514591, 14615016373309029182, 2923003274661805836,
\r
446 5846006549323611672, 11692013098647223345, 2338402619729444669,
\r
447 4676805239458889338, 9353610478917778676, 1870722095783555735,
\r
448 3741444191567111470, 7482888383134222941, 14965776766268445882,
\r
449 2993155353253689176, 5986310706507378352, 11972621413014756705,
\r
450 2394524282602951341, 4789048565205902682, 9578097130411805364,
\r
451 1915619426082361072, 3831238852164722145, 7662477704329444291,
\r
452 15324955408658888583, 3064991081731777716, 6129982163463555433,
\r
453 12259964326927110866, 2451992865385422173, 4903985730770844346,
\r
454 9807971461541688693, 1961594292308337738, 3923188584616675477,
\r
455 7846377169233350954, 15692754338466701909, 3138550867693340381,
\r
456 6277101735386680763, 12554203470773361527, 2510840694154672305,
\r
457 5021681388309344611, 10043362776618689222, 2008672555323737844,
\r
458 4017345110647475688, 8034690221294951377, 16069380442589902755,
\r
459 3213876088517980551, 6427752177035961102, 12855504354071922204,
\r
460 2571100870814384440, 5142201741628768881, 10284403483257537763,
\r
461 2056880696651507552, 4113761393303015105, 8227522786606030210,
\r
462 16455045573212060421, 3291009114642412084, 6582018229284824168,
\r
463 13164036458569648337, 2632807291713929667, 5265614583427859334,
\r
464 10531229166855718669, 2106245833371143733, 4212491666742287467,
\r
465 8424983333484574935, 16849966666969149871, 3369993333393829974,
\r
466 6739986666787659948, 13479973333575319897, 2695994666715063979,
\r
467 5391989333430127958, 10783978666860255917, 2156795733372051183,
\r
468 4313591466744102367, 8627182933488204734, 17254365866976409468,
\r
469 3450873173395281893, 6901746346790563787, 13803492693581127574,
\r
470 2760698538716225514, 5521397077432451029, 11042794154864902059,
\r
471 2208558830972980411, 4417117661945960823, 8834235323891921647,
\r
472 17668470647783843295, 3533694129556768659, 7067388259113537318,
\r
473 14134776518227074636, 2826955303645414927, 5653910607290829854,
\r
474 11307821214581659709, 2261564242916331941, 4523128485832663883,
\r
475 9046256971665327767, 18092513943330655534, 3618502788666131106,
\r
476 7237005577332262213, 14474011154664524427, 2894802230932904885,
\r
477 5789604461865809771, 11579208923731619542, 2315841784746323908,
\r
478 4631683569492647816, 9263367138985295633, 1852673427797059126,
\r
479 3705346855594118253, 7410693711188236507, 14821387422376473014,
\r
480 2964277484475294602, 5928554968950589205, 11857109937901178411,
\r
481 2371421987580235682, 4742843975160471364, 9485687950320942729,
\r
482 1897137590064188545, 3794275180128377091, 7588550360256754183,
\r
483 15177100720513508366, 3035420144102701673, 6070840288205403346,
\r
484 12141680576410806693, 2428336115282161338, 4856672230564322677,
\r
485 9713344461128645354, 1942668892225729070, 3885337784451458141,
\r
486 7770675568902916283, 15541351137805832567, 3108270227561166513,
\r
487 6216540455122333026, 12433080910244666053, 2486616182048933210,
\r
488 4973232364097866421, 9946464728195732843, 1989292945639146568,
\r
489 3978585891278293137, 7957171782556586274, 15914343565113172548,
\r
490 3182868713022634509, 6365737426045269019, 12731474852090538039,
\r
491 2546294970418107607, 5092589940836215215, 10185179881672430431,
\r
492 2037035976334486086, 4074071952668972172, 8148143905337944345,
\r
493 16296287810675888690, 3259257562135177738, 6518515124270355476,
\r
494 13037030248540710952, 2607406049708142190, 5214812099416284380,
\r
495 10429624198832568761, 2085924839766513752, 4171849679533027504,
\r
496 8343699359066055009, 16687398718132110018, 3337479743626422003,
\r
497 6674959487252844007, 13349918974505688014, 2669983794901137602,
\r
498 5339967589802275205, 10679935179604550411, 2135987035920910082,
\r
499 4271974071841820164, 8543948143683640329, 17087896287367280659,
\r
500 3417579257473456131, 6835158514946912263, 13670317029893824527,
\r
501 2734063405978764905, 5468126811957529810, 10936253623915059621,
\r
502 2187250724783011924, 4374501449566023848, 8749002899132047697,
\r
503 17498005798264095394, 3499601159652819078, 6999202319305638157,
\r
504 13998404638611276315, 2799680927722255263, 5599361855444510526,
\r
505 11198723710889021052, 2239744742177804210, 4479489484355608421,
\r
506 8958978968711216842, 17917957937422433684, 3583591587484486736,
\r
507 7167183174968973473, 14334366349937946947, 2866873269987589389,
\r
508 5733746539975178779, 11467493079950357558, 2293498615990071511,
\r
509 4586997231980143023, 9173994463960286046, 18347988927920572092,
\r
510 3669597785584114418, 7339195571168228837, 14678391142336457674,
\r
511 2935678228467291534, 5871356456934583069, 11742712913869166139,
\r
512 2348542582773833227, 4697085165547666455, 9394170331095332911,
\r
513 1878834066219066582, 3757668132438133164, 7515336264876266329,
\r
514 15030672529752532658, 3006134505950506531, 6012269011901013063,
\r
515 12024538023802026126, 2404907604760405225, 4809815209520810450,
\r
516 9619630419041620901, 1923926083808324180, 3847852167616648360,
\r
517 7695704335233296721, 15391408670466593442, 3078281734093318688,
\r
518 6156563468186637376, 12313126936373274753, 2462625387274654950,
\r
519 4925250774549309901, 9850501549098619803, 1970100309819723960,
\r
520 3940200619639447921, 7880401239278895842, 15760802478557791684,
\r
521 3152160495711558336, 6304320991423116673, 12608641982846233347,
\r
522 2521728396569246669, 5043456793138493339, 10086913586276986678,
\r
523 2017382717255397335, 4034765434510794671, 8069530869021589342,
\r
524 16139061738043178685, 3227812347608635737, 6455624695217271474,
\r
525 12911249390434542948, 2582249878086908589, 5164499756173817179,
\r
526 10328999512347634358, 2065799902469526871, 4131599804939053743,
\r
527 8263199609878107486, 16526399219756214973, 3305279843951242994,
\r
528 6610559687902485989, 13221119375804971979, 2644223875160994395,
\r
529 5288447750321988791, 10576895500643977583, 2115379100128795516,
\r
530 4230758200257591033, 8461516400515182066, 16923032801030364133,
\r
531 3384606560206072826, 6769213120412145653, 13538426240824291306,
\r
532 2707685248164858261, 5415370496329716522, 10830740992659433045,
\r
533 2166148198531886609, 4332296397063773218, 8664592794127546436,
\r
534 17329185588255092872, 3465837117651018574, 6931674235302037148,
\r
535 13863348470604074297, 2772669694120814859, 5545339388241629719,
\r
536 11090678776483259438, 2218135755296651887, 4436271510593303775,
\r
537 8872543021186607550, 17745086042373215101, 3549017208474643020,
\r
538 7098034416949286040, 14196068833898572081, 2839213766779714416,
\r
539 5678427533559428832, 11356855067118857664, 2271371013423771532,
\r
540 4542742026847543065, 9085484053695086131, 18170968107390172263,
\r
541 3634193621478034452, 7268387242956068905, 14536774485912137810,
\r
542 2907354897182427562, 5814709794364855124, 11629419588729710248,
\r
543 2325883917745942049, 4651767835491884099, 9303535670983768199,
\r
544 1860707134196753639, 3721414268393507279, 7442828536787014559,
\r
545 14885657073574029118, 2977131414714805823, 5954262829429611647,
\r
546 11908525658859223294, 2381705131771844658, 4763410263543689317,
\r
547 9526820527087378635, 1905364105417475727, 3810728210834951454,
\r
548 7621456421669902908, 15242912843339805817, 3048582568667961163,
\r
549 6097165137335922326, 12194330274671844653, 2438866054934368930,
\r
550 4877732109868737861, 9755464219737475723, 1951092843947495144,
\r
551 3902185687894990289, 7804371375789980578, 15608742751579961156,
\r
552 3121748550315992231, 6243497100631984462, 12486994201263968925,
\r
553 2497398840252793785, 4994797680505587570, 9989595361011175140,
\r
554 1997919072202235028, 3995838144404470056, 7991676288808940112,
\r
555 15983352577617880224, 3196670515523576044, 6393341031047152089,
\r
556 12786682062094304179, 2557336412418860835, 5114672824837721671,
\r
557 10229345649675443343, 2045869129935088668, 4091738259870177337,
\r
558 8183476519740354675, 16366953039480709350, 3273390607896141870,
\r
559 6546781215792283740, 13093562431584567480, 2618712486316913496,
\r
560 5237424972633826992, 10474849945267653984, 2094969989053530796,
\r
561 4189939978107061593, 8379879956214123187, 16759759912428246374,
\r
562 3351951982485649274, 6703903964971298549, 13407807929942597099,
\r
563 2681561585988519419, 5363123171977038839, 10726246343954077679,
\r
564 2145249268790815535, 4290498537581631071, 8580997075163262143,
\r
565 17161994150326524287, 3432398830065304857, 6864797660130609714,
\r
566 13729595320261219429, 2745919064052243885, 5491838128104487771,
\r
567 10983676256208975543, 2196735251241795108, 4393470502483590217,
\r
568 8786941004967180435, 17573882009934360870, 3514776401986872174,
\r
569 7029552803973744348, 14059105607947488696, 2811821121589497739,
\r
570 5623642243178995478, 11247284486357990957, 2249456897271598191,
\r
571 4498913794543196382, 8997827589086392765, 17995655178172785531,
\r
572 3599131035634557106, 7198262071269114212, 14396524142538228424,
\r
573 2879304828507645684, 5758609657015291369, 11517219314030582739,
\r
574 2303443862806116547, 4606887725612233095, 9213775451224466191,
\r
575 18427550902448932383, 3685510180489786476, 7371020360979572953,
\r
576 14742040721959145907, 2948408144391829181, 5896816288783658362,
\r
577 11793632577567316725, 2358726515513463345, 4717453031026926690,
\r
578 9434906062053853380, 1886981212410770676, 3773962424821541352,
\r
579 7547924849643082704, 15095849699286165408, 3019169939857233081,
\r
580 6038339879714466163, 12076679759428932327, 2415335951885786465,
\r
581 4830671903771572930, 9661343807543145861, 1932268761508629172,
\r
582 3864537523017258344, 7729075046034516689, 15458150092069033378,
\r
583 3091630018413806675, 6183260036827613351, 12366520073655226703,
\r
584 2473304014731045340, 4946608029462090681, 9893216058924181362,
\r
585 1978643211784836272, 3957286423569672544, 7914572847139345089,
\r
586 15829145694278690179, 3165829138855738035, 6331658277711476071,
\r
587 12663316555422952143, 2532663311084590428, 5065326622169180857,
\r
588 10130653244338361715, 2026130648867672343, 4052261297735344686,
\r
589 8104522595470689372, 16209045190941378744, 3241809038188275748,
\r
590 6483618076376551497, 12967236152753102995, 2593447230550620599,
\r
591 5186894461101241198, 10373788922202482396, 2074757784440496479,
\r
592 4149515568880992958, 8299031137761985917, 16598062275523971834,
\r
593 3319612455104794366, 6639224910209588733, 13278449820419177467,
\r
594 2655689964083835493, 5311379928167670986, 10622759856335341973,
\r
595 2124551971267068394, 4249103942534136789, 8498207885068273579,
\r
596 16996415770136547158, 3399283154027309431, 6798566308054618863,
\r
597 13597132616109237726, 2719426523221847545, 5438853046443695090,
\r
598 10877706092887390181, 2175541218577478036, 4351082437154956072,
\r
599 8702164874309912144, 17404329748619824289, 3480865949723964857,
\r
600 6961731899447929715, 13923463798895859431, 2784692759779171886,
\r
601 5569385519558343772, 11138771039116687545, 2227754207823337509,
\r
602 4455508415646675018, 8911016831293350036, 17822033662586700072,
\r
603 3564406732517340014, 7128813465034680029, 14257626930069360058,
\r
604 2851525386013872011, 5703050772027744023, 11406101544055488046,
\r
605 2281220308811097609, 4562440617622195218, 9124881235244390437,
\r
606 18249762470488780874, 3649952494097756174, 7299904988195512349,
\r
607 14599809976391024699, 2919961995278204939, 5839923990556409879,
\r
608 11679847981112819759, 2335969596222563951, 4671939192445127903,
\r
609 9343878384890255807, 1868775676978051161, 3737551353956102323,
\r
610 7475102707912204646, 14950205415824409292, 2990041083164881858,
\r
611 5980082166329763716, 11960164332659527433, 2392032866531905486,
\r
612 4784065733063810973, 9568131466127621947, 1913626293225524389,
\r
613 3827252586451048778, 7654505172902097557, 15309010345804195115,
\r
614 3061802069160839023, 6123604138321678046, 12247208276643356092,
\r
615 2449441655328671218, 4898883310657342436, 9797766621314684873,
\r
616 1959553324262936974, 3919106648525873949, 7838213297051747899,
\r
617 15676426594103495798, 3135285318820699159, 6270570637641398319,
\r
618 12541141275282796638, 2508228255056559327, 5016456510113118655,
\r
619 10032913020226237310, 2006582604045247462, 4013165208090494924,
\r
620 8026330416180989848, 16052660832361979697, 3210532166472395939,
\r
621 6421064332944791878, 12842128665889583757, 2568425733177916751,
\r
622 5136851466355833503, 10273702932711667006, 2054740586542333401,
\r
623 4109481173084666802, 8218962346169333605, 16437924692338667210,
\r
624 3287584938467733442, 6575169876935466884, 13150339753870933768,
\r
625 2630067950774186753, 5260135901548373507, 10520271803096747014,
\r
626 2104054360619349402, 4208108721238698805, 8416217442477397611,
\r
627 16832434884954795223, 3366486976990959044, 6732973953981918089,
\r
628 13465947907963836178, 2693189581592767235, 5386379163185534471,
\r
629 10772758326371068942, 2154551665274213788, 4309103330548427577,
\r
630 8618206661096855154, 17236413322193710308, 3447282664438742061,
\r
631 6894565328877484123, 13789130657754968246, 2757826131550993649,
\r
632 5515652263101987298, 11031304526203974597, 2206260905240794919,
\r
633 4412521810481589838, 8825043620963179677, 17650087241926359355,
\r
634 3530017448385271871, 7060034896770543742, 14120069793541087484,
\r
635 2824013958708217496, 5648027917416434993, 11296055834832869987,
\r
636 2259211166966573997, 4518422333933147995, 9036844667866295990,
\r
637 18073689335732591980, 3614737867146518396, 7229475734293036792,
\r
638 14458951468586073584, 2891790293717214716, 5783580587434429433,
\r
639 11567161174868858867, 2313432234973771773, 4626864469947543547,
\r
640 9253728939895087094, 1850745787979017418, 3701491575958034837,
\r
641 7402983151916069675, 14805966303832139350, 2961193260766427870,
\r
642 5922386521532855740, 11844773043065711480, 2368954608613142296,
\r
643 4737909217226284592, 9475818434452569184, 1895163686890513836,
\r
644 3790327373781027673, 7580654747562055347, 15161309495124110694,
\r
645 3032261899024822138, 6064523798049644277, 12129047596099288555,
\r
646 2425809519219857711, 4851619038439715422, 9703238076879430844,
\r
647 1940647615375886168, 3881295230751772337, 7762590461503544675,
\r
648 15525180923007089351, 3105036184601417870, 6210072369202835740,
\r
649 12420144738405671481, 2484028947681134296, 4968057895362268592,
\r
650 9936115790724537184, 1987223158144907436, 3974446316289814873,
\r
651 7948892632579629747, 15897785265159259495, 3179557053031851899,
\r
652 6359114106063703798, 12718228212127407596, 2543645642425481519,
\r
653 5087291284850963038, 10174582569701926077, 2034916513940385215,
\r
654 4069833027880770430, 8139666055761540861, 16279332111523081723,
\r
655 3255866422304616344, 6511732844609232689, 13023465689218465379,
\r
656 2604693137843693075, 5209386275687386151, 10418772551374772303,
\r
657 2083754510274954460, 4167509020549908921, 8335018041099817842,
\r
658 16670036082199635685, 3334007216439927137, 6668014432879854274,
\r
659 13336028865759708548, 2667205773151941709, 5334411546303883419,
\r
660 10668823092607766838, 2133764618521553367, 4267529237043106735,
\r
661 8535058474086213470, 17070116948172426941, 3414023389634485388,
\r
662 6828046779268970776, 13656093558537941553, 2731218711707588310,
\r
663 5462437423415176621, 10924874846830353242, 2184974969366070648,
\r
664 4369949938732141297, 8739899877464282594, 17479799754928565188,
\r
665 3495959950985713037, 6991919901971426075, 13983839803942852150,
\r
666 2796767960788570430, 5593535921577140860, 11187071843154281720,
\r
667 2237414368630856344, 4474828737261712688, 8949657474523425376,
\r
668 17899314949046850752, 3579862989809370150, 7159725979618740301,
\r
669 14319451959237480602, 2863890391847496120, 5727780783694992240,
\r
670 11455561567389984481, 2291112313477996896, 4582224626955993792,
\r
671 9164449253911987585, 18328898507823975170, 3665779701564795034,
\r
672 7331559403129590068, 14663118806259180136, 2932623761251836027,
\r
673 5865247522503672054, 11730495045007344109, 2346099009001468821,
\r
674 4692198018002937643, 9384396036005875287, 1876879207201175057,
\r
675 3753758414402350114, 7507516828804700229, 15015033657609400459,
\r
676 3003006731521880091, 6006013463043760183, 12012026926087520367,
\r
677 2402405385217504073, 4804810770435008147, 9609621540870016294,
\r
678 1921924308174003258, 3843848616348006517, 7687697232696013035,
\r
679 15375394465392026070, 3075078893078405214, 6150157786156810428,
\r
680 12300315572313620856, 2460063114462724171, 4920126228925448342,
\r
681 9840252457850896685, 1968050491570179337, 3936100983140358674,
\r
682 7872201966280717348, 15744403932561434696, 3148880786512286939,
\r
683 6297761573024573878, 12595523146049147757, 2519104629209829551,
\r
684 5038209258419659102, 10076418516839318205, 2015283703367863641,
\r
685 4030567406735727282, 8061134813471454564, 16122269626942909129,
\r
686 3224453925388581825, 6448907850777163651, 12897815701554327303,
\r
687 2579563140310865460, 5159126280621730921, 10318252561243461842,
\r
688 2063650512248692368, 4127301024497384737, 8254602048994769474,
\r
689 16509204097989538948, 3301840819597907789, 6603681639195815579,
\r
690 13207363278391631158, 2641472655678326231, 5282945311356652463,
\r
691 10565890622713304927, 2113178124542660985, 4226356249085321970,
\r
692 8452712498170643941, 16905424996341287883, 3381084999268257576,
\r
693 6762169998536515153, 13524339997073030306, 2704867999414606061,
\r
694 5409735998829212122, 10819471997658424245, 2163894399531684849,
\r
695 4327788799063369698, 8655577598126739396, 17311155196253478792,
\r
696 3462231039250695758, 6924462078501391516, 13848924157002783033,
\r
697 2769784831400556606, 5539569662801113213, 11079139325602226427,
\r
698 2215827865120445285, 4431655730240890570, 8863311460481781141,
\r
699 17726622920963562283, 3545324584192712456, 7090649168385424913,
\r
700 14181298336770849826, 2836259667354169965, 5672519334708339930,
\r
701 11345038669416679861, 2269007733883335972, 4538015467766671944,
\r
702 9076030935533343889, 18152061871066687778, 3630412374213337555,
\r
703 7260824748426675111, 14521649496853350222, 2904329899370670044,
\r
704 5808659798741340089, 11617319597482680178, 2323463919496536035,
\r
705 4646927838993072071, 9293855677986144142, 1858771135597228828,
\r
706 3717542271194457656, 7435084542388915313, 14870169084777830627,
\r
707 2974033816955566125, 5948067633911132251, 11896135267822264502,
\r
708 2379227053564452900, 4758454107128905800, 9516908214257811601,
\r
709 1903381642851562320, 3806763285703124640, 7613526571406249281,
\r
710 15227053142812498563, 3045410628562499712, 6090821257124999425,
\r
711 12181642514249998850, 2436328502849999770, 4872657005699999540,
\r
712 9745314011399999080, 1949062802279999816, 3898125604559999632,
\r
713 7796251209119999264, 15592502418239998528, 3118500483647999705,
\r
714 6237000967295999411, 12474001934591998822, 2494800386918399764,
\r
715 4989600773836799529, 9979201547673599058, 1995840309534719811,
\r
716 3991680619069439623, 7983361238138879246, 15966722476277758493,
\r
717 3193344495255551698, 6386688990511103397, 12773377981022206794,
\r
718 2554675596204441358, 5109351192408882717, 10218702384817765435,
\r
719 2043740476963553087, 4087480953927106174, 8174961907854212348,
\r
720 16349923815708424697, 3269984763141684939, 6539969526283369878,
\r
721 13079939052566739757, 2615987810513347951, 5231975621026695903,
\r
722 10463951242053391806, 2092790248410678361, 4185580496821356722,
\r
723 8371160993642713444, 16742321987285426889, 3348464397457085377,
\r
724 6696928794914170755, 13393857589828341511, 2678771517965668302,
\r
725 5357543035931336604, 10715086071862673209, 2143017214372534641,
\r
726 4286034428745069283, 8572068857490138567, 17144137714980277135,
\r
727 3428827542996055427, 6857655085992110854, 13715310171984221708,
\r
728 2743062034396844341, 5486124068793688683, 10972248137587377366,
\r
729 2194449627517475473, 4388899255034950946, 8777798510069901893,
\r
730 17555597020139803786, 3511119404027960757, 7022238808055921514,
\r
731 14044477616111843029, 2808895523222368605, 5617791046444737211,
\r
732 11235582092889474423, 2247116418577894884, 4494232837155789769,
\r
733 8988465674311579538, 17976931348623159077, 3595386269724631815,
\r
734 7190772539449263630, 14381545078898527261, 2876309015779705452,
\r
735 5752618031559410904, 11505236063118821809, 2301047212623764361,
\r
736 4602094425247528723, 9204188850495057447, 18408377700990114895,
\r
737 3681675540198022979, 7363351080396045958,
\r
740 static readonly int[] TensExponentTable = {
\r
741 -323, -323, -323, -322, -322, -322, -321, -321, -321, -320, -320, -320,
\r
742 -319, -319, -319, -319, -318, -318, -318, -317, -317, -317, -316, -316,
\r
743 -316, -316, -315, -315, -315, -314, -314, -314, -313, -313, -313, -313,
\r
744 -312, -312, -312, -311, -311, -311, -310, -310, -310, -310, -309, -309,
\r
745 -309, -308, -308, -308, -307, -307, -307, -307, -306, -306, -306, -305,
\r
746 -305, -305, -304, -304, -304, -304, -303, -303, -303, -302, -302, -302,
\r
747 -301, -301, -301, -301, -300, -300, -300, -299, -299, -299, -298, -298,
\r
748 -298, -298, -297, -297, -297, -296, -296, -296, -295, -295, -295, -295,
\r
749 -294, -294, -294, -293, -293, -293, -292, -292, -292, -291, -291, -291,
\r
750 -291, -290, -290, -290, -289, -289, -289, -288, -288, -288, -288, -287,
\r
751 -287, -287, -286, -286, -286, -285, -285, -285, -285, -284, -284, -284,
\r
752 -283, -283, -283, -282, -282, -282, -282, -281, -281, -281, -280, -280,
\r
753 -280, -279, -279, -279, -279, -278, -278, -278, -277, -277, -277, -276,
\r
754 -276, -276, -276, -275, -275, -275, -274, -274, -274, -273, -273, -273,
\r
755 -273, -272, -272, -272, -271, -271, -271, -270, -270, -270, -270, -269,
\r
756 -269, -269, -268, -268, -268, -267, -267, -267, -267, -266, -266, -266,
\r
757 -265, -265, -265, -264, -264, -264, -264, -263, -263, -263, -262, -262,
\r
758 -262, -261, -261, -261, -260, -260, -260, -260, -259, -259, -259, -258,
\r
759 -258, -258, -257, -257, -257, -257, -256, -256, -256, -255, -255, -255,
\r
760 -254, -254, -254, -254, -253, -253, -253, -252, -252, -252, -251, -251,
\r
761 -251, -251, -250, -250, -250, -249, -249, -249, -248, -248, -248, -248,
\r
762 -247, -247, -247, -246, -246, -246, -245, -245, -245, -245, -244, -244,
\r
763 -244, -243, -243, -243, -242, -242, -242, -242, -241, -241, -241, -240,
\r
764 -240, -240, -239, -239, -239, -239, -238, -238, -238, -237, -237, -237,
\r
765 -236, -236, -236, -236, -235, -235, -235, -234, -234, -234, -233, -233,
\r
766 -233, -232, -232, -232, -232, -231, -231, -231, -230, -230, -230, -229,
\r
767 -229, -229, -229, -228, -228, -228, -227, -227, -227, -226, -226, -226,
\r
768 -226, -225, -225, -225, -224, -224, -224, -223, -223, -223, -223, -222,
\r
769 -222, -222, -221, -221, -221, -220, -220, -220, -220, -219, -219, -219,
\r
770 -218, -218, -218, -217, -217, -217, -217, -216, -216, -216, -215, -215,
\r
771 -215, -214, -214, -214, -214, -213, -213, -213, -212, -212, -212, -211,
\r
772 -211, -211, -211, -210, -210, -210, -209, -209, -209, -208, -208, -208,
\r
773 -208, -207, -207, -207, -206, -206, -206, -205, -205, -205, -205, -204,
\r
774 -204, -204, -203, -203, -203, -202, -202, -202, -201, -201, -201, -201,
\r
775 -200, -200, -200, -199, -199, -199, -198, -198, -198, -198, -197, -197,
\r
776 -197, -196, -196, -196, -195, -195, -195, -195, -194, -194, -194, -193,
\r
777 -193, -193, -192, -192, -192, -192, -191, -191, -191, -190, -190, -190,
\r
778 -189, -189, -189, -189, -188, -188, -188, -187, -187, -187, -186, -186,
\r
779 -186, -186, -185, -185, -185, -184, -184, -184, -183, -183, -183, -183,
\r
780 -182, -182, -182, -181, -181, -181, -180, -180, -180, -180, -179, -179,
\r
781 -179, -178, -178, -178, -177, -177, -177, -177, -176, -176, -176, -175,
\r
782 -175, -175, -174, -174, -174, -173, -173, -173, -173, -172, -172, -172,
\r
783 -171, -171, -171, -170, -170, -170, -170, -169, -169, -169, -168, -168,
\r
784 -168, -167, -167, -167, -167, -166, -166, -166, -165, -165, -165, -164,
\r
785 -164, -164, -164, -163, -163, -163, -162, -162, -162, -161, -161, -161,
\r
786 -161, -160, -160, -160, -159, -159, -159, -158, -158, -158, -158, -157,
\r
787 -157, -157, -156, -156, -156, -155, -155, -155, -155, -154, -154, -154,
\r
788 -153, -153, -153, -152, -152, -152, -152, -151, -151, -151, -150, -150,
\r
789 -150, -149, -149, -149, -149, -148, -148, -148, -147, -147, -147, -146,
\r
790 -146, -146, -145, -145, -145, -145, -144, -144, -144, -143, -143, -143,
\r
791 -142, -142, -142, -142, -141, -141, -141, -140, -140, -140, -139, -139,
\r
792 -139, -139, -138, -138, -138, -137, -137, -137, -136, -136, -136, -136,
\r
793 -135, -135, -135, -134, -134, -134, -133, -133, -133, -133, -132, -132,
\r
794 -132, -131, -131, -131, -130, -130, -130, -130, -129, -129, -129, -128,
\r
795 -128, -128, -127, -127, -127, -127, -126, -126, -126, -125, -125, -125,
\r
796 -124, -124, -124, -124, -123, -123, -123, -122, -122, -122, -121, -121,
\r
797 -121, -121, -120, -120, -120, -119, -119, -119, -118, -118, -118, -118,
\r
798 -117, -117, -117, -116, -116, -116, -115, -115, -115, -114, -114, -114,
\r
799 -114, -113, -113, -113, -112, -112, -112, -111, -111, -111, -111, -110,
\r
800 -110, -110, -109, -109, -109, -108, -108, -108, -108, -107, -107, -107,
\r
801 -106, -106, -106, -105, -105, -105, -105, -104, -104, -104, -103, -103,
\r
802 -103, -102, -102, -102, -102, -101, -101, -101, -100, -100, -100, -99,
\r
803 -99, -99, -99, -98, -98, -98, -97, -97, -97, -96, -96, -96,
\r
804 -96, -95, -95, -95, -94, -94, -94, -93, -93, -93, -93, -92,
\r
805 -92, -92, -91, -91, -91, -90, -90, -90, -90, -89, -89, -89,
\r
806 -88, -88, -88, -87, -87, -87, -86, -86, -86, -86, -85, -85,
\r
807 -85, -84, -84, -84, -83, -83, -83, -83, -82, -82, -82, -81,
\r
808 -81, -81, -80, -80, -80, -80, -79, -79, -79, -78, -78, -78,
\r
809 -77, -77, -77, -77, -76, -76, -76, -75, -75, -75, -74, -74,
\r
810 -74, -74, -73, -73, -73, -72, -72, -72, -71, -71, -71, -71,
\r
811 -70, -70, -70, -69, -69, -69, -68, -68, -68, -68, -67, -67,
\r
812 -67, -66, -66, -66, -65, -65, -65, -65, -64, -64, -64, -63,
\r
813 -63, -63, -62, -62, -62, -62, -61, -61, -61, -60, -60, -60,
\r
814 -59, -59, -59, -59, -58, -58, -58, -57, -57, -57, -56, -56,
\r
815 -56, -55, -55, -55, -55, -54, -54, -54, -53, -53, -53, -52,
\r
816 -52, -52, -52, -51, -51, -51, -50, -50, -50, -49, -49, -49,
\r
817 -49, -48, -48, -48, -47, -47, -47, -46, -46, -46, -46, -45,
\r
818 -45, -45, -44, -44, -44, -43, -43, -43, -43, -42, -42, -42,
\r
819 -41, -41, -41, -40, -40, -40, -40, -39, -39, -39, -38, -38,
\r
820 -38, -37, -37, -37, -37, -36, -36, -36, -35, -35, -35, -34,
\r
821 -34, -34, -34, -33, -33, -33, -32, -32, -32, -31, -31, -31,
\r
822 -31, -30, -30, -30, -29, -29, -29, -28, -28, -28, -27, -27,
\r
823 -27, -27, -26, -26, -26, -25, -25, -25, -24, -24, -24, -24,
\r
824 -23, -23, -23, -22, -22, -22, -21, -21, -21, -21, -20, -20,
\r
825 -20, -19, -19, -19, -18, -18, -18, -18, -17, -17, -17, -16,
\r
826 -16, -16, -15, -15, -15, -15, -14, -14, -14, -13, -13, -13,
\r
827 -12, -12, -12, -12, -11, -11, -11, -10, -10, -10, -9, -9,
\r
828 -9, -9, -8, -8, -8, -7, -7, -7, -6, -6, -6, -6,
\r
829 -5, -5, -5, -4, -4, -4, -3, -3, -3, -3, -2, -2,
\r
830 -2, -1, -1, -1, 0, 0, 0, 1, 1, 1, 1, 2,
\r
831 2, 2, 3, 3, 3, 4, 4, 4, 4, 5, 5, 5,
\r
832 6, 6, 6, 7, 7, 7, 7, 8, 8, 8, 9, 9,
\r
833 9, 10, 10, 10, 10, 11, 11, 11, 12, 12, 12, 13,
\r
834 13, 13, 13, 14, 14, 14, 15, 15, 15, 16, 16, 16,
\r
835 16, 17, 17, 17, 18, 18, 18, 19, 19, 19, 19, 20,
\r
836 20, 20, 21, 21, 21, 22, 22, 22, 22, 23, 23, 23,
\r
837 24, 24, 24, 25, 25, 25, 25, 26, 26, 26, 27, 27,
\r
838 27, 28, 28, 28, 28, 29, 29, 29, 30, 30, 30, 31,
\r
839 31, 31, 32, 32, 32, 32, 33, 33, 33, 34, 34, 34,
\r
840 35, 35, 35, 35, 36, 36, 36, 37, 37, 37, 38, 38,
\r
841 38, 38, 39, 39, 39, 40, 40, 40, 41, 41, 41, 41,
\r
842 42, 42, 42, 43, 43, 43, 44, 44, 44, 44, 45, 45,
\r
843 45, 46, 46, 46, 47, 47, 47, 47, 48, 48, 48, 49,
\r
844 49, 49, 50, 50, 50, 50, 51, 51, 51, 52, 52, 52,
\r
845 53, 53, 53, 53, 54, 54, 54, 55, 55, 55, 56, 56,
\r
846 56, 56, 57, 57, 57, 58, 58, 58, 59, 59, 59, 60,
\r
847 60, 60, 60, 61, 61, 61, 62, 62, 62, 63, 63, 63,
\r
848 63, 64, 64, 64, 65, 65, 65, 66, 66, 66, 66, 67,
\r
849 67, 67, 68, 68, 68, 69, 69, 69, 69, 70, 70, 70,
\r
850 71, 71, 71, 72, 72, 72, 72, 73, 73, 73, 74, 74,
\r
851 74, 75, 75, 75, 75, 76, 76, 76, 77, 77, 77, 78,
\r
852 78, 78, 78, 79, 79, 79, 80, 80, 80, 81, 81, 81,
\r
853 81, 82, 82, 82, 83, 83, 83, 84, 84, 84, 84, 85,
\r
854 85, 85, 86, 86, 86, 87, 87, 87, 87, 88, 88, 88,
\r
855 89, 89, 89, 90, 90, 90, 91, 91, 91, 91, 92, 92,
\r
856 92, 93, 93, 93, 94, 94, 94, 94, 95, 95, 95, 96,
\r
857 96, 96, 97, 97, 97, 97, 98, 98, 98, 99, 99, 99,
\r
858 100, 100, 100, 100, 101, 101, 101, 102, 102, 102, 103, 103,
\r
859 103, 103, 104, 104, 104, 105, 105, 105, 106, 106, 106, 106,
\r
860 107, 107, 107, 108, 108, 108, 109, 109, 109, 109, 110, 110,
\r
861 110, 111, 111, 111, 112, 112, 112, 112, 113, 113, 113, 114,
\r
862 114, 114, 115, 115, 115, 115, 116, 116, 116, 117, 117, 117,
\r
863 118, 118, 118, 119, 119, 119, 119, 120, 120, 120, 121, 121,
\r
864 121, 122, 122, 122, 122, 123, 123, 123, 124, 124, 124, 125,
\r
865 125, 125, 125, 126, 126, 126, 127, 127, 127, 128, 128, 128,
\r
866 128, 129, 129, 129, 130, 130, 130, 131, 131, 131, 131, 132,
\r
867 132, 132, 133, 133, 133, 134, 134, 134, 134, 135, 135, 135,
\r
868 136, 136, 136, 137, 137, 137, 137, 138, 138, 138, 139, 139,
\r
869 139, 140, 140, 140, 140, 141, 141, 141, 142, 142, 142, 143,
\r
870 143, 143, 143, 144, 144, 144, 145, 145, 145, 146, 146, 146,
\r
871 146, 147, 147, 147, 148, 148, 148, 149, 149, 149, 150, 150,
\r
872 150, 150, 151, 151, 151, 152, 152, 152, 153, 153, 153, 153,
\r
873 154, 154, 154, 155, 155, 155, 156, 156, 156, 156, 157, 157,
\r
874 157, 158, 158, 158, 159, 159, 159, 159, 160, 160, 160, 161,
\r
875 161, 161, 162, 162, 162, 162, 163, 163, 163, 164, 164, 164,
\r
876 165, 165, 165, 165, 166, 166, 166, 167, 167, 167, 168, 168,
\r
877 168, 168, 169, 169, 169, 170, 170, 170, 171, 171, 171, 171,
\r
878 172, 172, 172, 173, 173, 173, 174, 174, 174, 174, 175, 175,
\r
879 175, 176, 176, 176, 177, 177, 177, 178, 178, 178, 178, 179,
\r
880 179, 179, 180, 180, 180, 181, 181, 181, 181, 182, 182, 182,
\r
881 183, 183, 183, 184, 184, 184, 184, 185, 185, 185, 186, 186,
\r
882 186, 187, 187, 187, 187, 188, 188, 188, 189, 189, 189, 190,
\r
883 190, 190, 190, 191, 191, 191, 192, 192, 192, 193, 193, 193,
\r
884 193, 194, 194, 194, 195, 195, 195, 196, 196, 196, 196, 197,
\r
885 197, 197, 198, 198, 198, 199, 199, 199, 199, 200, 200, 200,
\r
886 201, 201, 201, 202, 202, 202, 202, 203, 203, 203, 204, 204,
\r
887 204, 205, 205, 205, 206, 206, 206, 206, 207, 207, 207, 208,
\r
888 208, 208, 209, 209, 209, 209, 210, 210, 210, 211, 211, 211,
\r
889 212, 212, 212, 212, 213, 213, 213, 214, 214, 214, 215, 215,
\r
890 215, 215, 216, 216, 216, 217, 217, 217, 218, 218, 218, 218,
\r
891 219, 219, 219, 220, 220, 220, 221, 221, 221, 221, 222, 222,
\r
892 222, 223, 223, 223, 224, 224, 224, 224, 225, 225, 225, 226,
\r
893 226, 226, 227, 227, 227, 227, 228, 228, 228, 229, 229, 229,
\r
894 230, 230, 230, 230, 231, 231, 231, 232, 232, 232, 233, 233,
\r
895 233, 233, 234, 234, 234, 235, 235, 235, 236, 236, 236, 237,
\r
896 237, 237, 237, 238, 238, 238, 239, 239, 239, 240, 240, 240,
\r
897 240, 241, 241, 241, 242, 242, 242, 243, 243, 243, 243, 244,
\r
898 244, 244, 245, 245, 245, 246, 246, 246, 246, 247, 247, 247,
\r
899 248, 248, 248, 249, 249, 249, 249, 250, 250, 250, 251, 251,
\r
900 251, 252, 252, 252, 252, 253, 253, 253, 254, 254, 254, 255,
\r
901 255, 255, 255, 256, 256, 256, 257, 257, 257, 258, 258, 258,
\r
902 258, 259, 259, 259, 260, 260, 260, 261, 261, 261, 261, 262,
\r
903 262, 262, 263, 263, 263, 264, 264, 264, 265, 265, 265, 265,
\r
904 266, 266, 266, 267, 267, 267, 268, 268, 268, 268, 269, 269,
\r
905 269, 270, 270, 270, 271, 271, 271, 271, 272, 272, 272, 273,
\r
906 273, 273, 274, 274, 274, 274, 275, 275, 275, 276, 276, 276,
\r
907 277, 277, 277, 277, 278, 278, 278, 279, 279, 279, 280, 280,
\r
908 280, 280, 281, 281, 281, 282, 282, 282, 283, 283, 283, 283,
\r
909 284, 284, 284, 285, 285, 285, 286, 286, 286, 286, 287, 287,
\r
910 287, 288, 288, 288, 289, 289, 289, 289, 290, 290, 290, 291,
\r
911 291, 291, 292, 292, 292, 292, 293, 293,
\r
915 #region Double exponent table construction
\r
917 // This code computes the above valus of TensExponentTable &
\r
918 // MantissaBitsTable. This code is helpful when you try to optimize
\r
919 // further the double ToString performance.
\r
920 private const int ExponentMid = 1043;
\r
921 private const int ExponentMax = 2047;
\r
922 private const ulong UpperMapMark = UInt64.MaxValue / 2;
\r
923 private const ulong LowerMapMark = UInt64.MaxValue / 5;
\r
925 // The results of 2 ^ 64 / 5 * i for i in {0 .. 4}
\r
926 private static ulong[] Div5 = new ulong[] {
\r
928 0x3333333333333333,
\r
929 0x6666666666666666,
\r
930 0x9999999999999999,
\r
931 0xCCCCCCCCCCCCCCCC };
\r
933 static NumberFormatter ()
\r
939 private static void InitUpperMap ()
\r
941 ulong val = 1000000000UL << 32;
\r
944 for (int i = ExponentMid; i <= ExponentMax; i++) {
\r
945 MantissaBitsTable [i] = val;
\r
946 TensExponentTable [i] = expVal;
\r
947 if (val < UpperMapMark) {
\r
948 val = (val << 1) + (uint)(loVal >> 63);
\r
949 loVal = (loVal << 1);
\r
952 ulong rem = val % 5;
\r
954 ulong rem2 = rem + (loVal % 5);
\r
955 loVal = loVal / 5 + Div5 [rem];
\r
965 private static void InitLowerMap ()
\r
967 ulong val = 1000000000UL << 32;
\r
970 for (int i = ExponentMid; i >= 0; i--) {
\r
971 MantissaBitsTable [i] = val;
\r
972 TensExponentTable [i] = expVal;
\r
973 if (val < LowerMapMark) {
\r
975 for (uint j = 4; j > 0; j--) {
\r
976 if (loVal > Div5 [j]) {
\r
985 loVal = (((ulong)val & 1) << 63) | (loVal >> 1);
\r
991 #endregion Double exponent table construction
\r