OpenCores
URL https://opencores.org/ocsvn/openrisc/openrisc/trunk

Subversion Repositories openrisc

[/] [openrisc/] [trunk/] [gnu-dev/] [or1k-gcc/] [libgcc/] [config/] [libbid/] [bid128.c] - Blame information for rev 734

Details | Compare with Previous | View Log

Line No. Rev Author Line
1 734 jeremybenn
/* Copyright (C) 2007, 2009  Free Software Foundation, Inc.
2
 
3
This file is part of GCC.
4
 
5
GCC is free software; you can redistribute it and/or modify it under
6
the terms of the GNU General Public License as published by the Free
7
Software Foundation; either version 3, or (at your option) any later
8
version.
9
 
10
GCC is distributed in the hope that it will be useful, but WITHOUT ANY
11
WARRANTY; without even the implied warranty of MERCHANTABILITY or
12
FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
13
for more details.
14
 
15
Under Section 7 of GPL version 3, you are granted additional
16
permissions described in the GCC Runtime Library Exception, version
17
3.1, as published by the Free Software Foundation.
18
 
19
You should have received a copy of the GNU General Public License and
20
a copy of the GCC Runtime Library Exception along with this program;
21
see the files COPYING3 and COPYING.RUNTIME respectively.  If not, see
22
<http://www.gnu.org/licenses/>.  */
23
 
24
#include "bid_internal.h"
25
 
26
// the first entry of nr_digits[i - 1] (where 1 <= i <= 113), indicates 
27
// the number of decimal digits needed to represent a binary number with i bits;
28
// however, if a binary number of i bits may require either k or k + 1 decimal
29
// digits, then the first entry of nr_digits[i - 1] is 0; in this case if the
30
// number is less than the value represented by the second and third entries
31
// concatenated, then the number of decimal digits k is the fourth entry, else
32
// the number of decimal digits is the fourth entry plus 1
33
DEC_DIGITS nr_digits[] = {      // only the first entry is used if it is not 0
34
  {1, 0x0000000000000000ULL, 0x000000000000000aULL, 1}
35
  ,     //   1-bit n < 10^1
36
  {1, 0x0000000000000000ULL, 0x000000000000000aULL, 1}
37
  ,     //   2-bit n < 10^1
38
  {1, 0x0000000000000000ULL, 0x000000000000000aULL, 1}
39
  ,     //   3-bit n < 10^1
40
  {0, 0x0000000000000000ULL, 0x000000000000000aULL, 1}
41
  ,     //   4-bit n ? 10^1
42
  {2, 0x0000000000000000ULL, 0x0000000000000064ULL, 2}
43
  ,     //   5-bit n < 10^2
44
  {2, 0x0000000000000000ULL, 0x0000000000000064ULL, 2}
45
  ,     //   6-bit n < 10^2
46
  {0, 0x0000000000000000ULL, 0x0000000000000064ULL, 2}
47
  ,     //   7-bit n ? 10^2
48
  {3, 0x0000000000000000ULL, 0x00000000000003e8ULL, 3}
49
  ,     //   8-bit n < 10^3
50
  {3, 0x0000000000000000ULL, 0x00000000000003e8ULL, 3}
51
  ,     //   9-bit n < 10^3
52
  {0, 0x0000000000000000ULL, 0x00000000000003e8ULL, 3}
53
  ,     //  10-bit n ? 10^3
54
  {4, 0x0000000000000000ULL, 0x0000000000002710ULL, 4}
55
  ,     //  11-bit n < 10^4
56
  {4, 0x0000000000000000ULL, 0x0000000000002710ULL, 4}
57
  ,     //  12-bit n < 10^4
58
  {4, 0x0000000000000000ULL, 0x0000000000002710ULL, 4}
59
  ,     //  13-bit n < 10^4
60
  {0, 0x0000000000000000ULL, 0x0000000000002710ULL, 4}
61
  ,     //  14-bit n ? 10^4
62
  {5, 0x0000000000000000ULL, 0x00000000000186a0ULL, 5}
63
  ,     //  15-bit n < 10^5
64
  {5, 0x0000000000000000ULL, 0x00000000000186a0ULL, 5}
65
  ,     //  16-bit n < 10^5
66
  {0, 0x0000000000000000ULL, 0x00000000000186a0ULL, 5}
67
  ,     //  17-bit n ? 10^5
68
  {6, 0x0000000000000000ULL, 0x00000000000f4240ULL, 6}
69
  ,     //  18-bit n < 10^6
70
  {6, 0x0000000000000000ULL, 0x00000000000f4240ULL, 6}
71
  ,     //  19-bit n < 10^6
72
  {0, 0x0000000000000000ULL, 0x00000000000f4240ULL, 6}
73
  ,     //  20-bit n ? 10^6
74
  {7, 0x0000000000000000ULL, 0x0000000000989680ULL, 7}
75
  ,     //  21-bit n < 10^7
76
  {7, 0x0000000000000000ULL, 0x0000000000989680ULL, 7}
77
  ,     //  22-bit n < 10^7
78
  {7, 0x0000000000000000ULL, 0x0000000000989680ULL, 7}
79
  ,     //  23-bit n < 10^7
80
  {0, 0x0000000000000000ULL, 0x0000000000989680ULL, 7}
81
  ,     //  24-bit n ? 10^7
82
  {8, 0x0000000000000000ULL, 0x0000000005f5e100ULL, 8}
83
  ,     //  25-bit n < 10^8
84
  {8, 0x0000000000000000ULL, 0x0000000005f5e100ULL, 8}
85
  ,     //  26-bit n < 10^8
86
  {0, 0x0000000000000000ULL, 0x0000000005f5e100ULL, 8}
87
  ,     //  27-bit n ? 10^8
88
  {9, 0x0000000000000000ULL, 0x000000003b9aca00ULL, 9}
89
  ,     //  28-bit n < 10^9
90
  {9, 0x0000000000000000ULL, 0x000000003b9aca00ULL, 9}
91
  ,     //  29-bit n < 10^9
92
  {0, 0x0000000000000000ULL, 0x000000003b9aca00ULL, 9}
93
  ,     //  30-bit n ? 10^9
94
  {10, 0x0000000000000000ULL, 0x00000002540be400ULL, 10}
95
  ,     //  31-bit n < 10^10
96
  {10, 0x0000000000000000ULL, 0x00000002540be400ULL, 10}
97
  ,     //  32-bit n < 10^10
98
  {10, 0x0000000000000000ULL, 0x00000002540be400ULL, 10}
99
  ,     //  33-bit n < 10^10
100
  {0, 0x0000000000000000ULL, 0x00000002540be400ULL, 10}
101
  ,     //  34-bit n ? 10^10
102
  {11, 0x0000000000000000ULL, 0x000000174876e800ULL, 11}
103
  ,     //  35-bit n < 10^11
104
  {11, 0x0000000000000000ULL, 0x000000174876e800ULL, 11}
105
  ,     //  36-bit n < 10^11
106
  {0, 0x0000000000000000ULL, 0x000000174876e800ULL, 11}
107
  ,     //  37-bit n ? 10^11
108
  {12, 0x0000000000000000ULL, 0x000000e8d4a51000ULL, 12}
109
  ,     //  38-bit n < 10^12
110
  {12, 0x0000000000000000ULL, 0x000000e8d4a51000ULL, 12}
111
  ,     //  39-bit n < 10^12
112
  {0, 0x0000000000000000ULL, 0x000000e8d4a51000ULL, 12}
113
  ,     //  40-bit n ? 10^12
114
  {13, 0x0000000000000000ULL, 0x000009184e72a000ULL, 13}
115
  ,     //  41-bit n < 10^13
116
  {13, 0x0000000000000000ULL, 0x000009184e72a000ULL, 13}
117
  ,     //  42-bit n < 10^13
118
  {13, 0x0000000000000000ULL, 0x000009184e72a000ULL, 13}
119
  ,     //  43-bit n < 10^13
120
  {0, 0x0000000000000000ULL, 0x000009184e72a000ULL, 13}
121
  ,     //  44-bit n ? 10^13
122
  {14, 0x0000000000000000ULL, 0x00005af3107a4000ULL, 14}
123
  ,     //  45-bit n < 10^14
124
  {14, 0x0000000000000000ULL, 0x00005af3107a4000ULL, 14}
125
  ,     //  46-bit n < 10^14
126
  {0, 0x0000000000000000ULL, 0x00005af3107a4000ULL, 14}
127
  ,     //  47-bit n ? 10^14
128
  {15, 0x0000000000000000ULL, 0x00038d7ea4c68000ULL, 15}
129
  ,     //  48-bit n < 10^15
130
  {15, 0x0000000000000000ULL, 0x00038d7ea4c68000ULL, 15}
131
  ,     //  49-bit n < 10^15
132
  {0, 0x0000000000000000ULL, 0x00038d7ea4c68000ULL, 15}
133
  ,     //  50-bit n ? 10^15
134
  {16, 0x0000000000000000ULL, 0x002386f26fc10000ULL, 16}
135
  ,     //  51-bit n < 10^16
136
  {16, 0x0000000000000000ULL, 0x002386f26fc10000ULL, 16}
137
  ,     //  52-bit n < 10^16
138
  {16, 0x0000000000000000ULL, 0x002386f26fc10000ULL, 16}
139
  ,     //  53-bit n < 10^16
140
  {0, 0x0000000000000000ULL, 0x002386f26fc10000ULL, 16}
141
  ,     //  54-bit n ? 10^16
142
  {17, 0x0000000000000000ULL, 0x016345785d8a0000ULL, 17}
143
  ,     //  55-bit n < 10^17
144
  {17, 0x0000000000000000ULL, 0x016345785d8a0000ULL, 17}
145
  ,     //  56-bit n < 10^17
146
  {0, 0x0000000000000000ULL, 0x016345785d8a0000ULL, 17}
147
  ,     //  57-bit n ? 10^17
148
  {18, 0x0000000000000000ULL, 0x0de0b6b3a7640000ULL, 18}
149
  ,     //  58-bit n < 10^18
150
  {18, 0x0000000000000000ULL, 0x0de0b6b3a7640000ULL, 18}
151
  ,     //  59-bit n < 10^18
152
  {0, 0x0000000000000000ULL, 0x0de0b6b3a7640000ULL, 18}
153
  ,     //  60-bit n ? 10^18
154
  {19, 0x0000000000000000ULL, 0x8ac7230489e80000ULL, 19}
155
  ,     //  61-bit n < 10^19
156
  {19, 0x0000000000000000ULL, 0x8ac7230489e80000ULL, 19}
157
  ,     //  62-bit n < 10^19
158
  {19, 0x0000000000000000ULL, 0x8ac7230489e80000ULL, 19}
159
  ,     //  63-bit n < 10^19
160
  {0, 0x0000000000000000ULL, 0x8ac7230489e80000ULL, 19}
161
  ,     //  64-bit n ? 10^19
162
  {20, 0x0000000000000005ULL, 0x6bc75e2d63100000ULL, 20}
163
  ,     //  65-bit n < 10^20
164
  {20, 0x0000000000000005ULL, 0x6bc75e2d63100000ULL, 20}
165
  ,     //  66-bit n < 10^20
166
  {0, 0x0000000000000005ULL, 0x6bc75e2d63100000ULL, 20}
167
  ,     //  67-bit n ? 10^20
168
  {21, 0x0000000000000036ULL, 0x35c9adc5dea00000ULL, 21}
169
  ,     //  68-bit n < 10^21
170
  {21, 0x0000000000000036ULL, 0x35c9adc5dea00000ULL, 21}
171
  ,     //  69-bit n < 10^21
172
  {0, 0x0000000000000036ULL, 0x35c9adc5dea00000ULL, 21}
173
  ,     //  70-bit n ? 10^21
174
  {22, 0x000000000000021eULL, 0x19e0c9bab2400000ULL, 22}
175
  ,     //  71-bit n < 10^22
176
  {22, 0x000000000000021eULL, 0x19e0c9bab2400000ULL, 22}
177
  ,     //  72-bit n < 10^22
178
  {22, 0x000000000000021eULL, 0x19e0c9bab2400000ULL, 22}
179
  ,     //  73-bit n < 10^22
180
  {0, 0x000000000000021eULL, 0x19e0c9bab2400000ULL, 22}
181
  ,     //  74-bit n ? 10^22
182
  {23, 0x000000000000152dULL, 0x02c7e14af6800000ULL, 23}
183
  ,     //  75-bit n < 10^23
184
  {23, 0x000000000000152dULL, 0x02c7e14af6800000ULL, 23}
185
  ,     //  76-bit n < 10^23
186
  {0, 0x000000000000152dULL, 0x02c7e14af6800000ULL, 23}
187
  ,     //  77-bit n ? 10^23
188
  {24, 0x000000000000d3c2ULL, 0x1bcecceda1000000ULL, 24}
189
  ,     //  78-bit n < 10^24
190
  {24, 0x000000000000d3c2ULL, 0x1bcecceda1000000ULL, 24}
191
  ,     //  79-bit n < 10^24
192
  {0, 0x000000000000d3c2ULL, 0x1bcecceda1000000ULL, 24}
193
  ,     //  80-bit n ? 10^24
194
  {25, 0x0000000000084595ULL, 0x161401484a000000ULL, 25}
195
  ,     //  81-bit n < 10^25
196
  {25, 0x0000000000084595ULL, 0x161401484a000000ULL, 25}
197
  ,     //  82-bit n < 10^25
198
  {25, 0x0000000000084595ULL, 0x161401484a000000ULL, 25}
199
  ,     //  83-bit n < 10^25
200
  {0, 0x0000000000084595ULL, 0x161401484a000000ULL, 25}
201
  ,     //  84-bit n ? 10^25
202
  {26, 0x000000000052b7d2ULL, 0xdcc80cd2e4000000ULL, 26}
203
  ,     //  85-bit n < 10^26
204
  {26, 0x000000000052b7d2ULL, 0xdcc80cd2e4000000ULL, 26}
205
  ,     //  86-bit n < 10^26
206
  {0, 0x000000000052b7d2ULL, 0xdcc80cd2e4000000ULL, 26}
207
  ,     //  87-bit n ? 10^26
208
  {27, 0x00000000033b2e3cULL, 0x9fd0803ce8000000ULL, 27}
209
  ,     //  88-bit n < 10^27
210
  {27, 0x00000000033b2e3cULL, 0x9fd0803ce8000000ULL, 27}
211
  ,     //  89-bit n < 10^27
212
  {0, 0x00000000033b2e3cULL, 0x9fd0803ce8000000ULL, 27}
213
  ,     //  90-bit n ? 10^27
214
  {28, 0x00000000204fce5eULL, 0x3e25026110000000ULL, 28}
215
  ,     //  91-bit n < 10^28
216
  {28, 0x00000000204fce5eULL, 0x3e25026110000000ULL, 28}
217
  ,     //  92-bit n < 10^28
218
  {28, 0x00000000204fce5eULL, 0x3e25026110000000ULL, 28}
219
  ,     //  93-bit n < 10^28
220
  {0, 0x00000000204fce5eULL, 0x3e25026110000000ULL, 28}
221
  ,     //  94-bit n ? 10^28
222
  {29, 0x00000001431e0faeULL, 0x6d7217caa0000000ULL, 29}
223
  ,     //  95-bit n < 10^29
224
  {29, 0x00000001431e0faeULL, 0x6d7217caa0000000ULL, 29}
225
  ,     //  96-bit n < 10^29
226
  {0, 0x00000001431e0faeULL, 0x6d7217caa0000000ULL, 29}
227
  ,     //  97-bit n ? 10^29
228
  {30, 0x0000000c9f2c9cd0ULL, 0x4674edea40000000ULL, 30}
229
  ,     //  98-bit n < 10^30
230
  {30, 0x0000000c9f2c9cd0ULL, 0x4674edea40000000ULL, 30}
231
  ,     //  99-bit n < 10^30
232
  {0, 0x0000000c9f2c9cd0ULL, 0x4674edea40000000ULL, 30}
233
  ,     // 100-bit n ? 10^30
234
  {31, 0x0000007e37be2022ULL, 0xc0914b2680000000ULL, 31}
235
  ,     // 101-bit n < 10^31
236
  {31, 0x0000007e37be2022ULL, 0xc0914b2680000000ULL, 31}
237
  ,     // 102-bit n < 10^31
238
  {0, 0x0000007e37be2022ULL, 0xc0914b2680000000ULL, 31}
239
  ,     // 103-bit n ? 10^31
240
  {32, 0x000004ee2d6d415bULL, 0x85acef8100000000ULL, 32}
241
  ,     // 104-bit n < 10^32
242
  {32, 0x000004ee2d6d415bULL, 0x85acef8100000000ULL, 32}
243
  ,     // 105-bit n < 10^32
244
  {32, 0x000004ee2d6d415bULL, 0x85acef8100000000ULL, 32}
245
  ,     // 106-bit n < 10^32
246
  {0, 0x000004ee2d6d415bULL, 0x85acef8100000000ULL, 32}
247
  ,     // 107-bit n ? 10^32
248
  {33, 0x0000314dc6448d93ULL, 0x38c15b0a00000000ULL, 33}
249
  ,     // 108-bit n < 10^33
250
  {33, 0x0000314dc6448d93ULL, 0x38c15b0a00000000ULL, 33}
251
  ,     // 109-bit n < 10^33
252
  {0, 0x0000314dc6448d93ULL, 0x38c15b0a00000000ULL, 33}
253
  ,     // 100-bit n ? 10^33
254
  {34, 0x0001ed09bead87c0ULL, 0x378d8e6400000000ULL, 34}
255
  ,     // 111-bit n < 10^34
256
  {34, 0x0001ed09bead87c0ULL, 0x378d8e6400000000ULL, 34}
257
  ,     // 112-bit n < 10^34
258
  {0, 0x0001ed09bead87c0ULL, 0x378d8e6400000000ULL, 34}  // 113-bit n ? 10^34
259
//{ 35, 0x0013426172c74d82ULL, 0x2b878fe800000000ULL, 35 }  // 114-bit n < 10^35
260
};
261
 
262
// midpoint64[i - 1] = 1/2 * 10^i = 5 * 10^(i-1), 1 <= i <= 19
263
UINT64 midpoint64[] = {
264
  0x0000000000000005ULL,        // 1/2 * 10^1 = 5 * 10^0
265
  0x0000000000000032ULL,        // 1/2 * 10^2 = 5 * 10^1
266
  0x00000000000001f4ULL,        // 1/2 * 10^3 = 5 * 10^2
267
  0x0000000000001388ULL,        // 1/2 * 10^4 = 5 * 10^3
268
  0x000000000000c350ULL,        // 1/2 * 10^5 = 5 * 10^4
269
  0x000000000007a120ULL,        // 1/2 * 10^6 = 5 * 10^5
270
  0x00000000004c4b40ULL,        // 1/2 * 10^7 = 5 * 10^6
271
  0x0000000002faf080ULL,        // 1/2 * 10^8 = 5 * 10^7
272
  0x000000001dcd6500ULL,        // 1/2 * 10^9 = 5 * 10^8
273
  0x000000012a05f200ULL,        // 1/2 * 10^10 = 5 * 10^9
274
  0x0000000ba43b7400ULL,        // 1/2 * 10^11 = 5 * 10^10
275
  0x000000746a528800ULL,        // 1/2 * 10^12 = 5 * 10^11
276
  0x0000048c27395000ULL,        // 1/2 * 10^13 = 5 * 10^12
277
  0x00002d79883d2000ULL,        // 1/2 * 10^14 = 5 * 10^13
278
  0x0001c6bf52634000ULL,        // 1/2 * 10^15 = 5 * 10^14
279
  0x0011c37937e08000ULL,        // 1/2 * 10^16 = 5 * 10^15
280
  0x00b1a2bc2ec50000ULL,        // 1/2 * 10^17 = 5 * 10^16
281
  0x06f05b59d3b20000ULL,        // 1/2 * 10^18 = 5 * 10^17
282
  0x4563918244f40000ULL // 1/2 * 10^19 = 5 * 10^18
283
};
284
 
285
// midpoint128[i - 20] = 1/2 * 10^i = 5 * 10^(i-1), 20 <= i <= 38
286
UINT128 midpoint128[] = {       // the 64-bit word order is L, H
287
  {{0xb5e3af16b1880000ULL, 0x0000000000000002ULL}
288
   }
289
  ,     // 1/2 * 10^20 = 5 * 10^19
290
  {{0x1ae4d6e2ef500000ULL, 0x000000000000001bULL}
291
   }
292
  ,     // 1/2 * 10^21 = 5 * 10^20
293
  {{0x0cf064dd59200000ULL, 0x000000000000010fULL}
294
   }
295
  ,     // 1/2 * 10^22 = 5 * 10^21
296
  {{0x8163f0a57b400000ULL, 0x0000000000000a96ULL}
297
   }
298
  ,     // 1/2 * 10^23 = 5 * 10^22
299
  {{0x0de76676d0800000ULL, 0x00000000000069e1ULL}
300
   }
301
  ,     // 1/2 * 10^24 = 5 * 10^23
302
  {{0x8b0a00a425000000ULL, 0x00000000000422caULL}
303
   }
304
  ,     // 1/2 * 10^25 = 5 * 10^24
305
  {{0x6e64066972000000ULL, 0x0000000000295be9ULL}
306
   }
307
  ,     // 1/2 * 10^26 = 5 * 10^25
308
  {{0x4fe8401e74000000ULL, 0x00000000019d971eULL}
309
   }
310
  ,     // 1/2 * 10^27 = 5 * 10^26
311
  {{0x1f12813088000000ULL, 0x000000001027e72fULL}
312
   }
313
  ,     // 1/2 * 10^28 = 5 * 10^27
314
  {{0x36b90be550000000ULL, 0x00000000a18f07d7ULL}
315
   }
316
  ,     // 1/2 * 10^29 = 5 * 10^28
317
  {{0x233a76f520000000ULL, 0x000000064f964e68ULL}
318
   }
319
  ,     // 1/2 * 10^30 = 5 * 10^29
320
  {{0x6048a59340000000ULL, 0x0000003f1bdf1011ULL}
321
   }
322
  ,     // 1/2 * 10^31 = 5 * 10^30
323
  {{0xc2d677c080000000ULL, 0x0000027716b6a0adULL}
324
   }
325
  ,     // 1/2 * 10^32 = 5 * 10^31
326
  {{0x9c60ad8500000000ULL, 0x000018a6e32246c9ULL}
327
   }
328
  ,     // 1/2 * 10^33 = 5 * 10^32
329
  {{0x1bc6c73200000000ULL, 0x0000f684df56c3e0ULL}
330
   }
331
  ,     // 1/2 * 10^34 = 5 * 10^33
332
  {{0x15c3c7f400000000ULL, 0x0009a130b963a6c1ULL}
333
   }
334
  ,     // 1/2 * 10^35 = 5 * 10^34
335
  {{0xd9a5cf8800000000ULL, 0x00604be73de4838aULL}
336
   }
337
  ,     // 1/2 * 10^36 = 5 * 10^35
338
  {{0x807a1b5000000000ULL, 0x03c2f7086aed236cULL}
339
   }
340
  ,     // 1/2 * 10^37 = 5 * 10^36
341
  {{0x04c5112000000000ULL, 0x259da6542d43623dULL}
342
   }    // 1/2 * 10^38 = 5 * 10^37
343
};
344
 
345
// midpoint192[i - 39] = 1/2 * 10^i = 5 * 10^(i-1), 39 <= i <= 58
346
UINT192 midpoint192[] = {       // the 64-bit word order is L, M, H
347
  {{0x2fb2ab4000000000ULL, 0x78287f49c4a1d662ULL, 0x0000000000000001ULL}
348
   }
349
  ,
350
  // 1/2 * 10^39 = 5 * 10^38
351
  {{0xdcfab08000000000ULL, 0xb194f8e1ae525fd5ULL, 0x000000000000000eULL}
352
   }
353
  ,
354
  // 1/2 * 10^40 = 5 * 10^39
355
  {{0xa1cae50000000000ULL, 0xefd1b8d0cf37be5aULL, 0x0000000000000092ULL}
356
   }
357
  ,
358
  // 1/2 * 10^41 = 5 * 10^40
359
  {{0x51ecf20000000000ULL, 0x5e313828182d6f8aULL, 0x00000000000005bdULL}
360
   }
361
  ,
362
  // 1/2 * 10^42 = 5 * 10^41
363
  {{0x3341740000000000ULL, 0xadec3190f1c65b67ULL, 0x0000000000003965ULL}
364
   }
365
  ,
366
  // 1/2 * 10^43 = 5 * 10^42
367
  {{0x008e880000000000ULL, 0xcb39efa971bf9208ULL, 0x0000000000023df8ULL}
368
   }
369
  ,
370
  // 1/2 * 10^44 = 5 * 10^43
371
  {{0x0591500000000000ULL, 0xf0435c9e717bb450ULL, 0x0000000000166bb7ULL}
372
   }
373
  ,
374
  // 1/2 * 10^45 = 5 * 10^44
375
  {{0x37ad200000000000ULL, 0x62a19e306ed50b20ULL, 0x0000000000e0352fULL}
376
   }
377
  ,
378
  // 1/2 * 10^46 = 5 * 10^45
379
  {{0x2cc3400000000000ULL, 0xda502de454526f42ULL, 0x0000000008c213d9ULL}
380
   }
381
  ,
382
  // 1/2 * 10^47 = 5 * 10^46
383
  {{0xbfa0800000000000ULL, 0x8721caeb4b385895ULL, 0x000000005794c682ULL}
384
   }
385
  ,
386
  // 1/2 * 10^48 = 5 * 10^47
387
  {{0x7c45000000000000ULL, 0x4751ed30f03375d9ULL, 0x000000036bcfc119ULL}
388
   }
389
  ,
390
  // 1/2 * 10^49 = 5 * 10^48
391
  {{0xdab2000000000000ULL, 0xc93343e962029a7eULL, 0x00000022361d8afcULL}
392
   }
393
  ,
394
  // 1/2 * 10^50 = 5 * 10^49
395
  {{0x8af4000000000000ULL, 0xdc00a71dd41a08f4ULL, 0x000001561d276ddfULL}
396
   }
397
  ,
398
  // 1/2 * 10^51 = 5 * 10^50
399
  {{0x6d88000000000000ULL, 0x9806872a4904598dULL, 0x00000d5d238a4abeULL}
400
   }
401
  ,
402
  // 1/2 * 10^52 = 5 * 10^51
403
  {{0x4750000000000000ULL, 0xf04147a6da2b7f86ULL, 0x000085a36366eb71ULL}
404
   }
405
  ,
406
  // 1/2 * 10^53 = 5 * 10^52
407
  {{0xc920000000000000ULL, 0x628ccc8485b2fb3eULL, 0x00053861e2053273ULL}
408
   }
409
  ,
410
  // 1/2 * 10^54 = 5 * 10^53
411
  {{0xdb40000000000000ULL, 0xd97ffd2d38fdd073ULL, 0x003433d2d433f881ULL}
412
   }
413
  ,
414
  // 1/2 * 10^55 = 5 * 10^54
415
  {{0x9080000000000000ULL, 0x7effe3c439ea2486ULL, 0x020a063c4a07b512ULL}
416
   }
417
  ,
418
  // 1/2 * 10^56 = 5 * 10^55
419
  {{0xa500000000000000ULL, 0xf5fee5aa43256d41ULL, 0x14643e5ae44d12b8ULL}
420
   }
421
  ,
422
  // 1/2 * 10^57 = 5 * 10^56
423
  {{0x7200000000000000ULL, 0x9bf4f8a69f764490ULL, 0xcbea6f8ceb02bb39ULL}
424
   }
425
  // 1/2 * 10^58 = 5 * 10^57
426
};
427
 
428
// midpoint256[i - 59] = 1/2 * 10^i = 5 * 10^(i-1), 59 <= i <= 68
429
UINT256 midpoint256[] = {       // the 64-bit word order is LL, LH, HL, HH
430
  {{0x7400000000000000ULL, 0x1791b6823a9eada4ULL,
431
    0xf7285b812e1b5040ULL, 0x0000000000000007ULL}
432
   }
433
  ,     // 1/2 * 10^59 = 5 * 10^58
434
  {{0x8800000000000000ULL, 0xebb121164a32c86cULL,
435
    0xa793930bcd112280ULL, 0x000000000000004fULL}
436
   }
437
  ,     // 1/2 * 10^60 = 5 * 10^59
438
  {{0x5000000000000000ULL, 0x34eb4adee5fbd43dULL,
439
    0x8bc3be7602ab5909ULL, 0x000000000000031cULL}
440
   }
441
  ,     // 1/2 * 10^61 = 5 * 10^60
442
  {{0x2000000000000000ULL, 0x1130ecb4fbd64a65ULL,
443
    0x75a5709c1ab17a5cULL, 0x0000000000001f1dULL}
444
   }
445
  ,     // 1/2 * 10^62 = 5 * 10^61
446
  {{0x4000000000000000ULL, 0xabe93f11d65ee7f3ULL,
447
    0x987666190aeec798ULL, 0x0000000000013726ULL}
448
   }
449
  ,     // 1/2 * 10^63 = 5 * 10^62
450
  {{0x8000000000000000ULL, 0xb71c76b25fb50f80ULL,
451
    0xf49ffcfa6d53cbf6ULL, 0x00000000000c2781ULL}
452
   }
453
  ,     // 1/2 * 10^64 = 5 * 10^63
454
  {{0x0000000000000000ULL, 0x271ca2f7bd129b05ULL,
455
    0x8e3fe1c84545f7a3ULL, 0x0000000000798b13ULL}
456
   }
457
  ,     // 1/2 * 10^65 = 5 * 10^64
458
  {{0x0000000000000000ULL, 0x871e5dad62ba0e32ULL,
459
    0x8e7ed1d2b4bbac5fULL, 0x0000000004bf6ec3ULL}
460
   }
461
  ,     // 1/2 * 10^66 = 5 * 10^65
462
  {{0x0000000000000000ULL, 0x472fa8c5db448df4ULL,
463
    0x90f4323b0f54bbbbULL, 0x000000002f7a53a3ULL}
464
   }
465
  ,     // 1/2 * 10^67 = 5 * 10^66
466
  {{0x0000000000000000ULL, 0xc7dc97ba90ad8b88ULL,
467
    0xa989f64e994f5550ULL, 0x00000001dac74463ULL}
468
   }
469
  ,     // 1/2 * 10^68 = 5 * 10^67
470
  {{0x0000000000000000ULL, 0xce9ded49a6c77350ULL,
471
    0x9f639f11fd195527ULL, 0x000000128bc8abe4ULL}
472
   }
473
  ,     // 1/2 * 10^69 = 5 * 10^68
474
  {{0x0000000000000000ULL, 0x122b44e083ca8120ULL,
475
    0x39e436b3e2fd538eULL, 0x000000b975d6b6eeULL}
476
   }
477
  ,     // 1/2 * 10^70 = 5 * 10^69
478
  {{0x0000000000000000ULL, 0xb5b0b0c525e90b40ULL,
479
    0x42ea2306dde5438cULL, 0x0000073e9a63254eULL}
480
   }
481
  ,     // 1/2 * 10^71 = 5 * 10^70
482
  {{0x0000000000000000ULL, 0x18e6e7b37b1a7080ULL,
483
    0x9d255e44aaf4a37fULL, 0x0000487207df750eULL}
484
   }
485
  ,     // 1/2 * 10^72 = 5 * 10^71
486
  {{0x0000000000000000ULL, 0xf9050d02cf086500ULL,
487
    0x2375aeaead8e62f6ULL, 0x0002d4744eba9292ULL}
488
   }
489
  ,     // 1/2 * 10^73 = 5 * 10^72
490
  {{0x0000000000000000ULL, 0xba32821c1653f200ULL,
491
    0x6298d2d2c78fdda5ULL, 0x001c4c8b1349b9b5ULL}
492
   }
493
  ,     // 1/2 * 10^74 = 5 * 10^73
494
  {{0x0000000000000000ULL, 0x45f91518df477400ULL,
495
    0xd9f83c3bcb9ea879ULL, 0x011afd6ec0e14115ULL}
496
   }
497
  ,     // 1/2 * 10^75 = 5 * 10^74
498
  {{0x0000000000000000ULL, 0xbbbad2f8b8ca8800ULL,
499
    0x83b25a55f43294bcULL, 0x0b0de65388cc8adaULL}
500
   }
501
  ,     // 1/2 * 10^76 = 5 * 10^75
502
  {{0x0000000000000000ULL, 0x554c3db737e95000ULL,
503
    0x24f7875b89f9cf5fULL, 0x6e8aff4357fd6c89ULL}
504
   }    // 1/2 * 10^77 = 5 * 10^76
505
};
506
 
507
// ten2k64[i] = 10^i, 0 <= i <= 19
508
UINT64 ten2k64[] = {
509
  0x0000000000000001ULL,        // 10^0
510
  0x000000000000000aULL,        // 10^1
511
  0x0000000000000064ULL,        // 10^2
512
  0x00000000000003e8ULL,        // 10^3
513
  0x0000000000002710ULL,        // 10^4
514
  0x00000000000186a0ULL,        // 10^5
515
  0x00000000000f4240ULL,        // 10^6
516
  0x0000000000989680ULL,        // 10^7
517
  0x0000000005f5e100ULL,        // 10^8
518
  0x000000003b9aca00ULL,        // 10^9
519
  0x00000002540be400ULL,        // 10^10
520
  0x000000174876e800ULL,        // 10^11
521
  0x000000e8d4a51000ULL,        // 10^12
522
  0x000009184e72a000ULL,        // 10^13
523
  0x00005af3107a4000ULL,        // 10^14
524
  0x00038d7ea4c68000ULL,        // 10^15
525
  0x002386f26fc10000ULL,        // 10^16
526
  0x016345785d8a0000ULL,        // 10^17
527
  0x0de0b6b3a7640000ULL,        // 10^18
528
  0x8ac7230489e80000ULL // 10^19 (20 digits)
529
};
530
 
531
 
