Redesign System/NumberFormatter to improve primitive numeric types ToString performance.
[mono.git] / mcs / class / corlib / System / NumberFormatter.jvm.cs
1 #if !TARGET_JVM\r
2 #define UNSAFE_TABLES\r
3 #define STRUCT\r
4 #endif\r
5 \r
6 namespace System2\r
7 {\r
8 #if !UNSAFE_TABLES\r
9 #if STRUCT\r
10         partial struct NumberFormatter\r
11 #else\r
12         partial class NumberFormatter\r
13 #endif\r
14         {\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
17 \r
18                 private static readonly long[] TenPowersList = new long[] {\r
19                         1,\r
20                         10,\r
21                         100,\r
22                         1000,\r
23                         10000,\r
24                         100000,\r
25                         1000000,\r
26                         10000000,\r
27                         100000000,\r
28                         1000000000,\r
29                         10000000000,\r
30                         100000000000,\r
31                         1000000000000,\r
32                         10000000000000,\r
33                         100000000000000,\r
34                         1000000000000000,\r
35                         10000000000000000,\r
36                         100000000000000000,\r
37                         1000000000000000000                        \r
38                 };\r
39 \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
53 \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
738                 };\r
739 \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
912                 };\r
913 \r
914 #if false\r
915                 #region Double exponent table construction\r
916 \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
924 \r
925                 // The results of 2 ^ 64 / 5 * i for i in {0 .. 4}\r
926                 private static ulong[] Div5 = new ulong[] {\r
927                         0,\r
928                         0x3333333333333333,\r
929                         0x6666666666666666,\r
930                         0x9999999999999999,\r
931                         0xCCCCCCCCCCCCCCCC };\r
932 \r
933                 static NumberFormatter ()\r
934                 {\r
935                         InitUpperMap ();\r
936                         InitLowerMap ();\r
937                 }\r
938 \r
939                 private static void InitUpperMap ()\r
940                 {\r
941                         ulong val = 1000000000UL << 32;\r
942                         int expVal = -9;\r
943                         ulong loVal = 0;\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
950                                 }\r
951                                 else {\r
952                                         ulong rem = val % 5;\r
953                                         val /= 5;\r
954                                         ulong rem2 = rem + (loVal % 5);\r
955                                         loVal = loVal / 5 + Div5 [rem];\r
956                                         if (rem2 >= 5) {\r
957                                                 loVal++;\r
958                                                 rem2 -= 5;\r
959                                         }\r
960                                         expVal++;\r
961                                 }\r
962                         }\r
963                 }\r
964 \r
965                 private static void InitLowerMap ()\r
966                 {\r
967                         ulong val = 1000000000UL << 32;\r
968                         int expVal = -9;\r
969                         ulong loVal = 0;\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
974                                         val *= 5;\r
975                                         for (uint j = 4; j > 0; j--) {\r
976                                                 if (loVal > Div5 [j]) {\r
977                                                         val += j;\r
978                                                         break;\r
979                                                 }\r
980                                         }\r
981                                         loVal *= 5;\r
982                                         expVal--;\r
983                                 }\r
984                                 else {\r
985                                         loVal = (((ulong)val & 1) << 63) | (loVal >> 1);\r
986                                         val = val >> 1;\r
987                                 }\r
988                         }\r
989                 }\r
990 \r
991                 #endregion Double exponent table construction\r
992 #endif\r
993         }\r
994 }\r
995 #endif\r