532
// ten2k128[i - 20] = 10^i, 20 <= i <= 38
533
UINT128 ten2k128[] = {  // the 64-bit word order is L, H
534
  {{0x6bc75e2d63100000ULL, 0x0000000000000005ULL}
535
   }
536
  ,     // 10^20
537
  {{0x35c9adc5dea00000ULL, 0x0000000000000036ULL}
538
   }
539
  ,     // 10^21
540
  {{0x19e0c9bab2400000ULL, 0x000000000000021eULL}
541
   }
542
  ,     // 10^22
543
  {{0x02c7e14af6800000ULL, 0x000000000000152dULL}
544
   }
545
  ,     // 10^23
546
  {{0x1bcecceda1000000ULL, 0x000000000000d3c2ULL}
547
   }
548
  ,     // 10^24
549
  {{0x161401484a000000ULL, 0x0000000000084595ULL}
550
   }
551
  ,     // 10^25
552
  {{0xdcc80cd2e4000000ULL, 0x000000000052b7d2ULL}
553
   }
554
  ,     // 10^26
555
  {{0x9fd0803ce8000000ULL, 0x00000000033b2e3cULL}
556
   }
557
  ,     // 10^27
558
  {{0x3e25026110000000ULL, 0x00000000204fce5eULL}
559
   }
560
  ,     // 10^28
561
  {{0x6d7217caa0000000ULL, 0x00000001431e0faeULL}
562
   }
563
  ,     // 10^29
564
  {{0x4674edea40000000ULL, 0x0000000c9f2c9cd0ULL}
565
   }
566
  ,     // 10^30
567
  {{0xc0914b2680000000ULL, 0x0000007e37be2022ULL}
568
   }
569
  ,     // 10^31
570
  {{0x85acef8100000000ULL, 0x000004ee2d6d415bULL}
571
   }
572
  ,     // 10^32
573
  {{0x38c15b0a00000000ULL, 0x0000314dc6448d93ULL}
574
   }
575
  ,     // 10^33
576
  {{0x378d8e6400000000ULL, 0x0001ed09bead87c0ULL}
577
   }
578
  ,     // 10^34
579
  {{0x2b878fe800000000ULL, 0x0013426172c74d82ULL}
580
   }
581
  ,     // 10^35
582
  {{0xb34b9f1000000000ULL, 0x00c097ce7bc90715ULL}
583
   }
584
  ,     // 10^36
585
  {{0x00f436a000000000ULL, 0x0785ee10d5da46d9ULL}
586
   }
587
  ,     // 10^37
588
  {{0x098a224000000000ULL, 0x4b3b4ca85a86c47aULL}
589
   }    // 10^38 (39 digits)
590
};
591
 
592
// might split into ten2k192[] and ten2k256[]
593
 
594
// ten2k256[i - 39] = 10^i, 39 <= i <= 68
595
UINT256 ten2k256[] = {  // the 64-bit word order is LL, LH, HL, HH
596
  {{0x5f65568000000000ULL, 0xf050fe938943acc4ULL,
597
    0x0000000000000002ULL, 0x0000000000000000ULL}
598
   }
599
  ,     // 10^39
600
  {{0xb9f5610000000000ULL, 0x6329f1c35ca4bfabULL,
601
    0x000000000000001dULL, 0x0000000000000000ULL}
602
   }
603
  ,     // 10^40
604
  {{0x4395ca0000000000ULL, 0xdfa371a19e6f7cb5ULL,
605
    0x0000000000000125ULL, 0x0000000000000000ULL}
606
   }
607
  ,     // 10^41
608
  {{0xa3d9e40000000000ULL, 0xbc627050305adf14ULL,
609
    0x0000000000000b7aULL, 0x0000000000000000ULL}
610
   }
611
  ,     // 10^42
612
  {{0x6682e80000000000ULL, 0x5bd86321e38cb6ceULL,
613
    0x00000000000072cbULL, 0x0000000000000000ULL}
614
   }
615
  ,     // 10^43
616
  {{0x011d100000000000ULL, 0x9673df52e37f2410ULL,
617
    0x0000000000047bf1ULL, 0x0000000000000000ULL}
618
   }
619
  ,     // 10^44
620
  {{0x0b22a00000000000ULL, 0xe086b93ce2f768a0ULL,
621
    0x00000000002cd76fULL, 0x0000000000000000ULL}
622
   }
623
  ,     // 10^45
624
  {{0x6f5a400000000000ULL, 0xc5433c60ddaa1640ULL,
625
    0x0000000001c06a5eULL, 0x0000000000000000ULL}
626
   }
627
  ,     // 10^46
628
  {{0x5986800000000000ULL, 0xb4a05bc8a8a4de84ULL,
629
    0x00000000118427b3ULL, 0x0000000000000000ULL}
630
   }
631
  ,     // 10^47
632
  {{0x7f41000000000000ULL, 0x0e4395d69670b12bULL,
633
    0x00000000af298d05ULL, 0x0000000000000000ULL}
634
   }
635
  ,     // 10^48
636
  {{0xf88a000000000000ULL, 0x8ea3da61e066ebb2ULL,
637
    0x00000006d79f8232ULL, 0x0000000000000000ULL}
638
   }
639
  ,     // 10^49
640
  {{0xb564000000000000ULL, 0x926687d2c40534fdULL,
641
    0x000000446c3b15f9ULL, 0x0000000000000000ULL}
642
   }
643
  ,     // 10^50
644
  {{0x15e8000000000000ULL, 0xb8014e3ba83411e9ULL,
645
    0x000002ac3a4edbbfULL, 0x0000000000000000ULL}
646
   }
647
  ,     // 10^51
648
  {{0xdb10000000000000ULL, 0x300d0e549208b31aULL,
649
    0x00001aba4714957dULL, 0x0000000000000000ULL}
650
   }
651
  ,     // 10^52
652
  {{0x8ea0000000000000ULL, 0xe0828f4db456ff0cULL,
653
    0x00010b46c6cdd6e3ULL, 0x0000000000000000ULL}
654
   }
655
  ,     // 10^53
656
  {{0x9240000000000000ULL, 0xc51999090b65f67dULL,
657
    0x000a70c3c40a64e6ULL, 0x0000000000000000ULL}
658
   }
659
  ,     // 10^54
660
  {{0xb680000000000000ULL, 0xb2fffa5a71fba0e7ULL,
661
    0x006867a5a867f103ULL, 0x0000000000000000ULL}
662
   }
663
  ,     // 10^55
664
  {{0x2100000000000000ULL, 0xfdffc78873d4490dULL,
665
    0x04140c78940f6a24ULL, 0x0000000000000000ULL}
666
   }
667
  ,     // 10^56
668
  {{0x4a00000000000000ULL, 0xebfdcb54864ada83ULL,
669
    0x28c87cb5c89a2571ULL, 0x0000000000000000ULL}
670
   }
671
  ,     // 10^57 (58 digits)
672
  {{0xe400000000000000ULL, 0x37e9f14d3eec8920ULL,
673
    0x97d4df19d6057673ULL, 0x0000000000000001ULL}
674
   }
675
  ,     // 10^58
676
  {{0xe800000000000000ULL, 0x2f236d04753d5b48ULL,
677
    0xee50b7025c36a080ULL, 0x000000000000000fULL}
678
   }
679
  ,     // 10^59
680
  {{0x1000000000000000ULL, 0xd762422c946590d9ULL,
681
    0x4f2726179a224501ULL, 0x000000000000009fULL}
682
   }
683
  ,     // 10^60
684
  {{0xa000000000000000ULL, 0x69d695bdcbf7a87aULL,
685
    0x17877cec0556b212ULL, 0x0000000000000639ULL}
686
   }
687
  ,     // 10^61
688
  {{0x4000000000000000ULL, 0x2261d969f7ac94caULL,
689
    0xeb4ae1383562f4b8ULL, 0x0000000000003e3aULL}
690
   }
691
  ,     // 10^62
692
  {{0x8000000000000000ULL, 0x57d27e23acbdcfe6ULL,
693
    0x30eccc3215dd8f31ULL, 0x0000000000026e4dULL}
694
   }
695
  ,     // 10^63
696
  {{0x0000000000000000ULL, 0x6e38ed64bf6a1f01ULL,
697
    0xe93ff9f4daa797edULL, 0x0000000000184f03ULL}
698
   }
699
  ,     // 10^64
700
  {{0x0000000000000000ULL, 0x4e3945ef7a25360aULL,
701
    0x1c7fc3908a8bef46ULL, 0x0000000000f31627ULL}
702
   }
703
  ,     // 10^65
704
  {{0x0000000000000000ULL, 0x0e3cbb5ac5741c64ULL,
705
    0x1cfda3a5697758bfULL, 0x00000000097edd87ULL}
706
   }
707
  ,     // 10^66
708
  {{0x0000000000000000ULL, 0x8e5f518bb6891be8ULL,
709
    0x21e864761ea97776ULL, 0x000000005ef4a747ULL}
710
   }
711
  ,     // 10^67
712
  {{0x0000000000000000ULL, 0x8fb92f75215b1710ULL,
713
    0x5313ec9d329eaaa1ULL, 0x00000003b58e88c7ULL}
714
   }
715
  ,     // 10^68
716
  {{0x0000000000000000ULL, 0x9d3bda934d8ee6a0ULL,
717
    0x3ec73e23fa32aa4fULL, 0x00000025179157c9ULL}
718
   }
719
  ,     // 10^69
720
  {{0x0000000000000000ULL, 0x245689c107950240ULL,
721
    0x73c86d67c5faa71cULL, 0x00000172ebad6ddcULL}
722
   }
723
  ,     // 10^70
724
  {{0x0000000000000000ULL, 0x6b61618a4bd21680ULL,
725
    0x85d4460dbbca8719ULL, 0x00000e7d34c64a9cULL}
726
   }
727
  ,     // 10^71
728
  {{0x0000000000000000ULL, 0x31cdcf66f634e100ULL,
729
    0x3a4abc8955e946feULL, 0x000090e40fbeea1dULL}
730
   }
731
  ,     // 10^72
732
  {{0x0000000000000000ULL, 0xf20a1a059e10ca00ULL,
733
    0x46eb5d5d5b1cc5edULL, 0x0005a8e89d752524ULL}
734
   }
735
  ,     // 10^73
736
  {{0x0000000000000000ULL, 0x746504382ca7e400ULL,
737
    0xc531a5a58f1fbb4bULL, 0x003899162693736aULL}
738
   }
739
  ,     // 10^74
740
  {{0x0000000000000000ULL, 0x8bf22a31be8ee800ULL,
741
    0xb3f07877973d50f2ULL, 0x0235fadd81c2822bULL}
742
   }
743
  ,     // 10^75
744
  {{0x0000000000000000ULL, 0x7775a5f171951000ULL,
745
    0x0764b4abe8652979ULL, 0x161bcca7119915b5ULL}
746
   }
747
  ,     // 10^76
748
  {{0x0000000000000000ULL, 0xaa987b6e6fd2a000ULL,
749
    0x49ef0eb713f39ebeULL, 0xdd15fe86affad912ULL}
750
   }    // 10^77
751
};
752
 
753
// ten2mk128[k - 1] = 10^(-k) * 2^exp (k), where 1 <= k <= 34 and
754
// exp (k) = shiftright128[k - 1] + 128
755
UINT128 ten2mk128[] = {
756
  {{0x999999999999999aULL, 0x1999999999999999ULL}
757
   }
758
  ,     //  10^(-1) * 2^128
759
  {{0x28f5c28f5c28f5c3ULL, 0x028f5c28f5c28f5cULL}
760
   }
761
  ,     //  10^(-2) * 2^128
762
  {{0x9db22d0e56041894ULL, 0x004189374bc6a7efULL}
763
   }
764
  ,     //  10^(-3) * 2^128
765
  {{0x4af4f0d844d013aaULL, 0x00346dc5d6388659ULL}
766
   }
767
  ,     //  10^(-4) * 2^131
768
  {{0x08c3f3e0370cdc88ULL, 0x0029f16b11c6d1e1ULL}
769
   }
770
  ,     //  10^(-5) * 2^134
771
  {{0x6d698fe69270b06dULL, 0x00218def416bdb1aULL}
772
   }
773
  ,     //  10^(-6) * 2^137
774
  {{0xaf0f4ca41d811a47ULL, 0x0035afe535795e90ULL}
775
   }
776
  ,     //  10^(-7) * 2^141
777
  {{0xbf3f70834acdaea0ULL, 0x002af31dc4611873ULL}
778
   }
779
  ,     //  10^(-8) * 2^144
780
  {{0x65cc5a02a23e254dULL, 0x00225c17d04dad29ULL}
781
   }
782
  ,     //  10^(-9) * 2^147
783
  {{0x6fad5cd10396a214ULL, 0x0036f9bfb3af7b75ULL}
784
   }
785
  ,     // 10^(-10) * 2^151
786
  {{0xbfbde3da69454e76ULL, 0x002bfaffc2f2c92aULL}
787
   }
788
  ,     // 10^(-11) * 2^154
789
  {{0x32fe4fe1edd10b92ULL, 0x00232f33025bd422ULL}
790
   }
791
  ,     // 10^(-12) * 2^157
792
  {{0x84ca19697c81ac1cULL, 0x00384b84d092ed03ULL}
793
   }
794
  ,     // 10^(-13) * 2^161
795
  {{0x03d4e1213067bce4ULL, 0x002d09370d425736ULL}
796
   }
797
  ,     // 10^(-14) * 2^164
798
  {{0x3643e74dc052fd83ULL, 0x0024075f3dceac2bULL}
799
   }
800
  ,     // 10^(-15) * 2^167
801
  {{0x56d30baf9a1e626bULL, 0x0039a5652fb11378ULL}
802
   }
803
  ,     // 10^(-16) * 2^171
804
  {{0x12426fbfae7eb522ULL, 0x002e1dea8c8da92dULL}
805
   }
806
  ,     // 10^(-17) * 2^174
807
  {{0x41cebfcc8b9890e8ULL, 0x0024e4bba3a48757ULL}
808
   }
809
  ,     // 10^(-18) * 2^177
810
  {{0x694acc7a78f41b0dULL, 0x003b07929f6da558ULL}
811
   }
812
  ,     // 10^(-19) * 2^181
813
  {{0xbaa23d2ec729af3eULL, 0x002f394219248446ULL}
814
   }
815
  ,     // 10^(-20) * 2^184
816
  {{0xfbb4fdbf05baf298ULL, 0x0025c768141d369eULL}
817
   }
818
  ,     // 10^(-21) * 2^187
819
  {{0x2c54c931a2c4b759ULL, 0x003c7240202ebdcbULL}
820
   }
821
  ,     // 10^(-22) * 2^191
822
  {{0x89dd6dc14f03c5e1ULL, 0x00305b66802564a2ULL}
823
   }
824
  ,     // 10^(-23) * 2^194
825
  {{0xd4b1249aa59c9e4eULL, 0x0026af8533511d4eULL}
826
   }
827
  ,     // 10^(-24) * 2^197
828
  {{0x544ea0f76f60fd49ULL, 0x003de5a1ebb4fbb1ULL}
829
   }
830
  ,     // 10^(-25) * 2^201
831
  {{0x76a54d92bf80caa1ULL, 0x00318481895d9627ULL}
832
   }
833
  ,     // 10^(-26) * 2^204
834
  {{0x921dd7a89933d54eULL, 0x00279d346de4781fULL}
835
   }
836
  ,     // 10^(-27) * 2^207
837
  {{0x8362f2a75b862215ULL, 0x003f61ed7ca0c032ULL}
838
   }
839
  ,     // 10^(-28) * 2^211
840
  {{0xcf825bb91604e811ULL, 0x0032b4bdfd4d668eULL}
841
   }
842
  ,     // 10^(-29) * 2^214
843
  {{0x0c684960de6a5341ULL, 0x00289097fdd7853fULL}
844
   }
845
  ,     // 10^(-30) * 2^217
846
  {{0x3d203ab3e521dc34ULL, 0x002073accb12d0ffULL}
847
   }
848
  ,     // 10^(-31) * 2^220
849
  {{0x2e99f7863b696053ULL, 0x0033ec47ab514e65ULL}
850
   }
851
  ,     // 10^(-32) * 2^224
852
  {{0x587b2c6b62bab376ULL, 0x002989d2ef743eb7ULL}
853
   }
854
  ,     // 10^(-33) * 2^227
855
  {{0xad2f56bc4efbc2c5ULL, 0x00213b0f25f69892ULL}
856
   }
857
  ,     // 10^(-34) * 2^230
858
};
859
 
860
 
861
// shiftright128[] contains the right shift count to obtain C2* from the top
862
// 128 bits of the 128x128-bit product C2 * Kx
863
int shiftright128[] = {
864
  0,     // 128 - 128
865
  0,     // 128 - 128
866
  0,     // 128 - 128
867
 
868
  3,    // 131 - 128
869
  6,    // 134 - 128
870
  9,    // 137 - 128
871
  13,   // 141 - 128
872
  16,   // 144 - 128
873
  19,   // 147 - 128
874
  23,   // 151 - 128
875
  26,   // 154 - 128
876
  29,   // 157 - 128
877
  33,   // 161 - 128
878
  36,   // 164 - 128
879
  39,   // 167 - 128
880
  43,   // 171 - 128
881
  46,   // 174 - 128
882
  49,   // 177 - 128
883
  53,   // 181 - 128
884
  56,   // 184 - 128
885
  59,   // 187 - 128
886
  63,   // 191 - 128
887
 
888
  66,   // 194 - 128
889
  69,   // 197 - 128
890
  73,   // 201 - 128
891
  76,   // 204 - 128
892
  79,   // 207 - 128
893
  83,   // 211 - 128
894
  86,   // 214 - 128
895
  89,   // 217 - 128
896
  92,   // 220 - 128
897
  96,   // 224 - 128
898
  99,   // 227 - 128
899
  102   // 230 - 128
900
};
901
 
902
 
903
// maskhigh128[] contains the mask to apply to the top 128 bits of the 
904
// 128x128-bit product in order to obtain the high bits of f2*
905
// the 64-bit word order is L, H
906
UINT64 maskhigh128[] = {
907
  0x0000000000000000ULL,        //  0 = 128 - 128 bits
908
  0x0000000000000000ULL,        //  0 = 128 - 128 bits
909
  0x0000000000000000ULL,        //  0 = 128 - 128 bits
910
  0x0000000000000007ULL,        //  3 = 131 - 128 bits
911
  0x000000000000003fULL,        //  6 = 134 - 128 bits
912
  0x00000000000001ffULL,        //  9 = 137 - 128 bits
913
  0x0000000000001fffULL,        // 13 = 141 - 128 bits
914
  0x000000000000ffffULL,        // 16 = 144 - 128 bits
915
  0x000000000007ffffULL,        // 19 = 147 - 128 bits
916
  0x00000000007fffffULL,        // 23 = 151 - 128 bits
917
  0x0000000003ffffffULL,        // 26 = 154 - 128 bits
918
  0x000000001fffffffULL,        // 29 = 157 - 128 bits
919
  0x00000001ffffffffULL,        // 33 = 161 - 128 bits
920
  0x0000000fffffffffULL,        // 36 = 164 - 128 bits
921
  0x0000007fffffffffULL,        // 39 = 167 - 128 bits
922
  0x000007ffffffffffULL,        // 43 = 171 - 128 bits
923
  0x00003fffffffffffULL,        // 46 = 174 - 128 bits
924
  0x0001ffffffffffffULL,        // 49 = 177 - 128 bits
925
  0x001fffffffffffffULL,        // 53 = 181 - 128 bits
926
  0x00ffffffffffffffULL,        // 56 = 184 - 128 bits
927
  0x07ffffffffffffffULL,        // 59 = 187 - 128 bits
928
  0x7fffffffffffffffULL,        // 63 = 191 - 128 bits
929
  0x0000000000000003ULL,        //  2 = 194 - 192 bits
930
  0x000000000000001fULL,        //  5 = 197 - 192 bits
931
  0x00000000000001ffULL,        //  9 = 201 - 192 bits
932
  0x0000000000000fffULL,        // 12 = 204 - 192 bits
933
  0x0000000000007fffULL,        // 15 = 207 - 192 bits
934
  0x000000000007ffffULL,        // 21 = 211 - 192 bits
935
  0x00000000003fffffULL,        // 22 = 214 - 192 bits
936
  0x0000000001ffffffULL,        // 25 = 217 - 192 bits
937
  0x000000000fffffffULL,        // 28 = 220 - 192 bits
938
  0x00000000ffffffffULL,        // 32 = 224 - 192 bits
939
  0x00000007ffffffffULL,        // 35 = 227 - 192 bits
940
  0x0000003fffffffffULL // 38 = 230 - 192 bits
941
};
942
 
943
 
944
// onehalf128[] contains the high bits of 1/2 positioned correctly for 
945
// comparison with the high bits of f2*
946
// the 64-bit word order is L, H
947
UINT64 onehalf128[] = {
948
  0x0000000000000000ULL,        //  0 bits
949
  0x0000000000000000ULL,        //  0 bits
950
  0x0000000000000000ULL,        //  0 bits
951
  0x0000000000000004ULL,        //  3 bits
952
  0x0000000000000020ULL,        //  6 bits
953
  0x0000000000000100ULL,        //  9 bits
954
  0x0000000000001000ULL,        // 13 bits
955
  0x0000000000008000ULL,        // 16 bits
956
  0x0000000000040000ULL,        // 19 bits
957
  0x0000000000400000ULL,        // 23 bits
958
  0x0000000002000000ULL,        // 26 bits
959
  0x0000000010000000ULL,        // 29 bits
960
  0x0000000100000000ULL,        // 33 bits
961
  0x0000000800000000ULL,        // 36 bits
962
  0x0000004000000000ULL,        // 39 bits
963
  0x0000040000000000ULL,        // 43 bits
964
  0x0000200000000000ULL,        // 46 bits
965
  0x0001000000000000ULL,        // 49 bits
966
  0x0010000000000000ULL,        // 53 bits
967
  0x0080000000000000ULL,        // 56 bits
968
  0x0400000000000000ULL,        // 59 bits
969
  0x4000000000000000ULL,        // 63 bits
970
  0x0000000000000002ULL,        // 66 bits
971
  0x0000000000000010ULL,        // 69 bits
972
  0x0000000000000100ULL,        // 73 bits
973
  0x0000000000000800ULL,        // 76 bits
974
  0x0000000000004000ULL,        // 79 bits
975
  0x0000000000040000ULL,        // 83 bits
976
  0x0000000000200000ULL,        // 86 bits
977
  0x0000000001000000ULL,        // 89 bits
978
  0x0000000008000000ULL,        // 92 bits
979
  0x0000000080000000ULL,        // 96 bits
980
  0x0000000400000000ULL,        // 99 bits
981
  0x0000002000000000ULL // 102 bits
982
};
983
 
984
UINT64 ten2mk64[] = {
985
  0x199999999999999aULL,        //  10^(-1) * 2^ 64
986
  0x028f5c28f5c28f5dULL,        //  10^(-2) * 2^ 64 
987
  0x004189374bc6a7f0ULL,        //  10^(-3) * 2^ 64 
988
  0x00346dc5d638865aULL,        //  10^(-4) * 2^ 67 
989
  0x0029f16b11c6d1e2ULL,        //  10^(-5) * 2^ 70 
990
  0x00218def416bdb1bULL,        //  10^(-6) * 2^ 73 
991
  0x0035afe535795e91ULL,        //  10^(-7) * 2^ 77 
992
  0x002af31dc4611874ULL,        //  10^(-8) * 2^ 80 
993
  0x00225c17d04dad2aULL,        //  10^(-9) * 2^ 83 
994
  0x0036f9bfb3af7b76ULL,        // 10^(-10) * 2^ 87 
995
  0x002bfaffc2f2c92bULL,        // 10^(-11) * 2^ 90 
996
  0x00232f33025bd423ULL,        // 10^(-12) * 2^ 93 
997
  0x00384b84d092ed04ULL,        // 10^(-13) * 2^ 97 
998
  0x002d09370d425737ULL,        // 10^(-14) * 2^100 
999
  0x0024075f3dceac2cULL,        // 10^(-15) * 2^103 
1000
  0x0039a5652fb11379ULL,        // 10^(-16) * 2^107 
1001
};
1002
 
1003
// ten2mk128trunc[] contains T*, the top Ex >= 128 bits of 10^(-k), 
1004
// for 1 <= k <= 34 
1005
// the 64-bit word order is L, H
1006
UINT128 ten2mk128trunc[] = {
1007
  {{0x9999999999999999ULL, 0x1999999999999999ULL}},     //  10^(-1) * 2^128
1008
  {{0x28f5c28f5c28f5c2ULL, 0x028f5c28f5c28f5cULL}},     //  10^(-2) * 2^128 
1009
  {{0x9db22d0e56041893ULL, 0x004189374bc6a7efULL}},     //  10^(-3) * 2^128 
1010
  {{0x4af4f0d844d013a9ULL, 0x00346dc5d6388659ULL}},     //  10^(-4) * 2^131 
1011
  {{0x08c3f3e0370cdc87ULL, 0x0029f16b11c6d1e1ULL}},     //  10^(-5) * 2^134 
1012
  {{0x6d698fe69270b06cULL, 0x00218def416bdb1aULL}},     //  10^(-6) * 2^137 
1013
  {{0xaf0f4ca41d811a46ULL, 0x0035afe535795e90ULL}},     //  10^(-7) * 2^141 
1014
  {{0xbf3f70834acdae9fULL, 0x002af31dc4611873ULL}},     //  10^(-8) * 2^144 
1015
  {{0x65cc5a02a23e254cULL, 0x00225c17d04dad29ULL}},     //  10^(-9) * 2^147 
1016
  {{0x6fad5cd10396a213ULL, 0x0036f9bfb3af7b75ULL}},     // 10^(-10) * 2^151 
1017
  {{0xbfbde3da69454e75ULL, 0x002bfaffc2f2c92aULL}},     // 10^(-11) * 2^154 
1018
  {{0x32fe4fe1edd10b91ULL, 0x00232f33025bd422ULL}},     // 10^(-12) * 2^157 
1019
  {{0x84ca19697c81ac1bULL, 0x00384b84d092ed03ULL}},     // 10^(-13) * 2^161 
1020
  {{0x03d4e1213067bce3ULL, 0x002d09370d425736ULL}},     // 10^(-14) * 2^164 
1021
  {{0x3643e74dc052fd82ULL, 0x0024075f3dceac2bULL}},     // 10^(-15) * 2^167 
1022
  {{0x56d30baf9a1e626aULL, 0x0039a5652fb11378ULL}},     // 10^(-16) * 2^171 
1023
  {{0x12426fbfae7eb521ULL, 0x002e1dea8c8da92dULL}},     // 10^(-17) * 2^174 
1024
  {{0x41cebfcc8b9890e7ULL, 0x0024e4bba3a48757ULL}},     // 10^(-18) * 2^177 
1025
  {{0x694acc7a78f41b0cULL, 0x003b07929f6da558ULL}},     // 10^(-19) * 2^181 
1026
  {{0xbaa23d2ec729af3dULL, 0x002f394219248446ULL}},     // 10^(-20) * 2^184 
1027
  {{0xfbb4fdbf05baf297ULL, 0x0025c768141d369eULL}},     // 10^(-21) * 2^187 
1028
  {{0x2c54c931a2c4b758ULL, 0x003c7240202ebdcbULL}},     // 10^(-22) * 2^191 
1029
  {{0x89dd6dc14f03c5e0ULL, 0x00305b66802564a2ULL}},     // 10^(-23) * 2^194 
1030
  {{0xd4b1249aa59c9e4dULL, 0x0026af8533511d4eULL}},     // 10^(-24) * 2^197 
1031
  {{0x544ea0f76f60fd48ULL, 0x003de5a1ebb4fbb1ULL}},     // 10^(-25) * 2^201 
1032
  {{0x76a54d92bf80caa0ULL, 0x00318481895d9627ULL}},     // 10^(-26) * 2^204 
1033
  {{0x921dd7a89933d54dULL, 0x00279d346de4781fULL}},     // 10^(-27) * 2^207 
1034
  {{0x8362f2a75b862214ULL, 0x003f61ed7ca0c032ULL}},     // 10^(-28) * 2^211 
1035
  {{0xcf825bb91604e810ULL, 0x0032b4bdfd4d668eULL}},     // 10^(-29) * 2^214 
1036
  {{0x0c684960de6a5340ULL, 0x00289097fdd7853fULL}},     // 10^(-30) * 2^217 
1037
  {{0x3d203ab3e521dc33ULL, 0x002073accb12d0ffULL}},     // 10^(-31) * 2^220 
1038
  {{0x2e99f7863b696052ULL, 0x0033ec47ab514e65ULL}},     // 10^(-32) * 2^224 
1039
  {{0x587b2c6b62bab375ULL, 0x002989d2ef743eb7ULL}},     // 10^(-33) * 2^227 
1040
  {{0xad2f56bc4efbc2c4ULL, 0x00213b0f25f69892ULL}},     // 10^(-34) * 2^230 
1041
};
1042
 
1043
// ten2mk128M[k - 1] = 10^(-k) * 2^exp (k), where 1 <= k <= 4 and
1044
// exp (k) = shiftright128[k - 1] + 128
1045
// the 64-bit word order is L, H
1046
UINT128 ten2mk128M[] = {
1047
  {{0xcccccccccccccccdULL, 0xccccccccccccccccULL}},     //  10^(-1) * 2^131
1048
  {{0x3d70a3d70a3d70a4ULL, 0xa3d70a3d70a3d70aULL}},     //  10^(-2) * 2^134
1049
  {{0x645a1cac083126eaULL, 0x83126e978d4fdf3bULL}},     //  10^(-3) * 2^137
1050
  {{0xd3c36113404ea4a9ULL, 0xd1b71758e219652bULL}}      //  10^(-4) * 2^141
1051
};
1052
 
1053
// ten2mk128truncM[] contains T*, the top Ex >= 128 bits of 10^(-k),
1054
// for 1 <= k <= 4; the top bits which are 0 are not represented
1055
// the 64-bit word order is L, H
1056
UINT128 ten2mk128truncM[] = {
1057
  {{0xccccccccccccccccULL, 0xccccccccccccccccULL}},     //  10^(-1) * 2^131
1058
  {{0x3d70a3d70a3d70a3ULL, 0xa3d70a3d70a3d70aULL}},     //  10^(-2) * 2^134
1059
  {{0x645a1cac083126e9ULL, 0x83126e978d4fdf3bULL}},     //  10^(-3) * 2^137
1060
  {{0xd3c36113404ea4a8ULL, 0xd1b71758e219652bULL}}      //  10^(-4) * 2^141
1061
};
1062
 
1063
// shiftright128M[] contains the right shift count to obtain C2* from the top
1064
// 128 bits of the 128x128-bit product C2 * Kx
1065
int shiftright128M[] = {
1066
  3,    // 131 - 128
1067
  6,    // 134 - 128
1068
  9,    // 137 - 128
1069
  13    // 141 - 128
1070
};
1071
 
1072
// maskhigh128M[] contains the mask to apply to the top 128 bits of the
1073
// 128x128-bit product in order to obtain the high bits of f*
1074
// the high 64 bits of the mask are 0, so only the low 64 bits are represented
1075
UINT64 maskhigh128M[] = {
1076
  0x0000000000000007ULL,        //  3 = 131 - 128 bits
1077
  0x000000000000003fULL,        //  6 = 134 - 128 bits
1078
  0x00000000000001ffULL,        //  9 = 137 - 128 bits
1079
  0x0000000000001fffULL // 13 = 141 - 128 bits
1080
};
1081
 
1082
// onehalf128M[] contains 1/2 positioned correctly for
1083
// comparison with the high bits of f*
1084
// the high 64 bits are 0, so only the low 64 bits are represented
1085
UINT64 onehalf128M[] = {
1086
  0x0000000000000004ULL,        //  3 bits
1087
  0x0000000000000020ULL,        //  6 bits
1088
  0x0000000000000100ULL,        //  9 bits
1089
  0x0000000000001000ULL // 13 bits
1090
};
1091
 
1092
// ten2mk192M[k - 1] = 10^(-k-4) * 2^exp (k), where 1 <= k <= 19 and
1093
// exp (k) = shiftright128[k - 1] + 128
1094
// the 64-bit word order is L, M, H
1095
UINT192 ten2mk192M[] = {
1096
  {{0xcddd6e04c0592104ULL, 0x0fcf80dc33721d53ULL,
1097
    0xa7c5ac471b478423ULL}},
1098
  //  10^(-5) * 2^208
1099
  {{0xd7e45803cd141a6aULL, 0xa63f9a49c2c1b10fULL,
1100
    0x8637bd05af6c69b5ULL}},
1101
  //  10^(-6) * 2^211
1102
  {{0x8ca08cd2e1b9c3dcULL, 0x3d32907604691b4cULL,
1103
    0xd6bf94d5e57a42bcULL}},
1104
  //  10^(-7) * 2^215
1105
  {{0x3d4d3d758161697dULL, 0xfdc20d2b36ba7c3dULL,
1106
    0xabcc77118461cefcULL}},
1107
  //  10^(-8) * 2^218
1108
  {{0xfdd7645e011abacaULL, 0x31680a88f8953030ULL,
1109
    0x89705f4136b4a597ULL}},
1110
  //  10^(-9) * 2^221
1111
  {{0x2fbf06fcce912addULL, 0xb573440e5a884d1bULL,
1112
    0xdbe6fecebdedd5beULL}},
1113
  //  10^(-10) * 2^225
1114
  {{0xf2ff38ca3eda88b1ULL, 0xf78f69a51539d748ULL,
1115
    0xafebff0bcb24aafeULL}},
1116
  //  10^(-11) * 2^228
1117
  {{0xf598fa3b657ba08eULL, 0xf93f87b7442e45d3ULL,
1118
    0x8cbccc096f5088cbULL}},
1119
  //  10^(-12) * 2^231
1120
  {{0x88f4c3923bf900e3ULL, 0x2865a5f206b06fb9ULL,
1121
    0xe12e13424bb40e13ULL}},
1122
  //  10^(-13) * 2^235
1123
  {{0x6d909c74fcc733e9ULL, 0x538484c19ef38c94ULL,
1124
    0xb424dc35095cd80fULL}},
1125
  //  10^(-14) * 2^238
1126
  {{0x57a6e390ca38f654ULL, 0x0f9d37014bf60a10ULL,
1127
    0x901d7cf73ab0acd9ULL}},
1128
  //  10^(-15) * 2^241
1129
  {{0xbf716c1add27f086ULL, 0x4c2ebe687989a9b3ULL,
1130
    0xe69594bec44de15bULL}},
1131
  //  10^(-16) * 2^245
1132
  {{0xff8df0157db98d38ULL, 0x09befeb9fad487c2ULL,
1133
    0xb877aa3236a4b449ULL}},
1134
  //  10^(-17) * 2^248
1135
  {{0x32d7f344649470faULL, 0x3aff322e62439fcfULL,
1136
    0x9392ee8e921d5d07ULL}},
1137
  //  10^(-18) * 2^251
1138
  {{0x1e2652070753e7f5ULL, 0x2b31e9e3d06c32e5ULL,
1139
    0xec1e4a7db69561a5ULL}},
1140
  //  10^(-19) * 2^255
1141
  {{0x181ea8059f76532bULL, 0x88f4bb1ca6bcf584ULL,
1142
    0xbce5086492111aeaULL}},
1143
  //  10^(-20) * 2^258
1144
  {{0x467eecd14c5ea8efULL, 0xd3f6fc16ebca5e03ULL,
1145
    0x971da05074da7beeULL}},
1146
  //  10^(-21) * 2^261
1147
  {{0x70cb148213caa7e5ULL, 0x5324c68b12dd6338ULL,
1148
    0xf1c90080baf72cb1ULL}},
1149
  //  10^(-22) * 2^265
1150
  {{0x8d6f439b43088651ULL, 0x75b7053c0f178293ULL, 0xc16d9a0095928a27ULL}}
1151
  //  10^(-23) * 2^268
1152
};
1153
 
1154
// ten2mk192truncM[] contains T*, the top Ex >= 192 bits of 10^(-k),
1155
// for 5 <= k <= 23; the top bits which are 0 are not represented
1156
// the 64-bit word order is L, M, H
1157
UINT192 ten2mk192truncM[] = {
1158
  {{0xcddd6e04c0592103ULL, 0x0fcf80dc33721d53ULL,
1159
    0xa7c5ac471b478423ULL}},
1160
  //  10^(-5) * 2^208
1161
  {{0xd7e45803cd141a69ULL, 0xa63f9a49c2c1b10fULL,
1162
    0x8637bd05af6c69b5ULL}},
1163
  //  10^(-6) * 2^211
1164
  {{0x8ca08cd2e1b9c3dbULL, 0x3d32907604691b4cULL,
1165
    0xd6bf94d5e57a42bcULL}},
1166
  //  10^(-7) * 2^215
1167
  {{0x3d4d3d758161697cULL, 0xfdc20d2b36ba7c3dULL,
1168
    0xabcc77118461cefcULL}},
1169
  //  10^(-8) * 2^218
1170
  {{0xfdd7645e011abac9ULL, 0x31680a88f8953030ULL,
1171
    0x89705f4136b4a597ULL}},
1172
  //  10^(-9) * 2^221
1173
  {{0x2fbf06fcce912adcULL, 0xb573440e5a884d1bULL,
1174
    0xdbe6fecebdedd5beULL}},
1175
  //  10^(-10) * 2^225
1176
  {{0xf2ff38ca3eda88b0ULL, 0xf78f69a51539d748ULL,
1177
    0xafebff0bcb24aafeULL}},
1178
  //  10^(-11) * 2^228
1179
  {{0xf598fa3b657ba08dULL, 0xf93f87b7442e45d3ULL,
1180
    0x8cbccc096f5088cbULL}},
1181
  //  10^(-12) * 2^231
1182
  {{0x88f4c3923bf900e2ULL, 0x2865a5f206b06fb9ULL,
1183
    0xe12e13424bb40e13ULL}},
1184
  //  10^(-13) * 2^235
1185
  {{0x6d909c74fcc733e8ULL, 0x538484c19ef38c94ULL,
1186
    0xb424dc35095cd80fULL}},
1187
  //  10^(-14) * 2^238
1188
  {{0x57a6e390ca38f653ULL, 0x0f9d37014bf60a10ULL,
1189
    0x901d7cf73ab0acd9ULL}},
1190
  //  10^(-15) * 2^241
1191
  {{0xbf716c1add27f085ULL, 0x4c2ebe687989a9b3ULL,
1192
    0xe69594bec44de15bULL}},
1193
  //  10^(-16) * 2^245
1194
  {{0xff8df0157db98d37ULL, 0x09befeb9fad487c2ULL,
1195
    0xb877aa3236a4b449ULL}},
1196
  //  10^(-17) * 2^248
1197
  {{0x32d7f344649470f9ULL, 0x3aff322e62439fcfULL,
1198
    0x9392ee8e921d5d07ULL}},
1199
  //  10^(-18) * 2^251
1200
  {{0x1e2652070753e7f4ULL, 0x2b31e9e3d06c32e5ULL,
1201
    0xec1e4a7db69561a5ULL}},
1202
  //  10^(-19) * 2^255
1203
  {{0x181ea8059f76532aULL, 0x88f4bb1ca6bcf584ULL,
1204
    0xbce5086492111aeaULL}},
1205
  //  10^(-20) * 2^258
1206
  {{0x467eecd14c5ea8eeULL, 0xd3f6fc16ebca5e03ULL,
1207
    0x971da05074da7beeULL}},
1208
  //  10^(-21) * 2^261
1209
  {{0x70cb148213caa7e4ULL, 0x5324c68b12dd6338ULL,
1210
    0xf1c90080baf72cb1ULL}},
1211
  //  10^(-22) * 2^265
1212
  {{0x8d6f439b43088650ULL, 0x75b7053c0f178293ULL, 0xc16d9a0095928a27ULL}}
1213
  //  10^(-23) * 2^268
1214
};
1215
 
1216
// shiftright192M[] contains the right shift count to obtain C2* from the top
1217
// 192 bits of the 192x192-bit product C2 * Kx if 0 <= ind <= 14 where ind is 
1218
// the index in the table, or from the top 128 bits if 15 <= ind <= 18
1219
int shiftright192M[] = {
1220
  16,   // 208 - 192
1221
  19,   // 211 - 192
1222
  23,   // 215 - 192
1223
  26,   // 218 - 192
1224
  29,   // 221 - 192
1225
  33,   // 225 - 192
1226
  36,   // 228 - 192
1227
  39,   // 231 - 192
1228
  43,   // 235 - 192
1229
  46,   // 238 - 192
1230
  49,   // 241 - 192
1231
  53,   // 245 - 192
1232
  56,   // 248 - 192
1233
  59,   // 251 - 192
1234
  63,   // 255 - 192
1235
  2,    // 258 - 256
1236
  5,    // 261 - 256
1237
  9,    // 265 - 256
1238
  12    // 268 - 256
1239
};
1240
 
1241
// maskhigh192M[] contains the mask to apply to the top 192 bits of the
1242
// 192x192-bit product in order to obtain the high bits of f*
1243
// if 0 <= ind <= 14 where ind is the index in the table, then the high 128 bits
1244
// of the 384-bit mask are 0;  if 15 <= ind <= 18 then the high 64 bits are 0
1245
UINT64 maskhigh192M[] = {
1246
  0x000000000000ffffULL,        //  16 = 208 - 192 bits
1247
  0x000000000007ffffULL,        //  19 = 211 - 192 bits
1248
  0x00000000007fffffULL,        //  23 = 215 - 192 bits
1249
  0x0000000003ffffffULL,        //  26 = 218 - 192 bits
1250
  0x000000001fffffffULL,        //  29 = 221 - 192 bits
1251
  0x00000001ffffffffULL,        //  33 = 225 - 192 bits
1252
  0x0000000fffffffffULL,        //  36 = 228 - 192 bits
1253
  0x0000007fffffffffULL,        //  39 = 231 - 192 bits
1254
  0x000007ffffffffffULL,        //  43 = 235 - 192 bits
1255
  0x00003fffffffffffULL,        //  46 = 238 - 192 bits
1256
  0x0001ffffffffffffULL,        //  49 = 241 - 192 bits
1257
  0x001fffffffffffffULL,        //  53 = 245 - 192 bits
1258
  0x00ffffffffffffffULL,        //  56 = 248 - 192 bits
1259
  0x07ffffffffffffffULL,        //  59 = 251 - 192 bits
1260
  0x7fffffffffffffffULL,        //  63 = 255 - 192 bits
1261
  0x0000000000000003ULL,        //   2 = 258 - 256 bits
1262
  0x000000000000001fULL,        //   5 = 261 - 256 bits
1263
  0x00000000000001ffULL,        //   9 = 265 - 256 bits
1264
  0x0000000000000fffULL //  12 = 268 - 256 bits
1265
};
1266
 
1267
// onehalf192M[] contains 1/2 positioned correctly for
1268
// comparison with the high bits of f*
1269
// if 0 <= ind <= 14 where ind is the index in the table, then the high 128 bits
1270
// of the 384-bit mask are 0;  if 15 <= ind <= 18 then the high 648 bits are 0
1271
UINT64 onehalf192M[] = {
1272
  0x0000000000008000ULL,        //  16 = 208 - 192 bits
1273
  0x0000000000040000ULL,        //  19 = 211 - 192 bits
1274
  0x0000000000400000ULL,        //  23 = 215 - 192 bits
1275
  0x0000000002000000ULL,        //  26 = 218 - 192 bits
1276
  0x0000000010000000ULL,        //  29 = 221 - 192 bits
1277
  0x0000000100000000ULL,        //  33 = 225 - 192 bits
1278
  0x0000000800000000ULL,        //  36 = 228 - 192 bits
1279
  0x0000004000000000ULL,        //  39 = 231 - 192 bits
1280
  0x0000040000000000ULL,        //  43 = 235 - 192 bits
1281
  0x0000200000000000ULL,        //  46 = 238 - 192 bits
1282
  0x0001000000000000ULL,        //  49 = 241 - 192 bits
1283
  0x0010000000000000ULL,        //  53 = 245 - 192 bits
1284
  0x0080000000000000ULL,        //  56 = 248 - 192 bits
1285
  0x0400000000000000ULL,        //  59 = 251 - 192 bits
1286
  0x4000000000000000ULL,        //  63 = 255 - 192 bits
1287
  0x0000000000000002ULL,        //   2 = 258 - 256 bits
1288
  0x0000000000000010ULL,        //   5 = 261 - 256 bits
1289
  0x0000000000000100ULL,        //   9 = 265 - 256 bits
1290
  0x0000000000000800ULL //  12 = 268 - 256 bits
1291
};
1292
 
1293
// ten2mk256M[k - 1] = 10^(-k-23) * 2^exp (k), where 1 <= k <= 11 and
1294
// exp (k) = shiftright128[k - 1] + 128
1295
UINT256 ten2mk256M[] = {        // the 64-bit word order is LL, LH, HL, HH
1296
  {{0xf23472530ce6e3edULL, 0xd78c3615cf3a050cULL,
1297
    0xc4926a9672793542ULL, 0x9abe14cd44753b52ULL}},     //  10^(-24) * 2^335
1298
  {{0xe9ed83b814a49fe1ULL, 0x8c1389bc7ec33b47ULL,
1299
    0x3a83ddbd83f52204ULL, 0xf79687aed3eec551ULL}},     //  10^(-25) * 2^339
1300
  {{0x87f1362cdd507fe7ULL, 0x3cdc6e306568fc39ULL,
1301
    0x95364afe032a819dULL, 0xc612062576589ddaULL}},     //  10^(-26) * 2^342
1302
  {{0x9ff42b5717739986ULL, 0xca49f1c05120c9c7ULL,
1303
    0x775ea264cf55347dULL, 0x9e74d1b791e07e48ULL}},     //  10^(-27) * 2^345
1304
  {{0xccb9def1bf1f5c09ULL, 0x76dcb60081ce0fa5ULL,
1305
    0x8bca9d6e188853fcULL, 0xfd87b5f28300ca0dULL}},     //  10^(-28) * 2^349
1306
  {{0xa3c7e58e327f7cd4ULL, 0x5f16f80067d80c84ULL,
1307
    0x096ee45813a04330ULL, 0xcad2f7f5359a3b3eULL}},     //  10^(-29) * 2^352
1308
  {{0xb6398471c1ff9710ULL, 0x18df2ccd1fe00a03ULL,
1309
    0xa1258379a94d028dULL, 0xa2425ff75e14fc31ULL}},     //  10^(-30) * 2^355
1310
  {{0xf82e038e34cc78daULL, 0x4718f0a419800802ULL,
1311
    0x80eacf948770ced7ULL, 0x81ceb32c4b43fcf4ULL}},     //  10^(-31) * 2^358
1312
  {{0x59e338e387ad8e29ULL, 0x0b5b1aa028ccd99eULL,
1313
    0x67de18eda5814af2ULL, 0xcfb11ead453994baULL}},     //  10^(-32) * 2^362
1314
  {{0x47e8fa4f9fbe0b54ULL, 0x6f7c154ced70ae18ULL,
1315
    0xecb1ad8aeacdd58eULL, 0xa6274bbdd0fadd61ULL}},     //  10^(-33) * 2^365
1316
  {{0xd320c83fb2fe6f76ULL, 0xbf967770bdf3be79ULL,
1317
    0xbd5af13bef0b113eULL, 0x84ec3c97da624ab4ULL}}      //  10^(-34) * 2^368
1318
};
1319
 
1320
// ten2mk256truncM[] contains T*, the top Ex >= 256 bits of 10^(-k),
1321
// for 24 <= k <= 34; the top bits which are 0 are not represented
1322
UINT256 ten2mk256truncM[] = {   // the 64-bit word order is LL, LH, HL, HH
1323
  {{0xf23472530ce6e3ecULL, 0xd78c3615cf3a050cULL,
1324
    0xc4926a9672793542ULL, 0x9abe14cd44753b52ULL}},     //  10^(-24) * 2^335
1325
  {{0xe9ed83b814a49fe0ULL, 0x8c1389bc7ec33b47ULL,
1326
    0x3a83ddbd83f52204ULL, 0xf79687aed3eec551ULL}},     //  10^(-25) * 2^339
1327
  {{0x87f1362cdd507fe6ULL, 0x3cdc6e306568fc39ULL,
1328
    0x95364afe032a819dULL, 0xc612062576589ddaULL}},     //  10^(-26) * 2^342
1329
  {{0x775ea264cf55347cULL, 0x9ff42b5717739986ULL,
1330
    0xca49f1c05120c9c7ULL, 0x9e74d1b791e07e48ULL}},     //  10^(-27) * 2^345
1331
  {{0xccb9def1bf1f5c08ULL, 0x76dcb60081ce0fa5ULL,
1332
    0x8bca9d6e188853fcULL, 0xfd87b5f28300ca0dULL}},     //  10^(-28) * 2^349
1333
  {{0xa3c7e58e327f7cd3ULL, 0x5f16f80067d80c84ULL,
1334
    0x096ee45813a04330ULL, 0xcad2f7f5359a3b3eULL}},     //  10^(-29) * 2^352
1335
  {{0xb6398471c1ff970fULL, 0x18df2ccd1fe00a03ULL,
1336
    0xa1258379a94d028dULL, 0xa2425ff75e14fc31ULL}},     //  10^(-30) * 2^355
1337
  {{0xf82e038e34cc78d9ULL, 0x4718f0a419800802ULL,
1338
    0x80eacf948770ced7ULL, 0x81ceb32c4b43fcf4ULL}},     //  10^(-31) * 2^358
1339
  {{0x59e338e387ad8e28ULL, 0x0b5b1aa028ccd99eULL,
1340
    0x67de18eda5814af2ULL, 0xcfb11ead453994baULL}},     //  10^(-32) * 2^362
1341
  {{0x47e8fa4f9fbe0b53ULL, 0x6f7c154ced70ae18ULL,
1342
    0xecb1ad8aeacdd58eULL, 0xa6274bbdd0fadd61ULL}},     //  10^(-33) * 2^365
1343
  {{0xd320c83fb2fe6f75ULL, 0xbf967770bdf3be79ULL,
1344
    0xbd5af13bef0b113eULL, 0x84ec3c97da624ab4ULL}}      //  10^(-34) * 2^368
1345
};
1346
 
1347
// shiftright256M[] contains the right shift count to obtain C2* from the top
1348
// 192 bits of the 256x256-bit product C2 * Kx 
1349
int shiftright256M[] = {
1350
  15,   // 335 - 320
1351
  19,   // 339 - 320
1352
  22,   // 342 - 320
1353
  25,   // 345 - 320
1354
  29,   // 349 - 320
1355
  32,   // 352 - 320 // careful of 32-bit machines!
1356
  35,   // 355 - 320
1357
  38,   // 358 - 320
1358
  42,   // 362 - 320
1359
  45,   // 365 - 320
1360
  48    // 368 - 320
1361
};
1362
 
1363
// maskhigh256M[] contains the mask to apply to the top 192 bits of the
1364
// 256x256-bit product in order to obtain the high bits of f*
1365
UINT64 maskhigh256M[] = {
1366
  0x0000000000007fffULL,        //  15 = 335 - 320 bits
1367
  0x000000000007ffffULL,        //  19 = 339 - 320 bits
1368
  0x00000000003fffffULL,        //  22 = 342 - 320 bits
1369
  0x0000000001ffffffULL,        //  25 = 345 - 320 bits
1370
  0x000000001fffffffULL,        //  29 = 349 - 320 bits
1371
  0x00000000ffffffffULL,        //  32 = 352 - 320 bits
1372
  0x00000007ffffffffULL,        //  35 = 355 - 320 bits
1373
  0x0000003fffffffffULL,        //  38 = 358 - 320 bits
1374
  0x000003ffffffffffULL,        //  42 = 362 - 320 bits
1375
  0x00001fffffffffffULL,        //  45 = 365 - 320 bits
1376
  0x0000ffffffffffffULL //  48 = 368 - 320 bits
1377
};
1378
 
1379
// onehalf256M[] contains 1/2 positioned correctly for comparison with the 
1380
// high bits of f*; the high 128 bits of the 512-bit mask are 0
1381
UINT64 onehalf256M[] = {
1382
  0x0000000000004000ULL,        //  15 = 335 - 320 bits
1383
  0x0000000000040000ULL,        //  19 = 339 - 320 bits
1384
  0x0000000000200000ULL,        //  22 = 342 - 320 bits
1385
  0x0000000001000000ULL,        //  25 = 345 - 320 bits
1386
  0x0000000010000000ULL,        //  29 = 349 - 320 bits
1387
  0x0000000080000000ULL,        //  32 = 352 - 320 bits
1388
  0x0000000400000000ULL,        //  35 = 355 - 320 bits
1389
  0x0000002000000000ULL,        //  38 = 358 - 320 bits
1390
  0x0000020000000000ULL,        //  42 = 362 - 320 bits
1391
  0x0000100000000000ULL,        //  45 = 365 - 320 bits
1392
  0x0000800000000000ULL //  48 = 368 - 320 bits
1393
};
1394
 
1395
 
1396
// char_table2[] is used to convert n to string, where 10 <= n <= 99
1397
unsigned char char_table2[180] = {
1398
  '1', '0',
1399
  '1', '1',
1400
  '1', '2',
1401
  '1', '3',
1402
  '1', '4',
1403
  '1', '5',
1404
  '1', '6',
1405
  '1', '7',
1406
  '1', '8',
1407
  '1', '9',
1408
  '2', '0',
1409
  '2', '1',
1410
  '2', '2',
1411
  '2', '3',
1412
  '2', '4',
1413
  '2', '5',
1414
  '2', '6',
1415
  '2', '7',
1416
  '2', '8',
1417
  '2', '9',
1418
  '3', '0',
1419
  '3', '1',
1420
  '3', '2',
1421
  '3', '3',
1422
  '3', '4',
1423
  '3', '5',
1424
  '3', '6',
1425
  '3', '7',
1426
  '3', '8',
1427
  '3', '9',
1428
  '4', '0',
1429
  '4', '1',
1430
  '4', '2',
1431
  '4', '3',
1432
  '4', '4',
1433
  '4', '5',
1434
  '4', '6',
1435
  '4', '7',
1436
  '4', '8',
1437
  '4', '9',
1438
  '5', '0',
1439
  '5', '1',
1440
  '5', '2',
1441
  '5', '3',
1442
  '5', '4',
1443
  '5', '5',
1444
  '5', '6',
1445
  '5', '7',
1446
  '5', '8',
1447
  '5', '9',
1448
  '6', '0',
1449
  '6', '1',
1450
  '6', '2',
1451
  '6', '3',
1452
  '6', '4',
1453
  '6', '5',
1454
  '6', '6',
1455
  '6', '7',
1456
  '6', '8',
1457
  '6', '9',
1458
  '7', '0',
1459
  '7', '1',
1460
  '7', '2',
1461
  '7', '3',
1462
  '7', '4',
1463
  '7', '5',
1464
  '7', '6',
1465
  '7', '7',
1466
  '7', '8',
1467
  '7', '9',
1468
  '8', '0',
1469
  '8', '1',
1470
  '8', '2',
1471
  '8', '3',
1472
  '8', '4',
1473
  '8', '5',
1474
  '8', '6',
1475
  '8', '7',
1476
  '8', '8',
1477
  '8', '9',
1478
  '9', '0',
1479
  '9', '1',
1480
  '9', '2',
1481
  '9', '3',
1482
  '9', '4',
1483
  '9', '5',
1484
  '9', '6',
1485
  '9', '7',
1486
  '9', '8',
1487
  '9', '9'
1488
};
1489
 
1490
 
1491
// char_table3[] is used to convert n to string, where 000 <= n <= 999
1492
unsigned char char_table3[3000] = {
1493
  '0', '0', '0',
1494
  '0', '0', '1',
1495
  '0', '0', '2',
1496
  '0', '0', '3',
1497
  '0', '0', '4',
1498
  '0', '0', '5',
1499
  '0', '0', '6',
1500
  '0', '0', '7',
1501
  '0', '0', '8',
1502
  '0', '0', '9',
1503
  '0', '1', '0',
1504
  '0', '1', '1',
1505
  '0', '1', '2',
1506
  '0', '1', '3',
1507
  '0', '1', '4',
1508
  '0', '1', '5',
1509
  '0', '1', '6',
1510
  '0', '1', '7',
1511
  '0', '1', '8',
1512
  '0', '1', '9',
1513
  '0', '2', '0',
1514
  '0', '2', '1',
1515
  '0', '2', '2',
1516
  '0', '2', '3',
1517
  '0', '2', '4',
1518
  '0', '2', '5',
1519
  '0', '2', '6',
1520
  '0', '2', '7',
1521
  '0', '2', '8',
1522
  '0', '2', '9',
1523
  '0', '3', '0',
1524
  '0', '3', '1',
1525
  '0', '3', '2',
1526
  '0', '3', '3',
1527
  '0', '3', '4',
1528
  '0', '3', '5',
1529
  '0', '3', '6',
1530
  '0', '3', '7',
1531
  '0', '3', '8',
1532
  '0', '3', '9',
1533
  '0', '4', '0',
1534
  '0', '4', '1',
1535
  '0', '4', '2',
1536
  '0', '4', '3',
1537
  '0', '4', '4',
1538
  '0', '4', '5',
1539
  '0', '4', '6',
1540
  '0', '4', '7',
1541
  '0', '4', '8',
1542
  '0', '4', '9',
1543
  '0', '5', '0',
1544
  '0', '5', '1',
1545
  '0', '5', '2',
1546
  '0', '5', '3',
1547
  '0', '5', '4',
1548
  '0', '5', '5',
1549
  '0', '5', '6',
1550
  '0', '5', '7',
1551
  '0', '5', '8',
1552
  '0', '5', '9',
1553
  '0', '6', '0',
1554
  '0', '6', '1',
1555
  '0', '6', '2',
1556
  '0', '6', '3',
1557
  '0', '6', '4',
1558
  '0', '6', '5',
1559
  '0', '6', '6',
1560
  '0', '6', '7',
1561
  '0', '6', '8',
1562
  '0', '6', '9',
1563
  '0', '7', '0',
1564
  '0', '7', '1',
1565
  '0', '7', '2',
1566
  '0', '7', '3',
1567
  '0', '7', '4',
1568
  '0', '7', '5',
1569
  '0', '7', '6',
1570
  '0', '7', '7',
1571
  '0', '7', '8',
1572
  '0', '7', '9',
1573
  '0', '8', '0',
1574
  '0', '8', '1',
1575
  '0', '8', '2',
1576
  '0', '8', '3',
1577
  '0', '8', '4',
1578
  '0', '8', '5',
1579
  '0', '8', '6',
1580
  '0', '8', '7',
1581
  '0', '8', '8',
1582
  '0', '8', '9',
1583
  '0', '9', '0',
1584
  '0', '9', '1',
1585
  '0', '9', '2',
1586
  '0', '9', '3',
1587
  '0', '9', '4',
1588
  '0', '9', '5',
1589
  '0', '9', '6',
1590
  '0', '9', '7',
1591
  '0', '9', '8',
1592
  '0', '9', '9',
1593
  '1', '0', '0',
1594
  '1', '0', '1',
1595
  '1', '0', '2',
1596
  '1', '0', '3',
1597
  '1', '0', '4',
1598
  '1', '0', '5',
1599
  '1', '0', '6',
1600
  '1', '0', '7',
1601
  '1', '0', '8',
1602
  '1', '0', '9',
1603
  '1', '1', '0',
1604
  '1', '1', '1',
1605
  '1', '1', '2',
1606
  '1', '1', '3',
1607
  '1', '1', '4',
1608
  '1', '1', '5',
1609
  '1', '1', '6',
1610
  '1', '1', '7',
1611
  '1', '1', '8',
1612
  '1', '1', '9',
1613
  '1', '2', '0',
1614
  '1', '2', '1',
1615
  '1', '2', '2',
1616
  '1', '2', '3',
1617
  '1', '2', '4',
1618
  '1', '2', '5',
1619
  '1', '2', '6',
1620
  '1', '2', '7',
1621
  '1', '2', '8',
1622
  '1', '2', '9',
1623
  '1', '3', '0',
1624
  '1', '3', '1',
1625
  '1', '3', '2',
1626
  '1', '3', '3',
1627
  '1', '3', '4',
1628
  '1', '3', '5',
1629
  '1', '3', '6',
1630
  '1', '3', '7',
1631
  '1', '3', '8',
1632
  '1', '3', '9',
1633
  '1', '4', '0',
1634
  '1', '4', '1',
1635
  '1', '4', '2',
1636
  '1', '4', '3',
1637
  '1', '4', '4',
1638
  '1', '4', '5',
1639
  '1', '4', '6',
1640
  '1', '4', '7',
1641
  '1', '4', '8',
1642
  '1', '4', '9',
1643
  '1', '5', '0',
1644
  '1', '5', '1',
1645
  '1', '5', '2',
1646
  '1', '5', '3',
1647
  '1', '5', '4',
1648
  '1', '5', '5',
1649
  '1', '5', '6',
1650
  '1', '5', '7',
1651
  '1', '5', '8',
1652
  '1', '5', '9',
1653
  '1', '6', '0',
1654
  '1', '6', '1',
1655
  '1', '6', '2',
1656
  '1', '6', '3',
1657
  '1', '6', '4',
1658
  '1', '6', '5',
1659
  '1', '6', '6',
1660
  '1', '6', '7',
1661
  '1', '6', '8',
1662
  '1', '6', '9',
1663
  '1', '7', '0',
1664
  '1', '7', '1',
1665
  '1', '7', '2',
1666
  '1', '7', '3',
1667
  '1', '7', '4',
1668
  '1', '7', '5',
1669
  '1', '7', '6',
1670
  '1', '7', '7',
1671
  '1', '7', '8',
1672
  '1', '7', '9',
1673
  '1', '8', '0',
1674
  '1', '8', '1',
1675
  '1', '8', '2',
1676
  '1', '8', '3',
1677
  '1', '8', '4',
1678
  '1', '8', '5',
1679
  '1', '8', '6',
1680
  '1', '8', '7',
1681
  '1', '8', '8',
1682
  '1', '8', '9',
1683
  '1', '9', '0',
1684
  '1', '9', '1',
1685
  '1', '9', '2',
1686
  '1', '9', '3',
1687
  '1', '9', '4',
1688
  '1', '9', '5',
1689
  '1', '9', '6',
1690
  '1', '9', '7',
1691
  '1', '9', '8',
1692
  '1', '9', '9',
1693
  '2', '0', '0',
1694
  '2', '0', '1',
1695
  '2', '0', '2',
1696
  '2', '0', '3',
1697
  '2', '0', '4',
1698
  '2', '0', '5',
1699
  '2', '0', '6',
1700
  '2', '0', '7',
1701
  '2', '0', '8',
1702
  '2', '0', '9',
1703
  '2', '1', '0',
1704
  '2', '1', '1',
1705
  '2', '1', '2',
1706
  '2', '1', '3',
1707
  '2', '1', '4',
1708
  '2', '1', '5',
1709
  '2', '1', '6',
1710
  '2', '1', '7',
1711
  '2', '1', '8',
1712
  '2', '1', '9',
1713
  '2', '2', '0',
1714
  '2', '2', '1',
1715
  '2', '2', '2',
1716
  '2', '2', '3',
1717
  '2', '2', '4',
1718
  '2', '2', '5',
1719
  '2', '2', '6',
1720
  '2', '2', '7',
1721
  '2', '2', '8',
1722
  '2', '2', '9',
1723
  '2', '3', '0',
1724
  '2', '3', '1',
1725
  '2', '3', '2',
1726
  '2', '3', '3',
1727
  '2', '3', '4',
1728
  '2', '3', '5',
1729
  '2', '3', '6',
1730
  '2', '3', '7',
1731
  '2', '3', '8',
1732
  '2', '3', '9',
1733
  '2', '4', '0',
1734
  '2', '4', '1',
1735
  '2', '4', '2',
1736
  '2', '4', '3',
1737
  '2', '4', '4',
1738
  '2', '4', '5',
1739
  '2', '4', '6',
1740
  '2', '4', '7',
1741
  '2', '4', '8',
1742
  '2', '4', '9',
1743
  '2', '5', '0',
1744
  '2', '5', '1',
1745
  '2', '5', '2',
1746
  '2', '5', '3',
1747
  '2', '5', '4',
1748
  '2', '5', '5',
1749
  '2', '5', '6',
1750
  '2', '5', '7',
1751
  '2', '5', '8',
1752
  '2', '5', '9',
1753
  '2', '6', '0',
1754
  '2', '6', '1',
1755
  '2', '6', '2',
1756
  '2', '6', '3',
1757
  '2', '6', '4',
1758
  '2', '6', '5',
1759
  '2', '6', '6',
1760
  '2', '6', '7',
1761
  '2', '6', '8',
1762
  '2', '6', '9',
1763
  '2', '7', '0',
1764
  '2', '7', '1',
1765
  '2', '7', '2',
1766
  '2', '7', '3',
1767
  '2', '7', '4',
1768
  '2', '7', '5',
1769
  '2', '7', '6',
1770
  '2', '7', '7',
1771
  '2', '7', '8',
1772
  '2', '7', '9',
1773
  '2', '8', '0',
1774
  '2', '8', '1',
1775
  '2', '8', '2',
1776
  '2', '8', '3',
1777
  '2', '8', '4',
1778
  '2', '8', '5',
1779
  '2', '8', '6',
1780
  '2', '8', '7',
1781
  '2', '8', '8',
1782
  '2', '8', '9',
1783
  '2', '9', '0',
1784
  '2', '9', '1',
1785
  '2', '9', '2',
1786
  '2', '9', '3',
1787
  '2', '9', '4',
1788
  '2', '9', '5',
1789
  '2', '9', '6',
1790
  '2', '9', '7',
1791
  '2', '9', '8',
1792
  '2', '9', '9',
1793
  '3', '0', '0',
1794
  '3', '0', '1',
1795
  '3', '0', '2',
1796
  '3', '0', '3',
1797
  '3', '0', '4',
1798
  '3', '0', '5',
1799
  '3', '0', '6',
1800
  '3', '0', '7',
1801
  '3', '0', '8',
1802
  '3', '0', '9',
1803
  '3', '1', '0',
1804
  '3', '1', '1',
1805
  '3', '1', '2',
1806
  '3', '1', '3',
1807
  '3', '1', '4',
1808
  '3', '1', '5',
1809
  '3', '1', '6',
1810
  '3', '1', '7',
1811
  '3', '1', '8',
1812
  '3', '1', '9',
1813
  '3', '2', '0',
1814
  '3', '2', '1',
1815
  '3', '2', '2',
1816
  '3', '2', '3',
1817
  '3', '2', '4',
1818
  '3', '2', '5',
1819
  '3', '2', '6',
1820
  '3', '2', '7',
1821
  '3', '2', '8',
1822
  '3', '2', '9',
1823
  '3', '3', '0',
1824
  '3', '3', '1',
1825
  '3', '3', '2',
1826
  '3', '3', '3',
1827
  '3', '3', '4',
1828
  '3', '3', '5',
1829
  '3', '3', '6',
1830
  '3', '3', '7',
1831
  '3', '3', '8',
1832
  '3', '3', '9',
1833
  '3', '4', '0',
1834
  '3', '4', '1',
1835
  '3', '4', '2',
1836
  '3', '4', '3',
1837
  '3', '4', '4',
1838
  '3', '4', '5',
1839
  '3', '4', '6',
1840
  '3', '4', '7',
1841
  '3', '4', '8',
1842
  '3', '4', '9',
1843
  '3', '5', '0',
1844
  '3', '5', '1',
1845
  '3', '5', '2',
1846
  '3', '5', '3',
1847
  '3', '5', '4',
1848
  '3', '5', '5',
1849
  '3', '5', '6',
1850
  '3', '5', '7',
1851
  '3', '5', '8',
1852
  '3', '5', '9',
1853
  '3', '6', '0',
1854
  '3', '6', '1',
1855
  '3', '6', '2',
1856
  '3', '6', '3',
1857
  '3', '6', '4',
1858
  '3', '6', '5',
1859
  '3', '6', '6',
1860
  '3', '6', '7',
1861
  '3', '6', '8',
1862
  '3', '6', '9',
1863
  '3', '7', '0',
1864
  '3', '7', '1',
1865
  '3', '7', '2',
1866
  '3', '7', '3',
1867
  '3', '7', '4',
1868
  '3', '7', '5',
1869
  '3', '7', '6',
1870
  '3', '7', '7',
1871
  '3', '7', '8',
1872
  '3', '7', '9',
1873
  '3', '8', '0',
1874
  '3', '8', '1',
1875
  '3', '8', '2',
1876
  '3', '8', '3',
1877
  '3', '8', '4',
1878
  '3', '8', '5',
1879
  '3', '8', '6',
1880
  '3', '8', '7',
1881
  '3', '8', '8',
1882
  '3', '8', '9',
1883
  '3', '9', '0',
1884
  '3', '9', '1',
1885
  '3', '9', '2',
1886
  '3', '9', '3',
1887
  '3', '9', '4',
1888
  '3', '9', '5',
1889
  '3', '9', '6',
1890
  '3', '9', '7',
1891
  '3', '9', '8',
1892
  '3', '9', '9',
1893
  '4', '0', '0',
1894
  '4', '0', '1',
1895
  '4', '0', '2',
1896
  '4', '0', '3',
1897
  '4', '0', '4',
1898
  '4', '0', '5',
1899
  '4', '0', '6',
1900
  '4', '0', '7',
1901
  '4', '0', '8',
1902
  '4', '0', '9',
1903
  '4', '1', '0',
1904
  '4', '1', '1',
1905
  '4', '1', '2',
1906
  '4', '1', '3',
1907
  '4', '1', '4',
1908
  '4', '1', '5',
1909
  '4', '1', '6',
1910
  '4', '1', '7',
1911
  '4', '1', '8',
1912
  '4', '1', '9',
1913
  '4', '2', '0',
1914
  '4', '2', '1',
1915
  '4', '2', '2',
1916
  '4', '2', '3',
1917
  '4', '2', '4',
1918
  '4', '2', '5',
1919
  '4', '2', '6',
1920
  '4', '2', '7',
1921
  '4', '2', '8',
1922
  '4', '2', '9',
1923
  '4', '3', '0',
1924
  '4', '3', '1',
1925
  '4', '3', '2',
1926
  '4', '3', '3',
1927
  '4', '3', '4',
1928
  '4', '3', '5',
1929
  '4', '3', '6',
1930
  '4', '3', '7',
1931
  '4', '3', '8',
1932
  '4', '3', '9',
1933
  '4', '4', '0',
1934
  '4', '4', '1',
1935
  '4', '4', '2',
1936
  '4', '4', '3',
1937
  '4', '4', '4',
1938
  '4', '4', '5',
1939
  '4', '4', '6',
1940
  '4', '4', '7',
1941
  '4', '4', '8',
1942
  '4', '4', '9',
1943
  '4', '5', '0',
1944
  '4', '5', '1',
1945
  '4', '5', '2',
1946
  '4', '5', '3',
1947
  '4', '5', '4',
1948
  '4', '5', '5',
1949
  '4', '5', '6',
1950
  '4', '5', '7',
1951
  '4', '5', '8',
1952
  '4', '5', '9',
1953
  '4', '6', '0',
1954
  '4', '6', '1',
1955
  '4', '6', '2',
1956
  '4', '6', '3',
1957
  '4', '6', '4',
1958
  '4', '6', '5',
1959
  '4', '6', '6',
1960
  '4', '6', '7',
1961
  '4', '6', '8',
1962
  '4', '6', '9',
1963
  '4', '7', '0',
1964
  '4', '7', '1',
1965
  '4', '7', '2',
1966
  '4', '7', '3',
1967
  '4', '7', '4',
1968
  '4', '7', '5',
1969
  '4', '7', '6',
1970
  '4', '7', '7',
1971
  '4', '7', '8',
1972
  '4', '7', '9',
1973
  '4', '8', '0',
1974
  '4', '8', '1',
1975
  '4', '8', '2',
1976
  '4', '8', '3',
1977
  '4', '8', '4',
1978
  '4', '8', '5',
1979
  '4', '8', '6',
1980
  '4', '8', '7',
1981
  '4', '8', '8',
1982
  '4', '8', '9',
1983
  '4', '9', '0',
1984
  '4', '9', '1',
1985
  '4', '9', '2',
1986
  '4', '9', '3',
1987
  '4', '9', '4',
1988
  '4', '9', '5',
1989
  '4', '9', '6',
1990
  '4', '9', '7',
1991
  '4', '9', '8',
1992
  '4', '9', '9',
1993
  '5', '0', '0',
1994
  '5', '0', '1',
1995
  '5', '0', '2',
1996
  '5', '0', '3',
1997
  '5', '0', '4',
1998
  '5', '0', '5',
1999
  '5', '0', '6',
2000
  '5', '0', '7',
2001
  '5', '0', '8',
2002
  '5', '0', '9',
2003
  '5', '1', '0',
2004
  '5', '1', '1',
2005
  '5', '1', '2',
2006
  '5', '1', '3',
2007
  '5', '1', '4',
2008
  '5', '1', '5',
2009
  '5', '1', '6',
2010
  '5', '1', '7',
2011
  '5', '1', '8',
2012
  '5', '1', '9',
2013
  '5', '2', '0',
2014
  '5', '2', '1',
2015
  '5', '2', '2',
2016
  '5', '2', '3',
2017
  '5', '2', '4',
2018
  '5', '2', '5',
2019
  '5', '2', '6',
2020
  '5', '2', '7',
2021
  '5', '2', '8',
2022
  '5', '2', '9',
2023
  '5', '3', '0',
2024
  '5', '3', '1',
2025
  '5', '3', '2',
2026
  '5', '3', '3',
2027
  '5', '3', '4',
2028
  '5', '3', '5',
2029
  '5', '3', '6',
2030
  '5', '3', '7',
2031
  '5', '3', '8',
2032
  '5', '3', '9',
2033
  '5', '4', '0',
2034
  '5', '4', '1',
2035
  '5', '4', '2',
2036
  '5', '4', '3',
2037
  '5', '4', '4',
2038
  '5', '4', '5',
2039
  '5', '4', '6',
2040
  '5', '4', '7',
2041
  '5', '4', '8',
2042
  '5', '4', '9',
2043
  '5', '5', '0',
2044
  '5', '5', '1',
2045
  '5', '5', '2',
2046
  '5', '5', '3',
2047
  '5', '5', '4',
2048
  '5', '5', '5',
2049
  '5', '5', '6',
2050
  '5', '5', '7',
2051
  '5', '5', '8',
2052
  '5', '5', '9',
2053
  '5', '6', '0',
2054
  '5', '6', '1',
2055
  '5', '6', '2',
2056
  '5', '6', '3',
2057
  '5', '6', '4',
2058
  '5', '6', '5',
2059
  '5', '6', '6',
2060
  '5', '6', '7',
2061
  '5', '6', '8',
2062
  '5', '6', '9',
2063
  '5', '7', '0',
2064
  '5', '7', '1',
2065
  '5', '7', '2',
2066
  '5', '7', '3',
2067
  '5', '7', '4',
2068
  '5', '7', '5',
2069
  '5', '7', '6',
2070
  '5', '7', '7',
2071
  '5', '7', '8',
2072
  '5', '7', '9',
2073
  '5', '8', '0',
2074
  '5', '8', '1',
2075
  '5', '8', '2',
2076
  '5', '8', '3',
2077
  '5', '8', '4',
2078
  '5', '8', '5',
2079
  '5', '8', '6',
2080
  '5', '8', '7',
2081
  '5', '8', '8',
2082
  '5', '8', '9',
2083
  '5', '9', '0',
2084
  '5', '9', '1',
2085
  '5', '9', '2',
2086
  '5', '9', '3',
2087
  '5', '9', '4',
2088
  '5', '9', '5',
2089
  '5', '9', '6',
2090
  '5', '9', '7',
2091
  '5', '9', '8',
2092
  '5', '9', '9',
2093
  '6', '0', '0',
2094
  '6', '0', '1',
2095
  '6', '0', '2',
2096
  '6', '0', '3',
2097
  '6', '0', '4',
2098
  '6', '0', '5',
2099
  '6', '0', '6',
2100
  '6', '0', '7',
2101
  '6', '0', '8',
2102
  '6', '0', '9',
2103
  '6', '1', '0',
2104
  '6', '1', '1',
2105
  '6', '1', '2',
2106
  '6', '1', '3',
2107
  '6', '1', '4',
2108
  '6', '1', '5',
2109
  '6', '1', '6',
2110
  '6', '1', '7',
2111
  '6', '1', '8',
2112
  '6', '1', '9',
2113
  '6', '2', '0',
2114
  '6', '2', '1',
2115
  '6', '2', '2',
2116
  '6', '2', '3',
2117
  '6', '2', '4',
2118
  '6', '2', '5',
2119
  '6', '2', '6',
2120
  '6', '2', '7',
2121
  '6', '2', '8',
2122
  '6', '2', '9',
2123
  '6', '3', '0',
2124
  '6', '3', '1',
2125
  '6', '3', '2',
2126
  '6', '3', '3',
2127
  '6', '3', '4',
2128
  '6', '3', '5',
2129
  '6', '3', '6',
2130
  '6', '3', '7',
2131
  '6', '3', '8',
2132
  '6', '3', '9',
2133
  '6', '4', '0',
2134
  '6', '4', '1',
2135
  '6', '4', '2',
2136
  '6', '4', '3',
2137
  '6', '4', '4',
2138
  '6', '4', '5',
2139
  '6', '4', '6',
2140
  '6', '4', '7',
2141
  '6', '4', '8',
2142
  '6', '4', '9',
2143
  '6', '5', '0',
2144
  '6', '5', '1',
2145
  '6', '5', '2',
2146
  '6', '5', '3',
2147
  '6', '5', '4',
2148
  '6', '5', '5',
2149
  '6', '5', '6',
2150
  '6', '5', '7',
2151
  '6', '5', '8',
2152
  '6', '5', '9',
2153
  '6', '6', '0',
2154
  '6', '6', '1',
2155
  '6', '6', '2',
2156
  '6', '6', '3',
2157
  '6', '6', '4',
2158
  '6', '6', '5',
2159
  '6', '6', '6',
2160
  '6', '6', '7',
2161
  '6', '6', '8',
2162
  '6', '6', '9',
2163
  '6', '7', '0',
2164
  '6', '7', '1',
2165
  '6', '7', '2',
2166
  '6', '7', '3',
2167
  '6', '7', '4',
2168
  '6', '7', '5',
2169
  '6', '7', '6',
2170
  '6', '7', '7',
2171
  '6', '7', '8',
2172
  '6', '7', '9',
2173
  '6', '8', '0',
2174
  '6', '8', '1',
2175
  '6', '8', '2',
2176
  '6', '8', '3',
2177
  '6', '8', '4',
2178
  '6', '8', '5',
2179
  '6', '8', '6',
2180
  '6', '8', '7',
2181
  '6', '8', '8',
2182
  '6', '8', '9',
2183
  '6', '9', '0',
2184
  '6', '9', '1',
2185
  '6', '9', '2',
2186
  '6', '9', '3',
2187
  '6', '9', '4',
2188
  '6', '9', '5',
2189
  '6', '9', '6',
2190
  '6', '9', '7',
2191
  '6', '9', '8',
2192
  '6', '9', '9',
2193
  '7', '0', '0',
2194
  '7', '0', '1',
2195
  '7', '0', '2',
2196
  '7', '0', '3',
2197
  '7', '0', '4',
2198
  '7', '0', '5',
2199
  '7', '0', '6',
2200
  '7', '0', '7',
2201
  '7', '0', '8',
2202
  '7', '0', '9',
2203
  '7', '1', '0',
2204
  '7', '1', '1',
2205
  '7', '1', '2',
2206
  '7', '1', '3',
2207
  '7', '1', '4',
2208
  '7', '1', '5',
2209
  '7', '1', '6',
2210
  '7', '1', '7',
2211
  '7', '1', '8',
2212
  '7', '1', '9',
2213
  '7', '2', '0',
2214
  '7', '2', '1',
2215
  '7', '2', '2',
2216
  '7', '2', '3',
2217
  '7', '2', '4',
2218
  '7', '2', '5',
2219
  '7', '2', '6',
2220
  '7', '2', '7',
2221
  '7', '2', '8',
2222
  '7', '2', '9',
2223
  '7', '3', '0',
2224
  '7', '3', '1',
2225
  '7', '3', '2',
2226
  '7', '3', '3',
2227
  '7', '3', '4',
2228
  '7', '3', '5',
2229
  '7', '3', '6',
2230
  '7', '3', '7',
2231
  '7', '3', '8',
2232
  '7', '3', '9',
2233
  '7', '4', '0',
2234
  '7', '4', '1',
2235
  '7', '4', '2',
2236
  '7', '4', '3',
2237
  '7', '4', '4',
2238
  '7', '4', '5',
2239
  '7', '4', '6',
2240
  '7', '4', '7',
2241
  '7', '4', '8',
2242
  '7', '4', '9',
2243
  '7', '5', '0',
2244
  '7', '5', '1',
2245
  '7', '5', '2',
2246
  '7', '5', '3',
2247
  '7', '5', '4',
2248
  '7', '5', '5',
2249
  '7', '5', '6',
2250
  '7', '5', '7',
2251
  '7', '5', '8',
2252
  '7', '5', '9',
2253
  '7', '6', '0',
2254
  '7', '6', '1',
2255
  '7', '6', '2',
2256
  '7', '6', '3',
2257
  '7', '6', '4',
2258
  '7', '6', '5',
2259
  '7', '6', '6',
2260
  '7', '6', '7',
2261
  '7', '6', '8',
2262
  '7', '6', '9',
2263
  '7', '7', '0',
2264
  '7', '7', '1',
2265
  '7', '7', '2',
2266
  '7', '7', '3',
2267
  '7', '7', '4',
2268
  '7', '7', '5',
2269
  '7', '7', '6',
2270
  '7', '7', '7',
2271
  '7', '7', '8',
2272
  '7', '7', '9',
2273
  '7', '8', '0',
2274
  '7', '8', '1',
2275
  '7', '8', '2',
2276
  '7', '8', '3',
2277
  '7', '8', '4',
2278
  '7', '8', '5',
2279
  '7', '8', '6',
2280
  '7', '8', '7',
2281
  '7', '8', '8',
2282
  '7', '8', '9',
2283
  '7', '9', '0',
2284
  '7', '9', '1',
2285
  '7', '9', '2',
2286
  '7', '9', '3',
2287
  '7', '9', '4',
2288
  '7', '9', '5',
2289
  '7', '9', '6',
2290
  '7', '9', '7',
2291
  '7', '9', '8',
2292
  '7', '9', '9',
2293
  '8', '0', '0',
2294
  '8', '0', '1',
2295
  '8', '0', '2',
2296
  '8', '0', '3',
2297
  '8', '0', '4',
2298
  '8', '0', '5',
2299
  '8', '0', '6',
2300
  '8', '0', '7',
2301
  '8', '0', '8',
2302
  '8', '0', '9',
2303
  '8', '1', '0',
2304
  '8', '1', '1',
2305
  '8', '1', '2',
2306
  '8', '1', '3',
2307
  '8', '1', '4',
2308
  '8', '1', '5',
2309
  '8', '1', '6',
2310
  '8', '1', '7',
2311
  '8', '1', '8',
2312
  '8', '1', '9',
2313
  '8', '2', '0',
2314
  '8', '2', '1',
2315
  '8', '2', '2',
2316
  '8', '2', '3',
2317
  '8', '2', '4',
2318
  '8', '2', '5',
2319
  '8', '2', '6',
2320
  '8', '2', '7',
2321
  '8', '2', '8',
2322
  '8', '2', '9',
2323
  '8', '3', '0',
2324
  '8', '3', '1',
2325
  '8', '3', '2',
2326
  '8', '3', '3',
2327
  '8', '3', '4',
2328
  '8', '3', '5',
2329
  '8', '3', '6',
2330
  '8', '3', '7',
2331
  '8', '3', '8',
2332
  '8', '3', '9',
2333
  '8', '4', '0',
2334
  '8', '4', '1',
2335
  '8', '4', '2',
2336
  '8', '4', '3',
2337
  '8', '4', '4',
2338
  '8', '4', '5',
2339
  '8', '4', '6',
2340
  '8', '4', '7',
2341
  '8', '4', '8',
2342
  '8', '4', '9',
2343
  '8', '5', '0',
2344
  '8', '5', '1',
2345
  '8', '5', '2',
2346
  '8', '5', '3',
2347
  '8', '5', '4',
2348
  '8', '5', '5',
2349
  '8', '5', '6',
2350
  '8', '5', '7',
2351
  '8', '5', '8',
2352
  '8', '5', '9',
2353
  '8', '6', '0',
2354
  '8', '6', '1',
2355
  '8', '6', '2',
2356
  '8', '6', '3',
2357
  '8', '6', '4',
2358
  '8', '6', '5',
2359
  '8', '6', '6',
2360
  '8', '6', '7',
2361
  '8', '6', '8',
2362
  '8', '6', '9',
2363
  '8', '7', '0',
2364
  '8', '7', '1',
2365
  '8', '7', '2',
2366
  '8', '7', '3',
2367
  '8', '7', '4',
2368
  '8', '7', '5',
2369
  '8', '7', '6',
2370
  '8', '7', '7',
2371
  '8', '7', '8',
2372
  '8', '7', '9',
2373
  '8', '8', '0',
2374
  '8', '8', '1',
2375
  '8', '8', '2',
2376
  '8', '8', '3',
2377
  '8', '8', '4',
2378
  '8', '8', '5',
2379
  '8', '8', '6',
2380
  '8', '8', '7',
2381
  '8', '8', '8',
2382
  '8', '8', '9',
2383
  '8', '9', '0',
2384
  '8', '9', '1',
2385
  '8', '9', '2',
2386
  '8', '9', '3',
2387
  '8', '9', '4',
2388
  '8', '9', '5',
2389
  '8', '9', '6',
2390
  '8', '9', '7',
2391
  '8', '9', '8',
2392
  '8', '9', '9',
2393
  '9', '0', '0',
2394
  '9', '0', '1',
2395
  '9', '0', '2',
2396
  '9', '0', '3',
2397
  '9', '0', '4',
2398
  '9', '0', '5',
2399
  '9', '0', '6',
2400
  '9', '0', '7',
2401
  '9', '0', '8',
2402
  '9', '0', '9',
2403
  '9', '1', '0',
2404
  '9', '1', '1',
2405
  '9', '1', '2',
2406
  '9', '1', '3',
2407
  '9', '1', '4',
2408
  '9', '1', '5',
2409
  '9', '1', '6',
2410
  '9', '1', '7',
2411
  '9', '1', '8',
2412
  '9', '1', '9',
2413
  '9', '2', '0',
2414
  '9', '2', '1',
2415
  '9', '2', '2',
2416
  '9', '2', '3',
2417
  '9', '2', '4',
2418
  '9', '2', '5',
2419
  '9', '2', '6',
2420
  '9', '2', '7',
2421
  '9', '2', '8',
2422
  '9', '2', '9',
2423
  '9', '3', '0',
2424
  '9', '3', '1',
2425
  '9', '3', '2',
2426
  '9', '3', '3',
2427
  '9', '3', '4',
2428
  '9', '3', '5',
2429
  '9', '3', '6',
2430
  '9', '3', '7',
2431
  '9', '3', '8',
2432
  '9', '3', '9',
2433
  '9', '4', '0',
2434
  '9', '4', '1',
2435
  '9', '4', '2',
2436
  '9', '4', '3',
2437
  '9', '4', '4',
2438
  '9', '4', '5',
2439
  '9', '4', '6',
2440
  '9', '4', '7',
2441
  '9', '4', '8',
2442
  '9', '4', '9',
2443
  '9', '5', '0',
2444
  '9', '5', '1',
2445
  '9', '5', '2',
2446
  '9', '5', '3',
2447
  '9', '5', '4',
2448
  '9', '5', '5',
2449
  '9', '5', '6',
2450
  '9', '5', '7',
2451
  '9', '5', '8',
2452
  '9', '5', '9',
2453
  '9', '6', '0',
2454
  '9', '6', '1',
2455
  '9', '6', '2',
2456
  '9', '6', '3',
2457
  '9', '6', '4',
2458
  '9', '6', '5',
2459
  '9', '6', '6',
2460
  '9', '6', '7',
2461
  '9', '6', '8',
2462
  '9', '6', '9',
2463
  '9', '7', '0',
2464
  '9', '7', '1',
2465
  '9', '7', '2',
2466
  '9', '7', '3',
2467
  '9', '7', '4',
2468
  '9', '7', '5',
2469
  '9', '7', '6',
2470
  '9', '7', '7',
2471
  '9', '7', '8',
2472
  '9', '7', '9',
2473
  '9', '8', '0',
2474
  '9', '8', '1',
2475
  '9', '8', '2',
2476
  '9', '8', '3',
2477
  '9', '8', '4',
2478
  '9', '8', '5',
2479
  '9', '8', '6',
2480
  '9', '8', '7',
2481
  '9', '8', '8',
2482
  '9', '8', '9',
2483
  '9', '9', '0',
2484
  '9', '9', '1',
2485
  '9', '9', '2',
2486
  '9', '9', '3',
2487
  '9', '9', '4',
2488
  '9', '9', '5',
2489
  '9', '9', '6',
2490
  '9', '9', '7',
2491
  '9', '9', '8',
2492
  '9', '9', '9'
2493
};
2494
 
2495
// ten2m3k64[], shift_ten2m3k64[] used for conversion from BID128 to string
2496
UINT64 ten2m3k64[] = {
2497
  0x4189374bc6a7ef9eull,        // 4189374bc6a7ef9e * 2^-72 = (10^-3)RP,63
2498
  0x10c6f7a0b5ed8d37ull,        // 10c6f7a0b5ed8d37 * 2^-80 = (10^-6)RP,61
2499
  0x44b82fa09b5a52ccull,        // 44b82fa09b5a52cc * 2^-92 = (10^-9)RP,63
2500
  0x119799812dea111aull,        // 119799812dea111a * 2^-100 = (10^-12)RP,61
2501
  0x480ebe7b9d58566dull // 480ebe7b9d58566d * 2^-112 = (10^-15)RP,63
2502
};
2503
 
2504
unsigned int shift_ten2m3k64[] = {
2505
  8,    // 72 - 64
2506
  16,   // 80 - 64
2507
  28,   // 92 - 64
2508
  36,   // 100 - 64
2509
  48    // 112 - 64
2510
};
2511
 
2512
UINT128 ten2m3k128[] = {
2513
  {{0xb22d0e5604189375ull, 0x4189374bc6a7ef9dull}},
2514
  // 4189374bc6a7ef9d  b22d0e5604189375  * 2^-136 = (10^-3)RP,127
2515
  {{0xb4c7f34938583622ull, 0x10c6f7a0b5ed8d36ull}},
2516
  // 10c6f7a0b5ed8d36  b4c7f34938583622  * 2^-144 = (10^-6)RP,125
2517
  {{0x98b405447c4a9819ull, 0x44b82fa09b5a52cbull}},
2518
  // 44b82fa09b5a52cb  98b405447c4a9819  * 2^-156 = (10^-9)RP,127
2519
  {{0x7f27f0f6e885c8bbull, 0x119799812dea1119ull}},
2520
  // 119799812dea1119  7f27f0f6e885c8bb  * 2^-164 = (10^-12)RP,125
2521
  {{0x87ce9b80a5fb0509ull, 0x480ebe7b9d58566cull}},
2522
  // 480ebe7b9d58566c  87ce9b80a5fb0509  * 2^-176 = (10^-15)RP,127
2523
  {{0xe75fe645cc4873faull, 0x12725dd1d243aba0ull}},
2524
  // 12725dd1d243aba0  e75fe645cc4873fa  * 2^-184 = (10^-18)RP,125
2525
  {{0x69fb7e0b75e52f02ull, 0x4b8ed0283a6d3df7ull}},
2526
  // 4b8ed0283a6d3df7  69fb7e0b75e52f02  * 2^-196 = (10^-21)RP,127
2527
  {{0x58924d52ce4f26a9ull, 0x1357c299a88ea76aull}},
2528
  // 1357c299a88ea76a  58924d52ce4f26a9  * 2^-204 = (10^-24)RP,125
2529
  {{0x3baf513267aa9a3full, 0x4f3a68dbc8f03f24ull}},
2530
  // 4f3a68dbc8f03f24  3baf513267aa9a3f  * 2^-216 = (10^-27)RP,127
2531
  {{0x3424b06f3529a052ull, 0x14484bfeebc29f86ull}},
2532
  // 14484bfeebc29f86  3424b06f3529a052  * 2^-224 = (10^-30)RP,125
2533
  {{0xf658d6c57566eac8ull, 0x5313a5dee87d6eb0ull}}
2534
  // 5313a5dee87d6eb0  f658d6c57566eac8  * 2^-236 = (10^-33)RP,127
2535
};
2536
 
2537
unsigned int shift_ten2m3k128[] = {
2538
  8,    // 136 - 128
2539
  16,   // 144 - 128
2540
  28,   // 156 - 128
2541
  36,   // 164 - 128
2542
  48,   // 176 - 128
2543
  56,   // 184 - 128
2544
  4,    // 196 - 192
2545
  12,   // 204 - 192
2546
  24,   // 216 - 192
2547
  32,   // 224 - 192
2548
  44    // 236 - 192
2549
};
2550
 
2551
 
2552
/***************************************************************************
2553
 *************** TABLES FOR GENERAL ROUNDING FUNCTIONS *********************
2554
 ***************************************************************************/
2555
// Note: not all entries in these tables will be used with IEEE 754R decimal
2556
// floating-point arithmetic
2557
// a) In round128_2_18() numbers with 2 <= q <= 18 will be rounded only
2558
//    for 1 <= x <= 3:
2559
//     x = 1 or x = 2 when q = 17
2560
//     x = 2 or x = 3 when q = 18
2561
// b) In round128_19_38() numbers with 19 <= q <= 38 will be rounded only
2562
//    for 1 <= x <= 23:
2563
//     x = 3 or x = 4 when q = 19
2564
//     x = 4 or x = 5 when q = 20
2565
//     ...
2566
//     x = 18 or x = 19 when q = 34
2567
//     x = 1 or x = 2 or x = 19 or x = 20 when q = 35
2568
//     x = 2 or x = 3 or x = 20 or x = 21 when q = 36
2569
//     x = 3 or x = 4 or x = 21 or x = 22 when q = 37
2570
//     x = 4 or x = 5 or x = 22 or x = 23 when q = 38
2571
// c) ...
2572
// However, for generality and possible uses outside the frame of IEEE 754R
2573
// this implementation includes table values for all x in [1, q - 1]
2574
 
2575
// Note: 64-bit tables generated with ten2mx64.ma; output in ten2mx64.out
2576
 
2577
// Kx from 10^(-x) ~= Kx * 2^(-Ex); Kx rounded up to 64 bits, 1 <= x <= 17
2578
UINT64 Kx64[] = {
2579
  0xcccccccccccccccdULL,        // 10^-1 ~= cccccccccccccccd * 2^-67
2580
  0xa3d70a3d70a3d70bULL,        // 10^-2 ~= a3d70a3d70a3d70b * 2^-70
2581
  0x83126e978d4fdf3cULL,        // 10^-3 ~= 83126e978d4fdf3c * 2^-73
2582
  0xd1b71758e219652cULL,        // 10^-4 ~= d1b71758e219652c * 2^-77
2583
  0xa7c5ac471b478424ULL,        // 10^-5 ~= a7c5ac471b478424 * 2^-80
2584
  0x8637bd05af6c69b6ULL,        // 10^-6 ~= 8637bd05af6c69b6 * 2^-83
2585
  0xd6bf94d5e57a42bdULL,        // 10^-7 ~= d6bf94d5e57a42bd * 2^-87
2586
  0xabcc77118461cefdULL,        // 10^-8 ~= abcc77118461cefd * 2^-90
2587
  0x89705f4136b4a598ULL,        // 10^-9 ~= 89705f4136b4a598 * 2^-93
2588
  0xdbe6fecebdedd5bfULL,        // 10^-10 ~= dbe6fecebdedd5bf * 2^-97
2589
  0xafebff0bcb24aaffULL,        // 10^-11 ~= afebff0bcb24aaff * 2^-100
2590
  0x8cbccc096f5088ccULL,        // 10^-12 ~= 8cbccc096f5088cc * 2^-103
2591
  0xe12e13424bb40e14ULL,        // 10^-13 ~= e12e13424bb40e14 * 2^-107
2592
  0xb424dc35095cd810ULL,        // 10^-14 ~= b424dc35095cd810 * 2^-110
2593
  0x901d7cf73ab0acdaULL,        // 10^-15 ~= 901d7cf73ab0acda * 2^-113
2594
  0xe69594bec44de15cULL,        // 10^-16 ~= e69594bec44de15c * 2^-117
2595
  0xb877aa3236a4b44aULL // 10^-17 ~= b877aa3236a4b44a * 2^-120
2596
};
2597
 
2598
// Ex-64 from 10^(-x) ~= Kx * 2^(-Ex); Kx rounded up to 64 bits, 1 <= x <= 17
2599
unsigned int Ex64m64[] = {
2600
  3,    // 67 - 64, Ex = 67
2601
  6,    // 70 - 64, Ex = 70
2602
  9,    // 73 - 64, Ex = 73
2603
  13,   // 77 - 64, Ex = 77
2604
  16,   // 80 - 64, Ex = 80
2605
  19,   // 83 - 64, Ex = 83
2606
  23,   // 87 - 64, Ex = 87
2607
  26,   // 90 - 64, Ex = 90
2608
  29,   // 93 - 64, Ex = 93
2609
  33,   // 97 - 64, Ex = 97
2610
  36,   // 100 - 64, Ex = 100
2611
  39,   // 103 - 64, Ex = 103
2612
  43,   // 107 - 64, Ex = 107
2613
  46,   // 110 - 64, Ex = 110
2614
  49,   // 113 - 64, Ex = 113
2615
  53,   // 117 - 64, Ex = 117
2616
  56    // 120 - 64, Ex = 120
2617
};
2618
 
2619
// Values of 1/2 in the right position to be compared with the fraction from
2620
// C * kx, 1 <= x <= 17; the fraction consists of the low Ex bits in C * kx
2621
// (these values are aligned with the high 64 bits of the fraction)
2622
UINT64 half64[] = {
2623
  0x0000000000000004ULL,        // half / 2^64 = 4
2624
  0x0000000000000020ULL,        // half / 2^64 = 20
2625
  0x0000000000000100ULL,        // half / 2^64 = 100
2626
  0x0000000000001000ULL,        // half / 2^64 = 1000
2627
  0x0000000000008000ULL,        // half / 2^64 = 8000
2628
  0x0000000000040000ULL,        // half / 2^64 = 40000
2629
  0x0000000000400000ULL,        // half / 2^64 = 400000
2630
  0x0000000002000000ULL,        // half / 2^64 = 2000000
2631
  0x0000000010000000ULL,        // half / 2^64 = 10000000
2632
  0x0000000100000000ULL,        // half / 2^64 = 100000000
2633
  0x0000000800000000ULL,        // half / 2^64 = 800000000
2634
  0x0000004000000000ULL,        // half / 2^64 = 4000000000
2635
  0x0000040000000000ULL,        // half / 2^64 = 40000000000
2636
  0x0000200000000000ULL,        // half / 2^64 = 200000000000
2637
  0x0001000000000000ULL,        // half / 2^64 = 1000000000000
2638
  0x0010000000000000ULL,        // half / 2^64 = 10000000000000
2639
  0x0080000000000000ULL // half / 2^64 = 80000000000000
2640
};
2641
 
2642
// Values of mask in the right position to obtain the high Ex - 64 bits
2643
// of the fraction from C * kx, 1 <= x <= 17; the fraction consists of
2644
// the low Ex bits in C * kx
2645
UINT64 mask64[] = {
2646
  0x0000000000000007ULL,        // mask / 2^64
2647
  0x000000000000003fULL,        // mask / 2^64
2648
  0x00000000000001ffULL,        // mask / 2^64
2649
  0x0000000000001fffULL,        // mask / 2^64
2650
  0x000000000000ffffULL,        // mask / 2^64
2651
  0x000000000007ffffULL,        // mask / 2^64
2652
  0x00000000007fffffULL,        // mask / 2^64
2653
  0x0000000003ffffffULL,        // mask / 2^64
2654
  0x000000001fffffffULL,        // mask / 2^64
2655
  0x00000001ffffffffULL,        // mask / 2^64
2656
  0x0000000fffffffffULL,        // mask / 2^64
2657
  0x0000007fffffffffULL,        // mask / 2^64
2658
  0x000007ffffffffffULL,        // mask / 2^64
2659
  0x00003fffffffffffULL,        // mask / 2^64
2660
  0x0001ffffffffffffULL,        // mask / 2^64
2661
  0x001fffffffffffffULL,        // mask / 2^64
2662
  0x00ffffffffffffffULL // mask / 2^64
2663
};
2664
 
2665
// Values of 10^(-x) trancated to Ex bits beyond the binary point, and
2666
// in the right position to be compared with the fraction from C * kx,
2667
// 1 <= x <= 17; the fraction consists of the low Ex bits in C * kx
2668
// (these values are aligned with the low 64 bits of the fraction)
2669
UINT64 ten2mxtrunc64[] = {
2670
  0xccccccccccccccccULL,        // (ten2mx >> 64) = cccccccccccccccc
2671
  0xa3d70a3d70a3d70aULL,        // (ten2mx >> 64) = a3d70a3d70a3d70a
2672
  0x83126e978d4fdf3bULL,        // (ten2mx >> 64) = 83126e978d4fdf3b
2673
  0xd1b71758e219652bULL,        // (ten2mx >> 64) = d1b71758e219652b
2674
  0xa7c5ac471b478423ULL,        // (ten2mx >> 64) = a7c5ac471b478423
2675
  0x8637bd05af6c69b5ULL,        // (ten2mx >> 64) = 8637bd05af6c69b5
2676
  0xd6bf94d5e57a42bcULL,        // (ten2mx >> 64) = d6bf94d5e57a42bc
2677
  0xabcc77118461cefcULL,        // (ten2mx >> 64) = abcc77118461cefc
2678
  0x89705f4136b4a597ULL,        // (ten2mx >> 64) = 89705f4136b4a597
2679
  0xdbe6fecebdedd5beULL,        // (ten2mx >> 64) = dbe6fecebdedd5be
2680
  0xafebff0bcb24aafeULL,        // (ten2mx >> 64) = afebff0bcb24aafe
2681
  0x8cbccc096f5088cbULL,        // (ten2mx >> 64) = 8cbccc096f5088cb
2682
  0xe12e13424bb40e13ULL,        // (ten2mx >> 64) = e12e13424bb40e13
2683
  0xb424dc35095cd80fULL,        // (ten2mx >> 64) = b424dc35095cd80f
2684
  0x901d7cf73ab0acd9ULL,        // (ten2mx >> 64) = 901d7cf73ab0acd9
2685
  0xe69594bec44de15bULL,        // (ten2mx >> 64) = e69594bec44de15b
2686
  0xb877aa3236a4b449ULL // (ten2mx >> 64) = b877aa3236a4b449
2687
};
2688
 
2689
// Note: 128-bit tables generated with ten2mx128.ma; output in ten2mx128.out
2690
// The order of the 64-bit components is L, H
2691
 
2692
// Kx from 10^(-x) ~= Kx * 2^(-Ex); Kx rounded up to 128 bits, 1 <= x <= 37
2693
UINT128 Kx128[] = {
2694
  {{0xcccccccccccccccdULL, 0xccccccccccccccccULL}},
2695
  // 10^-1 ~= cccccccccccccccccccccccccccccccd * 2^-131
2696
  {{0x3d70a3d70a3d70a4ULL, 0xa3d70a3d70a3d70aULL}},
2697
  // 10^-2 ~= a3d70a3d70a3d70a3d70a3d70a3d70a4 * 2^-134
2698
  {{0x645a1cac083126eaULL, 0x83126e978d4fdf3bULL}},
2699
  // 10^-3 ~= 83126e978d4fdf3b645a1cac083126ea * 2^-137
2700
  {{0xd3c36113404ea4a9ULL, 0xd1b71758e219652bULL}},
2701
  // 10^-4 ~= d1b71758e219652bd3c36113404ea4a9 * 2^-141
2702
  {{0x0fcf80dc33721d54ULL, 0xa7c5ac471b478423ULL}},
2703
  // 10^-5 ~= a7c5ac471b4784230fcf80dc33721d54 * 2^-144
2704
  {{0xa63f9a49c2c1b110ULL, 0x8637bd05af6c69b5ULL}},
2705
  // 10^-6 ~= 8637bd05af6c69b5a63f9a49c2c1b110 * 2^-147
2706
  {{0x3d32907604691b4dULL, 0xd6bf94d5e57a42bcULL}},
2707
  // 10^-7 ~= d6bf94d5e57a42bc3d32907604691b4d * 2^-151
2708
  {{0xfdc20d2b36ba7c3eULL, 0xabcc77118461cefcULL}},
2709
  // 10^-8 ~= abcc77118461cefcfdc20d2b36ba7c3e * 2^-154
2710
  {{0x31680a88f8953031ULL, 0x89705f4136b4a597ULL}},
2711
  // 10^-9 ~= 89705f4136b4a59731680a88f8953031 * 2^-157
2712
  {{0xb573440e5a884d1cULL, 0xdbe6fecebdedd5beULL}},
2713
  // 10^-10 ~= dbe6fecebdedd5beb573440e5a884d1c * 2^-161
2714
  {{0xf78f69a51539d749ULL, 0xafebff0bcb24aafeULL}},
2715
  // 10^-11 ~= afebff0bcb24aafef78f69a51539d749 * 2^-164
2716
  {{0xf93f87b7442e45d4ULL, 0x8cbccc096f5088cbULL}},
2717
  // 10^-12 ~= 8cbccc096f5088cbf93f87b7442e45d4 * 2^-167
2718
  {{0x2865a5f206b06fbaULL, 0xe12e13424bb40e13ULL}},
2719
  // 10^-13 ~= e12e13424bb40e132865a5f206b06fba * 2^-171
2720
  {{0x538484c19ef38c95ULL, 0xb424dc35095cd80fULL}},
2721
  // 10^-14 ~= b424dc35095cd80f538484c19ef38c95 * 2^-174
2722
  {{0x0f9d37014bf60a11ULL, 0x901d7cf73ab0acd9ULL}},
2723
  // 10^-15 ~= 901d7cf73ab0acd90f9d37014bf60a11 * 2^-177
2724
  {{0x4c2ebe687989a9b4ULL, 0xe69594bec44de15bULL}},
2725
  // 10^-16 ~= e69594bec44de15b4c2ebe687989a9b4 * 2^-181
2726
  {{0x09befeb9fad487c3ULL, 0xb877aa3236a4b449ULL}},
2727
  // 10^-17 ~= b877aa3236a4b44909befeb9fad487c3 * 2^-184
2728
  {{0x3aff322e62439fd0ULL, 0x9392ee8e921d5d07ULL}},
2729
  // 10^-18 ~= 9392ee8e921d5d073aff322e62439fd0 * 2^-187
2730
  {{0x2b31e9e3d06c32e6ULL, 0xec1e4a7db69561a5ULL}},
2731
  // 10^-19 ~= ec1e4a7db69561a52b31e9e3d06c32e6 * 2^-191
2732
  {{0x88f4bb1ca6bcf585ULL, 0xbce5086492111aeaULL}},
2733
  // 10^-20 ~= bce5086492111aea88f4bb1ca6bcf585 * 2^-194
2734
  {{0xd3f6fc16ebca5e04ULL, 0x971da05074da7beeULL}},
2735
  // 10^-21 ~= 971da05074da7beed3f6fc16ebca5e04 * 2^-197
2736
  {{0x5324c68b12dd6339ULL, 0xf1c90080baf72cb1ULL}},
2737
  // 10^-22 ~= f1c90080baf72cb15324c68b12dd6339 * 2^-201
2738
  {{0x75b7053c0f178294ULL, 0xc16d9a0095928a27ULL}},
2739
  // 10^-23 ~= c16d9a0095928a2775b7053c0f178294 * 2^-204
2740
  {{0xc4926a9672793543ULL, 0x9abe14cd44753b52ULL}},
2741
  // 10^-24 ~= 9abe14cd44753b52c4926a9672793543 * 2^-207
2742
  {{0x3a83ddbd83f52205ULL, 0xf79687aed3eec551ULL}},
2743
  // 10^-25 ~= f79687aed3eec5513a83ddbd83f52205 * 2^-211
2744
  {{0x95364afe032a819eULL, 0xc612062576589ddaULL}},
2745
  // 10^-26 ~= c612062576589dda95364afe032a819e * 2^-214
2746
  {{0x775ea264cf55347eULL, 0x9e74d1b791e07e48ULL}},
2747
  // 10^-27 ~= 9e74d1b791e07e48775ea264cf55347e * 2^-217
2748
  {{0x8bca9d6e188853fdULL, 0xfd87b5f28300ca0dULL}},
2749
  // 10^-28 ~= fd87b5f28300ca0d8bca9d6e188853fd * 2^-221
2750
  {{0x096ee45813a04331ULL, 0xcad2f7f5359a3b3eULL}},
2751
  // 10^-29 ~= cad2f7f5359a3b3e096ee45813a04331 * 2^-224
2752
  {{0xa1258379a94d028eULL, 0xa2425ff75e14fc31ULL}},
2753
  // 10^-30 ~= a2425ff75e14fc31a1258379a94d028e * 2^-227
2754
  {{0x80eacf948770ced8ULL, 0x81ceb32c4b43fcf4ULL}},
2755
  // 10^-31 ~= 81ceb32c4b43fcf480eacf948770ced8 * 2^-230
2756
  {{0x67de18eda5814af3ULL, 0xcfb11ead453994baULL}},
2757
  // 10^-32 ~= cfb11ead453994ba67de18eda5814af3 * 2^-234
2758
  {{0xecb1ad8aeacdd58fULL, 0xa6274bbdd0fadd61ULL}},
2759
  // 10^-33 ~= a6274bbdd0fadd61ecb1ad8aeacdd58f * 2^-237
2760
  {{0xbd5af13bef0b113fULL, 0x84ec3c97da624ab4ULL}},
2761
  // 10^-34 ~= 84ec3c97da624ab4bd5af13bef0b113f * 2^-240
2762
  {{0x955e4ec64b44e865ULL, 0xd4ad2dbfc3d07787ULL}},
2763
  // 10^-35 ~= d4ad2dbfc3d07787955e4ec64b44e865 * 2^-244
2764
  {{0xdde50bd1d5d0b9eaULL, 0xaa242499697392d2ULL}},
2765
  // 10^-36 ~= aa242499697392d2dde50bd1d5d0b9ea * 2^-247
2766
  {{0x7e50d64177da2e55ULL, 0x881cea14545c7575ULL}}
2767
  // 10^-37 ~= 881cea14545c75757e50d64177da2e55 * 2^-250
2768
};
2769
 
2770
// Ex-128 from 10^(-x) ~= Kx*2^(-Ex); Kx rounded up to 128 bits, 1 <= x <= 37
2771
unsigned int Ex128m128[] = {
2772
  3,    // 131 - 128, Ex = 131
2773
  6,    // 134 - 128, Ex = 134
2774
  9,    // 137 - 128, Ex = 137
2775
  13,   // 141 - 128, Ex = 141
2776
  16,   // 144 - 128, Ex = 144
2777
  19,   // 147 - 128, Ex = 147
2778
  23,   // 151 - 128, Ex = 151
2779
  26,   // 154 - 128, Ex = 154
2780
  29,   // 157 - 128, Ex = 157
2781
  33,   // 161 - 128, Ex = 161
2782
  36,   // 164 - 128, Ex = 164
2783
  39,   // 167 - 128, Ex = 167
2784
  43,   // 171 - 128, Ex = 171
2785
  46,   // 174 - 128, Ex = 174
2786
  49,   // 177 - 128, Ex = 177
2787
  53,   // 181 - 128, Ex = 181
2788
  56,   // 184 - 128, Ex = 184
2789
  59,   // 187 - 128, Ex = 187
2790
  63,   // 191 - 128, Ex = 191
2791
  2,    // 194 - 192, Ex = 194
2792
  5,    // 197 - 192, Ex = 197
2793
  9,    // 201 - 192, Ex = 201
2794
  12,   // 204 - 192, Ex = 204
2795
  15,   // 207 - 192, Ex = 207
2796
  19,   // 211 - 192, Ex = 211
2797
  22,   // 214 - 192, Ex = 214
2798
  25,   // 217 - 192, Ex = 217
2799
  29,   // 221 - 192, Ex = 221
2800
  32,   // 224 - 192, Ex = 224
2801
  35,   // 227 - 192, Ex = 227
2802
  38,   // 230 - 192, Ex = 230
2803
  42,   // 234 - 192, Ex = 234
2804
  45,   // 237 - 192, Ex = 237
2805
  48,   // 240 - 192, Ex = 240
2806
  52,   // 244 - 192, Ex = 244
2807
  55,   // 247 - 192, Ex = 247
2808
  58    // 250 - 192, Ex = 250
2809
};
2810
 
2811
// Values of 1/2 in the right position to be compared with the fraction from
2812
// C * kx, 1 <= x <= 37; the fraction consists of the low Ex bits in C * kx
2813
// (these values are aligned with the high 128 bits of the fraction)
2814
UINT64 half128[] = {
2815
  0x0000000000000004ULL,        // half / 2^128 = 4
2816
  0x0000000000000020ULL,        // half / 2^128 = 20
2817
  0x0000000000000100ULL,        // half / 2^128 = 100
2818
  0x0000000000001000ULL,        // half / 2^128 = 1000
2819
  0x0000000000008000ULL,        // half / 2^128 = 8000
2820
  0x0000000000040000ULL,        // half / 2^128 = 40000
2821
  0x0000000000400000ULL,        // half / 2^128 = 400000
2822
  0x0000000002000000ULL,        // half / 2^128 = 2000000
2823
  0x0000000010000000ULL,        // half / 2^128 = 10000000
2824
  0x0000000100000000ULL,        // half / 2^128 = 100000000
2825
  0x0000000800000000ULL,        // half / 2^128 = 800000000
2826
  0x0000004000000000ULL,        // half / 2^128 = 4000000000
2827
  0x0000040000000000ULL,        // half / 2^128 = 40000000000
2828
  0x0000200000000000ULL,        // half / 2^128 = 200000000000
2829
  0x0001000000000000ULL,        // half / 2^128 = 1000000000000
2830
  0x0010000000000000ULL,        // half / 2^128 = 10000000000000
2831
  0x0080000000000000ULL,        // half / 2^128 = 80000000000000
2832
  0x0400000000000000ULL,        // half / 2^128 = 400000000000000
2833
  0x4000000000000000ULL,        // half / 2^128 = 4000000000000000
2834
  0x0000000000000002ULL,        // half / 2^192 = 2
2835
  0x0000000000000010ULL,        // half / 2^192 = 10
2836
  0x0000000000000100ULL,        // half / 2^192 = 100
2837
  0x0000000000000800ULL,        // half / 2^192 = 800
2838
  0x0000000000004000ULL,        // half / 2^192 = 4000
2839
  0x0000000000040000ULL,        // half / 2^192 = 40000
2840
  0x0000000000200000ULL,        // half / 2^192 = 200000
2841
  0x0000000001000000ULL,        // half / 2^192 = 1000000
2842
  0x0000000010000000ULL,        // half / 2^192 = 10000000
2843
  0x0000000080000000ULL,        // half / 2^192 = 80000000
2844
  0x0000000400000000ULL,        // half / 2^192 = 400000000
2845
  0x0000002000000000ULL,        // half / 2^192 = 2000000000
2846
  0x0000020000000000ULL,        // half / 2^192 = 20000000000
2847
  0x0000100000000000ULL,        // half / 2^192 = 100000000000
2848
  0x0000800000000000ULL,        // half / 2^192 = 800000000000
2849
  0x0008000000000000ULL,        // half / 2^192 = 8000000000000
2850
  0x0040000000000000ULL,        // half / 2^192 = 40000000000000
2851
  0x0200000000000000ULL // half / 2^192 = 200000000000000
2852
};
2853
 
2854
// Values of mask in the right position to obtain the high Ex - 128 or Ex - 192
2855
// bits of the fraction from C * kx, 1 <= x <= 37; the fraction consists of
2856
// the low Ex bits in C * kx
2857
UINT64 mask128[] = {
2858
  0x0000000000000007ULL,        // mask / 2^128
2859
  0x000000000000003fULL,        // mask / 2^128
2860
  0x00000000000001ffULL,        // mask / 2^128
2861
  0x0000000000001fffULL,        // mask / 2^128
2862
  0x000000000000ffffULL,        // mask / 2^128
2863
  0x000000000007ffffULL,        // mask / 2^128
2864
  0x00000000007fffffULL,        // mask / 2^128
2865
  0x0000000003ffffffULL,        // mask / 2^128
2866
  0x000000001fffffffULL,        // mask / 2^128
2867
  0x00000001ffffffffULL,        // mask / 2^128
2868
  0x0000000fffffffffULL,        // mask / 2^128
2869
  0x0000007fffffffffULL,        // mask / 2^128
2870
  0x000007ffffffffffULL,        // mask / 2^128
2871
  0x00003fffffffffffULL,        // mask / 2^128
2872
  0x0001ffffffffffffULL,        // mask / 2^128
2873
  0x001fffffffffffffULL,        // mask / 2^128
2874
  0x00ffffffffffffffULL,        // mask / 2^128
2875
  0x07ffffffffffffffULL,        // mask / 2^128
2876
  0x7fffffffffffffffULL,        // mask / 2^128
2877
  0x0000000000000003ULL,        // mask / 2^192
2878
  0x000000000000001fULL,        // mask / 2^192
2879
  0x00000000000001ffULL,        // mask / 2^192
2880
  0x0000000000000fffULL,        // mask / 2^192
2881
  0x0000000000007fffULL,        // mask / 2^192
2882
  0x000000000007ffffULL,        // mask / 2^192
2883
  0x00000000003fffffULL,        // mask / 2^192
2884
  0x0000000001ffffffULL,        // mask / 2^192
2885
  0x000000001fffffffULL,        // mask / 2^192
2886
  0x00000000ffffffffULL,        // mask / 2^192
2887
  0x00000007ffffffffULL,        // mask / 2^192
2888
  0x0000003fffffffffULL,        // mask / 2^192
2889
  0x000003ffffffffffULL,        // mask / 2^192
2890
  0x00001fffffffffffULL,        // mask / 2^192
2891
  0x0000ffffffffffffULL,        // mask / 2^192
2892
  0x000fffffffffffffULL,        // mask / 2^192
2893
  0x007fffffffffffffULL,        // mask / 2^192
2894
  0x03ffffffffffffffULL // mask / 2^192
2895
};
2896
 
2897
// Values of 10^(-x) trancated to Ex bits beyond the binary point, and
2898
// in the right position to be compared with the fraction from C * kx,
2899
// 1 <= x <= 37; the fraction consists of the low Ex bits in C * kx
2900
// (these values are aligned with the low 128 bits of the fraction)
2901
UINT128 ten2mxtrunc128[] = {
2902
  {{0xccccccccccccccccULL, 0xccccccccccccccccULL}},
2903
  // (ten2mx >> 128) = cccccccccccccccccccccccccccccccc
2904
  {{0x3d70a3d70a3d70a3ULL, 0xa3d70a3d70a3d70aULL}},
2905
  // (ten2mx >> 128) = a3d70a3d70a3d70a3d70a3d70a3d70a3
2906
  {{0x645a1cac083126e9ULL, 0x83126e978d4fdf3bULL}},
2907
  // (ten2mx >> 128) = 83126e978d4fdf3b645a1cac083126e9
2908
  {{0xd3c36113404ea4a8ULL, 0xd1b71758e219652bULL}},
2909
  // (ten2mx >> 128) = d1b71758e219652bd3c36113404ea4a8
2910
  {{0x0fcf80dc33721d53ULL, 0xa7c5ac471b478423ULL}},
2911
  // (ten2mx >> 128) = a7c5ac471b4784230fcf80dc33721d53
2912
  {{0xa63f9a49c2c1b10fULL, 0x8637bd05af6c69b5ULL}},
2913
  // (ten2mx >> 128) = 8637bd05af6c69b5a63f9a49c2c1b10f
2914
  {{0x3d32907604691b4cULL, 0xd6bf94d5e57a42bcULL}},
2915
  // (ten2mx >> 128) = d6bf94d5e57a42bc3d32907604691b4c
2916
  {{0xfdc20d2b36ba7c3dULL, 0xabcc77118461cefcULL}},
2917
  // (ten2mx >> 128) = abcc77118461cefcfdc20d2b36ba7c3d
2918
  {{0x31680a88f8953030ULL, 0x89705f4136b4a597ULL}},
2919
  // (ten2mx >> 128) = 89705f4136b4a59731680a88f8953030
2920
  {{0xb573440e5a884d1bULL, 0xdbe6fecebdedd5beULL}},
2921
  // (ten2mx >> 128) = dbe6fecebdedd5beb573440e5a884d1b
2922
  {{0xf78f69a51539d748ULL, 0xafebff0bcb24aafeULL}},
2923
  // (ten2mx >> 128) = afebff0bcb24aafef78f69a51539d748
2924
  {{0xf93f87b7442e45d3ULL, 0x8cbccc096f5088cbULL}},
2925
  // (ten2mx >> 128) = 8cbccc096f5088cbf93f87b7442e45d3
2926
  {{0x2865a5f206b06fb9ULL, 0xe12e13424bb40e13ULL}},
2927
  // (ten2mx >> 128) = e12e13424bb40e132865a5f206b06fb9
2928
  {{0x538484c19ef38c94ULL, 0xb424dc35095cd80fULL}},
2929
  // (ten2mx >> 128) = b424dc35095cd80f538484c19ef38c94
2930
  {{0x0f9d37014bf60a10ULL, 0x901d7cf73ab0acd9ULL}},
2931
  // (ten2mx >> 128) = 901d7cf73ab0acd90f9d37014bf60a10
2932
  {{0x4c2ebe687989a9b3ULL, 0xe69594bec44de15bULL}},
2933
  // (ten2mx >> 128) = e69594bec44de15b4c2ebe687989a9b3
2934
  {{0x09befeb9fad487c2ULL, 0xb877aa3236a4b449ULL}},
2935
  // (ten2mx >> 128) = b877aa3236a4b44909befeb9fad487c2
2936
  {{0x3aff322e62439fcfULL, 0x9392ee8e921d5d07ULL}},
2937
  // (ten2mx >> 128) = 9392ee8e921d5d073aff322e62439fcf
2938
  {{0x2b31e9e3d06c32e5ULL, 0xec1e4a7db69561a5ULL}},
2939
  // (ten2mx >> 128) = ec1e4a7db69561a52b31e9e3d06c32e5
2940
  {{0x88f4bb1ca6bcf584ULL, 0xbce5086492111aeaULL}},
2941
  // (ten2mx >> 128) = bce5086492111aea88f4bb1ca6bcf584
2942
  {{0xd3f6fc16ebca5e03ULL, 0x971da05074da7beeULL}},
2943
  // (ten2mx >> 128) = 971da05074da7beed3f6fc16ebca5e03
2944
  {{0x5324c68b12dd6338ULL, 0xf1c90080baf72cb1ULL}},
2945
  // (ten2mx >> 128) = f1c90080baf72cb15324c68b12dd6338
2946
  {{0x75b7053c0f178293ULL, 0xc16d9a0095928a27ULL}},
2947
  // (ten2mx >> 128) = c16d9a0095928a2775b7053c0f178293
2948
  {{0xc4926a9672793542ULL, 0x9abe14cd44753b52ULL}},
2949
  // (ten2mx >> 128) = 9abe14cd44753b52c4926a9672793542
2950
  {{0x3a83ddbd83f52204ULL, 0xf79687aed3eec551ULL}},
2951
  // (ten2mx >> 128) = f79687aed3eec5513a83ddbd83f52204
2952
  {{0x95364afe032a819dULL, 0xc612062576589ddaULL}},
2953
  // (ten2mx >> 128) = c612062576589dda95364afe032a819d
2954
  {{0x775ea264cf55347dULL, 0x9e74d1b791e07e48ULL}},
2955
  // (ten2mx >> 128) = 9e74d1b791e07e48775ea264cf55347d
2956
  {{0x8bca9d6e188853fcULL, 0xfd87b5f28300ca0dULL}},
2957
  // (ten2mx >> 128) = fd87b5f28300ca0d8bca9d6e188853fc
2958
  {{0x096ee45813a04330ULL, 0xcad2f7f5359a3b3eULL}},
2959
  // (ten2mx >> 128) = cad2f7f5359a3b3e096ee45813a04330
2960
  {{0xa1258379a94d028dULL, 0xa2425ff75e14fc31ULL}},
2961
  // (ten2mx >> 128) = a2425ff75e14fc31a1258379a94d028d
2962
  {{0x80eacf948770ced7ULL, 0x81ceb32c4b43fcf4ULL}},
2963
  // (ten2mx >> 128) = 81ceb32c4b43fcf480eacf948770ced7
2964
  {{0x67de18eda5814af2ULL, 0xcfb11ead453994baULL}},
2965
  // (ten2mx >> 128) = cfb11ead453994ba67de18eda5814af2
2966
  {{0xecb1ad8aeacdd58eULL, 0xa6274bbdd0fadd61ULL}},
2967
  // (ten2mx >> 128) = a6274bbdd0fadd61ecb1ad8aeacdd58e
2968
  {{0xbd5af13bef0b113eULL, 0x84ec3c97da624ab4ULL}},
2969
  // (ten2mx >> 128) = 84ec3c97da624ab4bd5af13bef0b113e
2970
  {{0x955e4ec64b44e864ULL, 0xd4ad2dbfc3d07787ULL}},
2971
  // (ten2mx >> 128) = d4ad2dbfc3d07787955e4ec64b44e864
2972
  {{0xdde50bd1d5d0b9e9ULL, 0xaa242499697392d2ULL}},
2973
  // (ten2mx >> 128) = aa242499697392d2dde50bd1d5d0b9e9
2974
  {{0x7e50d64177da2e54ULL, 0x881cea14545c7575ULL}}
2975
  // (ten2mx >> 128) = 881cea14545c75757e50d64177da2e54
2976
};
2977
 
2978
UINT192 Kx192[] = {
2979
  {{0xcccccccccccccccdULL, 0xccccccccccccccccULL,
2980
    0xccccccccccccccccULL}},
2981
  // 10^-1 ~= cccccccccccccccccccccccccccccccccccccccccccccccd * 2^-195
2982
  {{0xd70a3d70a3d70a3eULL, 0x3d70a3d70a3d70a3ULL,
2983
    0xa3d70a3d70a3d70aULL}},
2984
  // 10^-2 ~= a3d70a3d70a3d70a3d70a3d70a3d70a3d70a3d70a3d70a3e * 2^-198
2985
  {{0x78d4fdf3b645a1cbULL, 0x645a1cac083126e9ULL,
2986
    0x83126e978d4fdf3bULL}},
2987
  // 10^-3 ~= 83126e978d4fdf3b645a1cac083126e978d4fdf3b645a1cb * 2^-201
2988
  {{0xc154c985f06f6945ULL, 0xd3c36113404ea4a8ULL,
2989
    0xd1b71758e219652bULL}},
2990
  // 10^-4 ~= d1b71758e219652bd3c36113404ea4a8c154c985f06f6945 * 2^-205
2991
  {{0xcddd6e04c0592104ULL, 0x0fcf80dc33721d53ULL,
2992
    0xa7c5ac471b478423ULL}},
2993
  // 10^-5 ~= a7c5ac471b4784230fcf80dc33721d53cddd6e04c0592104 * 2^-208
2994
  {{0xd7e45803cd141a6aULL, 0xa63f9a49c2c1b10fULL,
2995
    0x8637bd05af6c69b5ULL}},
2996
  // 10^-6 ~= 8637bd05af6c69b5a63f9a49c2c1b10fd7e45803cd141a6a * 2^-211
2997
  {{0x8ca08cd2e1b9c3dcULL, 0x3d32907604691b4cULL,
2998
    0xd6bf94d5e57a42bcULL}},
2999
  // 10^-7 ~= d6bf94d5e57a42bc3d32907604691b4c8ca08cd2e1b9c3dc * 2^-215
3000
  {{0x3d4d3d758161697dULL, 0xfdc20d2b36ba7c3dULL,
3001
    0xabcc77118461cefcULL}},
3002
  // 10^-8 ~= abcc77118461cefcfdc20d2b36ba7c3d3d4d3d758161697d * 2^-218
3003
  {{0xfdd7645e011abacaULL, 0x31680a88f8953030ULL,
3004
    0x89705f4136b4a597ULL}},
3005
  // 10^-9 ~= 89705f4136b4a59731680a88f8953030fdd7645e011abaca * 2^-221
3006
  {{0x2fbf06fcce912addULL, 0xb573440e5a884d1bULL,
3007
    0xdbe6fecebdedd5beULL}},
3008
  // 10^-10 ~= dbe6fecebdedd5beb573440e5a884d1b2fbf06fcce912add * 2^-225
3009
  {{0xf2ff38ca3eda88b1ULL, 0xf78f69a51539d748ULL,
3010
    0xafebff0bcb24aafeULL}},
3011
  // 10^-11 ~= afebff0bcb24aafef78f69a51539d748f2ff38ca3eda88b1 * 2^-228
3012
  {{0xf598fa3b657ba08eULL, 0xf93f87b7442e45d3ULL,
3013
    0x8cbccc096f5088cbULL}},
3014
  // 10^-12 ~= 8cbccc096f5088cbf93f87b7442e45d3f598fa3b657ba08e * 2^-231
3015
  {{0x88f4c3923bf900e3ULL, 0x2865a5f206b06fb9ULL,
3016
    0xe12e13424bb40e13ULL}},
3017
  // 10^-13 ~= e12e13424bb40e132865a5f206b06fb988f4c3923bf900e3 * 2^-235
3018
  {{0x6d909c74fcc733e9ULL, 0x538484c19ef38c94ULL,
3019
    0xb424dc35095cd80fULL}},
3020
  // 10^-14 ~= b424dc35095cd80f538484c19ef38c946d909c74fcc733e9 * 2^-238
3021
  {{0x57a6e390ca38f654ULL, 0x0f9d37014bf60a10ULL,
3022
    0x901d7cf73ab0acd9ULL}},
3023
  // 10^-15 ~= 901d7cf73ab0acd90f9d37014bf60a1057a6e390ca38f654 * 2^-241
3024
  {{0xbf716c1add27f086ULL, 0x4c2ebe687989a9b3ULL,
3025
    0xe69594bec44de15bULL}},
3026
  // 10^-16 ~= e69594bec44de15b4c2ebe687989a9b3bf716c1add27f086 * 2^-245
3027
  {{0xff8df0157db98d38ULL, 0x09befeb9fad487c2ULL,
3028
    0xb877aa3236a4b449ULL}},
3029
  // 10^-17 ~= b877aa3236a4b44909befeb9fad487c2ff8df0157db98d38 * 2^-248
3030
  {{0x32d7f344649470faULL, 0x3aff322e62439fcfULL,
3031
    0x9392ee8e921d5d07ULL}},
3032
  // 10^-18 ~= 9392ee8e921d5d073aff322e62439fcf32d7f344649470fa * 2^-251
3033
  {{0x1e2652070753e7f5ULL, 0x2b31e9e3d06c32e5ULL,
3034
    0xec1e4a7db69561a5ULL}},
3035
  // 10^-19 ~= ec1e4a7db69561a52b31e9e3d06c32e51e2652070753e7f5 * 2^-255
3036
  {{0x181ea8059f76532bULL, 0x88f4bb1ca6bcf584ULL,
3037
    0xbce5086492111aeaULL}},
3038
  // 10^-20 ~= bce5086492111aea88f4bb1ca6bcf584181ea8059f76532b * 2^-258
3039
  {{0x467eecd14c5ea8efULL, 0xd3f6fc16ebca5e03ULL,
3040
    0x971da05074da7beeULL}},
3041
  // 10^-21 ~= 971da05074da7beed3f6fc16ebca5e03467eecd14c5ea8ef * 2^-261
3042
  {{0x70cb148213caa7e5ULL, 0x5324c68b12dd6338ULL,
3043
    0xf1c90080baf72cb1ULL}},
3044
  // 10^-22 ~= f1c90080baf72cb15324c68b12dd633870cb148213caa7e5 * 2^-265
3045
  {{0x8d6f439b43088651ULL, 0x75b7053c0f178293ULL,
3046
    0xc16d9a0095928a27ULL}},
3047
  // 10^-23 ~= c16d9a0095928a2775b7053c0f1782938d6f439b43088651 * 2^-268
3048
  {{0xd78c3615cf3a050dULL, 0xc4926a9672793542ULL,
3049
    0x9abe14cd44753b52ULL}},
3050
  // 10^-24 ~= 9abe14cd44753b52c4926a9672793542d78c3615cf3a050d * 2^-271
3051
  {{0x8c1389bc7ec33b48ULL, 0x3a83ddbd83f52204ULL,
3052
    0xf79687aed3eec551ULL}},
3053
  // 10^-25 ~= f79687aed3eec5513a83ddbd83f522048c1389bc7ec33b48 * 2^-275
3054
  {{0x3cdc6e306568fc3aULL, 0x95364afe032a819dULL,
3055
    0xc612062576589ddaULL}},
3056
  // 10^-26 ~= c612062576589dda95364afe032a819d3cdc6e306568fc3a * 2^-278
3057
  {{0xca49f1c05120c9c8ULL, 0x775ea264cf55347dULL,
3058
    0x9e74d1b791e07e48ULL}},
3059
  // 10^-27 ~= 9e74d1b791e07e48775ea264cf55347dca49f1c05120c9c8 * 2^-281
3060
  {{0x76dcb60081ce0fa6ULL, 0x8bca9d6e188853fcULL,
3061
    0xfd87b5f28300ca0dULL}},
3062
  // 10^-28 ~= fd87b5f28300ca0d8bca9d6e188853fc76dcb60081ce0fa6 * 2^-285
3063
  {{0x5f16f80067d80c85ULL, 0x096ee45813a04330ULL,
3064
    0xcad2f7f5359a3b3eULL}},
3065
  // 10^-29 ~= cad2f7f5359a3b3e096ee45813a043305f16f80067d80c85 * 2^-288
3066
  {{0x18df2ccd1fe00a04ULL, 0xa1258379a94d028dULL,
3067
    0xa2425ff75e14fc31ULL}},
3068
  // 10^-30 ~= a2425ff75e14fc31a1258379a94d028d18df2ccd1fe00a04 * 2^-291
3069
  {{0x4718f0a419800803ULL, 0x80eacf948770ced7ULL,
3070
    0x81ceb32c4b43fcf4ULL}},
3071
  // 10^-31 ~= 81ceb32c4b43fcf480eacf948770ced74718f0a419800803 * 2^-294
3072
  {{0x0b5b1aa028ccd99fULL, 0x67de18eda5814af2ULL,
3073
    0xcfb11ead453994baULL}},
3074
  // 10^-32 ~= cfb11ead453994ba67de18eda5814af20b5b1aa028ccd99f * 2^-298
3075
  {{0x6f7c154ced70ae19ULL, 0xecb1ad8aeacdd58eULL,
3076
    0xa6274bbdd0fadd61ULL}},
3077
  // 10^-33 ~= a6274bbdd0fadd61ecb1ad8aeacdd58e6f7c154ced70ae19 * 2^-301
3078
  {{0xbf967770bdf3be7aULL, 0xbd5af13bef0b113eULL,
3079
    0x84ec3c97da624ab4ULL}},
3080
  // 10^-34 ~= 84ec3c97da624ab4bd5af13bef0b113ebf967770bdf3be7a * 2^-304
3081
  {{0x65bd8be79652ca5dULL, 0x955e4ec64b44e864ULL,
3082
    0xd4ad2dbfc3d07787ULL}},
3083
  // 10^-35 ~= d4ad2dbfc3d07787955e4ec64b44e86465bd8be79652ca5d * 2^-308
3084
  {{0xeafe098611dbd517ULL, 0xdde50bd1d5d0b9e9ULL,
3085
    0xaa242499697392d2ULL}},
3086
  // 10^-36 ~= aa242499697392d2dde50bd1d5d0b9e9eafe098611dbd517 * 2^-311
3087
  {{0xbbfe6e04db164413ULL, 0x7e50d64177da2e54ULL,
3088
    0x881cea14545c7575ULL}},
3089
  // 10^-37 ~= 881cea14545c75757e50d64177da2e54bbfe6e04db164413 * 2^-314
3090
  {{0x2cca49a15e8a0684ULL, 0x96e7bd358c904a21ULL,
3091
    0xd9c7dced53c72255ULL}},
3092
  // 10^-38 ~= d9c7dced53c7225596e7bd358c904a212cca49a15e8a0684 * 2^-318
3093
  {{0x8a3b6e1ab2080537ULL, 0xabec975e0a0d081aULL,
3094
    0xae397d8aa96c1b77ULL}},
3095
  // 10^-39 ~= ae397d8aa96c1b77abec975e0a0d081a8a3b6e1ab2080537 * 2^-321
3096
  {{0x3b62be7bc1a0042cULL, 0x2323ac4b3b3da015ULL,
3097
    0x8b61313bbabce2c6ULL}},
3098
  // 10^-40 ~= 8b61313bbabce2c62323ac4b3b3da0153b62be7bc1a0042c * 2^-324
3099
  {{0x5f0463f935ccd379ULL, 0x6b6c46dec52f6688ULL,
3100
    0xdf01e85f912e37a3ULL}},
3101
  // 10^-41 ~= df01e85f912e37a36b6c46dec52f66885f0463f935ccd379 * 2^-328
3102
  {{0x7f36b660f7d70f94ULL, 0x55f038b237591ed3ULL,
3103
    0xb267ed1940f1c61cULL}},
3104
  // 10^-42 ~= b267ed1940f1c61c55f038b237591ed37f36b660f7d70f94 * 2^-331
3105
  {{0xcc2bc51a5fdf3faaULL, 0x77f3608e92adb242ULL,
3106
    0x8eb98a7a9a5b04e3ULL}},
3107
  // 10^-43 ~= 8eb98a7a9a5b04e377f3608e92adb242cc2bc51a5fdf3faa * 2^-334
3108
  {{0xe046082a32fecc42ULL, 0x8cb89a7db77c506aULL,
3109
    0xe45c10c42a2b3b05ULL}},
3110
  // 10^-44 ~= e45c10c42a2b3b058cb89a7db77c506ae046082a32fecc42 * 2^-338
3111
  {{0x4d04d354f598a368ULL, 0x3d607b97c5fd0d22ULL,
3112
    0xb6b00d69bb55c8d1ULL}},
3113
  // 10^-45 ~= b6b00d69bb55c8d13d607b97c5fd0d224d04d354f598a368 * 2^-341
3114
  {{0x3d9d75dd9146e920ULL, 0xcab3961304ca70e8ULL,
3115
    0x9226712162ab070dULL}},
3116
  // 10^-46 ~= 9226712162ab070dcab3961304ca70e83d9d75dd9146e920 * 2^-344
3117
  {{0xc8fbefc8e8717500ULL, 0xaab8f01e6e10b4a6ULL,
3118
    0xe9d71b689dde71afULL}},
3119
  // 10^-47 ~= e9d71b689dde71afaab8f01e6e10b4a6c8fbefc8e8717500 * 2^-348
3120
  {{0x3a63263a538df734ULL, 0x5560c018580d5d52ULL,
3121
    0xbb127c53b17ec159ULL}},
3122
  // 10^-48 ~= bb127c53b17ec1595560c018580d5d523a63263a538df734 * 2^-351
3123
  {{0x2eb5b82ea93e5f5dULL, 0xdde7001379a44aa8ULL,
3124
    0x95a8637627989aadULL}},
3125
  // 10^-49 ~= 95a8637627989aaddde7001379a44aa82eb5b82ea93e5f5d * 2^-354
3126
  {{0x4abc59e441fd6561ULL, 0x963e66858f6d4440ULL,
3127
    0xef73d256a5c0f77cULL}},
3128
  // 10^-50 ~= ef73d256a5c0f77c963e66858f6d44404abc59e441fd6561 * 2^-358
3129
  {{0x6efd14b69b311de7ULL, 0xde98520472bdd033ULL,
3130
    0xbf8fdb78849a5f96ULL}},
3131
  // 10^-51 ~= bf8fdb78849a5f96de98520472bdd0336efd14b69b311de7 * 2^-361
3132
  {{0x259743c548f417ecULL, 0xe546a8038efe4029ULL,
3133
    0x993fe2c6d07b7fabULL}},
3134
  // 10^-52 ~= 993fe2c6d07b7fabe546a8038efe4029259743c548f417ec * 2^-364
3135
  {{0x3c25393ba7ecf313ULL, 0xd53dd99f4b3066a8ULL,
3136
    0xf53304714d9265dfULL}},
3137
  // 10^-53 ~= f53304714d9265dfd53dd99f4b3066a83c25393ba7ecf313 * 2^-368
3138
  {{0x96842dc95323f5a9ULL, 0xaa97e14c3c26b886ULL,
3139
    0xc428d05aa4751e4cULL}},
3140
  // 10^-54 ~= c428d05aa4751e4caa97e14c3c26b88696842dc95323f5a9 * 2^-371
3141
  {{0xab9cf16ddc1cc487ULL, 0x55464dd69685606bULL,
3142
    0x9ced737bb6c4183dULL}},
3143
  // 10^-55 ~= 9ced737bb6c4183d55464dd69685606bab9cf16ddc1cc487 * 2^-374
3144
  {{0xac2e4f162cfad40bULL, 0xeed6e2f0f0d56712ULL, 0xfb158592be068d2eULL}}
3145
  // 10^-56 ~= fb158592be068d2eeed6e2f0f0d56712ac2e4f162cfad40b * 2^-378
3146
};
3147
 
3148
unsigned int Ex192m192[] = {
3149
  3,    // 195 - 192, Ex = 195
3150
  6,    // 198 - 192, Ex = 198
3151
  9,    // 201 - 192, Ex = 201
3152
  13,   // 205 - 192, Ex = 205
3153
  16,   // 208 - 192, Ex = 208
3154
  19,   // 211 - 192, Ex = 211
3155
  23,   // 215 - 192, Ex = 215
3156
  26,   // 218 - 192, Ex = 218
3157
  29,   // 221 - 192, Ex = 221
3158
  33,   // 225 - 192, Ex = 225
3159
  36,   // 228 - 192, Ex = 228
3160
  39,   // 231 - 192, Ex = 231
3161
  43,   // 235 - 192, Ex = 235
3162
  46,   // 238 - 192, Ex = 238
3163
  49,   // 241 - 192, Ex = 241
3164
  53,   // 245 - 192, Ex = 245
3165
  56,   // 248 - 192, Ex = 248
3166
  59,   // 251 - 192, Ex = 251
3167
  63,   // 255 - 192, Ex = 255
3168
  2,    // 258 - 256, Ex = 258
3169
  5,    // 261 - 256, Ex = 261
3170
  9,    // 265 - 256, Ex = 265
3171
  12,   // 268 - 256, Ex = 268
3172
  15,   // 271 - 256, Ex = 271
3173
  19,   // 275 - 256, Ex = 275
3174
  22,   // 278 - 256, Ex = 278
3175
  25,   // 281 - 256, Ex = 281
3176
  29,   // 285 - 256, Ex = 285
3177
  32,   // 288 - 256, Ex = 288
3178
  35,   // 291 - 256, Ex = 291
3179
  38,   // 294 - 256, Ex = 294
3180
  42,   // 298 - 256, Ex = 298
3181
  45,   // 301 - 256, Ex = 301
3182
  48,   // 304 - 256, Ex = 304
3183
  52,   // 308 - 256, Ex = 308
3184
  55,   // 311 - 256, Ex = 311
3185
  58,   // 314 - 256, Ex = 314
3186
  62,   // 318 - 256, Ex = 318
3187
  1,    // 321 - 320, Ex = 321
3188
  4,    // 324 - 320, Ex = 324
3189
  8,    // 328 - 320, Ex = 328
3190
  11,   // 331 - 320, Ex = 331
3191
  14,   // 334 - 320, Ex = 334
3192
  18,   // 338 - 320, Ex = 338
3193
  21,   // 341 - 320, Ex = 341
3194
  24,   // 344 - 320, Ex = 344
3195
  28,   // 348 - 320, Ex = 348
3196
  31,   // 351 - 320, Ex = 351
3197
  34,   // 354 - 320, Ex = 354
3198
  38,   // 358 - 320, Ex = 358
3199
  41,   // 361 - 320, Ex = 361
3200
  44,   // 364 - 320, Ex = 364
3201
  48,   // 368 - 320, Ex = 368
3202
  51,   // 371 - 320, Ex = 371
3203
  54,   // 374 - 320, Ex = 374
3204
  58    // 378 - 320, Ex = 378
3205
};
3206
 
3207
UINT64 half192[] = {
3208
  0x0000000000000004ULL,        // half / 2^192 = 4
3209
  0x0000000000000020ULL,        // half / 2^192 = 20
3210
  0x0000000000000100ULL,        // half / 2^192 = 100
3211
  0x0000000000001000ULL,        // half / 2^192 = 1000
3212
  0x0000000000008000ULL,        // half / 2^192 = 8000
3213
  0x0000000000040000ULL,        // half / 2^192 = 40000
3214
  0x0000000000400000ULL,        // half / 2^192 = 400000
3215
  0x0000000002000000ULL,        // half / 2^192 = 2000000
3216
  0x0000000010000000ULL,        // half / 2^192 = 10000000
3217
  0x0000000100000000ULL,        // half / 2^192 = 100000000
3218
  0x0000000800000000ULL,        // half / 2^192 = 800000000
3219
  0x0000004000000000ULL,        // half / 2^192 = 4000000000
3220
  0x0000040000000000ULL,        // half / 2^192 = 40000000000
3221
  0x0000200000000000ULL,        // half / 2^192 = 200000000000
3222
  0x0001000000000000ULL,        // half / 2^192 = 1000000000000
3223
  0x0010000000000000ULL,        // half / 2^192 = 10000000000000
3224
  0x0080000000000000ULL,        // half / 2^192 = 80000000000000
3225
  0x0400000000000000ULL,        // half / 2^192 = 400000000000000
3226
  0x4000000000000000ULL,        // half / 2^192 = 4000000000000000
3227
  0x0000000000000002ULL,        // half / 2^256 = 2
3228
  0x0000000000000010ULL,        // half / 2^256 = 10
3229
  0x0000000000000100ULL,        // half / 2^256 = 100
3230
  0x0000000000000800ULL,        // half / 2^256 = 800
3231
  0x0000000000004000ULL,        // half / 2^256 = 4000
3232
  0x0000000000040000ULL,        // half / 2^256 = 40000
3233
  0x0000000000200000ULL,        // half / 2^256 = 200000
3234
  0x0000000001000000ULL,        // half / 2^256 = 1000000
3235
  0x0000000010000000ULL,        // half / 2^256 = 10000000
3236
  0x0000000080000000ULL,        // half / 2^256 = 80000000
3237
  0x0000000400000000ULL,        // half / 2^256 = 400000000
3238
  0x0000002000000000ULL,        // half / 2^256 = 2000000000
3239
  0x0000020000000000ULL,        // half / 2^256 = 20000000000
3240
  0x0000100000000000ULL,        // half / 2^256 = 100000000000
3241
  0x0000800000000000ULL,        // half / 2^256 = 800000000000
3242
  0x0008000000000000ULL,        // half / 2^256 = 8000000000000
3243
  0x0040000000000000ULL,        // half / 2^256 = 40000000000000
3244
  0x0200000000000000ULL,        // half / 2^256 = 200000000000000
3245
  0x2000000000000000ULL,        // half / 2^256 = 2000000000000000
3246
  0x0000000000000001ULL,        // half / 2^320 = 1
3247
  0x0000000000000008ULL,        // half / 2^320 = 8
3248
  0x0000000000000080ULL,        // half / 2^320 = 80
3249
  0x0000000000000400ULL,        // half / 2^320 = 400
3250
  0x0000000000002000ULL,        // half / 2^320 = 2000
3251
  0x0000000000020000ULL,        // half / 2^320 = 20000
3252
  0x0000000000100000ULL,        // half / 2^320 = 100000
3253
  0x0000000000800000ULL,        // half / 2^320 = 800000
3254
  0x0000000008000000ULL,        // half / 2^320 = 8000000
3255
  0x0000000040000000ULL,        // half / 2^320 = 40000000
3256
  0x0000000200000000ULL,        // half / 2^320 = 200000000
3257
  0x0000002000000000ULL,        // half / 2^320 = 2000000000
3258
  0x0000010000000000ULL,        // half / 2^320 = 10000000000
3259
  0x0000080000000000ULL,        // half / 2^320 = 80000000000
3260
  0x0000800000000000ULL,        // half / 2^320 = 800000000000
3261
  0x0004000000000000ULL,        // half / 2^320 = 4000000000000
3262
  0x0020000000000000ULL,        // half / 2^320 = 20000000000000
3263
  0x0200000000000000ULL // half / 2^320 = 200000000000000
3264
};
3265
 
3266
UINT64 mask192[] = {
3267
  0x0000000000000007ULL,        // mask / 2^192
3268
  0x000000000000003fULL,        // mask / 2^192
3269
  0x00000000000001ffULL,        // mask / 2^192
3270
  0x0000000000001fffULL,        // mask / 2^192
3271
  0x000000000000ffffULL,        // mask / 2^192
3272
  0x000000000007ffffULL,        // mask / 2^192
3273
  0x00000000007fffffULL,        // mask / 2^192
3274
  0x0000000003ffffffULL,        // mask / 2^192
3275
  0x000000001fffffffULL,        // mask / 2^192
3276
  0x00000001ffffffffULL,        // mask / 2^192
3277
  0x0000000fffffffffULL,        // mask / 2^192
3278
  0x0000007fffffffffULL,        // mask / 2^192
3279
  0x000007ffffffffffULL,        // mask / 2^192
3280
  0x00003fffffffffffULL,        // mask / 2^192
3281
  0x0001ffffffffffffULL,        // mask / 2^192
3282
  0x001fffffffffffffULL,        // mask / 2^192
3283
  0x00ffffffffffffffULL,        // mask / 2^192
3284
  0x07ffffffffffffffULL,        // mask / 2^192
3285
  0x7fffffffffffffffULL,        // mask / 2^192
3286
  0x0000000000000003ULL,        // mask / 2^256
3287
  0x000000000000001fULL,        // mask / 2^256
3288
  0x00000000000001ffULL,        // mask / 2^256
3289
  0x0000000000000fffULL,        // mask / 2^256
3290
  0x0000000000007fffULL,        // mask / 2^256
3291
  0x000000000007ffffULL,        // mask / 2^256
3292
  0x00000000003fffffULL,        // mask / 2^256
3293
  0x0000000001ffffffULL,        // mask / 2^256
3294
  0x000000001fffffffULL,        // mask / 2^256
3295
  0x00000000ffffffffULL,        // mask / 2^256
3296
  0x00000007ffffffffULL,        // mask / 2^256
3297
  0x0000003fffffffffULL,        // mask / 2^256
3298
  0x000003ffffffffffULL,        // mask / 2^256
3299
  0x00001fffffffffffULL,        // mask / 2^256
3300
  0x0000ffffffffffffULL,        // mask / 2^256
3301
  0x000fffffffffffffULL,        // mask / 2^256
3302
  0x007fffffffffffffULL,        // mask / 2^256
3303
  0x03ffffffffffffffULL,        // mask / 2^256
3304
  0x3fffffffffffffffULL,        // mask / 2^256
3305
  0x0000000000000001ULL,        // mask / 2^320
3306
  0x000000000000000fULL,        // mask / 2^320
3307
  0x00000000000000ffULL,        // mask / 2^320
3308
  0x00000000000007ffULL,        // mask / 2^320
3309
  0x0000000000003fffULL,        // mask / 2^320
3310
  0x000000000003ffffULL,        // mask / 2^320
3311
  0x00000000001fffffULL,        // mask / 2^320
3312
  0x0000000000ffffffULL,        // mask / 2^320
3313
  0x000000000fffffffULL,        // mask / 2^320
3314
  0x000000007fffffffULL,        // mask / 2^320
3315
  0x00000003ffffffffULL,        // mask / 2^320
3316
  0x0000003fffffffffULL,        // mask / 2^320
3317
  0x000001ffffffffffULL,        // mask / 2^320
3318
  0x00000fffffffffffULL,        // mask / 2^320
3319
  0x0000ffffffffffffULL,        // mask / 2^320
3320
  0x0007ffffffffffffULL,        // mask / 2^320
3321
  0x003fffffffffffffULL,        // mask / 2^320
3322
  0x03ffffffffffffffULL // mask / 2^320
3323
};
3324
 
3325
UINT192 ten2mxtrunc192[] = {
3326
  {{0xccccccccccccccccULL, 0xccccccccccccccccULL,
3327
    0xccccccccccccccccULL}},
3328
  // (ten2mx >> 192) = cccccccccccccccccccccccccccccccccccccccccccccccc
3329
  {{0xd70a3d70a3d70a3dULL, 0x3d70a3d70a3d70a3ULL,
3330
    0xa3d70a3d70a3d70aULL}},
3331
  // (ten2mx >> 192) = a3d70a3d70a3d70a3d70a3d70a3d70a3d70a3d70a3d70a3d
3332
  {{0x78d4fdf3b645a1caULL, 0x645a1cac083126e9ULL,
3333
    0x83126e978d4fdf3bULL}},
3334
  // (ten2mx >> 192) = 83126e978d4fdf3b645a1cac083126e978d4fdf3b645a1ca
3335
  {{0xc154c985f06f6944ULL, 0xd3c36113404ea4a8ULL,
3336
    0xd1b71758e219652bULL}},
3337
  // (ten2mx >> 192) = d1b71758e219652bd3c36113404ea4a8c154c985f06f6944
3338
  {{0xcddd6e04c0592103ULL, 0x0fcf80dc33721d53ULL,
3339
    0xa7c5ac471b478423ULL}},
3340
  // (ten2mx >> 192) = a7c5ac471b4784230fcf80dc33721d53cddd6e04c0592103
3341
  {{0xd7e45803cd141a69ULL, 0xa63f9a49c2c1b10fULL,
3342
    0x8637bd05af6c69b5ULL}},
3343
  // (ten2mx >> 192) = 8637bd05af6c69b5a63f9a49c2c1b10fd7e45803cd141a69
3344
  {{0x8ca08cd2e1b9c3dbULL, 0x3d32907604691b4cULL,
3345
    0xd6bf94d5e57a42bcULL}},
3346
  // (ten2mx >> 192) = d6bf94d5e57a42bc3d32907604691b4c8ca08cd2e1b9c3db
3347
  {{0x3d4d3d758161697cULL, 0xfdc20d2b36ba7c3dULL,
3348
    0xabcc77118461cefcULL}},
3349
  // (ten2mx >> 192) = abcc77118461cefcfdc20d2b36ba7c3d3d4d3d758161697c
3350
  {{0xfdd7645e011abac9ULL, 0x31680a88f8953030ULL,
3351
    0x89705f4136b4a597ULL}},
3352
  // (ten2mx >> 192) = 89705f4136b4a59731680a88f8953030fdd7645e011abac9
3353
  {{0x2fbf06fcce912adcULL, 0xb573440e5a884d1bULL,
3354
    0xdbe6fecebdedd5beULL}},
3355
  // (ten2mx >> 192) = dbe6fecebdedd5beb573440e5a884d1b2fbf06fcce912adc
3356
  {{0xf2ff38ca3eda88b0ULL, 0xf78f69a51539d748ULL,
3357
    0xafebff0bcb24aafeULL}},
3358
  // (ten2mx >> 192) = afebff0bcb24aafef78f69a51539d748f2ff38ca3eda88b0
3359
  {{0xf598fa3b657ba08dULL, 0xf93f87b7442e45d3ULL,
3360
    0x8cbccc096f5088cbULL}},
3361
  // (ten2mx >> 192) = 8cbccc096f5088cbf93f87b7442e45d3f598fa3b657ba08d
3362
  {{0x88f4c3923bf900e2ULL, 0x2865a5f206b06fb9ULL,
3363
    0xe12e13424bb40e13ULL}},
3364
  // (ten2mx >> 192) = e12e13424bb40e132865a5f206b06fb988f4c3923bf900e2
3365
  {{0x6d909c74fcc733e8ULL, 0x538484c19ef38c94ULL,
3366
    0xb424dc35095cd80fULL}},
3367
  // (ten2mx >> 192) = b424dc35095cd80f538484c19ef38c946d909c74fcc733e8
3368
  {{0x57a6e390ca38f653ULL, 0x0f9d37014bf60a10ULL,
3369
    0x901d7cf73ab0acd9ULL}},
3370
  // (ten2mx >> 192) = 901d7cf73ab0acd90f9d37014bf60a1057a6e390ca38f653
3371
  {{0xbf716c1add27f085ULL, 0x4c2ebe687989a9b3ULL,
3372
    0xe69594bec44de15bULL}},
3373
  // (ten2mx >> 192) = e69594bec44de15b4c2ebe687989a9b3bf716c1add27f085
3374
  {{0xff8df0157db98d37ULL, 0x09befeb9fad487c2ULL,
3375
    0xb877aa3236a4b449ULL}},
3376
  // (ten2mx >> 192) = b877aa3236a4b44909befeb9fad487c2ff8df0157db98d37
3377
  {{0x32d7f344649470f9ULL, 0x3aff322e62439fcfULL,
3378
    0x9392ee8e921d5d07ULL}},
3379
  // (ten2mx >> 192) = 9392ee8e921d5d073aff322e62439fcf32d7f344649470f9
3380
  {{0x1e2652070753e7f4ULL, 0x2b31e9e3d06c32e5ULL,
3381
    0xec1e4a7db69561a5ULL}},
3382
  // (ten2mx >> 192) = ec1e4a7db69561a52b31e9e3d06c32e51e2652070753e7f4
3383
  {{0x181ea8059f76532aULL, 0x88f4bb1ca6bcf584ULL,
3384
    0xbce5086492111aeaULL}},
3385
  // (ten2mx >> 192) = bce5086492111aea88f4bb1ca6bcf584181ea8059f76532a
3386
  {{0x467eecd14c5ea8eeULL, 0xd3f6fc16ebca5e03ULL,
3387
    0x971da05074da7beeULL}},
3388
  // (ten2mx >> 192) = 971da05074da7beed3f6fc16ebca5e03467eecd14c5ea8ee
3389
  {{0x70cb148213caa7e4ULL, 0x5324c68b12dd6338ULL,
3390
    0xf1c90080baf72cb1ULL}},
3391
  // (ten2mx >> 192) = f1c90080baf72cb15324c68b12dd633870cb148213caa7e4
3392
  {{0x8d6f439b43088650ULL, 0x75b7053c0f178293ULL,
3393
    0xc16d9a0095928a27ULL}},
3394
  // (ten2mx >> 192) = c16d9a0095928a2775b7053c0f1782938d6f439b43088650
3395
  {{0xd78c3615cf3a050cULL, 0xc4926a9672793542ULL,
3396
    0x9abe14cd44753b52ULL}},
3397
  // (ten2mx >> 192) = 9abe14cd44753b52c4926a9672793542d78c3615cf3a050c
3398
  {{0x8c1389bc7ec33b47ULL, 0x3a83ddbd83f52204ULL,
3399
    0xf79687aed3eec551ULL}},
3400
  // (ten2mx >> 192) = f79687aed3eec5513a83ddbd83f522048c1389bc7ec33b47
3401
  {{0x3cdc6e306568fc39ULL, 0x95364afe032a819dULL,
3402
    0xc612062576589ddaULL}},
3403
  // (ten2mx >> 192) = c612062576589dda95364afe032a819d3cdc6e306568fc39
3404
  {{0xca49f1c05120c9c7ULL, 0x775ea264cf55347dULL,
3405
    0x9e74d1b791e07e48ULL}},
3406
  // (ten2mx >> 192) = 9e74d1b791e07e48775ea264cf55347dca49f1c05120c9c7
3407
  {{0x76dcb60081ce0fa5ULL, 0x8bca9d6e188853fcULL,
3408
    0xfd87b5f28300ca0dULL}},
3409
  // (ten2mx >> 192) = fd87b5f28300ca0d8bca9d6e188853fc76dcb60081ce0fa5
3410
  {{0x5f16f80067d80c84ULL, 0x096ee45813a04330ULL,
3411
    0xcad2f7f5359a3b3eULL}},
3412
  // (ten2mx >> 192) = cad2f7f5359a3b3e096ee45813a043305f16f80067d80c84
3413
  {{0x18df2ccd1fe00a03ULL, 0xa1258379a94d028dULL,
3414
    0xa2425ff75e14fc31ULL}},
3415
  // (ten2mx >> 192) = a2425ff75e14fc31a1258379a94d028d18df2ccd1fe00a03
3416
  {{0x4718f0a419800802ULL, 0x80eacf948770ced7ULL,
3417
    0x81ceb32c4b43fcf4ULL}},
3418
  // (ten2mx >> 192) = 81ceb32c4b43fcf480eacf948770ced74718f0a419800802
3419
  {{0x0b5b1aa028ccd99eULL, 0x67de18eda5814af2ULL,
3420
    0xcfb11ead453994baULL}},
3421
  // (ten2mx >> 192) = cfb11ead453994ba67de18eda5814af20b5b1aa028ccd99e
3422
  {{0x6f7c154ced70ae18ULL, 0xecb1ad8aeacdd58eULL,
3423
    0xa6274bbdd0fadd61ULL}},
3424
  // (ten2mx >> 192) = a6274bbdd0fadd61ecb1ad8aeacdd58e6f7c154ced70ae18
3425
  {{0xbf967770bdf3be79ULL, 0xbd5af13bef0b113eULL,
3426
    0x84ec3c97da624ab4ULL}},
3427
  // (ten2mx >> 192) = 84ec3c97da624ab4bd5af13bef0b113ebf967770bdf3be79
3428
  {{0x65bd8be79652ca5cULL, 0x955e4ec64b44e864ULL,
3429
    0xd4ad2dbfc3d07787ULL}},
3430
  // (ten2mx >> 192) = d4ad2dbfc3d07787955e4ec64b44e86465bd8be79652ca5c
3431
  {{0xeafe098611dbd516ULL, 0xdde50bd1d5d0b9e9ULL,
3432
    0xaa242499697392d2ULL}},
3433
  // (ten2mx >> 192) = aa242499697392d2dde50bd1d5d0b9e9eafe098611dbd516
3434
  {{0xbbfe6e04db164412ULL, 0x7e50d64177da2e54ULL,
3435
    0x881cea14545c7575ULL}},
3436
  // (ten2mx >> 192) = 881cea14545c75757e50d64177da2e54bbfe6e04db164412
3437
  {{0x2cca49a15e8a0683ULL, 0x96e7bd358c904a21ULL,
3438
    0xd9c7dced53c72255ULL}},
3439
  // (ten2mx >> 192) = d9c7dced53c7225596e7bd358c904a212cca49a15e8a0683
3440
  {{0x8a3b6e1ab2080536ULL, 0xabec975e0a0d081aULL,
3441
    0xae397d8aa96c1b77ULL}},
3442
  // (ten2mx >> 192) = ae397d8aa96c1b77abec975e0a0d081a8a3b6e1ab2080536
3443
  {{0x3b62be7bc1a0042bULL, 0x2323ac4b3b3da015ULL,
3444
    0x8b61313bbabce2c6ULL}},
3445
  // (ten2mx >> 192) = 8b61313bbabce2c62323ac4b3b3da0153b62be7bc1a0042b
3446
  {{0x5f0463f935ccd378ULL, 0x6b6c46dec52f6688ULL,
3447
    0xdf01e85f912e37a3ULL}},
3448
  // (ten2mx >> 192) = df01e85f912e37a36b6c46dec52f66885f0463f935ccd378
3449
  {{0x7f36b660f7d70f93ULL, 0x55f038b237591ed3ULL,
3450
    0xb267ed1940f1c61cULL}},
3451
  // (ten2mx >> 192) = b267ed1940f1c61c55f038b237591ed37f36b660f7d70f93
3452
  {{0xcc2bc51a5fdf3fa9ULL, 0x77f3608e92adb242ULL,
3453
    0x8eb98a7a9a5b04e3ULL}},
3454
  // (ten2mx >> 192) = 8eb98a7a9a5b04e377f3608e92adb242cc2bc51a5fdf3fa9
3455
  {{0xe046082a32fecc41ULL, 0x8cb89a7db77c506aULL,
3456
    0xe45c10c42a2b3b05ULL}},
3457
  // (ten2mx >> 192) = e45c10c42a2b3b058cb89a7db77c506ae046082a32fecc41
3458
  {{0x4d04d354f598a367ULL, 0x3d607b97c5fd0d22ULL,
3459
    0xb6b00d69bb55c8d1ULL}},
3460
  // (ten2mx >> 192) = b6b00d69bb55c8d13d607b97c5fd0d224d04d354f598a367
3461
  {{0x3d9d75dd9146e91fULL, 0xcab3961304ca70e8ULL,
3462
    0x9226712162ab070dULL}},
3463
  // (ten2mx >> 192) = 9226712162ab070dcab3961304ca70e83d9d75dd9146e91f
3464
  {{0xc8fbefc8e87174ffULL, 0xaab8f01e6e10b4a6ULL,
3465
    0xe9d71b689dde71afULL}},
3466
  // (ten2mx >> 192) = e9d71b689dde71afaab8f01e6e10b4a6c8fbefc8e87174ff
3467
  {{0x3a63263a538df733ULL, 0x5560c018580d5d52ULL,
3468
    0xbb127c53b17ec159ULL}},
3469
  // (ten2mx >> 192) = bb127c53b17ec1595560c018580d5d523a63263a538df733
3470
  {{0x2eb5b82ea93e5f5cULL, 0xdde7001379a44aa8ULL,
3471
    0x95a8637627989aadULL}},
3472
  // (ten2mx >> 192) = 95a8637627989aaddde7001379a44aa82eb5b82ea93e5f5c
3473
  {{0x4abc59e441fd6560ULL, 0x963e66858f6d4440ULL,
3474
    0xef73d256a5c0f77cULL}},
3475
  // (ten2mx >> 192) = ef73d256a5c0f77c963e66858f6d44404abc59e441fd6560
3476
  {{0x6efd14b69b311de6ULL, 0xde98520472bdd033ULL,
3477
    0xbf8fdb78849a5f96ULL}},
3478
  // (ten2mx >> 192) = bf8fdb78849a5f96de98520472bdd0336efd14b69b311de6
3479
  {{0x259743c548f417ebULL, 0xe546a8038efe4029ULL,
3480
    0x993fe2c6d07b7fabULL}},
3481
  // (ten2mx >> 192) = 993fe2c6d07b7fabe546a8038efe4029259743c548f417eb
3482
  {{0x3c25393ba7ecf312ULL, 0xd53dd99f4b3066a8ULL,
3483
    0xf53304714d9265dfULL}},
3484
  // (ten2mx >> 192) = f53304714d9265dfd53dd99f4b3066a83c25393ba7ecf312
3485
  {{0x96842dc95323f5a8ULL, 0xaa97e14c3c26b886ULL,
3486
    0xc428d05aa4751e4cULL}},
3487
  // (ten2mx >> 192) = c428d05aa4751e4caa97e14c3c26b88696842dc95323f5a8
3488
  {{0xab9cf16ddc1cc486ULL, 0x55464dd69685606bULL,
3489
    0x9ced737bb6c4183dULL}},
3490
  // (ten2mx >> 192) = 9ced737bb6c4183d55464dd69685606bab9cf16ddc1cc486
3491
  {{0xac2e4f162cfad40aULL, 0xeed6e2f0f0d56712ULL, 0xfb158592be068d2eULL}}
3492
  // (ten2mx >> 192) = fb158592be068d2eeed6e2f0f0d56712ac2e4f162cfad40a
3493
};
3494
 
3495
UINT256 Kx256[] = {
3496
  {{0xcccccccccccccccdULL, 0xccccccccccccccccULL,
3497
    0xccccccccccccccccULL, 0xccccccccccccccccULL}},
3498
  // 10^-1 ~= cccccccccccccccc  cccccccccccccccc   
3499
  //   cccccccccccccccccccccccccccccccd   * 2^-259
3500
  {{0x70a3d70a3d70a3d8ULL, 0xd70a3d70a3d70a3dULL,
3501
    0x3d70a3d70a3d70a3ULL, 0xa3d70a3d70a3d70aULL}},
3502
  // 10^-2 ~= a3d70a3d70a3d70a  3d70a3d70a3d70a3   
3503
  //   d70a3d70a3d70a3d70a3d70a3d70a3d8   * 2^-262
3504
  {{0xc083126e978d4fe0ULL, 0x78d4fdf3b645a1caULL,
3505
    0x645a1cac083126e9ULL, 0x83126e978d4fdf3bULL}},
3506
  // 10^-3 ~= 83126e978d4fdf3b  645a1cac083126e9   
3507
  //   78d4fdf3b645a1cac083126e978d4fe0   * 2^-265
3508
  {{0x67381d7dbf487fccULL, 0xc154c985f06f6944ULL,
3509
    0xd3c36113404ea4a8ULL, 0xd1b71758e219652bULL}},
3510
  // 10^-4 ~= d1b71758e219652b  d3c36113404ea4a8   
3511
  //   c154c985f06f694467381d7dbf487fcc   * 2^-269
3512
  {{0x85c67dfe32a0663dULL, 0xcddd6e04c0592103ULL,
3513
    0x0fcf80dc33721d53ULL, 0xa7c5ac471b478423ULL}},
3514
  // 10^-5 ~= a7c5ac471b478423  fcf80dc33721d53   
3515
  //   cddd6e04c059210385c67dfe32a0663d   * 2^-272
3516
  {{0x37d1fe64f54d1e97ULL, 0xd7e45803cd141a69ULL,
3517
    0xa63f9a49c2c1b10fULL, 0x8637bd05af6c69b5ULL}},
3518
  // 10^-6 ~= 8637bd05af6c69b5  a63f9a49c2c1b10f   
3519
  //   d7e45803cd141a6937d1fe64f54d1e97   * 2^-275
3520
  {{0x8c8330a1887b6425ULL, 0x8ca08cd2e1b9c3dbULL,
3521
    0x3d32907604691b4cULL, 0xd6bf94d5e57a42bcULL}},
3522
  // 10^-7 ~= d6bf94d5e57a42bc  3d32907604691b4c   
3523
  //   8ca08cd2e1b9c3db8c8330a1887b6425   * 2^-279
3524
  {{0x7068f3b46d2f8351ULL, 0x3d4d3d758161697cULL,
3525
    0xfdc20d2b36ba7c3dULL, 0xabcc77118461cefcULL}},
3526
  // 10^-8 ~= abcc77118461cefc  fdc20d2b36ba7c3d   
3527
  //   3d4d3d758161697c7068f3b46d2f8351   * 2^-282
3528
  {{0xf387295d242602a7ULL, 0xfdd7645e011abac9ULL,
3529
    0x31680a88f8953030ULL, 0x89705f4136b4a597ULL}},
3530
  // 10^-9 ~= 89705f4136b4a597  31680a88f8953030   
3531
  //   fdd7645e011abac9f387295d242602a7   * 2^-285
3532
  {{0xb8d8422ea03cd10bULL, 0x2fbf06fcce912adcULL,
3533
    0xb573440e5a884d1bULL, 0xdbe6fecebdedd5beULL}},
3534
  // 10^-10 ~= dbe6fecebdedd5be  b573440e5a884d1b   
3535
  //   2fbf06fcce912adcb8d8422ea03cd10b   * 2^-289
3536
  {{0x93e034f219ca40d6ULL, 0xf2ff38ca3eda88b0ULL,
3537
    0xf78f69a51539d748ULL, 0xafebff0bcb24aafeULL}},
3538
  // 10^-11 ~= afebff0bcb24aafe  f78f69a51539d748   
3539
  //   f2ff38ca3eda88b093e034f219ca40d6   * 2^-292
3540
  {{0x4319c3f4e16e9a45ULL, 0xf598fa3b657ba08dULL,
3541
    0xf93f87b7442e45d3ULL, 0x8cbccc096f5088cbULL}},
3542
  // 10^-12 ~= 8cbccc096f5088cb  f93f87b7442e45d3   
3543
  //   f598fa3b657ba08d4319c3f4e16e9a45   * 2^-295
3544
  {{0x04f606549be42a07ULL, 0x88f4c3923bf900e2ULL,
3545
    0x2865a5f206b06fb9ULL, 0xe12e13424bb40e13ULL}},
3546
  // 10^-13 ~= e12e13424bb40e13  2865a5f206b06fb9   
3547
  //   88f4c3923bf900e204f606549be42a07   * 2^-299
3548
  {{0x03f805107cb68806ULL, 0x6d909c74fcc733e8ULL,
3549
    0x538484c19ef38c94ULL, 0xb424dc35095cd80fULL}},
3550
  // 10^-14 ~= b424dc35095cd80f  538484c19ef38c94   
3551
  //   6d909c74fcc733e803f805107cb68806   * 2^-302
3552
  {{0x3660040d3092066bULL, 0x57a6e390ca38f653ULL,
3553
    0x0f9d37014bf60a10ULL, 0x901d7cf73ab0acd9ULL}},
3554
  // 10^-15 ~= 901d7cf73ab0acd9  f9d37014bf60a10   
3555
  //   57a6e390ca38f6533660040d3092066b   * 2^-305
3556
  {{0x23ccd3484db670abULL, 0xbf716c1add27f085ULL,
3557
    0x4c2ebe687989a9b3ULL, 0xe69594bec44de15bULL}},
3558
  // 10^-16 ~= e69594bec44de15b  4c2ebe687989a9b3   
3559
  //   bf716c1add27f08523ccd3484db670ab   * 2^-309
3560
  {{0x4fd70f6d0af85a23ULL, 0xff8df0157db98d37ULL,
3561
    0x09befeb9fad487c2ULL, 0xb877aa3236a4b449ULL}},
3562
  // 10^-17 ~= b877aa3236a4b449  9befeb9fad487c2   
3563
  //   ff8df0157db98d374fd70f6d0af85a23   * 2^-312
3564
  {{0x0cac0c573bf9e1b6ULL, 0x32d7f344649470f9ULL,
3565
    0x3aff322e62439fcfULL, 0x9392ee8e921d5d07ULL}},
3566
  // 10^-18 ~= 9392ee8e921d5d07  3aff322e62439fcf   
3567
  //   32d7f344649470f90cac0c573bf9e1b6   * 2^-315
3568
  {{0xe11346f1f98fcf89ULL, 0x1e2652070753e7f4ULL,
3569
    0x2b31e9e3d06c32e5ULL, 0xec1e4a7db69561a5ULL}},
3570
  // 10^-19 ~= ec1e4a7db69561a5  2b31e9e3d06c32e5   
3571
  //   1e2652070753e7f4e11346f1f98fcf89   * 2^-319
3572
  {{0x4da9058e613fd93aULL, 0x181ea8059f76532aULL,
3573
    0x88f4bb1ca6bcf584ULL, 0xbce5086492111aeaULL}},
3574
  // 10^-20 ~= bce5086492111aea  88f4bb1ca6bcf584   
3575
  //   181ea8059f76532a4da9058e613fd93a   * 2^-322
3576
  {{0xa48737a51a997a95ULL, 0x467eecd14c5ea8eeULL,
3577
    0xd3f6fc16ebca5e03ULL, 0x971da05074da7beeULL}},
3578
  // 10^-21 ~= 971da05074da7bee  d3f6fc16ebca5e03   
3579
  //   467eecd14c5ea8eea48737a51a997a95   * 2^-325
3580
  {{0x3a71f2a1c428c421ULL, 0x70cb148213caa7e4ULL,
3581
    0x5324c68b12dd6338ULL, 0xf1c90080baf72cb1ULL}},
3582
  // 10^-22 ~= f1c90080baf72cb1  5324c68b12dd6338   
3583
  //   70cb148213caa7e43a71f2a1c428c421   * 2^-329
3584
  {{0x2ec18ee7d0209ce8ULL, 0x8d6f439b43088650ULL,
3585
    0x75b7053c0f178293ULL, 0xc16d9a0095928a27ULL}},
3586
  // 10^-23 ~= c16d9a0095928a27  75b7053c0f178293   
3587
  //   8d6f439b430886502ec18ee7d0209ce8   * 2^-332
3588
  {{0xf23472530ce6e3edULL, 0xd78c3615cf3a050cULL,
3589
    0xc4926a9672793542ULL, 0x9abe14cd44753b52ULL}},
3590
  // 10^-24 ~= 9abe14cd44753b52  c4926a9672793542   
3591
  //   d78c3615cf3a050cf23472530ce6e3ed   * 2^-335
3592
  {{0xe9ed83b814a49fe1ULL, 0x8c1389bc7ec33b47ULL,
3593
    0x3a83ddbd83f52204ULL, 0xf79687aed3eec551ULL}},
3594
  // 10^-25 ~= f79687aed3eec551  3a83ddbd83f52204   
3595
  //   8c1389bc7ec33b47e9ed83b814a49fe1   * 2^-339
3596
  {{0x87f1362cdd507fe7ULL, 0x3cdc6e306568fc39ULL,
3597
    0x95364afe032a819dULL, 0xc612062576589ddaULL}},
3598
  // 10^-26 ~= c612062576589dda  95364afe032a819d   
3599
  //   3cdc6e306568fc3987f1362cdd507fe7   * 2^-342
3600
  {{0x9ff42b5717739986ULL, 0xca49f1c05120c9c7ULL,
3601
    0x775ea264cf55347dULL, 0x9e74d1b791e07e48ULL}},
3602
  // 10^-27 ~= 9e74d1b791e07e48  775ea264cf55347d   
3603
  //   ca49f1c05120c9c79ff42b5717739986   * 2^-345
3604
  {{0xccb9def1bf1f5c09ULL, 0x76dcb60081ce0fa5ULL,
3605
    0x8bca9d6e188853fcULL, 0xfd87b5f28300ca0dULL}},
3606
  // 10^-28 ~= fd87b5f28300ca0d  8bca9d6e188853fc   
3607
  //   76dcb60081ce0fa5ccb9def1bf1f5c09   * 2^-349
3608
  {{0xa3c7e58e327f7cd4ULL, 0x5f16f80067d80c84ULL,
3609
    0x096ee45813a04330ULL, 0xcad2f7f5359a3b3eULL}},
3610
  // 10^-29 ~= cad2f7f5359a3b3e  96ee45813a04330   
3611
  //   5f16f80067d80c84a3c7e58e327f7cd4   * 2^-352
3612
  {{0xb6398471c1ff9710ULL, 0x18df2ccd1fe00a03ULL,
3613
    0xa1258379a94d028dULL, 0xa2425ff75e14fc31ULL}},
3614
  // 10^-30 ~= a2425ff75e14fc31  a1258379a94d028d   
3615
  //   18df2ccd1fe00a03b6398471c1ff9710   * 2^-355
3616
  {{0xf82e038e34cc78daULL, 0x4718f0a419800802ULL,
3617
    0x80eacf948770ced7ULL, 0x81ceb32c4b43fcf4ULL}},
3618
  // 10^-31 ~= 81ceb32c4b43fcf4  80eacf948770ced7   
3619
  //   4718f0a419800802f82e038e34cc78da   * 2^-358
3620
  {{0x59e338e387ad8e29ULL, 0x0b5b1aa028ccd99eULL,
3621
    0x67de18eda5814af2ULL, 0xcfb11ead453994baULL}},
3622
  // 10^-32 ~= cfb11ead453994ba  67de18eda5814af2   
3623
  //   b5b1aa028ccd99e59e338e387ad8e29   * 2^-362
3624
  {{0x47e8fa4f9fbe0b54ULL, 0x6f7c154ced70ae18ULL,
3625
    0xecb1ad8aeacdd58eULL, 0xa6274bbdd0fadd61ULL}},
3626
  // 10^-33 ~= a6274bbdd0fadd61  ecb1ad8aeacdd58e   
3627
  //   6f7c154ced70ae1847e8fa4f9fbe0b54   * 2^-365
3628
  {{0xd320c83fb2fe6f76ULL, 0xbf967770bdf3be79ULL,
3629
    0xbd5af13bef0b113eULL, 0x84ec3c97da624ab4ULL}},
3630
  // 10^-34 ~= 84ec3c97da624ab4  bd5af13bef0b113e   
3631
  //   bf967770bdf3be79d320c83fb2fe6f76   * 2^-368
3632
  {{0x85014065eb30b257ULL, 0x65bd8be79652ca5cULL,
3633
    0x955e4ec64b44e864ULL, 0xd4ad2dbfc3d07787ULL}},
3634
  // 10^-35 ~= d4ad2dbfc3d07787  955e4ec64b44e864   
3635
  //   65bd8be79652ca5c85014065eb30b257   * 2^-372
3636
  {{0xd0cdcd1e55c08eacULL, 0xeafe098611dbd516ULL,
3637
    0xdde50bd1d5d0b9e9ULL, 0xaa242499697392d2ULL}},
3638
  // 10^-36 ~= aa242499697392d2  dde50bd1d5d0b9e9   
3639
  //   eafe098611dbd516d0cdcd1e55c08eac   * 2^-375
3640
  {{0x40a4a418449a0bbdULL, 0xbbfe6e04db164412ULL,
3641
    0x7e50d64177da2e54ULL, 0x881cea14545c7575ULL}},
3642
  // 10^-37 ~= 881cea14545c7575  7e50d64177da2e54   
3643
  //   bbfe6e04db16441240a4a418449a0bbd   * 2^-378
3644
  {{0x9aa1068d3a9012c8ULL, 0x2cca49a15e8a0683ULL,
3645
    0x96e7bd358c904a21ULL, 0xd9c7dced53c72255ULL}},
3646
  // 10^-38 ~= d9c7dced53c72255  96e7bd358c904a21   
3647
  //   2cca49a15e8a06839aa1068d3a9012c8   * 2^-382
3648
  {{0x154d9ed7620cdbd3ULL, 0x8a3b6e1ab2080536ULL,
3649
    0xabec975e0a0d081aULL, 0xae397d8aa96c1b77ULL}},
3650
  // 10^-39 ~= ae397d8aa96c1b77  abec975e0a0d081a   
3651
  //   8a3b6e1ab2080536154d9ed7620cdbd3   * 2^-385
3652
  {{0x443e18ac4e70afdcULL, 0x3b62be7bc1a0042bULL,
3653
    0x2323ac4b3b3da015ULL, 0x8b61313bbabce2c6ULL}},
3654
  // 10^-40 ~= 8b61313bbabce2c6  2323ac4b3b3da015   
3655
  //   3b62be7bc1a0042b443e18ac4e70afdc   * 2^-388
3656
  {{0x6d30277a171ab2f9ULL, 0x5f0463f935ccd378ULL,
3657
    0x6b6c46dec52f6688ULL, 0xdf01e85f912e37a3ULL}},
3658
  // 10^-41 ~= df01e85f912e37a3  6b6c46dec52f6688   
3659
  //   5f0463f935ccd3786d30277a171ab2f9   * 2^-392
3660
  {{0x8a8cec61ac155bfbULL, 0x7f36b660f7d70f93ULL,
3661
    0x55f038b237591ed3ULL, 0xb267ed1940f1c61cULL}},
3662
  // 10^-42 ~= b267ed1940f1c61c  55f038b237591ed3   
3663
  //   7f36b660f7d70f938a8cec61ac155bfb   * 2^-395
3664
  {{0x3ba3f04e23444996ULL, 0xcc2bc51a5fdf3fa9ULL,
3665
    0x77f3608e92adb242ULL, 0x8eb98a7a9a5b04e3ULL}},
3666
  // 10^-43 ~= 8eb98a7a9a5b04e3  77f3608e92adb242   
3667
  //   cc2bc51a5fdf3fa93ba3f04e23444996   * 2^-398
3668
  {{0xf9064d49d206dc22ULL, 0xe046082a32fecc41ULL,
3669
    0x8cb89a7db77c506aULL, 0xe45c10c42a2b3b05ULL}},
3670
  // 10^-44 ~= e45c10c42a2b3b05  8cb89a7db77c506a   
3671
  //   e046082a32fecc41f9064d49d206dc22   * 2^-402
3672
  {{0xfa6b7107db38b01bULL, 0x4d04d354f598a367ULL,
3673
    0x3d607b97c5fd0d22ULL, 0xb6b00d69bb55c8d1ULL}},
3674
  // 10^-45 ~= b6b00d69bb55c8d1  3d607b97c5fd0d22   
3675
  //   4d04d354f598a367fa6b7107db38b01b   * 2^-405
3676
  {{0xfb8927397c2d59b0ULL, 0x3d9d75dd9146e91fULL,
3677
    0xcab3961304ca70e8ULL, 0x9226712162ab070dULL}},
3678
  // 10^-46 ~= 9226712162ab070d  cab3961304ca70e8   
3679
  //   3d9d75dd9146e91ffb8927397c2d59b0   * 2^-408
3680
  {{0xf8db71f5937bc2b2ULL, 0xc8fbefc8e87174ffULL,
3681
    0xaab8f01e6e10b4a6ULL, 0xe9d71b689dde71afULL}},
3682
  // 10^-47 ~= e9d71b689dde71af  aab8f01e6e10b4a6   
3683
  //   c8fbefc8e87174fff8db71f5937bc2b2   * 2^-412
3684
  {{0x2d7c5b2adc630228ULL, 0x3a63263a538df733ULL,
3685
    0x5560c018580d5d52ULL, 0xbb127c53b17ec159ULL}},
3686
  // 10^-48 ~= bb127c53b17ec159  5560c018580d5d52   
3687
  //   3a63263a538df7332d7c5b2adc630228   * 2^-415
3688
  {{0x24637c2249e8ce87ULL, 0x2eb5b82ea93e5f5cULL,
3689
    0xdde7001379a44aa8ULL, 0x95a8637627989aadULL}},
3690
  // 10^-49 ~= 95a8637627989aad  dde7001379a44aa8   
3691
  //   2eb5b82ea93e5f5c24637c2249e8ce87   * 2^-418
3692
  {{0x3a38c69d430e173eULL, 0x4abc59e441fd6560ULL,
3693
    0x963e66858f6d4440ULL, 0xef73d256a5c0f77cULL}},
3694
  // 10^-50 ~= ef73d256a5c0f77c  963e66858f6d4440   
3695
  //   4abc59e441fd65603a38c69d430e173e   * 2^-422
3696
  {{0x94fa387dcf3e78feULL, 0x6efd14b69b311de6ULL,
3697
    0xde98520472bdd033ULL, 0xbf8fdb78849a5f96ULL}},
3698
  // 10^-51 ~= bf8fdb78849a5f96  de98520472bdd033   
3699
  //   6efd14b69b311de694fa387dcf3e78fe   * 2^-425
3700
  {{0xaa61c6cb0c31fa65ULL, 0x259743c548f417ebULL,
3701
    0xe546a8038efe4029ULL, 0x993fe2c6d07b7fabULL}},
3702
  // 10^-52 ~= 993fe2c6d07b7fab  e546a8038efe4029   
3703
  //   259743c548f417ebaa61c6cb0c31fa65   * 2^-428
3704
  {{0xaa360ade79e990a2ULL, 0x3c25393ba7ecf312ULL,
3705
    0xd53dd99f4b3066a8ULL, 0xf53304714d9265dfULL}},
3706
  // 10^-53 ~= f53304714d9265df  d53dd99f4b3066a8   
3707
  //   3c25393ba7ecf312aa360ade79e990a2   * 2^-432
3708
  {{0x882b3be52e5473b5ULL, 0x96842dc95323f5a8ULL,
3709
    0xaa97e14c3c26b886ULL, 0xc428d05aa4751e4cULL}},
3710
  // 10^-54 ~= c428d05aa4751e4c  aa97e14c3c26b886   
3711
  //   96842dc95323f5a8882b3be52e5473b5   * 2^-435
3712
  {{0xd355c98425105c91ULL, 0xab9cf16ddc1cc486ULL,
3713
    0x55464dd69685606bULL, 0x9ced737bb6c4183dULL}},
3714
  // 10^-55 ~= 9ced737bb6c4183d  55464dd69685606b   
3715
  //   ab9cf16ddc1cc486d355c98425105c91   * 2^-438
3716
  {{0xebbc75a03b4d60e7ULL, 0xac2e4f162cfad40aULL,
3717
    0xeed6e2f0f0d56712ULL, 0xfb158592be068d2eULL}},
3718
  // 10^-56 ~= fb158592be068d2e  eed6e2f0f0d56712   
3719
  //   ac2e4f162cfad40aebbc75a03b4d60e7   * 2^-442
3720
  {{0x8963914cfc3de71fULL, 0x568b727823fbdcd5ULL,
3721
    0xf245825a5a445275ULL, 0xc8de047564d20a8bULL}},
3722
  // 10^-57 ~= c8de047564d20a8b  f245825a5a445275   
3723
  //   568b727823fbdcd58963914cfc3de71f   * 2^-445
3724
  {{0xd44fa770c9cb1f4cULL, 0x453c5b934ffcb0aaULL,
3725
    0x5b6aceaeae9d0ec4ULL, 0xa0b19d2ab70e6ed6ULL}},
3726
  // 10^-58 ~= a0b19d2ab70e6ed6  5b6aceaeae9d0ec4   
3727
  //   453c5b934ffcb0aad44fa770c9cb1f4c   * 2^-448
3728
  {{0xdd0c85f3d4a27f70ULL, 0x37637c75d996f3bbULL,
3729
    0xe2bbd88bbee40bd0ULL, 0x808e17555f3ebf11ULL}},
3730
  // 10^-59 ~= 808e17555f3ebf11  e2bbd88bbee40bd0   
3731
  //   37637c75d996f3bbdd0c85f3d4a27f70   * 2^-451
3732
  {{0x61ada31fba9d98b3ULL, 0x256bfa5628f185f9ULL,
3733
    0x3792f412cb06794dULL, 0xcdb02555653131b6ULL}},
3734
  // 10^-60 ~= cdb02555653131b6  3792f412cb06794d   
3735
  //   256bfa5628f185f961ada31fba9d98b3   * 2^-455
3736
  {{0xe7be1c196217ad5cULL, 0x51232eab53f46b2dULL,
3737
    0x5fa8c3423c052dd7ULL, 0xa48ceaaab75a8e2bULL}},
3738
  // 10^-61 ~= a48ceaaab75a8e2b  5fa8c3423c052dd7   
3739
  //   51232eab53f46b2de7be1c196217ad5c   * 2^-458
3740
  {{0x52fe7ce11b46244aULL, 0x40e8f222a99055beULL,
3741
    0x1953cf68300424acULL, 0x83a3eeeef9153e89ULL}},
3742
  // 10^-62 ~= 83a3eeeef9153e89  1953cf68300424ac   
3743
  //   40e8f222a99055be52fe7ce11b46244a   * 2^-461
3744
  {{0x51972e34f8703a10ULL, 0x34a7e9d10f4d55fdULL,
3745
    0x8eec7f0d19a03aadULL, 0xd29fe4b18e88640eULL}},
3746
  // 10^-63 ~= d29fe4b18e88640e  8eec7f0d19a03aad   
3747
  //   34a7e9d10f4d55fd51972e34f8703a10   * 2^-465
3748
  {{0x0e128b5d938cfb40ULL, 0x2a1fee40d90aab31ULL,
3749
    0x3f2398d747b36224ULL, 0xa87fea27a539e9a5ULL}},
3750
  // 10^-64 ~= a87fea27a539e9a5  3f2398d747b36224   
3751
  //   2a1fee40d90aab310e128b5d938cfb40   * 2^-468
3752
  {{0x3e753c4adc70c900ULL, 0xbb4cbe9a473bbc27ULL,
3753
    0x98e947129fc2b4e9ULL, 0x86ccbb52ea94baeaULL}},
3754
  // 10^-65 ~= 86ccbb52ea94baea  98e947129fc2b4e9   
3755
  //   bb4cbe9a473bbc273e753c4adc70c900   * 2^-471
3756
  {{0x30bb93aafa4e0e66ULL, 0x9214642a0b92c6a5ULL,
3757
    0x5b0ed81dcc6abb0fULL, 0xd7adf884aa879177ULL}},
3758
  // 10^-66 ~= d7adf884aa879177  5b0ed81dcc6abb0f   
3759
  //   9214642a0b92c6a530bb93aafa4e0e66   * 2^-475
3760
  {{0xc0960fbbfb71a51fULL, 0xa8105021a2dbd21dULL,
3761
    0xe272467e3d222f3fULL, 0xac8b2d36eed2dac5ULL}},
3762
  // 10^-67 ~= ac8b2d36eed2dac5  e272467e3d222f3f   
3763
  //   a8105021a2dbd21dc0960fbbfb71a51f   * 2^-478
3764
  {{0x66de72fcc927b74cULL, 0xb9a6a6814f1641b1ULL,
3765
    0x1b8e9ecb641b58ffULL, 0x8a08f0f8bf0f156bULL}},
3766
  // 10^-68 ~= 8a08f0f8bf0f156b  1b8e9ecb641b58ff   
3767
  //   b9a6a6814f1641b166de72fcc927b74c   * 2^-481
3768
  {{0xd7ca5194750c5879ULL, 0xf5d770cee4f0691bULL,
3769
    0xf8e431456cf88e65ULL, 0xdcdb1b2798182244ULL}},
3770
  // 10^-69 ~= dcdb1b2798182244  f8e431456cf88e65   
3771
  //   f5d770cee4f0691bd7ca5194750c5879   * 2^-485
3772
  {{0xdfd50e105da379faULL, 0x9179270bea59edafULL,
3773
    0x2d835a9df0c6d851ULL, 0xb0af48ec79ace837ULL}},
3774
  // 10^-70 ~= b0af48ec79ace837  2d835a9df0c6d851   
3775
  //   9179270bea59edafdfd50e105da379fa   * 2^-488
3776
  {{0x19773e737e1c6195ULL, 0x0dfa85a321e18af3ULL,
3777
    0x579c487e5a38ad0eULL, 0x8d590723948a535fULL}},
3778
  // 10^-71 ~= 8d590723948a535f  579c487e5a38ad0e   
3779
  //   dfa85a321e18af319773e737e1c6195   * 2^-491
3780
  {{0xf58b971f302d68efULL, 0x165da29e9c9c1184ULL,
3781
    0x25c6da63c38de1b0ULL, 0xe2280b6c20dd5232ULL}},
3782
  // 10^-72 ~= e2280b6c20dd5232  25c6da63c38de1b0   
3783
  //   165da29e9c9c1184f58b971f302d68ef   * 2^-495
3784
  {{0xc46fac18f3578725ULL, 0x4517b54bb07cdad0ULL,
3785
    0x1e38aeb6360b1af3ULL, 0xb4ecd5f01a4aa828ULL}},
3786
  // 10^-73 ~= b4ecd5f01a4aa828  1e38aeb6360b1af3   
3787
  //   4517b54bb07cdad0c46fac18f3578725   * 2^-498
3788
  {{0x36bfbce0c2ac6c1eULL, 0x9dac910959fd7bdaULL,
3789
    0xb1c6f22b5e6f48c2ULL, 0x90bd77f3483bb9b9ULL}},
3790
  // 10^-74 ~= 90bd77f3483bb9b9  b1c6f22b5e6f48c2   
3791
  //   9dac910959fd7bda36bfbce0c2ac6c1e   * 2^-501
3792
  {{0x2465fb01377a4696ULL, 0x2f7a81a88ffbf95dULL,
3793
    0xb60b1d1230b20e04ULL, 0xe7958cb87392c2c2ULL}}
3794
  // 10^-75 ~= e7958cb87392c2c2  b60b1d1230b20e04   
3795
  //   2f7a81a88ffbf95d2465fb01377a4696   * 2^-505
3796
};
3797
 
3798
unsigned int Ex256m256[] = {
3799
  3,    // 259 - 256, Ex = 259
3800
  6,    // 262 - 256, Ex = 262
3801
  9,    // 265 - 256, Ex = 265
3802
  13,   // 269 - 256, Ex = 269
3803
  16,   // 272 - 256, Ex = 272
3804
  19,   // 275 - 256, Ex = 275
3805
  23,   // 279 - 256, Ex = 279
3806
  26,   // 282 - 256, Ex = 282
3807
  29,   // 285 - 256, Ex = 285
3808
  33,   // 289 - 256, Ex = 289
3809
  36,   // 292 - 256, Ex = 292
3810
  39,   // 295 - 256, Ex = 295
3811
  43,   // 299 - 256, Ex = 299
3812
  46,   // 302 - 256, Ex = 302
3813
  49,   // 305 - 256, Ex = 305
3814
  53,   // 309 - 256, Ex = 309
3815
  56,   // 312 - 256, Ex = 312
3816
  59,   // 315 - 256, Ex = 315
3817
  63,   // 319 - 256, Ex = 319
3818
  2,    // 322 - 320, Ex = 322
3819
  5,    // 325 - 320, Ex = 325
3820
  9,    // 329 - 320, Ex = 329
3821
  12,   // 332 - 320, Ex = 332
3822
  15,   // 335 - 320, Ex = 335
3823
  19,   // 339 - 320, Ex = 339
3824
  22,   // 342 - 320, Ex = 342
3825
  25,   // 345 - 320, Ex = 345
3826
  29,   // 349 - 320, Ex = 349
3827
  32,   // 352 - 320, Ex = 352
3828
  35,   // 355 - 320, Ex = 355
3829
  38,   // 358 - 320, Ex = 358
3830
  42,   // 362 - 320, Ex = 362
3831
  45,   // 365 - 320, Ex = 365
3832
  48,   // 368 - 320, Ex = 368
3833
  52,   // 372 - 320, Ex = 372
3834
  55,   // 375 - 320, Ex = 375
3835
  58,   // 378 - 320, Ex = 378
3836
  62,   // 382 - 320, Ex = 382
3837
  1,    // 385 - 384, Ex = 385
3838
  4,    // 388 - 384, Ex = 388
3839
  8,    // 392 - 384, Ex = 392
3840
  11,   // 395 - 384, Ex = 395
3841
  14,   // 398 - 384, Ex = 398
3842
  18,   // 402 - 384, Ex = 402
3843
  21,   // 405 - 384, Ex = 405
3844
  24,   // 408 - 384, Ex = 408
3845
  28,   // 412 - 384, Ex = 412
3846
  31,   // 415 - 384, Ex = 415
3847
  34,   // 418 - 384, Ex = 418
3848
  38,   // 422 - 384, Ex = 422
3849
  41,   // 425 - 384, Ex = 425
3850
  44,   // 428 - 384, Ex = 428
3851
  48,   // 432 - 384, Ex = 432
3852
  51,   // 435 - 384, Ex = 435
3853
  54,   // 438 - 384, Ex = 438
3854
  58,   // 442 - 384, Ex = 442
3855
  61,   // 445 - 384, Ex = 445
3856
  0,     // 448 - 448, Ex = 448
3857
  3,    // 451 - 448, Ex = 451
3858
  7,    // 455 - 448, Ex = 455
3859
  10,   // 458 - 448, Ex = 458
3860
  13,   // 461 - 448, Ex = 461
3861
  17,   // 465 - 448, Ex = 465
3862
  20,   // 468 - 448, Ex = 468
3863
  23,   // 471 - 448, Ex = 471
3864
  27,   // 475 - 448, Ex = 475
3865
  30,   // 478 - 448, Ex = 478
3866
  33,   // 481 - 448, Ex = 481
3867
  37,   // 485 - 448, Ex = 485
3868
  40,   // 488 - 448, Ex = 488
3869
  43,   // 491 - 448, Ex = 491
3870
  47,   // 495 - 448, Ex = 495
3871
  50,   // 498 - 448, Ex = 498
3872
  53,   // 501 - 448, Ex = 501
3873
  57    // 505 - 448, Ex = 505
3874
};
3875
 
3876
UINT64 half256[] = {
3877
  0x0000000000000004ULL,        // half / 2^256 = 4
3878
  0x0000000000000020ULL,        // half / 2^256 = 20
3879
  0x0000000000000100ULL,        // half / 2^256 = 100
3880
  0x0000000000001000ULL,        // half / 2^256 = 1000
3881
  0x0000000000008000ULL,        // half / 2^256 = 8000
3882
  0x0000000000040000ULL,        // half / 2^256 = 40000
3883
  0x0000000000400000ULL,        // half / 2^256 = 400000
3884
  0x0000000002000000ULL,        // half / 2^256 = 2000000
3885
  0x0000000010000000ULL,        // half / 2^256 = 10000000
3886
  0x0000000100000000ULL,        // half / 2^256 = 100000000
3887
  0x0000000800000000ULL,        // half / 2^256 = 800000000
3888
  0x0000004000000000ULL,        // half / 2^256 = 4000000000
3889
  0x0000040000000000ULL,        // half / 2^256 = 40000000000
3890
  0x0000200000000000ULL,        // half / 2^256 = 200000000000
3891
  0x0001000000000000ULL,        // half / 2^256 = 1000000000000
3892
  0x0010000000000000ULL,        // half / 2^256 = 10000000000000
3893
  0x0080000000000000ULL,        // half / 2^256 = 80000000000000
3894
  0x0400000000000000ULL,        // half / 2^256 = 400000000000000
3895
  0x4000000000000000ULL,        // half / 2^256 = 4000000000000000
3896
  0x0000000000000002ULL,        // half / 2^320 = 2
3897
  0x0000000000000010ULL,        // half / 2^320 = 10
3898
  0x0000000000000100ULL,        // half / 2^320 = 100
3899
  0x0000000000000800ULL,        // half / 2^320 = 800
3900
  0x0000000000004000ULL,        // half / 2^320 = 4000
3901
  0x0000000000040000ULL,        // half / 2^320 = 40000
3902
  0x0000000000200000ULL,        // half / 2^320 = 200000
3903
  0x0000000001000000ULL,        // half / 2^320 = 1000000
3904
  0x0000000010000000ULL,        // half / 2^320 = 10000000
3905
  0x0000000080000000ULL,        // half / 2^320 = 80000000
3906
  0x0000000400000000ULL,        // half / 2^320 = 400000000
3907
  0x0000002000000000ULL,        // half / 2^320 = 2000000000
3908
  0x0000020000000000ULL,        // half / 2^320 = 20000000000
3909
  0x0000100000000000ULL,        // half / 2^320 = 100000000000
3910
  0x0000800000000000ULL,        // half / 2^320 = 800000000000
3911
  0x0008000000000000ULL,        // half / 2^320 = 8000000000000
3912
  0x0040000000000000ULL,        // half / 2^320 = 40000000000000
3913
  0x0200000000000000ULL,        // half / 2^320 = 200000000000000
3914
  0x2000000000000000ULL,        // half / 2^320 = 2000000000000000
3915
  0x0000000000000001ULL,        // half / 2^384 = 1
3916
  0x0000000000000008ULL,        // half / 2^384 = 8
3917
  0x0000000000000080ULL,        // half / 2^384 = 80
3918
  0x0000000000000400ULL,        // half / 2^384 = 400
3919
  0x0000000000002000ULL,        // half / 2^384 = 2000
3920
  0x0000000000020000ULL,        // half / 2^384 = 20000
3921
  0x0000000000100000ULL,        // half / 2^384 = 100000
3922
  0x0000000000800000ULL,        // half / 2^384 = 800000
3923
  0x0000000008000000ULL,        // half / 2^384 = 8000000
3924
  0x0000000040000000ULL,        // half / 2^384 = 40000000
3925
  0x0000000200000000ULL,        // half / 2^384 = 200000000
3926
  0x0000002000000000ULL,        // half / 2^384 = 2000000000
3927
  0x0000010000000000ULL,        // half / 2^384 = 10000000000
3928
  0x0000080000000000ULL,        // half / 2^384 = 80000000000
3929
  0x0000800000000000ULL,        // half / 2^384 = 800000000000
3930
  0x0004000000000000ULL,        // half / 2^384 = 4000000000000
3931
  0x0020000000000000ULL,        // half / 2^384 = 20000000000000
3932
  0x0200000000000000ULL,        // half / 2^384 = 200000000000000
3933
  0x1000000000000000ULL,        // half / 2^384 = 1000000000000000
3934
  0x8000000000000000ULL,        // half / 2^384 = 8000000000000000
3935
  0x0000000000000004ULL,        // half / 2^448 = 4
3936
  0x0000000000000040ULL,        // half / 2^448 = 40
3937
  0x0000000000000200ULL,        // half / 2^448 = 200
3938
  0x0000000000001000ULL,        // half / 2^448 = 1000
3939
  0x0000000000010000ULL,        // half / 2^448 = 10000
3940
  0x0000000000080000ULL,        // half / 2^448 = 80000
3941
  0x0000000000400000ULL,        // half / 2^448 = 400000
3942
  0x0000000004000000ULL,        // half / 2^448 = 4000000
3943
  0x0000000020000000ULL,        // half / 2^448 = 20000000
3944
  0x0000000100000000ULL,        // half / 2^448 = 100000000
3945
  0x0000001000000000ULL,        // half / 2^448 = 1000000000
3946
  0x0000008000000000ULL,        // half / 2^448 = 8000000000
3947
  0x0000040000000000ULL,        // half / 2^448 = 40000000000
3948
  0x0000400000000000ULL,        // half / 2^448 = 400000000000
3949
  0x0002000000000000ULL,        // half / 2^448 = 2000000000000
3950
  0x0010000000000000ULL,        // half / 2^448 = 10000000000000
3951
  0x0100000000000000ULL // half / 2^448 = 100000000000000
3952
};
3953
 
3954
UINT64 mask256[] = {
3955
  0x0000000000000007ULL,        // mask / 2^256
3956
  0x000000000000003fULL,        // mask / 2^256
3957
  0x00000000000001ffULL,        // mask / 2^256
3958
  0x0000000000001fffULL,        // mask / 2^256
3959
  0x000000000000ffffULL,        // mask / 2^256
3960
  0x000000000007ffffULL,        // mask / 2^256
3961
  0x00000000007fffffULL,        // mask / 2^256
3962
  0x0000000003ffffffULL,        // mask / 2^256
3963
  0x000000001fffffffULL,        // mask / 2^256
3964
  0x00000001ffffffffULL,        // mask / 2^256
3965
  0x0000000fffffffffULL,        // mask / 2^256
3966
  0x0000007fffffffffULL,        // mask / 2^256
3967
  0x000007ffffffffffULL,        // mask / 2^256
3968
  0x00003fffffffffffULL,        // mask / 2^256
3969
  0x0001ffffffffffffULL,        // mask / 2^256
3970
  0x001fffffffffffffULL,        // mask / 2^256
3971
  0x00ffffffffffffffULL,        // mask / 2^256
3972
  0x07ffffffffffffffULL,        // mask / 2^256
3973
  0x7fffffffffffffffULL,        // mask / 2^256
3974
  0x0000000000000003ULL,        // mask / 2^320
3975
  0x000000000000001fULL,        // mask / 2^320
3976
  0x00000000000001ffULL,        // mask / 2^320
3977
  0x0000000000000fffULL,        // mask / 2^320
3978
  0x0000000000007fffULL,        // mask / 2^320
3979
  0x000000000007ffffULL,        // mask / 2^320
3980
  0x00000000003fffffULL,        // mask / 2^320
3981
  0x0000000001ffffffULL,        // mask / 2^320
3982
  0x000000001fffffffULL,        // mask / 2^320
3983
  0x00000000ffffffffULL,        // mask / 2^320
3984
  0x00000007ffffffffULL,        // mask / 2^320
3985
  0x0000003fffffffffULL,        // mask / 2^320
3986
  0x000003ffffffffffULL,        // mask / 2^320
3987
  0x00001fffffffffffULL,        // mask / 2^320
3988
  0x0000ffffffffffffULL,        // mask / 2^320
3989
  0x000fffffffffffffULL,        // mask / 2^320
3990
  0x007fffffffffffffULL,        // mask / 2^320
3991
  0x03ffffffffffffffULL,        // mask / 2^320
3992
  0x3fffffffffffffffULL,        // mask / 2^320
3993
  0x0000000000000001ULL,        // mask / 2^384
3994
  0x000000000000000fULL,        // mask / 2^384
3995
  0x00000000000000ffULL,        // mask / 2^384
3996
  0x00000000000007ffULL,        // mask / 2^384
3997
  0x0000000000003fffULL,        // mask / 2^384
3998
  0x000000000003ffffULL,        // mask / 2^384
3999
  0x00000000001fffffULL,        // mask / 2^384
4000
  0x0000000000ffffffULL,        // mask / 2^384
4001
  0x000000000fffffffULL,        // mask / 2^384
4002
  0x000000007fffffffULL,        // mask / 2^384
4003
  0x00000003ffffffffULL,        // mask / 2^384
4004
  0x0000003fffffffffULL,        // mask / 2^384
4005
  0x000001ffffffffffULL,        // mask / 2^384
4006
  0x00000fffffffffffULL,        // mask / 2^384
4007
  0x0000ffffffffffffULL,        // mask / 2^384
4008
  0x0007ffffffffffffULL,        // mask / 2^384
4009
  0x003fffffffffffffULL,        // mask / 2^384
4010
  0x03ffffffffffffffULL,        // mask / 2^384
4011
  0x1fffffffffffffffULL,        // mask / 2^384
4012
  0xffffffffffffffffULL,        // mask / 2^384
4013
  0x0000000000000007ULL,        // mask / 2^448
4014
  0x000000000000007fULL,        // mask / 2^448
4015
  0x00000000000003ffULL,        // mask / 2^448
4016
  0x0000000000001fffULL,        // mask / 2^448
4017
  0x000000000001ffffULL,        // mask / 2^448
4018
  0x00000000000fffffULL,        // mask / 2^448
4019
  0x00000000007fffffULL,        // mask / 2^448
4020
  0x0000000007ffffffULL,        // mask / 2^448
4021
  0x000000003fffffffULL,        // mask / 2^448
4022
  0x00000001ffffffffULL,        // mask / 2^448
4023
  0x0000001fffffffffULL,        // mask / 2^448
4024
  0x000000ffffffffffULL,        // mask / 2^448
4025
  0x000007ffffffffffULL,        // mask / 2^448
4026
  0x00007fffffffffffULL,        // mask / 2^448
4027
  0x0003ffffffffffffULL,        // mask / 2^448
4028
  0x001fffffffffffffULL,        // mask / 2^448
4029
  0x01ffffffffffffffULL // mask / 2^448
4030
};
4031
 
4032
UINT256 ten2mxtrunc256[] = {
4033
  {{0xccccccccccccccccULL, 0xccccccccccccccccULL,
4034
    0xccccccccccccccccULL, 0xccccccccccccccccULL}},
4035
  // (ten2mx >> 256) = cccccccccccccccc  cccccccccccccccc   
4036
  //   cccccccccccccccccccccccccccccccc
4037
  {{0x70a3d70a3d70a3d7ULL, 0xd70a3d70a3d70a3dULL,
4038
    0x3d70a3d70a3d70a3ULL, 0xa3d70a3d70a3d70aULL}},
4039
  // (ten2mx >> 256) = a3d70a3d70a3d70a  3d70a3d70a3d70a3   
4040
  //   d70a3d70a3d70a3d70a3d70a3d70a3d7
4041
  {{0xc083126e978d4fdfULL, 0x78d4fdf3b645a1caULL,
4042
    0x645a1cac083126e9ULL, 0x83126e978d4fdf3bULL}},
4043
  // (ten2mx >> 256) = 83126e978d4fdf3b  645a1cac083126e9   
4044
  //   78d4fdf3b645a1cac083126e978d4fdf
4045
  {{0x67381d7dbf487fcbULL, 0xc154c985f06f6944ULL,
4046
    0xd3c36113404ea4a8ULL, 0xd1b71758e219652bULL}},
4047
  // (ten2mx >> 256) = d1b71758e219652b  d3c36113404ea4a8   
4048
  //   c154c985f06f694467381d7dbf487fcb
4049
  {{0x85c67dfe32a0663cULL, 0xcddd6e04c0592103ULL,
4050
    0x0fcf80dc33721d53ULL, 0xa7c5ac471b478423ULL}},
4051
  // (ten2mx >> 256) = a7c5ac471b478423  fcf80dc33721d53   
4052
  //   cddd6e04c059210385c67dfe32a0663c
4053
  {{0x37d1fe64f54d1e96ULL, 0xd7e45803cd141a69ULL,
4054
    0xa63f9a49c2c1b10fULL, 0x8637bd05af6c69b5ULL}},
4055
  // (ten2mx >> 256) = 8637bd05af6c69b5  a63f9a49c2c1b10f   
4056
  //   d7e45803cd141a6937d1fe64f54d1e96
4057
  {{0x8c8330a1887b6424ULL, 0x8ca08cd2e1b9c3dbULL,
4058
    0x3d32907604691b4cULL, 0xd6bf94d5e57a42bcULL}},
4059
  // (ten2mx >> 256) = d6bf94d5e57a42bc  3d32907604691b4c   
4060
  //   8ca08cd2e1b9c3db8c8330a1887b6424
4061
  {{0x7068f3b46d2f8350ULL, 0x3d4d3d758161697cULL,
4062
    0xfdc20d2b36ba7c3dULL, 0xabcc77118461cefcULL}},
4063
  // (ten2mx >> 256) = abcc77118461cefc  fdc20d2b36ba7c3d   
4064
  //   3d4d3d758161697c7068f3b46d2f8350
4065
  {{0xf387295d242602a6ULL, 0xfdd7645e011abac9ULL,
4066
    0x31680a88f8953030ULL, 0x89705f4136b4a597ULL}},
4067
  // (ten2mx >> 256) = 89705f4136b4a597  31680a88f8953030   
4068
  //   fdd7645e011abac9f387295d242602a6
4069
  {{0xb8d8422ea03cd10aULL, 0x2fbf06fcce912adcULL,
4070
    0xb573440e5a884d1bULL, 0xdbe6fecebdedd5beULL}},
4071
  // (ten2mx >> 256) = dbe6fecebdedd5be  b573440e5a884d1b   
4072
  //   2fbf06fcce912adcb8d8422ea03cd10a
4073
  {{0x93e034f219ca40d5ULL, 0xf2ff38ca3eda88b0ULL,
4074
    0xf78f69a51539d748ULL, 0xafebff0bcb24aafeULL}},
4075
  // (ten2mx >> 256) = afebff0bcb24aafe  f78f69a51539d748   
4076
  //   f2ff38ca3eda88b093e034f219ca40d5
4077
  {{0x4319c3f4e16e9a44ULL, 0xf598fa3b657ba08dULL,
4078
    0xf93f87b7442e45d3ULL, 0x8cbccc096f5088cbULL}},
4079
  // (ten2mx >> 256) = 8cbccc096f5088cb  f93f87b7442e45d3   
4080
  //   f598fa3b657ba08d4319c3f4e16e9a44
4081
  {{0x04f606549be42a06ULL, 0x88f4c3923bf900e2ULL,
4082
    0x2865a5f206b06fb9ULL, 0xe12e13424bb40e13ULL}},
4083
  // (ten2mx >> 256) = e12e13424bb40e13  2865a5f206b06fb9   
4084
  //   88f4c3923bf900e204f606549be42a06
4085
  {{0x03f805107cb68805ULL, 0x6d909c74fcc733e8ULL,
4086
    0x538484c19ef38c94ULL, 0xb424dc35095cd80fULL}},
4087
  // (ten2mx >> 256) = b424dc35095cd80f  538484c19ef38c94   
4088
  //   6d909c74fcc733e803f805107cb68805
4089
  {{0x3660040d3092066aULL, 0x57a6e390ca38f653ULL,
4090
    0x0f9d37014bf60a10ULL, 0x901d7cf73ab0acd9ULL}},
4091
  // (ten2mx >> 256) = 901d7cf73ab0acd9  f9d37014bf60a10   
4092
  //   57a6e390ca38f6533660040d3092066a
4093
  {{0x23ccd3484db670aaULL, 0xbf716c1add27f085ULL,
4094
    0x4c2ebe687989a9b3ULL, 0xe69594bec44de15bULL}},
4095
  // (ten2mx >> 256) = e69594bec44de15b  4c2ebe687989a9b3   
4096
  //   bf716c1add27f08523ccd3484db670aa
4097
  {{0x4fd70f6d0af85a22ULL, 0xff8df0157db98d37ULL,
4098
    0x09befeb9fad487c2ULL, 0xb877aa3236a4b449ULL}},
4099
  // (ten2mx >> 256) = b877aa3236a4b449  9befeb9fad487c2   
4100
  //   ff8df0157db98d374fd70f6d0af85a22
4101
  {{0x0cac0c573bf9e1b5ULL, 0x32d7f344649470f9ULL,
4102
    0x3aff322e62439fcfULL, 0x9392ee8e921d5d07ULL}},
4103
  // (ten2mx >> 256) = 9392ee8e921d5d07  3aff322e62439fcf   
4104
  //   32d7f344649470f90cac0c573bf9e1b5
4105
  {{0xe11346f1f98fcf88ULL, 0x1e2652070753e7f4ULL,
4106
    0x2b31e9e3d06c32e5ULL, 0xec1e4a7db69561a5ULL}},
4107
  // (ten2mx >> 256) = ec1e4a7db69561a5  2b31e9e3d06c32e5   
4108
  //   1e2652070753e7f4e11346f1f98fcf88
4109
  {{0x4da9058e613fd939ULL, 0x181ea8059f76532aULL,
4110
    0x88f4bb1ca6bcf584ULL, 0xbce5086492111aeaULL}},
4111
  // (ten2mx >> 256) = bce5086492111aea  88f4bb1ca6bcf584   
4112
  //   181ea8059f76532a4da9058e613fd939
4113
  {{0xa48737a51a997a94ULL, 0x467eecd14c5ea8eeULL,
4114
    0xd3f6fc16ebca5e03ULL, 0x971da05074da7beeULL}},
4115
  // (ten2mx >> 256) = 971da05074da7bee  d3f6fc16ebca5e03   
4116
  //   467eecd14c5ea8eea48737a51a997a94
4117
  {{0x3a71f2a1c428c420ULL, 0x70cb148213caa7e4ULL,
4118
    0x5324c68b12dd6338ULL, 0xf1c90080baf72cb1ULL}},
4119
  // (ten2mx >> 256) = f1c90080baf72cb1  5324c68b12dd6338   
4120
  //   70cb148213caa7e43a71f2a1c428c420
4121
  {{0x2ec18ee7d0209ce7ULL, 0x8d6f439b43088650ULL,
4122
    0x75b7053c0f178293ULL, 0xc16d9a0095928a27ULL}},
4123
  // (ten2mx >> 256) = c16d9a0095928a27  75b7053c0f178293   
4124
  //   8d6f439b430886502ec18ee7d0209ce7
4125
  {{0xf23472530ce6e3ecULL, 0xd78c3615cf3a050cULL,
4126
    0xc4926a9672793542ULL, 0x9abe14cd44753b52ULL}},
4127
  // (ten2mx >> 256) = 9abe14cd44753b52  c4926a9672793542   
4128
  //   d78c3615cf3a050cf23472530ce6e3ec
4129
  {{0xe9ed83b814a49fe0ULL, 0x8c1389bc7ec33b47ULL,
4130
    0x3a83ddbd83f52204ULL, 0xf79687aed3eec551ULL}},
4131
  // (ten2mx >> 256) = f79687aed3eec551  3a83ddbd83f52204   
4132
  //   8c1389bc7ec33b47e9ed83b814a49fe0
4133
  {{0x87f1362cdd507fe6ULL, 0x3cdc6e306568fc39ULL,
4134
    0x95364afe032a819dULL, 0xc612062576589ddaULL}},
4135
  // (ten2mx >> 256) = c612062576589dda  95364afe032a819d   
4136
  //   3cdc6e306568fc3987f1362cdd507fe6
4137
  {{0x9ff42b5717739985ULL, 0xca49f1c05120c9c7ULL,
4138
    0x775ea264cf55347dULL, 0x9e74d1b791e07e48ULL}},
4139
  // (ten2mx >> 256) = 9e74d1b791e07e48  775ea264cf55347d   
4140
  //   ca49f1c05120c9c79ff42b5717739985
4141
  {{0xccb9def1bf1f5c08ULL, 0x76dcb60081ce0fa5ULL,
4142
    0x8bca9d6e188853fcULL, 0xfd87b5f28300ca0dULL}},
4143
  // (ten2mx >> 256) = fd87b5f28300ca0d  8bca9d6e188853fc   
4144
  //   76dcb60081ce0fa5ccb9def1bf1f5c08
4145
  {{0xa3c7e58e327f7cd3ULL, 0x5f16f80067d80c84ULL,
4146
    0x096ee45813a04330ULL, 0xcad2f7f5359a3b3eULL}},
4147
  // (ten2mx >> 256) = cad2f7f5359a3b3e  96ee45813a04330   
4148
  //   5f16f80067d80c84a3c7e58e327f7cd3
4149
  {{0xb6398471c1ff970fULL, 0x18df2ccd1fe00a03ULL,
4150
    0xa1258379a94d028dULL, 0xa2425ff75e14fc31ULL}},
4151
  // (ten2mx >> 256) = a2425ff75e14fc31  a1258379a94d028d   
4152
  //   18df2ccd1fe00a03b6398471c1ff970f
4153
  {{0xf82e038e34cc78d9ULL, 0x4718f0a419800802ULL,
4154
    0x80eacf948770ced7ULL, 0x81ceb32c4b43fcf4ULL}},
4155
  // (ten2mx >> 256) = 81ceb32c4b43fcf4  80eacf948770ced7   
4156
  //   4718f0a419800802f82e038e34cc78d9
4157
  {{0x59e338e387ad8e28ULL, 0x0b5b1aa028ccd99eULL,
4158
    0x67de18eda5814af2ULL, 0xcfb11ead453994baULL}},
4159
  // (ten2mx >> 256) = cfb11ead453994ba  67de18eda5814af2   
4160
  //   b5b1aa028ccd99e59e338e387ad8e28
4161
  {{0x47e8fa4f9fbe0b53ULL, 0x6f7c154ced70ae18ULL,
4162
    0xecb1ad8aeacdd58eULL, 0xa6274bbdd0fadd61ULL}},
4163
  // (ten2mx >> 256) = a6274bbdd0fadd61  ecb1ad8aeacdd58e   
4164
  //   6f7c154ced70ae1847e8fa4f9fbe0b53
4165
  {{0xd320c83fb2fe6f75ULL, 0xbf967770bdf3be79ULL,
4166
    0xbd5af13bef0b113eULL, 0x84ec3c97da624ab4ULL}},
4167
  // (ten2mx >> 256) = 84ec3c97da624ab4  bd5af13bef0b113e   
4168
  //   bf967770bdf3be79d320c83fb2fe6f75
4169
  {{0x85014065eb30b256ULL, 0x65bd8be79652ca5cULL,
4170
    0x955e4ec64b44e864ULL, 0xd4ad2dbfc3d07787ULL}},
4171
  // (ten2mx >> 256) = d4ad2dbfc3d07787  955e4ec64b44e864   
4172
  //   65bd8be79652ca5c85014065eb30b256
4173
  {{0xd0cdcd1e55c08eabULL, 0xeafe098611dbd516ULL,
4174
    0xdde50bd1d5d0b9e9ULL, 0xaa242499697392d2ULL}},
4175
  // (ten2mx >> 256) = aa242499697392d2  dde50bd1d5d0b9e9   
4176
  //   eafe098611dbd516d0cdcd1e55c08eab
4177
  {{0x40a4a418449a0bbcULL, 0xbbfe6e04db164412ULL,
4178
    0x7e50d64177da2e54ULL, 0x881cea14545c7575ULL}},
4179
  // (ten2mx >> 256) = 881cea14545c7575  7e50d64177da2e54   
4180
  //   bbfe6e04db16441240a4a418449a0bbc
4181
  {{0x9aa1068d3a9012c7ULL, 0x2cca49a15e8a0683ULL,
4182
    0x96e7bd358c904a21ULL, 0xd9c7dced53c72255ULL}},
4183
  // (ten2mx >> 256) = d9c7dced53c72255  96e7bd358c904a21   
4184
  //   2cca49a15e8a06839aa1068d3a9012c7
4185
  {{0x154d9ed7620cdbd2ULL, 0x8a3b6e1ab2080536ULL,
4186
    0xabec975e0a0d081aULL, 0xae397d8aa96c1b77ULL}},
4187
  // (ten2mx >> 256) = ae397d8aa96c1b77  abec975e0a0d081a   
4188
  //   8a3b6e1ab2080536154d9ed7620cdbd2
4189
  {{0x443e18ac4e70afdbULL, 0x3b62be7bc1a0042bULL,
4190
    0x2323ac4b3b3da015ULL, 0x8b61313bbabce2c6ULL}},
4191
  // (ten2mx >> 256) = 8b61313bbabce2c6  2323ac4b3b3da015   
4192
  //   3b62be7bc1a0042b443e18ac4e70afdb
4193
  {{0x6d30277a171ab2f8ULL, 0x5f0463f935ccd378ULL,
4194
    0x6b6c46dec52f6688ULL, 0xdf01e85f912e37a3ULL}},
4195
  // (ten2mx >> 256) = df01e85f912e37a3  6b6c46dec52f6688   
4196
  //   5f0463f935ccd3786d30277a171ab2f8
4197
  {{0x8a8cec61ac155bfaULL, 0x7f36b660f7d70f93ULL,
4198
    0x55f038b237591ed3ULL, 0xb267ed1940f1c61cULL}},
4199
  // (ten2mx >> 256) = b267ed1940f1c61c  55f038b237591ed3   
4200
  //   7f36b660f7d70f938a8cec61ac155bfa
4201
  {{0x3ba3f04e23444995ULL, 0xcc2bc51a5fdf3fa9ULL,
4202
    0x77f3608e92adb242ULL, 0x8eb98a7a9a5b04e3ULL}},
4203
  // (ten2mx >> 256) = 8eb98a7a9a5b04e3  77f3608e92adb242   
4204
  //   cc2bc51a5fdf3fa93ba3f04e23444995
4205
  {{0xf9064d49d206dc21ULL, 0xe046082a32fecc41ULL,
4206
    0x8cb89a7db77c506aULL, 0xe45c10c42a2b3b05ULL}},
4207
  // (ten2mx >> 256) = e45c10c42a2b3b05  8cb89a7db77c506a   
4208
  //   e046082a32fecc41f9064d49d206dc21
4209
  {{0xfa6b7107db38b01aULL, 0x4d04d354f598a367ULL,
4210
    0x3d607b97c5fd0d22ULL, 0xb6b00d69bb55c8d1ULL}},
4211
  // (ten2mx >> 256) = b6b00d69bb55c8d1  3d607b97c5fd0d22   
4212
  //   4d04d354f598a367fa6b7107db38b01a
4213
  {{0xfb8927397c2d59afULL, 0x3d9d75dd9146e91fULL,
4214
    0xcab3961304ca70e8ULL, 0x9226712162ab070dULL}},
4215
  // (ten2mx >> 256) = 9226712162ab070d  cab3961304ca70e8   
4216
  //   3d9d75dd9146e91ffb8927397c2d59af
4217
  {{0xf8db71f5937bc2b1ULL, 0xc8fbefc8e87174ffULL,
4218
    0xaab8f01e6e10b4a6ULL, 0xe9d71b689dde71afULL}},
4219
  // (ten2mx >> 256) = e9d71b689dde71af  aab8f01e6e10b4a6   
4220
  //   c8fbefc8e87174fff8db71f5937bc2b1
4221
  {{0x2d7c5b2adc630227ULL, 0x3a63263a538df733ULL,
4222
    0x5560c018580d5d52ULL, 0xbb127c53b17ec159ULL}},
4223
  // (ten2mx >> 256) = bb127c53b17ec159  5560c018580d5d52   
4224
  //   3a63263a538df7332d7c5b2adc630227
4225
  {{0x24637c2249e8ce86ULL, 0x2eb5b82ea93e5f5cULL,
4226
    0xdde7001379a44aa8ULL, 0x95a8637627989aadULL}},
4227
  // (ten2mx >> 256) = 95a8637627989aad  dde7001379a44aa8   
4228
  //   2eb5b82ea93e5f5c24637c2249e8ce86
4229
  {{0x3a38c69d430e173dULL, 0x4abc59e441fd6560ULL,
4230
    0x963e66858f6d4440ULL, 0xef73d256a5c0f77cULL}},
4231
  // (ten2mx >> 256) = ef73d256a5c0f77c  963e66858f6d4440   
4232
  //   4abc59e441fd65603a38c69d430e173d
4233
  {{0x94fa387dcf3e78fdULL, 0x6efd14b69b311de6ULL,
4234
    0xde98520472bdd033ULL, 0xbf8fdb78849a5f96ULL}},
4235
  // (ten2mx >> 256) = bf8fdb78849a5f96  de98520472bdd033   
4236
  //   6efd14b69b311de694fa387dcf3e78fd
4237
  {{0xaa61c6cb0c31fa64ULL, 0x259743c548f417ebULL,
4238
    0xe546a8038efe4029ULL, 0x993fe2c6d07b7fabULL}},
4239
  // (ten2mx >> 256) = 993fe2c6d07b7fab  e546a8038efe4029   
4240
  //   259743c548f417ebaa61c6cb0c31fa64
4241
  {{0xaa360ade79e990a1ULL, 0x3c25393ba7ecf312ULL,
4242
    0xd53dd99f4b3066a8ULL, 0xf53304714d9265dfULL}},
4243
  // (ten2mx >> 256) = f53304714d9265df  d53dd99f4b3066a8   
4244
  //   3c25393ba7ecf312aa360ade79e990a1
4245
  {{0x882b3be52e5473b4ULL, 0x96842dc95323f5a8ULL,
4246
    0xaa97e14c3c26b886ULL, 0xc428d05aa4751e4cULL}},
4247
  // (ten2mx >> 256) = c428d05aa4751e4c  aa97e14c3c26b886   
4248
  //   96842dc95323f5a8882b3be52e5473b4
4249
  {{0xd355c98425105c90ULL, 0xab9cf16ddc1cc486ULL,
4250
    0x55464dd69685606bULL, 0x9ced737bb6c4183dULL}},
4251
  // (ten2mx >> 256) = 9ced737bb6c4183d  55464dd69685606b   
4252
  //   ab9cf16ddc1cc486d355c98425105c90
4253
  {{0xebbc75a03b4d60e6ULL, 0xac2e4f162cfad40aULL,
4254
    0xeed6e2f0f0d56712ULL, 0xfb158592be068d2eULL}},
4255
  // (ten2mx >> 256) = fb158592be068d2e  eed6e2f0f0d56712   
4256
  //   ac2e4f162cfad40aebbc75a03b4d60e6
4257
  {{0x8963914cfc3de71eULL, 0x568b727823fbdcd5ULL,
4258
    0xf245825a5a445275ULL, 0xc8de047564d20a8bULL}},
4259
  // (ten2mx >> 256) = c8de047564d20a8b  f245825a5a445275   
4260
  //   568b727823fbdcd58963914cfc3de71e
4261
  {{0xd44fa770c9cb1f4bULL, 0x453c5b934ffcb0aaULL,
4262
    0x5b6aceaeae9d0ec4ULL, 0xa0b19d2ab70e6ed6ULL}},
4263
  // (ten2mx >> 256) = a0b19d2ab70e6ed6  5b6aceaeae9d0ec4   
4264
  //   453c5b934ffcb0aad44fa770c9cb1f4b
4265
  {{0xdd0c85f3d4a27f6fULL, 0x37637c75d996f3bbULL,
4266
    0xe2bbd88bbee40bd0ULL, 0x808e17555f3ebf11ULL}},
4267
  // (ten2mx >> 256) = 808e17555f3ebf11  e2bbd88bbee40bd0   
4268
  //   37637c75d996f3bbdd0c85f3d4a27f6f
4269
  {{0x61ada31fba9d98b2ULL, 0x256bfa5628f185f9ULL,
4270
    0x3792f412cb06794dULL, 0xcdb02555653131b6ULL}},
4271
  // (ten2mx >> 256) = cdb02555653131b6  3792f412cb06794d   
4272
  //   256bfa5628f185f961ada31fba9d98b2
4273
  {{0xe7be1c196217ad5bULL, 0x51232eab53f46b2dULL,
4274
    0x5fa8c3423c052dd7ULL, 0xa48ceaaab75a8e2bULL}},
4275
  // (ten2mx >> 256) = a48ceaaab75a8e2b  5fa8c3423c052dd7   
4276
  //   51232eab53f46b2de7be1c196217ad5b
4277
  {{0x52fe7ce11b462449ULL, 0x40e8f222a99055beULL,
4278
    0x1953cf68300424acULL, 0x83a3eeeef9153e89ULL}},
4279
  // (ten2mx >> 256) = 83a3eeeef9153e89  1953cf68300424ac   
4280
  //   40e8f222a99055be52fe7ce11b462449
4281
  {{0x51972e34f8703a0fULL, 0x34a7e9d10f4d55fdULL,
4282
    0x8eec7f0d19a03aadULL, 0xd29fe4b18e88640eULL}},
4283
  // (ten2mx >> 256) = d29fe4b18e88640e  8eec7f0d19a03aad   
4284
  //   34a7e9d10f4d55fd51972e34f8703a0f
4285
  {{0x0e128b5d938cfb3fULL, 0x2a1fee40d90aab31ULL,
4286
    0x3f2398d747b36224ULL, 0xa87fea27a539e9a5ULL}},
4287
  // (ten2mx >> 256) = a87fea27a539e9a5  3f2398d747b36224   
4288
  //   2a1fee40d90aab310e128b5d938cfb3f
4289
  {{0x3e753c4adc70c8ffULL, 0xbb4cbe9a473bbc27ULL,
4290
    0x98e947129fc2b4e9ULL, 0x86ccbb52ea94baeaULL}},
4291
  // (ten2mx >> 256) = 86ccbb52ea94baea  98e947129fc2b4e9   
4292
  //   bb4cbe9a473bbc273e753c4adc70c8ff
4293
  {{0x30bb93aafa4e0e65ULL, 0x9214642a0b92c6a5ULL,
4294
    0x5b0ed81dcc6abb0fULL, 0xd7adf884aa879177ULL}},
4295
  // (ten2mx >> 256) = d7adf884aa879177  5b0ed81dcc6abb0f   
4296
  //   9214642a0b92c6a530bb93aafa4e0e65
4297
  {{0xc0960fbbfb71a51eULL, 0xa8105021a2dbd21dULL,
4298
    0xe272467e3d222f3fULL, 0xac8b2d36eed2dac5ULL}},
4299
  // (ten2mx >> 256) = ac8b2d36eed2dac5  e272467e3d222f3f   
4300
  //   a8105021a2dbd21dc0960fbbfb71a51e
4301
  {{0x66de72fcc927b74bULL, 0xb9a6a6814f1641b1ULL,
4302
    0x1b8e9ecb641b58ffULL, 0x8a08f0f8bf0f156bULL}},
4303
  // (ten2mx >> 256) = 8a08f0f8bf0f156b  1b8e9ecb641b58ff   
4304
  //   b9a6a6814f1641b166de72fcc927b74b
4305
  {{0xd7ca5194750c5878ULL, 0xf5d770cee4f0691bULL,
4306
    0xf8e431456cf88e65ULL, 0xdcdb1b2798182244ULL}},
4307
  // (ten2mx >> 256) = dcdb1b2798182244  f8e431456cf88e65   
4308
  //   f5d770cee4f0691bd7ca5194750c5878
4309
  {{0xdfd50e105da379f9ULL, 0x9179270bea59edafULL,
4310
    0x2d835a9df0c6d851ULL, 0xb0af48ec79ace837ULL}},
4311
  // (ten2mx >> 256) = b0af48ec79ace837  2d835a9df0c6d851   
4312
  //   9179270bea59edafdfd50e105da379f9
4313
  {{0x19773e737e1c6194ULL, 0x0dfa85a321e18af3ULL,
4314
    0x579c487e5a38ad0eULL, 0x8d590723948a535fULL}},
4315
  // (ten2mx >> 256) = 8d590723948a535f  579c487e5a38ad0e   
4316
  //   dfa85a321e18af319773e737e1c6194
4317
  {{0xf58b971f302d68eeULL, 0x165da29e9c9c1184ULL,
4318
    0x25c6da63c38de1b0ULL, 0xe2280b6c20dd5232ULL}},
4319
  // (ten2mx >> 256) = e2280b6c20dd5232  25c6da63c38de1b0   
4320
  //   165da29e9c9c1184f58b971f302d68ee
4321
  {{0xc46fac18f3578724ULL, 0x4517b54bb07cdad0ULL,
4322
    0x1e38aeb6360b1af3ULL, 0xb4ecd5f01a4aa828ULL}},
4323
  // (ten2mx >> 256) = b4ecd5f01a4aa828  1e38aeb6360b1af3   
4324
  //   4517b54bb07cdad0c46fac18f3578724
4325
  {{0x36bfbce0c2ac6c1dULL, 0x9dac910959fd7bdaULL,
4326
    0xb1c6f22b5e6f48c2ULL, 0x90bd77f3483bb9b9ULL}},
4327
  // (ten2mx >> 256) = 90bd77f3483bb9b9  b1c6f22b5e6f48c2   
4328
  //   9dac910959fd7bda36bfbce0c2ac6c1d
4329
  {{0x2465fb01377a4695ULL, 0x2f7a81a88ffbf95dULL,
4330
    0xb60b1d1230b20e04ULL, 0xe7958cb87392c2c2ULL}}
4331
  // (ten2mx >> 256) = e7958cb87392c2c2  b60b1d1230b20e04   
4332
  //   2f7a81a88ffbf95d2465fb01377a4695
4333
};

powered by: WebSVN 2.1.0

© copyright 1999-2024 OpenCores.org, equivalent to Oliscience, all rights reserved. OpenCores®, registered trademark.