]> git.ipfire.org Git - thirdparty/gcc.git/blame - libgcc/config/libbid/bid128.c
Update copyright years.
[thirdparty/gcc.git] / libgcc / config / libbid / bid128.c
CommitLineData
a945c346 1/* Copyright (C) 2007-2024 Free Software Foundation, Inc.
200359e8
L
2
3This file is part of GCC.
4
5GCC is free software; you can redistribute it and/or modify it under
6the terms of the GNU General Public License as published by the Free
748086b7 7Software Foundation; either version 3, or (at your option) any later
200359e8
L
8version.
9
200359e8
L
10GCC is distributed in the hope that it will be useful, but WITHOUT ANY
11WARRANTY; without even the implied warranty of MERCHANTABILITY or
12FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
13for more details.
14
748086b7
JJ
15Under Section 7 of GPL version 3, you are granted additional
16permissions described in the GCC Runtime Library Exception, version
173.1, as published by the Free Software Foundation.
18
19You should have received a copy of the GNU General Public License and
20a copy of the GCC Runtime Library Exception along with this program;
21see the files COPYING3 and COPYING.RUNTIME respectively. If not, see
22<http://www.gnu.org/licenses/>. */
200359e8
L
23
24#include "bid_internal.h"
25
b2a00c89 26// the first entry of nr_digits[i - 1] (where 1 <= i <= 113), indicates
200359e8
L
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
b2a00c89 29// digits, then the first entry of nr_digits[i - 1] is 0; in this case if the
200359e8
L
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
b2a00c89
L
33DEC_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
200359e8
L
259//{ 35, 0x0013426172c74d82ULL, 0x2b878fe800000000ULL, 35 } // 114-bit n < 10^35
260};
261
b2a00c89
L
262// midpoint64[i - 1] = 1/2 * 10^i = 5 * 10^(i-1), 1 <= i <= 19
263UINT64 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
200359e8
L
283};
284
b2a00c89
L
285// midpoint128[i - 20] = 1/2 * 10^i = 5 * 10^(i-1), 20 <= i <= 38
286UINT128 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
200359e8
L
343};
344
b2a00c89
L
345// midpoint192[i - 39] = 1/2 * 10^i = 5 * 10^(i-1), 39 <= i <= 58
346UINT192 midpoint192[] = { // the 64-bit word order is L, M, H
347 {{0x2fb2ab4000000000ULL, 0x78287f49c4a1d662ULL, 0x0000000000000001ULL}
348 }
200359e8
L
349 ,
350 // 1/2 * 10^39 = 5 * 10^38
b2a00c89
L
351 {{0xdcfab08000000000ULL, 0xb194f8e1ae525fd5ULL, 0x000000000000000eULL}
352 }
200359e8
L
353 ,
354 // 1/2 * 10^40 = 5 * 10^39
b2a00c89
L
355 {{0xa1cae50000000000ULL, 0xefd1b8d0cf37be5aULL, 0x0000000000000092ULL}
356 }
200359e8
L
357 ,
358 // 1/2 * 10^41 = 5 * 10^40
b2a00c89
L
359 {{0x51ecf20000000000ULL, 0x5e313828182d6f8aULL, 0x00000000000005bdULL}
360 }
200359e8
L
361 ,
362 // 1/2 * 10^42 = 5 * 10^41
b2a00c89
L
363 {{0x3341740000000000ULL, 0xadec3190f1c65b67ULL, 0x0000000000003965ULL}
364 }
200359e8
L
365 ,
366 // 1/2 * 10^43 = 5 * 10^42
b2a00c89
L
367 {{0x008e880000000000ULL, 0xcb39efa971bf9208ULL, 0x0000000000023df8ULL}
368 }
200359e8
L
369 ,
370 // 1/2 * 10^44 = 5 * 10^43
b2a00c89
L
371 {{0x0591500000000000ULL, 0xf0435c9e717bb450ULL, 0x0000000000166bb7ULL}
372 }
200359e8
L
373 ,
374 // 1/2 * 10^45 = 5 * 10^44
b2a00c89
L
375 {{0x37ad200000000000ULL, 0x62a19e306ed50b20ULL, 0x0000000000e0352fULL}
376 }
200359e8
L
377 ,
378 // 1/2 * 10^46 = 5 * 10^45
b2a00c89
L
379 {{0x2cc3400000000000ULL, 0xda502de454526f42ULL, 0x0000000008c213d9ULL}
380 }
200359e8
L
381 ,
382 // 1/2 * 10^47 = 5 * 10^46
b2a00c89
L
383 {{0xbfa0800000000000ULL, 0x8721caeb4b385895ULL, 0x000000005794c682ULL}
384 }
200359e8
L
385 ,
386 // 1/2 * 10^48 = 5 * 10^47
b2a00c89
L
387 {{0x7c45000000000000ULL, 0x4751ed30f03375d9ULL, 0x000000036bcfc119ULL}
388 }
200359e8
L
389 ,
390 // 1/2 * 10^49 = 5 * 10^48
b2a00c89
L
391 {{0xdab2000000000000ULL, 0xc93343e962029a7eULL, 0x00000022361d8afcULL}
392 }
200359e8
L
393 ,
394 // 1/2 * 10^50 = 5 * 10^49
b2a00c89
L
395 {{0x8af4000000000000ULL, 0xdc00a71dd41a08f4ULL, 0x000001561d276ddfULL}
396 }
200359e8
L
397 ,
398 // 1/2 * 10^51 = 5 * 10^50
b2a00c89
L
399 {{0x6d88000000000000ULL, 0x9806872a4904598dULL, 0x00000d5d238a4abeULL}
400 }
200359e8
L
401 ,
402 // 1/2 * 10^52 = 5 * 10^51
b2a00c89
L
403 {{0x4750000000000000ULL, 0xf04147a6da2b7f86ULL, 0x000085a36366eb71ULL}
404 }
200359e8
L
405 ,
406 // 1/2 * 10^53 = 5 * 10^52
b2a00c89
L
407 {{0xc920000000000000ULL, 0x628ccc8485b2fb3eULL, 0x00053861e2053273ULL}
408 }
200359e8
L
409 ,
410 // 1/2 * 10^54 = 5 * 10^53
b2a00c89
L
411 {{0xdb40000000000000ULL, 0xd97ffd2d38fdd073ULL, 0x003433d2d433f881ULL}
412 }
200359e8
L
413 ,
414 // 1/2 * 10^55 = 5 * 10^54
b2a00c89
L
415 {{0x9080000000000000ULL, 0x7effe3c439ea2486ULL, 0x020a063c4a07b512ULL}
416 }
200359e8
L
417 ,
418 // 1/2 * 10^56 = 5 * 10^55
b2a00c89
L
419 {{0xa500000000000000ULL, 0xf5fee5aa43256d41ULL, 0x14643e5ae44d12b8ULL}
420 }
200359e8
L
421 ,
422 // 1/2 * 10^57 = 5 * 10^56
b2a00c89
L
423 {{0x7200000000000000ULL, 0x9bf4f8a69f764490ULL, 0xcbea6f8ceb02bb39ULL}
424 }
200359e8
L
425 // 1/2 * 10^58 = 5 * 10^57
426};
427
b2a00c89
L
428// midpoint256[i - 59] = 1/2 * 10^i = 5 * 10^(i-1), 59 <= i <= 68
429UINT256 midpoint256[] = { // the 64-bit word order is LL, LH, HL, HH
200359e8 430 {{0x7400000000000000ULL, 0x1791b6823a9eada4ULL,
b2a00c89
L
431 0xf7285b812e1b5040ULL, 0x0000000000000007ULL}
432 }
433 , // 1/2 * 10^59 = 5 * 10^58
200359e8 434 {{0x8800000000000000ULL, 0xebb121164a32c86cULL,
b2a00c89
L
435 0xa793930bcd112280ULL, 0x000000000000004fULL}
436 }
437 , // 1/2 * 10^60 = 5 * 10^59
200359e8 438 {{0x5000000000000000ULL, 0x34eb4adee5fbd43dULL,
b2a00c89
L
439 0x8bc3be7602ab5909ULL, 0x000000000000031cULL}
440 }
441 , // 1/2 * 10^61 = 5 * 10^60
200359e8 442 {{0x2000000000000000ULL, 0x1130ecb4fbd64a65ULL,
b2a00c89
L
443 0x75a5709c1ab17a5cULL, 0x0000000000001f1dULL}
444 }
445 , // 1/2 * 10^62 = 5 * 10^61
200359e8 446 {{0x4000000000000000ULL, 0xabe93f11d65ee7f3ULL,
b2a00c89
L
447 0x987666190aeec798ULL, 0x0000000000013726ULL}
448 }
449 , // 1/2 * 10^63 = 5 * 10^62
200359e8 450 {{0x8000000000000000ULL, 0xb71c76b25fb50f80ULL,
b2a00c89
L
451 0xf49ffcfa6d53cbf6ULL, 0x00000000000c2781ULL}
452 }
453 , // 1/2 * 10^64 = 5 * 10^63
200359e8 454 {{0x0000000000000000ULL, 0x271ca2f7bd129b05ULL,
b2a00c89
L
455 0x8e3fe1c84545f7a3ULL, 0x0000000000798b13ULL}
456 }
457 , // 1/2 * 10^65 = 5 * 10^64
200359e8 458 {{0x0000000000000000ULL, 0x871e5dad62ba0e32ULL,
b2a00c89
L
459 0x8e7ed1d2b4bbac5fULL, 0x0000000004bf6ec3ULL}
460 }
461 , // 1/2 * 10^66 = 5 * 10^65
200359e8 462 {{0x0000000000000000ULL, 0x472fa8c5db448df4ULL,
b2a00c89
L
463 0x90f4323b0f54bbbbULL, 0x000000002f7a53a3ULL}
464 }
465 , // 1/2 * 10^67 = 5 * 10^66
200359e8 466 {{0x0000000000000000ULL, 0xc7dc97ba90ad8b88ULL,
b2a00c89
L
467 0xa989f64e994f5550ULL, 0x00000001dac74463ULL}
468 }
469 , // 1/2 * 10^68 = 5 * 10^67
200359e8 470 {{0x0000000000000000ULL, 0xce9ded49a6c77350ULL,
b2a00c89
L
471 0x9f639f11fd195527ULL, 0x000000128bc8abe4ULL}
472 }
473 , // 1/2 * 10^69 = 5 * 10^68
200359e8 474 {{0x0000000000000000ULL, 0x122b44e083ca8120ULL,
b2a00c89
L
475 0x39e436b3e2fd538eULL, 0x000000b975d6b6eeULL}
476 }
477 , // 1/2 * 10^70 = 5 * 10^69
200359e8 478 {{0x0000000000000000ULL, 0xb5b0b0c525e90b40ULL,
b2a00c89
L
479 0x42ea2306dde5438cULL, 0x0000073e9a63254eULL}
480 }
481 , // 1/2 * 10^71 = 5 * 10^70
200359e8 482 {{0x0000000000000000ULL, 0x18e6e7b37b1a7080ULL,
b2a00c89
L
483 0x9d255e44aaf4a37fULL, 0x0000487207df750eULL}
484 }
485 , // 1/2 * 10^72 = 5 * 10^71
200359e8 486 {{0x0000000000000000ULL, 0xf9050d02cf086500ULL,
b2a00c89
L
487 0x2375aeaead8e62f6ULL, 0x0002d4744eba9292ULL}
488 }
489 , // 1/2 * 10^73 = 5 * 10^72
200359e8 490 {{0x0000000000000000ULL, 0xba32821c1653f200ULL,
b2a00c89
L
491 0x6298d2d2c78fdda5ULL, 0x001c4c8b1349b9b5ULL}
492 }
493 , // 1/2 * 10^74 = 5 * 10^73
200359e8 494 {{0x0000000000000000ULL, 0x45f91518df477400ULL,
b2a00c89
L
495 0xd9f83c3bcb9ea879ULL, 0x011afd6ec0e14115ULL}
496 }
497 , // 1/2 * 10^75 = 5 * 10^74
200359e8 498 {{0x0000000000000000ULL, 0xbbbad2f8b8ca8800ULL,
b2a00c89
L
499 0x83b25a55f43294bcULL, 0x0b0de65388cc8adaULL}
500 }
501 , // 1/2 * 10^76 = 5 * 10^75
200359e8 502 {{0x0000000000000000ULL, 0x554c3db737e95000ULL,
b2a00c89
L
503 0x24f7875b89f9cf5fULL, 0x6e8aff4357fd6c89ULL}
504 } // 1/2 * 10^77 = 5 * 10^76
200359e8
L
505};
506
b2a00c89
L
507// ten2k64[i] = 10^i, 0 <= i <= 19
508UINT64 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)
200359e8
L
529};
530
531
b2a00c89
L
532// ten2k128[i - 20] = 10^i, 20 <= i <= 38
533UINT128 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)
200359e8
L
590};
591
b2a00c89 592// might split into ten2k192[] and ten2k256[]
200359e8 593
b2a00c89
L
594// ten2k256[i - 39] = 10^i, 39 <= i <= 68
595UINT256 ten2k256[] = { // the 64-bit word order is LL, LH, HL, HH
200359e8 596 {{0x5f65568000000000ULL, 0xf050fe938943acc4ULL,
b2a00c89
L
597 0x0000000000000002ULL, 0x0000000000000000ULL}
598 }
599 , // 10^39
200359e8 600 {{0xb9f5610000000000ULL, 0x6329f1c35ca4bfabULL,
b2a00c89
L
601 0x000000000000001dULL, 0x0000000000000000ULL}
602 }
603 , // 10^40
200359e8 604 {{0x4395ca0000000000ULL, 0xdfa371a19e6f7cb5ULL,
b2a00c89
L
605 0x0000000000000125ULL, 0x0000000000000000ULL}
606 }
607 , // 10^41
200359e8 608 {{0xa3d9e40000000000ULL, 0xbc627050305adf14ULL,
b2a00c89
L
609 0x0000000000000b7aULL, 0x0000000000000000ULL}
610 }
611 , // 10^42
200359e8 612 {{0x6682e80000000000ULL, 0x5bd86321e38cb6ceULL,
b2a00c89
L
613 0x00000000000072cbULL, 0x0000000000000000ULL}
614 }
615 , // 10^43
200359e8 616 {{0x011d100000000000ULL, 0x9673df52e37f2410ULL,
b2a00c89
L
617 0x0000000000047bf1ULL, 0x0000000000000000ULL}
618 }
619 , // 10^44
200359e8 620 {{0x0b22a00000000000ULL, 0xe086b93ce2f768a0ULL,
b2a00c89
L
621 0x00000000002cd76fULL, 0x0000000000000000ULL}
622 }
623 , // 10^45
200359e8 624 {{0x6f5a400000000000ULL, 0xc5433c60ddaa1640ULL,
b2a00c89
L
625 0x0000000001c06a5eULL, 0x0000000000000000ULL}
626 }
627 , // 10^46
200359e8 628 {{0x5986800000000000ULL, 0xb4a05bc8a8a4de84ULL,
b2a00c89
L
629 0x00000000118427b3ULL, 0x0000000000000000ULL}
630 }
631 , // 10^47
200359e8 632 {{0x7f41000000000000ULL, 0x0e4395d69670b12bULL,
b2a00c89
L
633 0x00000000af298d05ULL, 0x0000000000000000ULL}
634 }
635 , // 10^48
200359e8 636 {{0xf88a000000000000ULL, 0x8ea3da61e066ebb2ULL,
b2a00c89
L
637 0x00000006d79f8232ULL, 0x0000000000000000ULL}
638 }
639 , // 10^49
200359e8 640 {{0xb564000000000000ULL, 0x926687d2c40534fdULL,
b2a00c89
L
641 0x000000446c3b15f9ULL, 0x0000000000000000ULL}
642 }
643 , // 10^50
200359e8 644 {{0x15e8000000000000ULL, 0xb8014e3ba83411e9ULL,
b2a00c89
L
645 0x000002ac3a4edbbfULL, 0x0000000000000000ULL}
646 }
647 , // 10^51
200359e8 648 {{0xdb10000000000000ULL, 0x300d0e549208b31aULL,
b2a00c89
L
649 0x00001aba4714957dULL, 0x0000000000000000ULL}
650 }
651 , // 10^52
200359e8 652 {{0x8ea0000000000000ULL, 0xe0828f4db456ff0cULL,
b2a00c89
L
653 0x00010b46c6cdd6e3ULL, 0x0000000000000000ULL}
654 }
655 , // 10^53
200359e8 656 {{0x9240000000000000ULL, 0xc51999090b65f67dULL,
b2a00c89
L
657 0x000a70c3c40a64e6ULL, 0x0000000000000000ULL}
658 }
659 , // 10^54
200359e8 660 {{0xb680000000000000ULL, 0xb2fffa5a71fba0e7ULL,
b2a00c89
L
661 0x006867a5a867f103ULL, 0x0000000000000000ULL}
662 }
663 , // 10^55
200359e8 664 {{0x2100000000000000ULL, 0xfdffc78873d4490dULL,
b2a00c89
L
665 0x04140c78940f6a24ULL, 0x0000000000000000ULL}
666 }
667 , // 10^56
200359e8 668 {{0x4a00000000000000ULL, 0xebfdcb54864ada83ULL,
b2a00c89
L
669 0x28c87cb5c89a2571ULL, 0x0000000000000000ULL}
670 }
671 , // 10^57 (58 digits)
200359e8 672 {{0xe400000000000000ULL, 0x37e9f14d3eec8920ULL,
b2a00c89
L
673 0x97d4df19d6057673ULL, 0x0000000000000001ULL}
674 }
675 , // 10^58
200359e8 676 {{0xe800000000000000ULL, 0x2f236d04753d5b48ULL,
b2a00c89
L
677 0xee50b7025c36a080ULL, 0x000000000000000fULL}
678 }
679 , // 10^59
200359e8 680 {{0x1000000000000000ULL, 0xd762422c946590d9ULL,
b2a00c89
L
681 0x4f2726179a224501ULL, 0x000000000000009fULL}
682 }
683 , // 10^60
200359e8 684 {{0xa000000000000000ULL, 0x69d695bdcbf7a87aULL,
b2a00c89
L
685 0x17877cec0556b212ULL, 0x0000000000000639ULL}
686 }
687 , // 10^61
200359e8 688 {{0x4000000000000000ULL, 0x2261d969f7ac94caULL,
b2a00c89
L
689 0xeb4ae1383562f4b8ULL, 0x0000000000003e3aULL}
690 }
691 , // 10^62
200359e8 692 {{0x8000000000000000ULL, 0x57d27e23acbdcfe6ULL,
b2a00c89
L
693 0x30eccc3215dd8f31ULL, 0x0000000000026e4dULL}
694 }
695 , // 10^63
200359e8 696 {{0x0000000000000000ULL, 0x6e38ed64bf6a1f01ULL,
b2a00c89
L
697 0xe93ff9f4daa797edULL, 0x0000000000184f03ULL}
698 }
699 , // 10^64
200359e8 700 {{0x0000000000000000ULL, 0x4e3945ef7a25360aULL,
b2a00c89
L
701 0x1c7fc3908a8bef46ULL, 0x0000000000f31627ULL}
702 }
703 , // 10^65
200359e8 704 {{0x0000000000000000ULL, 0x0e3cbb5ac5741c64ULL,
b2a00c89
L
705 0x1cfda3a5697758bfULL, 0x00000000097edd87ULL}
706 }
707 , // 10^66
200359e8 708 {{0x0000000000000000ULL, 0x8e5f518bb6891be8ULL,
b2a00c89
L
709 0x21e864761ea97776ULL, 0x000000005ef4a747ULL}
710 }
711 , // 10^67
200359e8 712 {{0x0000000000000000ULL, 0x8fb92f75215b1710ULL,
b2a00c89
L
713 0x5313ec9d329eaaa1ULL, 0x00000003b58e88c7ULL}
714 }
715 , // 10^68
200359e8 716 {{0x0000000000000000ULL, 0x9d3bda934d8ee6a0ULL,
b2a00c89
L
717 0x3ec73e23fa32aa4fULL, 0x00000025179157c9ULL}
718 }
719 , // 10^69
200359e8 720 {{0x0000000000000000ULL, 0x245689c107950240ULL,
b2a00c89
L
721 0x73c86d67c5faa71cULL, 0x00000172ebad6ddcULL}
722 }
723 , // 10^70
200359e8 724 {{0x0000000000000000ULL, 0x6b61618a4bd21680ULL,
b2a00c89
L
725 0x85d4460dbbca8719ULL, 0x00000e7d34c64a9cULL}
726 }
727 , // 10^71
200359e8 728 {{0x0000000000000000ULL, 0x31cdcf66f634e100ULL,
b2a00c89
L
729 0x3a4abc8955e946feULL, 0x000090e40fbeea1dULL}
730 }
731 , // 10^72
200359e8 732 {{0x0000000000000000ULL, 0xf20a1a059e10ca00ULL,
b2a00c89
L
733 0x46eb5d5d5b1cc5edULL, 0x0005a8e89d752524ULL}
734 }
735 , // 10^73
200359e8 736 {{0x0000000000000000ULL, 0x746504382ca7e400ULL,
b2a00c89
L
737 0xc531a5a58f1fbb4bULL, 0x003899162693736aULL}
738 }
739 , // 10^74
200359e8 740 {{0x0000000000000000ULL, 0x8bf22a31be8ee800ULL,
b2a00c89
L
741 0xb3f07877973d50f2ULL, 0x0235fadd81c2822bULL}
742 }
743 , // 10^75
200359e8 744 {{0x0000000000000000ULL, 0x7775a5f171951000ULL,
b2a00c89
L
745 0x0764b4abe8652979ULL, 0x161bcca7119915b5ULL}
746 }
747 , // 10^76
200359e8 748 {{0x0000000000000000ULL, 0xaa987b6e6fd2a000ULL,
b2a00c89
L
749 0x49ef0eb713f39ebeULL, 0xdd15fe86affad912ULL}
750 } // 10^77
200359e8
L
751};
752
b2a00c89
L
753// ten2mk128[k - 1] = 10^(-k) * 2^exp (k), where 1 <= k <= 34 and
754// exp (k) = shiftright128[k - 1] + 128
755UINT128 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
200359e8
L
858};
859
860
b2a00c89 861// shiftright128[] contains the right shift count to obtain C2* from the top
200359e8 862// 128 bits of the 128x128-bit product C2 * Kx
b2a00c89
L
863int 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
200359e8
L
900};
901
902
b2a00c89 903// maskhigh128[] contains the mask to apply to the top 128 bits of the
200359e8
L
904// 128x128-bit product in order to obtain the high bits of f2*
905// the 64-bit word order is L, H
b2a00c89
L
906UINT64 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
200359e8
L
941};
942
943
b2a00c89 944// onehalf128[] contains the high bits of 1/2 positioned correctly for
200359e8
L
945// comparison with the high bits of f2*
946// the 64-bit word order is L, H
b2a00c89
L
947UINT64 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
200359e8
L
982};
983
b2a00c89
L
984UINT64 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
200359e8
L
1001};
1002
b2a00c89 1003// ten2mk128trunc[] contains T*, the top Ex >= 128 bits of 10^(-k),
200359e8
L
1004// for 1 <= k <= 34
1005// the 64-bit word order is L, H
b2a00c89
L
1006UINT128 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
200359e8
L
1041};
1042
b2a00c89
L
1043// ten2mk128M[k - 1] = 10^(-k) * 2^exp (k), where 1 <= k <= 4 and
1044// exp (k) = shiftright128[k - 1] + 128
200359e8 1045// the 64-bit word order is L, H
b2a00c89
L
1046UINT128 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
200359e8
L
1051};
1052
b2a00c89 1053// ten2mk128truncM[] contains T*, the top Ex >= 128 bits of 10^(-k),
200359e8
L
1054// for 1 <= k <= 4; the top bits which are 0 are not represented
1055// the 64-bit word order is L, H
b2a00c89
L
1056UINT128 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
200359e8
L
1061};
1062
b2a00c89 1063// shiftright128M[] contains the right shift count to obtain C2* from the top
200359e8 1064// 128 bits of the 128x128-bit product C2 * Kx
b2a00c89
L
1065int shiftright128M[] = {
1066 3, // 131 - 128
1067 6, // 134 - 128
1068 9, // 137 - 128
1069 13 // 141 - 128
200359e8
L
1070};
1071
b2a00c89 1072// maskhigh128M[] contains the mask to apply to the top 128 bits of the
200359e8
L
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
b2a00c89
L
1075UINT64 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
200359e8
L
1080};
1081
b2a00c89 1082// onehalf128M[] contains 1/2 positioned correctly for
200359e8
L
1083// comparison with the high bits of f*
1084// the high 64 bits are 0, so only the low 64 bits are represented
b2a00c89
L
1085UINT64 onehalf128M[] = {
1086 0x0000000000000004ULL, // 3 bits
1087 0x0000000000000020ULL, // 6 bits
1088 0x0000000000000100ULL, // 9 bits
1089 0x0000000000001000ULL // 13 bits
200359e8
L
1090};
1091
b2a00c89
L
1092// ten2mk192M[k - 1] = 10^(-k-4) * 2^exp (k), where 1 <= k <= 19 and
1093// exp (k) = shiftright128[k - 1] + 128
200359e8 1094// the 64-bit word order is L, M, H
b2a00c89
L
1095UINT192 ten2mk192M[] = {
1096 {{0xcddd6e04c0592104ULL, 0x0fcf80dc33721d53ULL,
1097 0xa7c5ac471b478423ULL}},
200359e8 1098 // 10^(-5) * 2^208
b2a00c89
L
1099 {{0xd7e45803cd141a6aULL, 0xa63f9a49c2c1b10fULL,
1100 0x8637bd05af6c69b5ULL}},
200359e8 1101 // 10^(-6) * 2^211
b2a00c89
L
1102 {{0x8ca08cd2e1b9c3dcULL, 0x3d32907604691b4cULL,
1103 0xd6bf94d5e57a42bcULL}},
200359e8 1104 // 10^(-7) * 2^215
b2a00c89
L
1105 {{0x3d4d3d758161697dULL, 0xfdc20d2b36ba7c3dULL,
1106 0xabcc77118461cefcULL}},
200359e8 1107 // 10^(-8) * 2^218
b2a00c89
L
1108 {{0xfdd7645e011abacaULL, 0x31680a88f8953030ULL,
1109 0x89705f4136b4a597ULL}},
200359e8 1110 // 10^(-9) * 2^221
b2a00c89
L
1111 {{0x2fbf06fcce912addULL, 0xb573440e5a884d1bULL,
1112 0xdbe6fecebdedd5beULL}},
200359e8 1113 // 10^(-10) * 2^225
b2a00c89
L
1114 {{0xf2ff38ca3eda88b1ULL, 0xf78f69a51539d748ULL,
1115 0xafebff0bcb24aafeULL}},
200359e8 1116 // 10^(-11) * 2^228
b2a00c89
L
1117 {{0xf598fa3b657ba08eULL, 0xf93f87b7442e45d3ULL,
1118 0x8cbccc096f5088cbULL}},
200359e8 1119 // 10^(-12) * 2^231
b2a00c89
L
1120 {{0x88f4c3923bf900e3ULL, 0x2865a5f206b06fb9ULL,
1121 0xe12e13424bb40e13ULL}},
200359e8 1122 // 10^(-13) * 2^235
b2a00c89
L
1123 {{0x6d909c74fcc733e9ULL, 0x538484c19ef38c94ULL,
1124 0xb424dc35095cd80fULL}},
200359e8 1125 // 10^(-14) * 2^238
b2a00c89
L
1126 {{0x57a6e390ca38f654ULL, 0x0f9d37014bf60a10ULL,
1127 0x901d7cf73ab0acd9ULL}},
200359e8 1128 // 10^(-15) * 2^241
b2a00c89
L
1129 {{0xbf716c1add27f086ULL, 0x4c2ebe687989a9b3ULL,
1130 0xe69594bec44de15bULL}},
200359e8 1131 // 10^(-16) * 2^245
b2a00c89
L
1132 {{0xff8df0157db98d38ULL, 0x09befeb9fad487c2ULL,
1133 0xb877aa3236a4b449ULL}},
200359e8 1134 // 10^(-17) * 2^248
b2a00c89
L
1135 {{0x32d7f344649470faULL, 0x3aff322e62439fcfULL,
1136 0x9392ee8e921d5d07ULL}},
200359e8 1137 // 10^(-18) * 2^251
b2a00c89
L
1138 {{0x1e2652070753e7f5ULL, 0x2b31e9e3d06c32e5ULL,
1139 0xec1e4a7db69561a5ULL}},
200359e8 1140 // 10^(-19) * 2^255
b2a00c89
L
1141 {{0x181ea8059f76532bULL, 0x88f4bb1ca6bcf584ULL,
1142 0xbce5086492111aeaULL}},
200359e8 1143 // 10^(-20) * 2^258
b2a00c89
L
1144 {{0x467eecd14c5ea8efULL, 0xd3f6fc16ebca5e03ULL,
1145 0x971da05074da7beeULL}},
200359e8 1146 // 10^(-21) * 2^261
b2a00c89
L
1147 {{0x70cb148213caa7e5ULL, 0x5324c68b12dd6338ULL,
1148 0xf1c90080baf72cb1ULL}},
200359e8
L
1149 // 10^(-22) * 2^265
1150 {{0x8d6f439b43088651ULL, 0x75b7053c0f178293ULL, 0xc16d9a0095928a27ULL}}
1151 // 10^(-23) * 2^268
1152};
1153
b2a00c89 1154// ten2mk192truncM[] contains T*, the top Ex >= 192 bits of 10^(-k),
200359e8
L
1155// for 5 <= k <= 23; the top bits which are 0 are not represented
1156// the 64-bit word order is L, M, H
b2a00c89
L
1157UINT192 ten2mk192truncM[] = {
1158 {{0xcddd6e04c0592103ULL, 0x0fcf80dc33721d53ULL,
1159 0xa7c5ac471b478423ULL}},
200359e8 1160 // 10^(-5) * 2^208
b2a00c89
L
1161 {{0xd7e45803cd141a69ULL, 0xa63f9a49c2c1b10fULL,
1162 0x8637bd05af6c69b5ULL}},
200359e8 1163 // 10^(-6) * 2^211
b2a00c89
L
1164 {{0x8ca08cd2e1b9c3dbULL, 0x3d32907604691b4cULL,
1165 0xd6bf94d5e57a42bcULL}},
200359e8 1166 // 10^(-7) * 2^215
b2a00c89
L
1167 {{0x3d4d3d758161697cULL, 0xfdc20d2b36ba7c3dULL,
1168 0xabcc77118461cefcULL}},
200359e8 1169 // 10^(-8) * 2^218
b2a00c89
L
1170 {{0xfdd7645e011abac9ULL, 0x31680a88f8953030ULL,
1171 0x89705f4136b4a597ULL}},
200359e8 1172 // 10^(-9) * 2^221
b2a00c89
L
1173 {{0x2fbf06fcce912adcULL, 0xb573440e5a884d1bULL,
1174 0xdbe6fecebdedd5beULL}},
200359e8 1175 // 10^(-10) * 2^225
b2a00c89
L
1176 {{0xf2ff38ca3eda88b0ULL, 0xf78f69a51539d748ULL,
1177 0xafebff0bcb24aafeULL}},
200359e8 1178 // 10^(-11) * 2^228
b2a00c89
L
1179 {{0xf598fa3b657ba08dULL, 0xf93f87b7442e45d3ULL,
1180 0x8cbccc096f5088cbULL}},
200359e8 1181 // 10^(-12) * 2^231
b2a00c89
L
1182 {{0x88f4c3923bf900e2ULL, 0x2865a5f206b06fb9ULL,
1183 0xe12e13424bb40e13ULL}},
200359e8 1184 // 10^(-13) * 2^235
b2a00c89
L
1185 {{0x6d909c74fcc733e8ULL, 0x538484c19ef38c94ULL,
1186 0xb424dc35095cd80fULL}},
200359e8 1187 // 10^(-14) * 2^238
b2a00c89
L
1188 {{0x57a6e390ca38f653ULL, 0x0f9d37014bf60a10ULL,
1189 0x901d7cf73ab0acd9ULL}},
200359e8 1190 // 10^(-15) * 2^241
b2a00c89
L
1191 {{0xbf716c1add27f085ULL, 0x4c2ebe687989a9b3ULL,
1192 0xe69594bec44de15bULL}},
200359e8 1193 // 10^(-16) * 2^245
b2a00c89
L
1194 {{0xff8df0157db98d37ULL, 0x09befeb9fad487c2ULL,
1195 0xb877aa3236a4b449ULL}},
200359e8 1196 // 10^(-17) * 2^248
b2a00c89
L
1197 {{0x32d7f344649470f9ULL, 0x3aff322e62439fcfULL,
1198 0x9392ee8e921d5d07ULL}},
200359e8 1199 // 10^(-18) * 2^251
b2a00c89
L
1200 {{0x1e2652070753e7f4ULL, 0x2b31e9e3d06c32e5ULL,
1201 0xec1e4a7db69561a5ULL}},
200359e8 1202 // 10^(-19) * 2^255
b2a00c89
L
1203 {{0x181ea8059f76532aULL, 0x88f4bb1ca6bcf584ULL,
1204 0xbce5086492111aeaULL}},
200359e8 1205 // 10^(-20) * 2^258
b2a00c89
L
1206 {{0x467eecd14c5ea8eeULL, 0xd3f6fc16ebca5e03ULL,
1207 0x971da05074da7beeULL}},
200359e8 1208 // 10^(-21) * 2^261
b2a00c89
L
1209 {{0x70cb148213caa7e4ULL, 0x5324c68b12dd6338ULL,
1210 0xf1c90080baf72cb1ULL}},
200359e8
L
1211 // 10^(-22) * 2^265
1212 {{0x8d6f439b43088650ULL, 0x75b7053c0f178293ULL, 0xc16d9a0095928a27ULL}}
1213 // 10^(-23) * 2^268
1214};
1215
b2a00c89 1216// shiftright192M[] contains the right shift count to obtain C2* from the top
200359e8
L
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
b2a00c89
L
1219int 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
200359e8
L
1239};
1240
b2a00c89 1241// maskhigh192M[] contains the mask to apply to the top 192 bits of the
200359e8
L
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
b2a00c89
L
1245UINT64 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
200359e8
L
1265};
1266
b2a00c89 1267// onehalf192M[] contains 1/2 positioned correctly for
200359e8
L
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
b2a00c89
L
1271UINT64 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
200359e8
L
1291};
1292
b2a00c89
L
1293// ten2mk256M[k - 1] = 10^(-k-23) * 2^exp (k), where 1 <= k <= 11 and
1294// exp (k) = shiftright128[k - 1] + 128
1295UINT256 ten2mk256M[] = { // the 64-bit word order is LL, LH, HL, HH
200359e8 1296 {{0xf23472530ce6e3edULL, 0xd78c3615cf3a050cULL,
b2a00c89 1297 0xc4926a9672793542ULL, 0x9abe14cd44753b52ULL}}, // 10^(-24) * 2^335
200359e8 1298 {{0xe9ed83b814a49fe1ULL, 0x8c1389bc7ec33b47ULL,
b2a00c89 1299 0x3a83ddbd83f52204ULL, 0xf79687aed3eec551ULL}}, // 10^(-25) * 2^339
200359e8 1300 {{0x87f1362cdd507fe7ULL, 0x3cdc6e306568fc39ULL,
b2a00c89 1301 0x95364afe032a819dULL, 0xc612062576589ddaULL}}, // 10^(-26) * 2^342
200359e8 1302 {{0x9ff42b5717739986ULL, 0xca49f1c05120c9c7ULL,
b2a00c89 1303 0x775ea264cf55347dULL, 0x9e74d1b791e07e48ULL}}, // 10^(-27) * 2^345
200359e8 1304 {{0xccb9def1bf1f5c09ULL, 0x76dcb60081ce0fa5ULL,
b2a00c89 1305 0x8bca9d6e188853fcULL, 0xfd87b5f28300ca0dULL}}, // 10^(-28) * 2^349
200359e8 1306 {{0xa3c7e58e327f7cd4ULL, 0x5f16f80067d80c84ULL,
b2a00c89 1307 0x096ee45813a04330ULL, 0xcad2f7f5359a3b3eULL}}, // 10^(-29) * 2^352
200359e8 1308 {{0xb6398471c1ff9710ULL, 0x18df2ccd1fe00a03ULL,
b2a00c89 1309 0xa1258379a94d028dULL, 0xa2425ff75e14fc31ULL}}, // 10^(-30) * 2^355
200359e8 1310 {{0xf82e038e34cc78daULL, 0x4718f0a419800802ULL,
b2a00c89 1311 0x80eacf948770ced7ULL, 0x81ceb32c4b43fcf4ULL}}, // 10^(-31) * 2^358
200359e8 1312 {{0x59e338e387ad8e29ULL, 0x0b5b1aa028ccd99eULL,
b2a00c89 1313 0x67de18eda5814af2ULL, 0xcfb11ead453994baULL}}, // 10^(-32) * 2^362
200359e8 1314 {{0x47e8fa4f9fbe0b54ULL, 0x6f7c154ced70ae18ULL,
b2a00c89 1315 0xecb1ad8aeacdd58eULL, 0xa6274bbdd0fadd61ULL}}, // 10^(-33) * 2^365
200359e8 1316 {{0xd320c83fb2fe6f76ULL, 0xbf967770bdf3be79ULL,
b2a00c89 1317 0xbd5af13bef0b113eULL, 0x84ec3c97da624ab4ULL}} // 10^(-34) * 2^368
200359e8
L
1318};
1319
b2a00c89 1320// ten2mk256truncM[] contains T*, the top Ex >= 256 bits of 10^(-k),
200359e8 1321// for 24 <= k <= 34; the top bits which are 0 are not represented
b2a00c89 1322UINT256 ten2mk256truncM[] = { // the 64-bit word order is LL, LH, HL, HH
200359e8 1323 {{0xf23472530ce6e3ecULL, 0xd78c3615cf3a050cULL,
b2a00c89 1324 0xc4926a9672793542ULL, 0x9abe14cd44753b52ULL}}, // 10^(-24) * 2^335
200359e8 1325 {{0xe9ed83b814a49fe0ULL, 0x8c1389bc7ec33b47ULL,
b2a00c89 1326 0x3a83ddbd83f52204ULL, 0xf79687aed3eec551ULL}}, // 10^(-25) * 2^339
200359e8 1327 {{0x87f1362cdd507fe6ULL, 0x3cdc6e306568fc39ULL,
b2a00c89 1328 0x95364afe032a819dULL, 0xc612062576589ddaULL}}, // 10^(-26) * 2^342
200359e8 1329 {{0x775ea264cf55347cULL, 0x9ff42b5717739986ULL,
b2a00c89 1330 0xca49f1c05120c9c7ULL, 0x9e74d1b791e07e48ULL}}, // 10^(-27) * 2^345
200359e8 1331 {{0xccb9def1bf1f5c08ULL, 0x76dcb60081ce0fa5ULL,
b2a00c89 1332 0x8bca9d6e188853fcULL, 0xfd87b5f28300ca0dULL}}, // 10^(-28) * 2^349
200359e8 1333 {{0xa3c7e58e327f7cd3ULL, 0x5f16f80067d80c84ULL,
b2a00c89 1334 0x096ee45813a04330ULL, 0xcad2f7f5359a3b3eULL}}, // 10^(-29) * 2^352
200359e8 1335 {{0xb6398471c1ff970fULL, 0x18df2ccd1fe00a03ULL,
b2a00c89 1336 0xa1258379a94d028dULL, 0xa2425ff75e14fc31ULL}}, // 10^(-30) * 2^355
200359e8 1337 {{0xf82e038e34cc78d9ULL, 0x4718f0a419800802ULL,
b2a00c89 1338 0x80eacf948770ced7ULL, 0x81ceb32c4b43fcf4ULL}}, // 10^(-31) * 2^358
200359e8 1339 {{0x59e338e387ad8e28ULL, 0x0b5b1aa028ccd99eULL,
b2a00c89 1340 0x67de18eda5814af2ULL, 0xcfb11ead453994baULL}}, // 10^(-32) * 2^362
200359e8 1341 {{0x47e8fa4f9fbe0b53ULL, 0x6f7c154ced70ae18ULL,
b2a00c89 1342 0xecb1ad8aeacdd58eULL, 0xa6274bbdd0fadd61ULL}}, // 10^(-33) * 2^365
200359e8 1343 {{0xd320c83fb2fe6f75ULL, 0xbf967770bdf3be79ULL,
b2a00c89 1344 0xbd5af13bef0b113eULL, 0x84ec3c97da624ab4ULL}} // 10^(-34) * 2^368
200359e8
L
1345};
1346
b2a00c89 1347// shiftright256M[] contains the right shift count to obtain C2* from the top
200359e8 1348// 192 bits of the 256x256-bit product C2 * Kx
b2a00c89
L
1349int 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
200359e8
L
1361};
1362
b2a00c89 1363// maskhigh256M[] contains the mask to apply to the top 192 bits of the
200359e8 1364// 256x256-bit product in order to obtain the high bits of f*
b2a00c89
L
1365UINT64 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
200359e8
L
1377};
1378
b2a00c89 1379// onehalf256M[] contains 1/2 positioned correctly for comparison with the
200359e8 1380// high bits of f*; the high 128 bits of the 512-bit mask are 0
b2a00c89
L
1381UINT64 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
200359e8
L
1393};
1394
1395
b2a00c89
L
1396// char_table2[] is used to convert n to string, where 10 <= n <= 99
1397unsigned char char_table2[180] = {
200359e8
L
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
b2a00c89
L
1491// char_table3[] is used to convert n to string, where 000 <= n <= 999
1492unsigned char char_table3[3000] = {
200359e8
L
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
b2a00c89
L
2495// ten2m3k64[], shift_ten2m3k64[] used for conversion from BID128 to string
2496UINT64 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
200359e8
L
2502};
2503
b2a00c89
L
2504unsigned int shift_ten2m3k64[] = {
2505 8, // 72 - 64
2506 16, // 80 - 64
2507 28, // 92 - 64
2508 36, // 100 - 64
2509 48 // 112 - 64
200359e8
L
2510};
2511
b2a00c89
L
2512UINT128 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
200359e8
L
2535};
2536
b2a00c89
L
2537unsigned 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
200359e8
L
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
b2a00c89 2557// a) In round128_2_18() numbers with 2 <= q <= 18 will be rounded only
200359e8
L
2558// for 1 <= x <= 3:
2559// x = 1 or x = 2 when q = 17
2560// x = 2 or x = 3 when q = 18
b2a00c89 2561// b) In round128_19_38() numbers with 19 <= q <= 38 will be rounded only
200359e8
L
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
b2a00c89 2575// Note: 64-bit tables generated with ten2mx64.ma; output in ten2mx64.out
200359e8
L
2576
2577// Kx from 10^(-x) ~= Kx * 2^(-Ex); Kx rounded up to 64 bits, 1 <= x <= 17
b2a00c89
L
2578UINT64 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
200359e8
L
2596};
2597
2598// Ex-64 from 10^(-x) ~= Kx * 2^(-Ex); Kx rounded up to 64 bits, 1 <= x <= 17
b2a00c89
L
2599unsigned 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
200359e8
L
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)
b2a00c89
L
2622UINT64 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
200359e8
L
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
b2a00c89
L
2645UINT64 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
200359e8
L
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)
b2a00c89
L
2669UINT64 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
200359e8
L
2687};
2688
b2a00c89 2689// Note: 128-bit tables generated with ten2mx128.ma; output in ten2mx128.out
200359e8
L
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
b2a00c89 2693UINT128 Kx128[] = {
200359e8
L
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
b2a00c89
L
2771unsigned 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
200359e8
L
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)
b2a00c89
L
2814UINT64 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
200359e8
L
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
b2a00c89
L
2857UINT64 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
200359e8
L
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)
b2a00c89 2901UINT128 ten2mxtrunc128[] = {
200359e8 2902 {{0xccccccccccccccccULL, 0xccccccccccccccccULL}},
b2a00c89 2903 // (ten2mx >> 128) = cccccccccccccccccccccccccccccccc
200359e8 2904 {{0x3d70a3d70a3d70a3ULL, 0xa3d70a3d70a3d70aULL}},
b2a00c89 2905 // (ten2mx >> 128) = a3d70a3d70a3d70a3d70a3d70a3d70a3
200359e8 2906 {{0x645a1cac083126e9ULL, 0x83126e978d4fdf3bULL}},
b2a00c89 2907 // (ten2mx >> 128) = 83126e978d4fdf3b645a1cac083126e9
200359e8 2908 {{0xd3c36113404ea4a8ULL, 0xd1b71758e219652bULL}},
b2a00c89 2909 // (ten2mx >> 128) = d1b71758e219652bd3c36113404ea4a8
200359e8 2910 {{0x0fcf80dc33721d53ULL, 0xa7c5ac471b478423ULL}},
b2a00c89 2911 // (ten2mx >> 128) = a7c5ac471b4784230fcf80dc33721d53
200359e8 2912 {{0xa63f9a49c2c1b10fULL, 0x8637bd05af6c69b5ULL}},
b2a00c89 2913 // (ten2mx >> 128) = 8637bd05af6c69b5a63f9a49c2c1b10f
200359e8 2914 {{0x3d32907604691b4cULL, 0xd6bf94d5e57a42bcULL}},
b2a00c89 2915 // (ten2mx >> 128) = d6bf94d5e57a42bc3d32907604691b4c
200359e8 2916 {{0xfdc20d2b36ba7c3dULL, 0xabcc77118461cefcULL}},
b2a00c89 2917 // (ten2mx >> 128) = abcc77118461cefcfdc20d2b36ba7c3d
200359e8 2918 {{0x31680a88f8953030ULL, 0x89705f4136b4a597ULL}},
b2a00c89 2919 // (ten2mx >> 128) = 89705f4136b4a59731680a88f8953030
200359e8 2920 {{0xb573440e5a884d1bULL, 0xdbe6fecebdedd5beULL}},
b2a00c89 2921 // (ten2mx >> 128) = dbe6fecebdedd5beb573440e5a884d1b
200359e8 2922 {{0xf78f69a51539d748ULL, 0xafebff0bcb24aafeULL}},
b2a00c89 2923 // (ten2mx >> 128) = afebff0bcb24aafef78f69a51539d748
200359e8 2924 {{0xf93f87b7442e45d3ULL, 0x8cbccc096f5088cbULL}},
b2a00c89 2925 // (ten2mx >> 128) = 8cbccc096f5088cbf93f87b7442e45d3
200359e8 2926 {{0x2865a5f206b06fb9ULL, 0xe12e13424bb40e13ULL}},
b2a00c89 2927 // (ten2mx >> 128) = e12e13424bb40e132865a5f206b06fb9
200359e8 2928 {{0x538484c19ef38c94ULL, 0xb424dc35095cd80fULL}},
b2a00c89 2929 // (ten2mx >> 128) = b424dc35095cd80f538484c19ef38c94
200359e8 2930 {{0x0f9d37014bf60a10ULL, 0x901d7cf73ab0acd9ULL}},
b2a00c89 2931 // (ten2mx >> 128) = 901d7cf73ab0acd90f9d37014bf60a10
200359e8 2932 {{0x4c2ebe687989a9b3ULL, 0xe69594bec44de15bULL}},
b2a00c89 2933 // (ten2mx >> 128) = e69594bec44de15b4c2ebe687989a9b3
200359e8 2934 {{0x09befeb9fad487c2ULL, 0xb877aa3236a4b449ULL}},
b2a00c89 2935 // (ten2mx >> 128) = b877aa3236a4b44909befeb9fad487c2
200359e8 2936 {{0x3aff322e62439fcfULL, 0x9392ee8e921d5d07ULL}},
b2a00c89 2937 // (ten2mx >> 128) = 9392ee8e921d5d073aff322e62439fcf
200359e8 2938 {{0x2b31e9e3d06c32e5ULL, 0xec1e4a7db69561a5ULL}},
b2a00c89 2939 // (ten2mx >> 128) = ec1e4a7db69561a52b31e9e3d06c32e5
200359e8 2940 {{0x88f4bb1ca6bcf584ULL, 0xbce5086492111aeaULL}},
b2a00c89 2941 // (ten2mx >> 128) = bce5086492111aea88f4bb1ca6bcf584
200359e8 2942 {{0xd3f6fc16ebca5e03ULL, 0x971da05074da7beeULL}},
b2a00c89 2943 // (ten2mx >> 128) = 971da05074da7beed3f6fc16ebca5e03
200359e8 2944 {{0x5324c68b12dd6338ULL, 0xf1c90080baf72cb1ULL}},
b2a00c89 2945 // (ten2mx >> 128) = f1c90080baf72cb15324c68b12dd6338
200359e8 2946 {{0x75b7053c0f178293ULL, 0xc16d9a0095928a27ULL}},
b2a00c89 2947 // (ten2mx >> 128) = c16d9a0095928a2775b7053c0f178293
200359e8 2948 {{0xc4926a9672793542ULL, 0x9abe14cd44753b52ULL}},
b2a00c89 2949 // (ten2mx >> 128) = 9abe14cd44753b52c4926a9672793542
200359e8 2950 {{0x3a83ddbd83f52204ULL, 0xf79687aed3eec551ULL}},
b2a00c89 2951 // (ten2mx >> 128) = f79687aed3eec5513a83ddbd83f52204
200359e8 2952 {{0x95364afe032a819dULL, 0xc612062576589ddaULL}},
b2a00c89 2953 // (ten2mx >> 128) = c612062576589dda95364afe032a819d
200359e8 2954 {{0x775ea264cf55347dULL, 0x9e74d1b791e07e48ULL}},
b2a00c89 2955 // (ten2mx >> 128) = 9e74d1b791e07e48775ea264cf55347d
200359e8 2956 {{0x8bca9d6e188853fcULL, 0xfd87b5f28300ca0dULL}},
b2a00c89 2957 // (ten2mx >> 128) = fd87b5f28300ca0d8bca9d6e188853fc
200359e8 2958 {{0x096ee45813a04330ULL, 0xcad2f7f5359a3b3eULL}},
b2a00c89 2959 // (ten2mx >> 128) = cad2f7f5359a3b3e096ee45813a04330
200359e8 2960 {{0xa1258379a94d028dULL, 0xa2425ff75e14fc31ULL}},
b2a00c89 2961 // (ten2mx >> 128) = a2425ff75e14fc31a1258379a94d028d
200359e8 2962 {{0x80eacf948770ced7ULL, 0x81ceb32c4b43fcf4ULL}},
b2a00c89 2963 // (ten2mx >> 128) = 81ceb32c4b43fcf480eacf948770ced7
200359e8 2964 {{0x67de18eda5814af2ULL, 0xcfb11ead453994baULL}},
b2a00c89 2965 // (ten2mx >> 128) = cfb11ead453994ba67de18eda5814af2
200359e8 2966 {{0xecb1ad8aeacdd58eULL, 0xa6274bbdd0fadd61ULL}},
b2a00c89 2967 // (ten2mx >> 128) = a6274bbdd0fadd61ecb1ad8aeacdd58e
200359e8 2968 {{0xbd5af13bef0b113eULL, 0x84ec3c97da624ab4ULL}},
b2a00c89 2969 // (ten2mx >> 128) = 84ec3c97da624ab4bd5af13bef0b113e
200359e8 2970 {{0x955e4ec64b44e864ULL, 0xd4ad2dbfc3d07787ULL}},
b2a00c89 2971 // (ten2mx >> 128) = d4ad2dbfc3d07787955e4ec64b44e864
200359e8 2972 {{0xdde50bd1d5d0b9e9ULL, 0xaa242499697392d2ULL}},
b2a00c89 2973 // (ten2mx >> 128) = aa242499697392d2dde50bd1d5d0b9e9
200359e8 2974 {{0x7e50d64177da2e54ULL, 0x881cea14545c7575ULL}}
b2a00c89 2975 // (ten2mx >> 128) = 881cea14545c75757e50d64177da2e54
200359e8
L
2976};
2977
b2a00c89
L
2978UINT192 Kx192[] = {
2979 {{0xcccccccccccccccdULL, 0xccccccccccccccccULL,
2980 0xccccccccccccccccULL}},
200359e8 2981 // 10^-1 ~= cccccccccccccccccccccccccccccccccccccccccccccccd * 2^-195
b2a00c89
L
2982 {{0xd70a3d70a3d70a3eULL, 0x3d70a3d70a3d70a3ULL,
2983 0xa3d70a3d70a3d70aULL}},
200359e8 2984 // 10^-2 ~= a3d70a3d70a3d70a3d70a3d70a3d70a3d70a3d70a3d70a3e * 2^-198
b2a00c89
L
2985 {{0x78d4fdf3b645a1cbULL, 0x645a1cac083126e9ULL,
2986 0x83126e978d4fdf3bULL}},
200359e8 2987 // 10^-3 ~= 83126e978d4fdf3b645a1cac083126e978d4fdf3b645a1cb * 2^-201
b2a00c89
L
2988 {{0xc154c985f06f6945ULL, 0xd3c36113404ea4a8ULL,
2989 0xd1b71758e219652bULL}},
200359e8 2990 // 10^-4 ~= d1b71758e219652bd3c36113404ea4a8c154c985f06f6945 * 2^-205
b2a00c89
L
2991 {{0xcddd6e04c0592104ULL, 0x0fcf80dc33721d53ULL,
2992 0xa7c5ac471b478423ULL}},
200359e8 2993 // 10^-5 ~= a7c5ac471b4784230fcf80dc33721d53cddd6e04c0592104 * 2^-208
b2a00c89
L
2994 {{0xd7e45803cd141a6aULL, 0xa63f9a49c2c1b10fULL,
2995 0x8637bd05af6c69b5ULL}},
200359e8 2996 // 10^-6 ~= 8637bd05af6c69b5a63f9a49c2c1b10fd7e45803cd141a6a * 2^-211
b2a00c89
L
2997 {{0x8ca08cd2e1b9c3dcULL, 0x3d32907604691b4cULL,
2998 0xd6bf94d5e57a42bcULL}},
200359e8 2999 // 10^-7 ~= d6bf94d5e57a42bc3d32907604691b4c8ca08cd2e1b9c3dc * 2^-215
b2a00c89
L
3000 {{0x3d4d3d758161697dULL, 0xfdc20d2b36ba7c3dULL,
3001 0xabcc77118461cefcULL}},
200359e8 3002 // 10^-8 ~= abcc77118461cefcfdc20d2b36ba7c3d3d4d3d758161697d * 2^-218
b2a00c89
L
3003 {{0xfdd7645e011abacaULL, 0x31680a88f8953030ULL,
3004 0x89705f4136b4a597ULL}},
200359e8 3005 // 10^-9 ~= 89705f4136b4a59731680a88f8953030fdd7645e011abaca * 2^-221
b2a00c89
L
3006 {{0x2fbf06fcce912addULL, 0xb573440e5a884d1bULL,
3007 0xdbe6fecebdedd5beULL}},
200359e8 3008 // 10^-10 ~= dbe6fecebdedd5beb573440e5a884d1b2fbf06fcce912add * 2^-225
b2a00c89
L
3009 {{0xf2ff38ca3eda88b1ULL, 0xf78f69a51539d748ULL,
3010 0xafebff0bcb24aafeULL}},
200359e8 3011 // 10^-11 ~= afebff0bcb24aafef78f69a51539d748f2ff38ca3eda88b1 * 2^-228
b2a00c89
L
3012 {{0xf598fa3b657ba08eULL, 0xf93f87b7442e45d3ULL,
3013 0x8cbccc096f5088cbULL}},
200359e8 3014 // 10^-12 ~= 8cbccc096f5088cbf93f87b7442e45d3f598fa3b657ba08e * 2^-231
b2a00c89
L
3015 {{0x88f4c3923bf900e3ULL, 0x2865a5f206b06fb9ULL,
3016 0xe12e13424bb40e13ULL}},
200359e8 3017 // 10^-13 ~= e12e13424bb40e132865a5f206b06fb988f4c3923bf900e3 * 2^-235
b2a00c89
L
3018 {{0x6d909c74fcc733e9ULL, 0x538484c19ef38c94ULL,
3019 0xb424dc35095cd80fULL}},
200359e8 3020 // 10^-14 ~= b424dc35095cd80f538484c19ef38c946d909c74fcc733e9 * 2^-238
b2a00c89
L
3021 {{0x57a6e390ca38f654ULL, 0x0f9d37014bf60a10ULL,
3022 0x901d7cf73ab0acd9ULL}},
200359e8 3023 // 10^-15 ~= 901d7cf73ab0acd90f9d37014bf60a1057a6e390ca38f654 * 2^-241
b2a00c89
L
3024 {{0xbf716c1add27f086ULL, 0x4c2ebe687989a9b3ULL,
3025 0xe69594bec44de15bULL}},
200359e8 3026 // 10^-16 ~= e69594bec44de15b4c2ebe687989a9b3bf716c1add27f086 * 2^-245
b2a00c89
L
3027 {{0xff8df0157db98d38ULL, 0x09befeb9fad487c2ULL,
3028 0xb877aa3236a4b449ULL}},
200359e8 3029 // 10^-17 ~= b877aa3236a4b44909befeb9fad487c2ff8df0157db98d38 * 2^-248
b2a00c89
L
3030 {{0x32d7f344649470faULL, 0x3aff322e62439fcfULL,
3031 0x9392ee8e921d5d07ULL}},
200359e8 3032 // 10^-18 ~= 9392ee8e921d5d073aff322e62439fcf32d7f344649470fa * 2^-251
b2a00c89
L
3033 {{0x1e2652070753e7f5ULL, 0x2b31e9e3d06c32e5ULL,
3034 0xec1e4a7db69561a5ULL}},
200359e8 3035 // 10^-19 ~= ec1e4a7db69561a52b31e9e3d06c32e51e2652070753e7f5 * 2^-255
b2a00c89
L
3036 {{0x181ea8059f76532bULL, 0x88f4bb1ca6bcf584ULL,
3037 0xbce5086492111aeaULL}},
200359e8 3038 // 10^-20 ~= bce5086492111aea88f4bb1ca6bcf584181ea8059f76532b * 2^-258
b2a00c89
L
3039 {{0x467eecd14c5ea8efULL, 0xd3f6fc16ebca5e03ULL,
3040 0x971da05074da7beeULL}},
200359e8 3041 // 10^-21 ~= 971da05074da7beed3f6fc16ebca5e03467eecd14c5ea8ef * 2^-261
b2a00c89
L
3042 {{0x70cb148213caa7e5ULL, 0x5324c68b12dd6338ULL,
3043 0xf1c90080baf72cb1ULL}},
200359e8 3044 // 10^-22 ~= f1c90080baf72cb15324c68b12dd633870cb148213caa7e5 * 2^-265
b2a00c89
L
3045 {{0x8d6f439b43088651ULL, 0x75b7053c0f178293ULL,
3046 0xc16d9a0095928a27ULL}},
200359e8 3047 // 10^-23 ~= c16d9a0095928a2775b7053c0f1782938d6f439b43088651 * 2^-268
b2a00c89
L
3048 {{0xd78c3615cf3a050dULL, 0xc4926a9672793542ULL,
3049 0x9abe14cd44753b52ULL}},
200359e8 3050 // 10^-24 ~= 9abe14cd44753b52c4926a9672793542d78c3615cf3a050d * 2^-271
b2a00c89
L
3051 {{0x8c1389bc7ec33b48ULL, 0x3a83ddbd83f52204ULL,
3052 0xf79687aed3eec551ULL}},
200359e8 3053 // 10^-25 ~= f79687aed3eec5513a83ddbd83f522048c1389bc7ec33b48 * 2^-275
b2a00c89
L
3054 {{0x3cdc6e306568fc3aULL, 0x95364afe032a819dULL,
3055 0xc612062576589ddaULL}},
200359e8 3056 // 10^-26 ~= c612062576589dda95364afe032a819d3cdc6e306568fc3a * 2^-278
b2a00c89
L
3057 {{0xca49f1c05120c9c8ULL, 0x775ea264cf55347dULL,
3058 0x9e74d1b791e07e48ULL}},
200359e8 3059 // 10^-27 ~= 9e74d1b791e07e48775ea264cf55347dca49f1c05120c9c8 * 2^-281
b2a00c89
L
3060 {{0x76dcb60081ce0fa6ULL, 0x8bca9d6e188853fcULL,
3061 0xfd87b5f28300ca0dULL}},
200359e8 3062 // 10^-28 ~= fd87b5f28300ca0d8bca9d6e188853fc76dcb60081ce0fa6 * 2^-285
b2a00c89
L
3063 {{0x5f16f80067d80c85ULL, 0x096ee45813a04330ULL,
3064 0xcad2f7f5359a3b3eULL}},
200359e8 3065 // 10^-29 ~= cad2f7f5359a3b3e096ee45813a043305f16f80067d80c85 * 2^-288
b2a00c89
L
3066 {{0x18df2ccd1fe00a04ULL, 0xa1258379a94d028dULL,
3067 0xa2425ff75e14fc31ULL}},
200359e8 3068 // 10^-30 ~= a2425ff75e14fc31a1258379a94d028d18df2ccd1fe00a04 * 2^-291
b2a00c89
L
3069 {{0x4718f0a419800803ULL, 0x80eacf948770ced7ULL,
3070 0x81ceb32c4b43fcf4ULL}},
200359e8 3071 // 10^-31 ~= 81ceb32c4b43fcf480eacf948770ced74718f0a419800803 * 2^-294
b2a00c89
L
3072 {{0x0b5b1aa028ccd99fULL, 0x67de18eda5814af2ULL,
3073 0xcfb11ead453994baULL}},
200359e8 3074 // 10^-32 ~= cfb11ead453994ba67de18eda5814af20b5b1aa028ccd99f * 2^-298
b2a00c89
L
3075 {{0x6f7c154ced70ae19ULL, 0xecb1ad8aeacdd58eULL,
3076 0xa6274bbdd0fadd61ULL}},
200359e8 3077 // 10^-33 ~= a6274bbdd0fadd61ecb1ad8aeacdd58e6f7c154ced70ae19 * 2^-301
b2a00c89
L
3078 {{0xbf967770bdf3be7aULL, 0xbd5af13bef0b113eULL,
3079 0x84ec3c97da624ab4ULL}},
200359e8 3080 // 10^-34 ~= 84ec3c97da624ab4bd5af13bef0b113ebf967770bdf3be7a * 2^-304
b2a00c89
L
3081 {{0x65bd8be79652ca5dULL, 0x955e4ec64b44e864ULL,
3082 0xd4ad2dbfc3d07787ULL}},
200359e8 3083 // 10^-35 ~= d4ad2dbfc3d07787955e4ec64b44e86465bd8be79652ca5d * 2^-308
b2a00c89
L
3084 {{0xeafe098611dbd517ULL, 0xdde50bd1d5d0b9e9ULL,
3085 0xaa242499697392d2ULL}},
200359e8 3086 // 10^-36 ~= aa242499697392d2dde50bd1d5d0b9e9eafe098611dbd517 * 2^-311
b2a00c89
L
3087 {{0xbbfe6e04db164413ULL, 0x7e50d64177da2e54ULL,
3088 0x881cea14545c7575ULL}},
200359e8 3089 // 10^-37 ~= 881cea14545c75757e50d64177da2e54bbfe6e04db164413 * 2^-314
b2a00c89
L
3090 {{0x2cca49a15e8a0684ULL, 0x96e7bd358c904a21ULL,
3091 0xd9c7dced53c72255ULL}},
200359e8 3092 // 10^-38 ~= d9c7dced53c7225596e7bd358c904a212cca49a15e8a0684 * 2^-318
b2a00c89
L
3093 {{0x8a3b6e1ab2080537ULL, 0xabec975e0a0d081aULL,
3094 0xae397d8aa96c1b77ULL}},
200359e8 3095 // 10^-39 ~= ae397d8aa96c1b77abec975e0a0d081a8a3b6e1ab2080537 * 2^-321
b2a00c89
L
3096 {{0x3b62be7bc1a0042cULL, 0x2323ac4b3b3da015ULL,
3097 0x8b61313bbabce2c6ULL}},
200359e8 3098 // 10^-40 ~= 8b61313bbabce2c62323ac4b3b3da0153b62be7bc1a0042c * 2^-324
b2a00c89
L
3099 {{0x5f0463f935ccd379ULL, 0x6b6c46dec52f6688ULL,
3100 0xdf01e85f912e37a3ULL}},
200359e8 3101 // 10^-41 ~= df01e85f912e37a36b6c46dec52f66885f0463f935ccd379 * 2^-328
b2a00c89
L
3102 {{0x7f36b660f7d70f94ULL, 0x55f038b237591ed3ULL,
3103 0xb267ed1940f1c61cULL}},
200359e8 3104 // 10^-42 ~= b267ed1940f1c61c55f038b237591ed37f36b660f7d70f94 * 2^-331
b2a00c89
L
3105 {{0xcc2bc51a5fdf3faaULL, 0x77f3608e92adb242ULL,
3106 0x8eb98a7a9a5b04e3ULL}},
200359e8 3107 // 10^-43 ~= 8eb98a7a9a5b04e377f3608e92adb242cc2bc51a5fdf3faa * 2^-334
b2a00c89
L
3108 {{0xe046082a32fecc42ULL, 0x8cb89a7db77c506aULL,
3109 0xe45c10c42a2b3b05ULL}},
200359e8 3110 // 10^-44 ~= e45c10c42a2b3b058cb89a7db77c506ae046082a32fecc42 * 2^-338
b2a00c89
L
3111 {{0x4d04d354f598a368ULL, 0x3d607b97c5fd0d22ULL,
3112 0xb6b00d69bb55c8d1ULL}},
200359e8 3113 // 10^-45 ~= b6b00d69bb55c8d13d607b97c5fd0d224d04d354f598a368 * 2^-341
b2a00c89
L
3114 {{0x3d9d75dd9146e920ULL, 0xcab3961304ca70e8ULL,
3115 0x9226712162ab070dULL}},
200359e8 3116 // 10^-46 ~= 9226712162ab070dcab3961304ca70e83d9d75dd9146e920 * 2^-344
b2a00c89
L
3117 {{0xc8fbefc8e8717500ULL, 0xaab8f01e6e10b4a6ULL,
3118 0xe9d71b689dde71afULL}},
200359e8 3119 // 10^-47 ~= e9d71b689dde71afaab8f01e6e10b4a6c8fbefc8e8717500 * 2^-348
b2a00c89
L
3120 {{0x3a63263a538df734ULL, 0x5560c018580d5d52ULL,
3121 0xbb127c53b17ec159ULL}},
200359e8 3122 // 10^-48 ~= bb127c53b17ec1595560c018580d5d523a63263a538df734 * 2^-351
b2a00c89
L
3123 {{0x2eb5b82ea93e5f5dULL, 0xdde7001379a44aa8ULL,
3124 0x95a8637627989aadULL}},
200359e8 3125 // 10^-49 ~= 95a8637627989aaddde7001379a44aa82eb5b82ea93e5f5d * 2^-354
b2a00c89
L
3126 {{0x4abc59e441fd6561ULL, 0x963e66858f6d4440ULL,
3127 0xef73d256a5c0f77cULL}},
200359e8 3128 // 10^-50 ~= ef73d256a5c0f77c963e66858f6d44404abc59e441fd6561 * 2^-358
b2a00c89
L
3129 {{0x6efd14b69b311de7ULL, 0xde98520472bdd033ULL,
3130 0xbf8fdb78849a5f96ULL}},
200359e8 3131 // 10^-51 ~= bf8fdb78849a5f96de98520472bdd0336efd14b69b311de7 * 2^-361
b2a00c89
L
3132 {{0x259743c548f417ecULL, 0xe546a8038efe4029ULL,
3133 0x993fe2c6d07b7fabULL}},
200359e8 3134 // 10^-52 ~= 993fe2c6d07b7fabe546a8038efe4029259743c548f417ec * 2^-364
b2a00c89
L
3135 {{0x3c25393ba7ecf313ULL, 0xd53dd99f4b3066a8ULL,
3136 0xf53304714d9265dfULL}},
200359e8 3137 // 10^-53 ~= f53304714d9265dfd53dd99f4b3066a83c25393ba7ecf313 * 2^-368
b2a00c89
L
3138 {{0x96842dc95323f5a9ULL, 0xaa97e14c3c26b886ULL,
3139 0xc428d05aa4751e4cULL}},
200359e8 3140 // 10^-54 ~= c428d05aa4751e4caa97e14c3c26b88696842dc95323f5a9 * 2^-371
b2a00c89
L
3141 {{0xab9cf16ddc1cc487ULL, 0x55464dd69685606bULL,
3142 0x9ced737bb6c4183dULL}},
200359e8
L
3143 // 10^-55 ~= 9ced737bb6c4183d55464dd69685606bab9cf16ddc1cc487 * 2^-374
3144 {{0xac2e4f162cfad40bULL, 0xeed6e2f0f0d56712ULL, 0xfb158592be068d2eULL}}
3145 // 10^-56 ~= fb158592be068d2eeed6e2f0f0d56712ac2e4f162cfad40b * 2^-378
3146};
3147
b2a00c89
L
3148unsigned 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
200359e8
L
3205};
3206
b2a00c89
L
3207UINT64 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
200359e8
L
3264};
3265
b2a00c89
L
3266UINT64 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
200359e8
L
3323};
3324
b2a00c89
L
3325UINT192 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
200359e8 3491 {{0xac2e4f162cfad40aULL, 0xeed6e2f0f0d56712ULL, 0xfb158592be068d2eULL}}
b2a00c89 3492 // (ten2mx >> 192) = fb158592be068d2eeed6e2f0f0d56712ac2e4f162cfad40a
200359e8
L
3493};
3494
b2a00c89 3495UINT256 Kx256[] = {
200359e8 3496 {{0xcccccccccccccccdULL, 0xccccccccccccccccULL,
b2a00c89
L
3497 0xccccccccccccccccULL, 0xccccccccccccccccULL}},
3498 // 10^-1 ~= cccccccccccccccc cccccccccccccccc
200359e8
L
3499 // cccccccccccccccccccccccccccccccd * 2^-259
3500 {{0x70a3d70a3d70a3d8ULL, 0xd70a3d70a3d70a3dULL,
b2a00c89 3501 0x3d70a3d70a3d70a3ULL, 0xa3d70a3d70a3d70aULL}},
200359e8
L
3502 // 10^-2 ~= a3d70a3d70a3d70a 3d70a3d70a3d70a3
3503 // d70a3d70a3d70a3d70a3d70a3d70a3d8 * 2^-262
3504 {{0xc083126e978d4fe0ULL, 0x78d4fdf3b645a1caULL,
b2a00c89 3505 0x645a1cac083126e9ULL, 0x83126e978d4fdf3bULL}},
200359e8
L
3506 // 10^-3 ~= 83126e978d4fdf3b 645a1cac083126e9
3507 // 78d4fdf3b645a1cac083126e978d4fe0 * 2^-265
3508 {{0x67381d7dbf487fccULL, 0xc154c985f06f6944ULL,
b2a00c89 3509 0xd3c36113404ea4a8ULL, 0xd1b71758e219652bULL}},
200359e8
L
3510 // 10^-4 ~= d1b71758e219652b d3c36113404ea4a8
3511 // c154c985f06f694467381d7dbf487fcc * 2^-269
3512 {{0x85c67dfe32a0663dULL, 0xcddd6e04c0592103ULL,
b2a00c89 3513 0x0fcf80dc33721d53ULL, 0xa7c5ac471b478423ULL}},
200359e8
L
3514 // 10^-5 ~= a7c5ac471b478423 fcf80dc33721d53
3515 // cddd6e04c059210385c67dfe32a0663d * 2^-272
3516 {{0x37d1fe64f54d1e97ULL, 0xd7e45803cd141a69ULL,
b2a00c89 3517 0xa63f9a49c2c1b10fULL, 0x8637bd05af6c69b5ULL}},
200359e8
L
3518 // 10^-6 ~= 8637bd05af6c69b5 a63f9a49c2c1b10f
3519 // d7e45803cd141a6937d1fe64f54d1e97 * 2^-275
3520 {{0x8c8330a1887b6425ULL, 0x8ca08cd2e1b9c3dbULL,
b2a00c89 3521 0x3d32907604691b4cULL, 0xd6bf94d5e57a42bcULL}},
200359e8
L
3522 // 10^-7 ~= d6bf94d5e57a42bc 3d32907604691b4c
3523 // 8ca08cd2e1b9c3db8c8330a1887b6425 * 2^-279
3524 {{0x7068f3b46d2f8351ULL, 0x3d4d3d758161697cULL,
b2a00c89 3525 0xfdc20d2b36ba7c3dULL, 0xabcc77118461cefcULL}},
200359e8
L
3526 // 10^-8 ~= abcc77118461cefc fdc20d2b36ba7c3d
3527 // 3d4d3d758161697c7068f3b46d2f8351 * 2^-282
3528 {{0xf387295d242602a7ULL, 0xfdd7645e011abac9ULL,
b2a00c89 3529 0x31680a88f8953030ULL, 0x89705f4136b4a597ULL}},
200359e8
L
3530 // 10^-9 ~= 89705f4136b4a597 31680a88f8953030
3531 // fdd7645e011abac9f387295d242602a7 * 2^-285
3532 {{0xb8d8422ea03cd10bULL, 0x2fbf06fcce912adcULL,
b2a00c89 3533 0xb573440e5a884d1bULL, 0xdbe6fecebdedd5beULL}},
200359e8
L
3534 // 10^-10 ~= dbe6fecebdedd5be b573440e5a884d1b
3535 // 2fbf06fcce912adcb8d8422ea03cd10b * 2^-289
3536 {{0x93e034f219ca40d6ULL, 0xf2ff38ca3eda88b0ULL,
b2a00c89 3537 0xf78f69a51539d748ULL, 0xafebff0bcb24aafeULL}},
200359e8
L
3538 // 10^-11 ~= afebff0bcb24aafe f78f69a51539d748
3539 // f2ff38ca3eda88b093e034f219ca40d6 * 2^-292
3540 {{0x4319c3f4e16e9a45ULL, 0xf598fa3b657ba08dULL,
b2a00c89 3541 0xf93f87b7442e45d3ULL, 0x8cbccc096f5088cbULL}},
200359e8
L
3542 // 10^-12 ~= 8cbccc096f5088cb f93f87b7442e45d3
3543 // f598fa3b657ba08d4319c3f4e16e9a45 * 2^-295
3544 {{0x04f606549be42a07ULL, 0x88f4c3923bf900e2ULL,
b2a00c89 3545 0x2865a5f206b06fb9ULL, 0xe12e13424bb40e13ULL}},
200359e8
L
3546 // 10^-13 ~= e12e13424bb40e13 2865a5f206b06fb9
3547 // 88f4c3923bf900e204f606549be42a07 * 2^-299
3548 {{0x03f805107cb68806ULL, 0x6d909c74fcc733e8ULL,
b2a00c89 3549 0x538484c19ef38c94ULL, 0xb424dc35095cd80fULL}},
200359e8
L
3550 // 10^-14 ~= b424dc35095cd80f 538484c19ef38c94
3551 // 6d909c74fcc733e803f805107cb68806 * 2^-302
3552 {{0x3660040d3092066bULL, 0x57a6e390ca38f653ULL,
b2a00c89 3553 0x0f9d37014bf60a10ULL, 0x901d7cf73ab0acd9ULL}},
200359e8
L
3554 // 10^-15 ~= 901d7cf73ab0acd9 f9d37014bf60a10
3555 // 57a6e390ca38f6533660040d3092066b * 2^-305
3556 {{0x23ccd3484db670abULL, 0xbf716c1add27f085ULL,
b2a00c89 3557 0x4c2ebe687989a9b3ULL, 0xe69594bec44de15bULL}},
200359e8
L
3558 // 10^-16 ~= e69594bec44de15b 4c2ebe687989a9b3
3559 // bf716c1add27f08523ccd3484db670ab * 2^-309
3560 {{0x4fd70f6d0af85a23ULL, 0xff8df0157db98d37ULL,
b2a00c89 3561 0x09befeb9fad487c2ULL, 0xb877aa3236a4b449ULL}},
200359e8
L
3562 // 10^-17 ~= b877aa3236a4b449 9befeb9fad487c2
3563 // ff8df0157db98d374fd70f6d0af85a23 * 2^-312
3564 {{0x0cac0c573bf9e1b6ULL, 0x32d7f344649470f9ULL,
b2a00c89 3565 0x3aff322e62439fcfULL, 0x9392ee8e921d5d07ULL}},
200359e8
L
3566 // 10^-18 ~= 9392ee8e921d5d07 3aff322e62439fcf
3567 // 32d7f344649470f90cac0c573bf9e1b6 * 2^-315
3568 {{0xe11346f1f98fcf89ULL, 0x1e2652070753e7f4ULL,
b2a00c89 3569 0x2b31e9e3d06c32e5ULL, 0xec1e4a7db69561a5ULL}},
200359e8
L
3570 // 10^-19 ~= ec1e4a7db69561a5 2b31e9e3d06c32e5
3571 // 1e2652070753e7f4e11346f1f98fcf89 * 2^-319
3572 {{0x4da9058e613fd93aULL, 0x181ea8059f76532aULL,
b2a00c89 3573 0x88f4bb1ca6bcf584ULL, 0xbce5086492111aeaULL}},
200359e8
L
3574 // 10^-20 ~= bce5086492111aea 88f4bb1ca6bcf584
3575 // 181ea8059f76532a4da9058e613fd93a * 2^-322
3576 {{0xa48737a51a997a95ULL, 0x467eecd14c5ea8eeULL,
b2a00c89 3577 0xd3f6fc16ebca5e03ULL, 0x971da05074da7beeULL}},
200359e8
L
3578 // 10^-21 ~= 971da05074da7bee d3f6fc16ebca5e03
3579 // 467eecd14c5ea8eea48737a51a997a95 * 2^-325
3580 {{0x3a71f2a1c428c421ULL, 0x70cb148213caa7e4ULL,
b2a00c89 3581 0x5324c68b12dd6338ULL, 0xf1c90080baf72cb1ULL}},
200359e8
L
3582 // 10^-22 ~= f1c90080baf72cb1 5324c68b12dd6338
3583 // 70cb148213caa7e43a71f2a1c428c421 * 2^-329
3584 {{0x2ec18ee7d0209ce8ULL, 0x8d6f439b43088650ULL,
b2a00c89 3585 0x75b7053c0f178293ULL, 0xc16d9a0095928a27ULL}},
200359e8
L
3586 // 10^-23 ~= c16d9a0095928a27 75b7053c0f178293
3587 // 8d6f439b430886502ec18ee7d0209ce8 * 2^-332
3588 {{0xf23472530ce6e3edULL, 0xd78c3615cf3a050cULL,
b2a00c89 3589 0xc4926a9672793542ULL, 0x9abe14cd44753b52ULL}},
200359e8
L
3590 // 10^-24 ~= 9abe14cd44753b52 c4926a9672793542
3591 // d78c3615cf3a050cf23472530ce6e3ed * 2^-335
3592 {{0xe9ed83b814a49fe1ULL, 0x8c1389bc7ec33b47ULL,
b2a00c89 3593 0x3a83ddbd83f52204ULL, 0xf79687aed3eec551ULL}},
200359e8
L
3594 // 10^-25 ~= f79687aed3eec551 3a83ddbd83f52204
3595 // 8c1389bc7ec33b47e9ed83b814a49fe1 * 2^-339
3596 {{0x87f1362cdd507fe7ULL, 0x3cdc6e306568fc39ULL,
b2a00c89 3597 0x95364afe032a819dULL, 0xc612062576589ddaULL}},
200359e8
L
3598 // 10^-26 ~= c612062576589dda 95364afe032a819d
3599 // 3cdc6e306568fc3987f1362cdd507fe7 * 2^-342
3600 {{0x9ff42b5717739986ULL, 0xca49f1c05120c9c7ULL,
b2a00c89 3601 0x775ea264cf55347dULL, 0x9e74d1b791e07e48ULL}},
200359e8
L
3602 // 10^-27 ~= 9e74d1b791e07e48 775ea264cf55347d
3603 // ca49f1c05120c9c79ff42b5717739986 * 2^-345
3604 {{0xccb9def1bf1f5c09ULL, 0x76dcb60081ce0fa5ULL,
b2a00c89 3605 0x8bca9d6e188853fcULL, 0xfd87b5f28300ca0dULL}},
200359e8
L
3606 // 10^-28 ~= fd87b5f28300ca0d 8bca9d6e188853fc
3607 // 76dcb60081ce0fa5ccb9def1bf1f5c09 * 2^-349
3608 {{0xa3c7e58e327f7cd4ULL, 0x5f16f80067d80c84ULL,
b2a00c89 3609 0x096ee45813a04330ULL, 0xcad2f7f5359a3b3eULL}},
200359e8
L
3610 // 10^-29 ~= cad2f7f5359a3b3e 96ee45813a04330
3611 // 5f16f80067d80c84a3c7e58e327f7cd4 * 2^-352
3612 {{0xb6398471c1ff9710ULL, 0x18df2ccd1fe00a03ULL,
b2a00c89 3613 0xa1258379a94d028dULL, 0xa2425ff75e14fc31ULL}},
200359e8
L
3614 // 10^-30 ~= a2425ff75e14fc31 a1258379a94d028d
3615 // 18df2ccd1fe00a03b6398471c1ff9710 * 2^-355
3616 {{0xf82e038e34cc78daULL, 0x4718f0a419800802ULL,
b2a00c89 3617 0x80eacf948770ced7ULL, 0x81ceb32c4b43fcf4ULL}},
200359e8
L
3618 // 10^-31 ~= 81ceb32c4b43fcf4 80eacf948770ced7
3619 // 4718f0a419800802f82e038e34cc78da * 2^-358
3620 {{0x59e338e387ad8e29ULL, 0x0b5b1aa028ccd99eULL,
b2a00c89 3621 0x67de18eda5814af2ULL, 0xcfb11ead453994baULL}},
200359e8
L
3622 // 10^-32 ~= cfb11ead453994ba 67de18eda5814af2
3623 // b5b1aa028ccd99e59e338e387ad8e29 * 2^-362
3624 {{0x47e8fa4f9fbe0b54ULL, 0x6f7c154ced70ae18ULL,
b2a00c89 3625 0xecb1ad8aeacdd58eULL, 0xa6274bbdd0fadd61ULL}},
200359e8
L
3626 // 10^-33 ~= a6274bbdd0fadd61 ecb1ad8aeacdd58e
3627 // 6f7c154ced70ae1847e8fa4f9fbe0b54 * 2^-365
3628 {{0xd320c83fb2fe6f76ULL, 0xbf967770bdf3be79ULL,
b2a00c89 3629 0xbd5af13bef0b113eULL, 0x84ec3c97da624ab4ULL}},
200359e8
L
3630 // 10^-34 ~= 84ec3c97da624ab4 bd5af13bef0b113e
3631 // bf967770bdf3be79d320c83fb2fe6f76 * 2^-368
3632 {{0x85014065eb30b257ULL, 0x65bd8be79652ca5cULL,
b2a00c89 3633 0x955e4ec64b44e864ULL, 0xd4ad2dbfc3d07787ULL}},
200359e8
L
3634 // 10^-35 ~= d4ad2dbfc3d07787 955e4ec64b44e864
3635 // 65bd8be79652ca5c85014065eb30b257 * 2^-372
3636 {{0xd0cdcd1e55c08eacULL, 0xeafe098611dbd516ULL,
b2a00c89 3637 0xdde50bd1d5d0b9e9ULL, 0xaa242499697392d2ULL}},
200359e8
L
3638 // 10^-36 ~= aa242499697392d2 dde50bd1d5d0b9e9
3639 // eafe098611dbd516d0cdcd1e55c08eac * 2^-375
3640 {{0x40a4a418449a0bbdULL, 0xbbfe6e04db164412ULL,
b2a00c89 3641 0x7e50d64177da2e54ULL, 0x881cea14545c7575ULL}},
200359e8
L
3642 // 10^-37 ~= 881cea14545c7575 7e50d64177da2e54
3643 // bbfe6e04db16441240a4a418449a0bbd * 2^-378
3644 {{0x9aa1068d3a9012c8ULL, 0x2cca49a15e8a0683ULL,
b2a00c89 3645 0x96e7bd358c904a21ULL, 0xd9c7dced53c72255ULL}},
200359e8
L
3646 // 10^-38 ~= d9c7dced53c72255 96e7bd358c904a21
3647 // 2cca49a15e8a06839aa1068d3a9012c8 * 2^-382
3648 {{0x154d9ed7620cdbd3ULL, 0x8a3b6e1ab2080536ULL,
b2a00c89 3649 0xabec975e0a0d081aULL, 0xae397d8aa96c1b77ULL}},
200359e8
L
3650 // 10^-39 ~= ae397d8aa96c1b77 abec975e0a0d081a
3651 // 8a3b6e1ab2080536154d9ed7620cdbd3 * 2^-385
3652 {{0x443e18ac4e70afdcULL, 0x3b62be7bc1a0042bULL,
b2a00c89 3653 0x2323ac4b3b3da015ULL, 0x8b61313bbabce2c6ULL}},
200359e8
L
3654 // 10^-40 ~= 8b61313bbabce2c6 2323ac4b3b3da015
3655 // 3b62be7bc1a0042b443e18ac4e70afdc * 2^-388
3656 {{0x6d30277a171ab2f9ULL, 0x5f0463f935ccd378ULL,
b2a00c89 3657 0x6b6c46dec52f6688ULL, 0xdf01e85f912e37a3ULL}},
200359e8
L
3658 // 10^-41 ~= df01e85f912e37a3 6b6c46dec52f6688
3659 // 5f0463f935ccd3786d30277a171ab2f9 * 2^-392
3660 {{0x8a8cec61ac155bfbULL, 0x7f36b660f7d70f93ULL,
b2a00c89 3661 0x55f038b237591ed3ULL, 0xb267ed1940f1c61cULL}},
200359e8
L
3662 // 10^-42 ~= b267ed1940f1c61c 55f038b237591ed3
3663 // 7f36b660f7d70f938a8cec61ac155bfb * 2^-395
3664 {{0x3ba3f04e23444996ULL, 0xcc2bc51a5fdf3fa9ULL,
b2a00c89 3665 0x77f3608e92adb242ULL, 0x8eb98a7a9a5b04e3ULL}},
200359e8
L
3666 // 10^-43 ~= 8eb98a7a9a5b04e3 77f3608e92adb242
3667 // cc2bc51a5fdf3fa93ba3f04e23444996 * 2^-398
3668 {{0xf9064d49d206dc22ULL, 0xe046082a32fecc41ULL,
b2a00c89 3669 0x8cb89a7db77c506aULL, 0xe45c10c42a2b3b05ULL}},
200359e8
L
3670 // 10^-44 ~= e45c10c42a2b3b05 8cb89a7db77c506a
3671 // e046082a32fecc41f9064d49d206dc22 * 2^-402
3672 {{0xfa6b7107db38b01bULL, 0x4d04d354f598a367ULL,
b2a00c89 3673 0x3d607b97c5fd0d22ULL, 0xb6b00d69bb55c8d1ULL}},
200359e8
L
3674 // 10^-45 ~= b6b00d69bb55c8d1 3d607b97c5fd0d22
3675 // 4d04d354f598a367fa6b7107db38b01b * 2^-405
3676 {{0xfb8927397c2d59b0ULL, 0x3d9d75dd9146e91fULL,
b2a00c89 3677 0xcab3961304ca70e8ULL, 0x9226712162ab070dULL}},
200359e8
L
3678 // 10^-46 ~= 9226712162ab070d cab3961304ca70e8
3679 // 3d9d75dd9146e91ffb8927397c2d59b0 * 2^-408
3680 {{0xf8db71f5937bc2b2ULL, 0xc8fbefc8e87174ffULL,
b2a00c89 3681 0xaab8f01e6e10b4a6ULL, 0xe9d71b689dde71afULL}},
200359e8
L
3682 // 10^-47 ~= e9d71b689dde71af aab8f01e6e10b4a6
3683 // c8fbefc8e87174fff8db71f5937bc2b2 * 2^-412
3684 {{0x2d7c5b2adc630228ULL, 0x3a63263a538df733ULL,
b2a00c89 3685 0x5560c018580d5d52ULL, 0xbb127c53b17ec159ULL}},
200359e8
L
3686 // 10^-48 ~= bb127c53b17ec159 5560c018580d5d52
3687 // 3a63263a538df7332d7c5b2adc630228 * 2^-415
3688 {{0x24637c2249e8ce87ULL, 0x2eb5b82ea93e5f5cULL,
b2a00c89 3689 0xdde7001379a44aa8ULL, 0x95a8637627989aadULL}},
200359e8
L
3690 // 10^-49 ~= 95a8637627989aad dde7001379a44aa8
3691 // 2eb5b82ea93e5f5c24637c2249e8ce87 * 2^-418
3692 {{0x3a38c69d430e173eULL, 0x4abc59e441fd6560ULL,
b2a00c89 3693 0x963e66858f6d4440ULL, 0xef73d256a5c0f77cULL}},
200359e8
L
3694 // 10^-50 ~= ef73d256a5c0f77c 963e66858f6d4440
3695 // 4abc59e441fd65603a38c69d430e173e * 2^-422
3696 {{0x94fa387dcf3e78feULL, 0x6efd14b69b311de6ULL,
b2a00c89 3697 0xde98520472bdd033ULL, 0xbf8fdb78849a5f96ULL}},
200359e8
L
3698 // 10^-51 ~= bf8fdb78849a5f96 de98520472bdd033
3699 // 6efd14b69b311de694fa387dcf3e78fe * 2^-425
3700 {{0xaa61c6cb0c31fa65ULL, 0x259743c548f417ebULL,
b2a00c89 3701 0xe546a8038efe4029ULL, 0x993fe2c6d07b7fabULL}},
200359e8
L
3702 // 10^-52 ~= 993fe2c6d07b7fab e546a8038efe4029
3703 // 259743c548f417ebaa61c6cb0c31fa65 * 2^-428
3704 {{0xaa360ade79e990a2ULL, 0x3c25393ba7ecf312ULL,
b2a00c89 3705 0xd53dd99f4b3066a8ULL, 0xf53304714d9265dfULL}},
200359e8
L
3706 // 10^-53 ~= f53304714d9265df d53dd99f4b3066a8
3707 // 3c25393ba7ecf312aa360ade79e990a2 * 2^-432
3708 {{0x882b3be52e5473b5ULL, 0x96842dc95323f5a8ULL,
b2a00c89 3709 0xaa97e14c3c26b886ULL, 0xc428d05aa4751e4cULL}},
200359e8
L
3710 // 10^-54 ~= c428d05aa4751e4c aa97e14c3c26b886
3711 // 96842dc95323f5a8882b3be52e5473b5 * 2^-435
3712 {{0xd355c98425105c91ULL, 0xab9cf16ddc1cc486ULL,
b2a00c89 3713 0x55464dd69685606bULL, 0x9ced737bb6c4183dULL}},
200359e8
L
3714 // 10^-55 ~= 9ced737bb6c4183d 55464dd69685606b
3715 // ab9cf16ddc1cc486d355c98425105c91 * 2^-438
3716 {{0xebbc75a03b4d60e7ULL, 0xac2e4f162cfad40aULL,
b2a00c89 3717 0xeed6e2f0f0d56712ULL, 0xfb158592be068d2eULL}},
200359e8
L
3718 // 10^-56 ~= fb158592be068d2e eed6e2f0f0d56712
3719 // ac2e4f162cfad40aebbc75a03b4d60e7 * 2^-442
3720 {{0x8963914cfc3de71fULL, 0x568b727823fbdcd5ULL,
b2a00c89 3721 0xf245825a5a445275ULL, 0xc8de047564d20a8bULL}},
200359e8
L
3722 // 10^-57 ~= c8de047564d20a8b f245825a5a445275
3723 // 568b727823fbdcd58963914cfc3de71f * 2^-445
3724 {{0xd44fa770c9cb1f4cULL, 0x453c5b934ffcb0aaULL,
b2a00c89 3725 0x5b6aceaeae9d0ec4ULL, 0xa0b19d2ab70e6ed6ULL}},
200359e8
L
3726 // 10^-58 ~= a0b19d2ab70e6ed6 5b6aceaeae9d0ec4
3727 // 453c5b934ffcb0aad44fa770c9cb1f4c * 2^-448
3728 {{0xdd0c85f3d4a27f70ULL, 0x37637c75d996f3bbULL,
b2a00c89 3729 0xe2bbd88bbee40bd0ULL, 0x808e17555f3ebf11ULL}},
200359e8
L
3730 // 10^-59 ~= 808e17555f3ebf11 e2bbd88bbee40bd0
3731 // 37637c75d996f3bbdd0c85f3d4a27f70 * 2^-451
3732 {{0x61ada31fba9d98b3ULL, 0x256bfa5628f185f9ULL,
b2a00c89 3733 0x3792f412cb06794dULL, 0xcdb02555653131b6ULL}},
200359e8
L
3734 // 10^-60 ~= cdb02555653131b6 3792f412cb06794d
3735 // 256bfa5628f185f961ada31fba9d98b3 * 2^-455
3736 {{0xe7be1c196217ad5cULL, 0x51232eab53f46b2dULL,
b2a00c89 3737 0x5fa8c3423c052dd7ULL, 0xa48ceaaab75a8e2bULL}},
200359e8
L
3738 // 10^-61 ~= a48ceaaab75a8e2b 5fa8c3423c052dd7
3739 // 51232eab53f46b2de7be1c196217ad5c * 2^-458
3740 {{0x52fe7ce11b46244aULL, 0x40e8f222a99055beULL,
b2a00c89 3741 0x1953cf68300424acULL, 0x83a3eeeef9153e89ULL}},
200359e8
L
3742 // 10^-62 ~= 83a3eeeef9153e89 1953cf68300424ac
3743 // 40e8f222a99055be52fe7ce11b46244a * 2^-461
3744 {{0x51972e34f8703a10ULL, 0x34a7e9d10f4d55fdULL,
b2a00c89 3745 0x8eec7f0d19a03aadULL, 0xd29fe4b18e88640eULL}},
200359e8
L
3746 // 10^-63 ~= d29fe4b18e88640e 8eec7f0d19a03aad
3747 // 34a7e9d10f4d55fd51972e34f8703a10 * 2^-465
3748 {{0x0e128b5d938cfb40ULL, 0x2a1fee40d90aab31ULL,
b2a00c89 3749 0x3f2398d747b36224ULL, 0xa87fea27a539e9a5ULL}},
200359e8
L
3750 // 10^-64 ~= a87fea27a539e9a5 3f2398d747b36224
3751 // 2a1fee40d90aab310e128b5d938cfb40 * 2^-468
3752 {{0x3e753c4adc70c900ULL, 0xbb4cbe9a473bbc27ULL,
b2a00c89 3753 0x98e947129fc2b4e9ULL, 0x86ccbb52ea94baeaULL}},
200359e8
L
3754 // 10^-65 ~= 86ccbb52ea94baea 98e947129fc2b4e9
3755 // bb4cbe9a473bbc273e753c4adc70c900 * 2^-471
3756 {{0x30bb93aafa4e0e66ULL, 0x9214642a0b92c6a5ULL,
b2a00c89 3757 0x5b0ed81dcc6abb0fULL, 0xd7adf884aa879177ULL}},
200359e8
L
3758 // 10^-66 ~= d7adf884aa879177 5b0ed81dcc6abb0f
3759 // 9214642a0b92c6a530bb93aafa4e0e66 * 2^-475
3760 {{0xc0960fbbfb71a51fULL, 0xa8105021a2dbd21dULL,
b2a00c89 3761 0xe272467e3d222f3fULL, 0xac8b2d36eed2dac5ULL}},
200359e8
L
3762 // 10^-67 ~= ac8b2d36eed2dac5 e272467e3d222f3f
3763 // a8105021a2dbd21dc0960fbbfb71a51f * 2^-478
3764 {{0x66de72fcc927b74cULL, 0xb9a6a6814f1641b1ULL,
b2a00c89 3765 0x1b8e9ecb641b58ffULL, 0x8a08f0f8bf0f156bULL}},
200359e8
L
3766 // 10^-68 ~= 8a08f0f8bf0f156b 1b8e9ecb641b58ff
3767 // b9a6a6814f1641b166de72fcc927b74c * 2^-481
3768 {{0xd7ca5194750c5879ULL, 0xf5d770cee4f0691bULL,
b2a00c89 3769 0xf8e431456cf88e65ULL, 0xdcdb1b2798182244ULL}},
200359e8
L
3770 // 10^-69 ~= dcdb1b2798182244 f8e431456cf88e65
3771 // f5d770cee4f0691bd7ca5194750c5879 * 2^-485
3772 {{0xdfd50e105da379faULL, 0x9179270bea59edafULL,
b2a00c89 3773 0x2d835a9df0c6d851ULL, 0xb0af48ec79ace837ULL}},
200359e8
L
3774 // 10^-70 ~= b0af48ec79ace837 2d835a9df0c6d851
3775 // 9179270bea59edafdfd50e105da379fa * 2^-488
3776 {{0x19773e737e1c6195ULL, 0x0dfa85a321e18af3ULL,
b2a00c89 3777 0x579c487e5a38ad0eULL, 0x8d590723948a535fULL}},
200359e8
L
3778 // 10^-71 ~= 8d590723948a535f 579c487e5a38ad0e
3779 // dfa85a321e18af319773e737e1c6195 * 2^-491
3780 {{0xf58b971f302d68efULL, 0x165da29e9c9c1184ULL,
b2a00c89 3781 0x25c6da63c38de1b0ULL, 0xe2280b6c20dd5232ULL}},
200359e8
L
3782 // 10^-72 ~= e2280b6c20dd5232 25c6da63c38de1b0
3783 // 165da29e9c9c1184f58b971f302d68ef * 2^-495
3784 {{0xc46fac18f3578725ULL, 0x4517b54bb07cdad0ULL,
b2a00c89 3785 0x1e38aeb6360b1af3ULL, 0xb4ecd5f01a4aa828ULL}},
200359e8
L
3786 // 10^-73 ~= b4ecd5f01a4aa828 1e38aeb6360b1af3
3787 // 4517b54bb07cdad0c46fac18f3578725 * 2^-498
3788 {{0x36bfbce0c2ac6c1eULL, 0x9dac910959fd7bdaULL,
b2a00c89 3789 0xb1c6f22b5e6f48c2ULL, 0x90bd77f3483bb9b9ULL}},
200359e8
L
3790 // 10^-74 ~= 90bd77f3483bb9b9 b1c6f22b5e6f48c2
3791 // 9dac910959fd7bda36bfbce0c2ac6c1e * 2^-501
3792 {{0x2465fb01377a4696ULL, 0x2f7a81a88ffbf95dULL,
b2a00c89 3793 0xb60b1d1230b20e04ULL, 0xe7958cb87392c2c2ULL}}
200359e8
L
3794 // 10^-75 ~= e7958cb87392c2c2 b60b1d1230b20e04
3795 // 2f7a81a88ffbf95d2465fb01377a4696 * 2^-505
3796};
3797
b2a00c89
L
3798unsigned 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
200359e8
L
3874};
3875
b2a00c89
L
3876UINT64 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
200359e8
L
3952};
3953
b2a00c89
L
3954UINT64 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
200359e8
L
4030};
4031
b2a00c89 4032UINT256 ten2mxtrunc256[] = {
200359e8 4033 {{0xccccccccccccccccULL, 0xccccccccccccccccULL,
b2a00c89
L
4034 0xccccccccccccccccULL, 0xccccccccccccccccULL}},
4035 // (ten2mx >> 256) = cccccccccccccccc cccccccccccccccc
200359e8
L
4036 // cccccccccccccccccccccccccccccccc
4037 {{0x70a3d70a3d70a3d7ULL, 0xd70a3d70a3d70a3dULL,
b2a00c89
L
4038 0x3d70a3d70a3d70a3ULL, 0xa3d70a3d70a3d70aULL}},
4039 // (ten2mx >> 256) = a3d70a3d70a3d70a 3d70a3d70a3d70a3
200359e8
L
4040 // d70a3d70a3d70a3d70a3d70a3d70a3d7
4041 {{0xc083126e978d4fdfULL, 0x78d4fdf3b645a1caULL,
b2a00c89
L
4042 0x645a1cac083126e9ULL, 0x83126e978d4fdf3bULL}},
4043 // (ten2mx >> 256) = 83126e978d4fdf3b 645a1cac083126e9
200359e8
L
4044 // 78d4fdf3b645a1cac083126e978d4fdf
4045 {{0x67381d7dbf487fcbULL, 0xc154c985f06f6944ULL,
b2a00c89
L
4046 0xd3c36113404ea4a8ULL, 0xd1b71758e219652bULL}},
4047 // (ten2mx >> 256) = d1b71758e219652b d3c36113404ea4a8
200359e8
L
4048 // c154c985f06f694467381d7dbf487fcb
4049 {{0x85c67dfe32a0663cULL, 0xcddd6e04c0592103ULL,
b2a00c89
L
4050 0x0fcf80dc33721d53ULL, 0xa7c5ac471b478423ULL}},
4051 // (ten2mx >> 256) = a7c5ac471b478423 fcf80dc33721d53
200359e8
L
4052 // cddd6e04c059210385c67dfe32a0663c
4053 {{0x37d1fe64f54d1e96ULL, 0xd7e45803cd141a69ULL,
b2a00c89
L
4054 0xa63f9a49c2c1b10fULL, 0x8637bd05af6c69b5ULL}},
4055 // (ten2mx >> 256) = 8637bd05af6c69b5 a63f9a49c2c1b10f
200359e8
L
4056 // d7e45803cd141a6937d1fe64f54d1e96
4057 {{0x8c8330a1887b6424ULL, 0x8ca08cd2e1b9c3dbULL,
b2a00c89
L
4058 0x3d32907604691b4cULL, 0xd6bf94d5e57a42bcULL}},
4059 // (ten2mx >> 256) = d6bf94d5e57a42bc 3d32907604691b4c
200359e8
L
4060 // 8ca08cd2e1b9c3db8c8330a1887b6424
4061 {{0x7068f3b46d2f8350ULL, 0x3d4d3d758161697cULL,
b2a00c89
L
4062 0xfdc20d2b36ba7c3dULL, 0xabcc77118461cefcULL}},
4063 // (ten2mx >> 256) = abcc77118461cefc fdc20d2b36ba7c3d
200359e8
L
4064 // 3d4d3d758161697c7068f3b46d2f8350
4065 {{0xf387295d242602a6ULL, 0xfdd7645e011abac9ULL,
b2a00c89
L
4066 0x31680a88f8953030ULL, 0x89705f4136b4a597ULL}},
4067 // (ten2mx >> 256) = 89705f4136b4a597 31680a88f8953030
200359e8
L
4068 // fdd7645e011abac9f387295d242602a6
4069 {{0xb8d8422ea03cd10aULL, 0x2fbf06fcce912adcULL,
b2a00c89
L
4070 0xb573440e5a884d1bULL, 0xdbe6fecebdedd5beULL}},
4071 // (ten2mx >> 256) = dbe6fecebdedd5be b573440e5a884d1b
200359e8
L
4072 // 2fbf06fcce912adcb8d8422ea03cd10a
4073 {{0x93e034f219ca40d5ULL, 0xf2ff38ca3eda88b0ULL,
b2a00c89
L
4074 0xf78f69a51539d748ULL, 0xafebff0bcb24aafeULL}},
4075 // (ten2mx >> 256) = afebff0bcb24aafe f78f69a51539d748
200359e8
L
4076 // f2ff38ca3eda88b093e034f219ca40d5
4077 {{0x4319c3f4e16e9a44ULL, 0xf598fa3b657ba08dULL,
b2a00c89
L
4078 0xf93f87b7442e45d3ULL, 0x8cbccc096f5088cbULL}},
4079 // (ten2mx >> 256) = 8cbccc096f5088cb f93f87b7442e45d3
200359e8
L
4080 // f598fa3b657ba08d4319c3f4e16e9a44
4081 {{0x04f606549be42a06ULL, 0x88f4c3923bf900e2ULL,
b2a00c89
L
4082 0x2865a5f206b06fb9ULL, 0xe12e13424bb40e13ULL}},
4083 // (ten2mx >> 256) = e12e13424bb40e13 2865a5f206b06fb9
200359e8
L
4084 // 88f4c3923bf900e204f606549be42a06
4085 {{0x03f805107cb68805ULL, 0x6d909c74fcc733e8ULL,
b2a00c89
L
4086 0x538484c19ef38c94ULL, 0xb424dc35095cd80fULL}},
4087 // (ten2mx >> 256) = b424dc35095cd80f 538484c19ef38c94
200359e8
L
4088 // 6d909c74fcc733e803f805107cb68805
4089 {{0x3660040d3092066aULL, 0x57a6e390ca38f653ULL,
b2a00c89
L
4090 0x0f9d37014bf60a10ULL, 0x901d7cf73ab0acd9ULL}},
4091 // (ten2mx >> 256) = 901d7cf73ab0acd9 f9d37014bf60a10
200359e8
L
4092 // 57a6e390ca38f6533660040d3092066a
4093 {{0x23ccd3484db670aaULL, 0xbf716c1add27f085ULL,
b2a00c89
L
4094 0x4c2ebe687989a9b3ULL, 0xe69594bec44de15bULL}},
4095 // (ten2mx >> 256) = e69594bec44de15b 4c2ebe687989a9b3
200359e8
L
4096 // bf716c1add27f08523ccd3484db670aa
4097 {{0x4fd70f6d0af85a22ULL, 0xff8df0157db98d37ULL,
b2a00c89
L
4098 0x09befeb9fad487c2ULL, 0xb877aa3236a4b449ULL}},
4099 // (ten2mx >> 256) = b877aa3236a4b449 9befeb9fad487c2
200359e8
L
4100 // ff8df0157db98d374fd70f6d0af85a22
4101 {{0x0cac0c573bf9e1b5ULL, 0x32d7f344649470f9ULL,
b2a00c89
L
4102 0x3aff322e62439fcfULL, 0x9392ee8e921d5d07ULL}},
4103 // (ten2mx >> 256) = 9392ee8e921d5d07 3aff322e62439fcf
200359e8
L
4104 // 32d7f344649470f90cac0c573bf9e1b5
4105 {{0xe11346f1f98fcf88ULL, 0x1e2652070753e7f4ULL,
b2a00c89
L
4106 0x2b31e9e3d06c32e5ULL, 0xec1e4a7db69561a5ULL}},
4107 // (ten2mx >> 256) = ec1e4a7db69561a5 2b31e9e3d06c32e5
200359e8
L
4108 // 1e2652070753e7f4e11346f1f98fcf88
4109 {{0x4da9058e613fd939ULL, 0x181ea8059f76532aULL,
b2a00c89
L
4110 0x88f4bb1ca6bcf584ULL, 0xbce5086492111aeaULL}},
4111 // (ten2mx >> 256) = bce5086492111aea 88f4bb1ca6bcf584
200359e8
L
4112 // 181ea8059f76532a4da9058e613fd939
4113 {{0xa48737a51a997a94ULL, 0x467eecd14c5ea8eeULL,
b2a00c89
L
4114 0xd3f6fc16ebca5e03ULL, 0x971da05074da7beeULL}},
4115 // (ten2mx >> 256) = 971da05074da7bee d3f6fc16ebca5e03
200359e8
L
4116 // 467eecd14c5ea8eea48737a51a997a94
4117 {{0x3a71f2a1c428c420ULL, 0x70cb148213caa7e4ULL,
b2a00c89
L
4118 0x5324c68b12dd6338ULL, 0xf1c90080baf72cb1ULL}},
4119 // (ten2mx >> 256) = f1c90080baf72cb1 5324c68b12dd6338
200359e8
L
4120 // 70cb148213caa7e43a71f2a1c428c420
4121 {{0x2ec18ee7d0209ce7ULL, 0x8d6f439b43088650ULL,
b2a00c89
L
4122 0x75b7053c0f178293ULL, 0xc16d9a0095928a27ULL}},
4123 // (ten2mx >> 256) = c16d9a0095928a27 75b7053c0f178293
200359e8
L
4124 // 8d6f439b430886502ec18ee7d0209ce7
4125 {{0xf23472530ce6e3ecULL, 0xd78c3615cf3a050cULL,
b2a00c89
L
4126 0xc4926a9672793542ULL, 0x9abe14cd44753b52ULL}},
4127 // (ten2mx >> 256) = 9abe14cd44753b52 c4926a9672793542
200359e8
L
4128 // d78c3615cf3a050cf23472530ce6e3ec
4129 {{0xe9ed83b814a49fe0ULL, 0x8c1389bc7ec33b47ULL,
b2a00c89
L
4130 0x3a83ddbd83f52204ULL, 0xf79687aed3eec551ULL}},
4131 // (ten2mx >> 256) = f79687aed3eec551 3a83ddbd83f52204
200359e8
L
4132 // 8c1389bc7ec33b47e9ed83b814a49fe0
4133 {{0x87f1362cdd507fe6ULL, 0x3cdc6e306568fc39ULL,
b2a00c89
L
4134 0x95364afe032a819dULL, 0xc612062576589ddaULL}},
4135 // (ten2mx >> 256) = c612062576589dda 95364afe032a819d
200359e8
L
4136 // 3cdc6e306568fc3987f1362cdd507fe6
4137 {{0x9ff42b5717739985ULL, 0xca49f1c05120c9c7ULL,
b2a00c89
L
4138 0x775ea264cf55347dULL, 0x9e74d1b791e07e48ULL}},
4139 // (ten2mx >> 256) = 9e74d1b791e07e48 775ea264cf55347d
200359e8
L
4140 // ca49f1c05120c9c79ff42b5717739985
4141 {{0xccb9def1bf1f5c08ULL, 0x76dcb60081ce0fa5ULL,
b2a00c89
L
4142 0x8bca9d6e188853fcULL, 0xfd87b5f28300ca0dULL}},
4143 // (ten2mx >> 256) = fd87b5f28300ca0d 8bca9d6e188853fc
200359e8
L
4144 // 76dcb60081ce0fa5ccb9def1bf1f5c08
4145 {{0xa3c7e58e327f7cd3ULL, 0x5f16f80067d80c84ULL,
b2a00c89
L
4146 0x096ee45813a04330ULL, 0xcad2f7f5359a3b3eULL}},
4147 // (ten2mx >> 256) = cad2f7f5359a3b3e 96ee45813a04330
200359e8
L
4148 // 5f16f80067d80c84a3c7e58e327f7cd3
4149 {{0xb6398471c1ff970fULL, 0x18df2ccd1fe00a03ULL,
b2a00c89
L
4150 0xa1258379a94d028dULL, 0xa2425ff75e14fc31ULL}},
4151 // (ten2mx >> 256) = a2425ff75e14fc31 a1258379a94d028d
200359e8
L
4152 // 18df2ccd1fe00a03b6398471c1ff970f
4153 {{0xf82e038e34cc78d9ULL, 0x4718f0a419800802ULL,
b2a00c89
L
4154 0x80eacf948770ced7ULL, 0x81ceb32c4b43fcf4ULL}},
4155 // (ten2mx >> 256) = 81ceb32c4b43fcf4 80eacf948770ced7
200359e8
L
4156 // 4718f0a419800802f82e038e34cc78d9
4157 {{0x59e338e387ad8e28ULL, 0x0b5b1aa028ccd99eULL,
b2a00c89
L
4158 0x67de18eda5814af2ULL, 0xcfb11ead453994baULL}},
4159 // (ten2mx >> 256) = cfb11ead453994ba 67de18eda5814af2
200359e8
L
4160 // b5b1aa028ccd99e59e338e387ad8e28
4161 {{0x47e8fa4f9fbe0b53ULL, 0x6f7c154ced70ae18ULL,
b2a00c89
L
4162 0xecb1ad8aeacdd58eULL, 0xa6274bbdd0fadd61ULL}},
4163 // (ten2mx >> 256) = a6274bbdd0fadd61 ecb1ad8aeacdd58e
200359e8
L
4164 // 6f7c154ced70ae1847e8fa4f9fbe0b53
4165 {{0xd320c83fb2fe6f75ULL, 0xbf967770bdf3be79ULL,
b2a00c89
L
4166 0xbd5af13bef0b113eULL, 0x84ec3c97da624ab4ULL}},
4167 // (ten2mx >> 256) = 84ec3c97da624ab4 bd5af13bef0b113e
200359e8
L
4168 // bf967770bdf3be79d320c83fb2fe6f75
4169 {{0x85014065eb30b256ULL, 0x65bd8be79652ca5cULL,
b2a00c89
L
4170 0x955e4ec64b44e864ULL, 0xd4ad2dbfc3d07787ULL}},
4171 // (ten2mx >> 256) = d4ad2dbfc3d07787 955e4ec64b44e864
200359e8
L
4172 // 65bd8be79652ca5c85014065eb30b256
4173 {{0xd0cdcd1e55c08eabULL, 0xeafe098611dbd516ULL,
b2a00c89
L
4174 0xdde50bd1d5d0b9e9ULL, 0xaa242499697392d2ULL}},
4175 // (ten2mx >> 256) = aa242499697392d2 dde50bd1d5d0b9e9
200359e8
L
4176 // eafe098611dbd516d0cdcd1e55c08eab
4177 {{0x40a4a418449a0bbcULL, 0xbbfe6e04db164412ULL,
b2a00c89
L
4178 0x7e50d64177da2e54ULL, 0x881cea14545c7575ULL}},
4179 // (ten2mx >> 256) = 881cea14545c7575 7e50d64177da2e54
200359e8
L
4180 // bbfe6e04db16441240a4a418449a0bbc
4181 {{0x9aa1068d3a9012c7ULL, 0x2cca49a15e8a0683ULL,
b2a00c89
L
4182 0x96e7bd358c904a21ULL, 0xd9c7dced53c72255ULL}},
4183 // (ten2mx >> 256) = d9c7dced53c72255 96e7bd358c904a21
200359e8
L
4184 // 2cca49a15e8a06839aa1068d3a9012c7
4185 {{0x154d9ed7620cdbd2ULL, 0x8a3b6e1ab2080536ULL,
b2a00c89
L
4186 0xabec975e0a0d081aULL, 0xae397d8aa96c1b77ULL}},
4187 // (ten2mx >> 256) = ae397d8aa96c1b77 abec975e0a0d081a
200359e8
L
4188 // 8a3b6e1ab2080536154d9ed7620cdbd2
4189 {{0x443e18ac4e70afdbULL, 0x3b62be7bc1a0042bULL,
b2a00c89
L
4190 0x2323ac4b3b3da015ULL, 0x8b61313bbabce2c6ULL}},
4191 // (ten2mx >> 256) = 8b61313bbabce2c6 2323ac4b3b3da015
200359e8
L
4192 // 3b62be7bc1a0042b443e18ac4e70afdb
4193 {{0x6d30277a171ab2f8ULL, 0x5f0463f935ccd378ULL,
b2a00c89
L
4194 0x6b6c46dec52f6688ULL, 0xdf01e85f912e37a3ULL}},
4195 // (ten2mx >> 256) = df01e85f912e37a3 6b6c46dec52f6688
200359e8
L
4196 // 5f0463f935ccd3786d30277a171ab2f8
4197 {{0x8a8cec61ac155bfaULL, 0x7f36b660f7d70f93ULL,
b2a00c89
L
4198 0x55f038b237591ed3ULL, 0xb267ed1940f1c61cULL}},
4199 // (ten2mx >> 256) = b267ed1940f1c61c 55f038b237591ed3
200359e8
L
4200 // 7f36b660f7d70f938a8cec61ac155bfa
4201 {{0x3ba3f04e23444995ULL, 0xcc2bc51a5fdf3fa9ULL,
b2a00c89
L
4202 0x77f3608e92adb242ULL, 0x8eb98a7a9a5b04e3ULL}},
4203 // (ten2mx >> 256) = 8eb98a7a9a5b04e3 77f3608e92adb242
200359e8
L
4204 // cc2bc51a5fdf3fa93ba3f04e23444995
4205 {{0xf9064d49d206dc21ULL, 0xe046082a32fecc41ULL,
b2a00c89
L
4206 0x8cb89a7db77c506aULL, 0xe45c10c42a2b3b05ULL}},
4207 // (ten2mx >> 256) = e45c10c42a2b3b05 8cb89a7db77c506a
200359e8
L
4208 // e046082a32fecc41f9064d49d206dc21
4209 {{0xfa6b7107db38b01aULL, 0x4d04d354f598a367ULL,
b2a00c89
L
4210 0x3d607b97c5fd0d22ULL, 0xb6b00d69bb55c8d1ULL}},
4211 // (ten2mx >> 256) = b6b00d69bb55c8d1 3d607b97c5fd0d22
200359e8
L
4212 // 4d04d354f598a367fa6b7107db38b01a
4213 {{0xfb8927397c2d59afULL, 0x3d9d75dd9146e91fULL,
b2a00c89
L
4214 0xcab3961304ca70e8ULL, 0x9226712162ab070dULL}},
4215 // (ten2mx >> 256) = 9226712162ab070d cab3961304ca70e8
200359e8
L
4216 // 3d9d75dd9146e91ffb8927397c2d59af
4217 {{0xf8db71f5937bc2b1ULL, 0xc8fbefc8e87174ffULL,
b2a00c89
L
4218 0xaab8f01e6e10b4a6ULL, 0xe9d71b689dde71afULL}},
4219 // (ten2mx >> 256) = e9d71b689dde71af aab8f01e6e10b4a6
200359e8
L
4220 // c8fbefc8e87174fff8db71f5937bc2b1
4221 {{0x2d7c5b2adc630227ULL, 0x3a63263a538df733ULL,
b2a00c89
L
4222 0x5560c018580d5d52ULL, 0xbb127c53b17ec159ULL}},
4223 // (ten2mx >> 256) = bb127c53b17ec159 5560c018580d5d52
200359e8
L
4224 // 3a63263a538df7332d7c5b2adc630227
4225 {{0x24637c2249e8ce86ULL, 0x2eb5b82ea93e5f5cULL,
b2a00c89
L
4226 0xdde7001379a44aa8ULL, 0x95a8637627989aadULL}},
4227 // (ten2mx >> 256) = 95a8637627989aad dde7001379a44aa8
200359e8
L
4228 // 2eb5b82ea93e5f5c24637c2249e8ce86
4229 {{0x3a38c69d430e173dULL, 0x4abc59e441fd6560ULL,
b2a00c89
L
4230 0x963e66858f6d4440ULL, 0xef73d256a5c0f77cULL}},
4231 // (ten2mx >> 256) = ef73d256a5c0f77c 963e66858f6d4440
200359e8
L
4232 // 4abc59e441fd65603a38c69d430e173d
4233 {{0x94fa387dcf3e78fdULL, 0x6efd14b69b311de6ULL,
b2a00c89
L
4234 0xde98520472bdd033ULL, 0xbf8fdb78849a5f96ULL}},
4235 // (ten2mx >> 256) = bf8fdb78849a5f96 de98520472bdd033
200359e8
L
4236 // 6efd14b69b311de694fa387dcf3e78fd
4237 {{0xaa61c6cb0c31fa64ULL, 0x259743c548f417ebULL,
b2a00c89
L
4238 0xe546a8038efe4029ULL, 0x993fe2c6d07b7fabULL}},
4239 // (ten2mx >> 256) = 993fe2c6d07b7fab e546a8038efe4029
200359e8
L
4240 // 259743c548f417ebaa61c6cb0c31fa64
4241 {{0xaa360ade79e990a1ULL, 0x3c25393ba7ecf312ULL,
b2a00c89
L
4242 0xd53dd99f4b3066a8ULL, 0xf53304714d9265dfULL}},
4243 // (ten2mx >> 256) = f53304714d9265df d53dd99f4b3066a8
200359e8
L
4244 // 3c25393ba7ecf312aa360ade79e990a1
4245 {{0x882b3be52e5473b4ULL, 0x96842dc95323f5a8ULL,
b2a00c89
L
4246 0xaa97e14c3c26b886ULL, 0xc428d05aa4751e4cULL}},
4247 // (ten2mx >> 256) = c428d05aa4751e4c aa97e14c3c26b886
200359e8
L
4248 // 96842dc95323f5a8882b3be52e5473b4
4249 {{0xd355c98425105c90ULL, 0xab9cf16ddc1cc486ULL,
b2a00c89
L
4250 0x55464dd69685606bULL, 0x9ced737bb6c4183dULL}},
4251 // (ten2mx >> 256) = 9ced737bb6c4183d 55464dd69685606b
200359e8
L
4252 // ab9cf16ddc1cc486d355c98425105c90
4253 {{0xebbc75a03b4d60e6ULL, 0xac2e4f162cfad40aULL,
b2a00c89
L
4254 0xeed6e2f0f0d56712ULL, 0xfb158592be068d2eULL}},
4255 // (ten2mx >> 256) = fb158592be068d2e eed6e2f0f0d56712
200359e8
L
4256 // ac2e4f162cfad40aebbc75a03b4d60e6
4257 {{0x8963914cfc3de71eULL, 0x568b727823fbdcd5ULL,
b2a00c89
L
4258 0xf245825a5a445275ULL, 0xc8de047564d20a8bULL}},
4259 // (ten2mx >> 256) = c8de047564d20a8b f245825a5a445275
200359e8
L
4260 // 568b727823fbdcd58963914cfc3de71e
4261 {{0xd44fa770c9cb1f4bULL, 0x453c5b934ffcb0aaULL,
b2a00c89
L
4262 0x5b6aceaeae9d0ec4ULL, 0xa0b19d2ab70e6ed6ULL}},
4263 // (ten2mx >> 256) = a0b19d2ab70e6ed6 5b6aceaeae9d0ec4
200359e8
L
4264 // 453c5b934ffcb0aad44fa770c9cb1f4b
4265 {{0xdd0c85f3d4a27f6fULL, 0x37637c75d996f3bbULL,
b2a00c89
L
4266 0xe2bbd88bbee40bd0ULL, 0x808e17555f3ebf11ULL}},
4267 // (ten2mx >> 256) = 808e17555f3ebf11 e2bbd88bbee40bd0
200359e8
L
4268 // 37637c75d996f3bbdd0c85f3d4a27f6f
4269 {{0x61ada31fba9d98b2ULL, 0x256bfa5628f185f9ULL,
b2a00c89
L
4270 0x3792f412cb06794dULL, 0xcdb02555653131b6ULL}},
4271 // (ten2mx >> 256) = cdb02555653131b6 3792f412cb06794d
200359e8
L
4272 // 256bfa5628f185f961ada31fba9d98b2
4273 {{0xe7be1c196217ad5bULL, 0x51232eab53f46b2dULL,
b2a00c89
L
4274 0x5fa8c3423c052dd7ULL, 0xa48ceaaab75a8e2bULL}},
4275 // (ten2mx >> 256) = a48ceaaab75a8e2b 5fa8c3423c052dd7
200359e8
L
4276 // 51232eab53f46b2de7be1c196217ad5b
4277 {{0x52fe7ce11b462449ULL, 0x40e8f222a99055beULL,
b2a00c89
L
4278 0x1953cf68300424acULL, 0x83a3eeeef9153e89ULL}},
4279 // (ten2mx >> 256) = 83a3eeeef9153e89 1953cf68300424ac
200359e8
L
4280 // 40e8f222a99055be52fe7ce11b462449
4281 {{0x51972e34f8703a0fULL, 0x34a7e9d10f4d55fdULL,
b2a00c89
L
4282 0x8eec7f0d19a03aadULL, 0xd29fe4b18e88640eULL}},
4283 // (ten2mx >> 256) = d29fe4b18e88640e 8eec7f0d19a03aad
200359e8
L
4284 // 34a7e9d10f4d55fd51972e34f8703a0f
4285 {{0x0e128b5d938cfb3fULL, 0x2a1fee40d90aab31ULL,
b2a00c89
L
4286 0x3f2398d747b36224ULL, 0xa87fea27a539e9a5ULL}},
4287 // (ten2mx >> 256) = a87fea27a539e9a5 3f2398d747b36224
200359e8
L
4288 // 2a1fee40d90aab310e128b5d938cfb3f
4289 {{0x3e753c4adc70c8ffULL, 0xbb4cbe9a473bbc27ULL,
b2a00c89
L
4290 0x98e947129fc2b4e9ULL, 0x86ccbb52ea94baeaULL}},
4291 // (ten2mx >> 256) = 86ccbb52ea94baea 98e947129fc2b4e9
200359e8
L
4292 // bb4cbe9a473bbc273e753c4adc70c8ff
4293 {{0x30bb93aafa4e0e65ULL, 0x9214642a0b92c6a5ULL,
b2a00c89
L
4294 0x5b0ed81dcc6abb0fULL, 0xd7adf884aa879177ULL}},
4295 // (ten2mx >> 256) = d7adf884aa879177 5b0ed81dcc6abb0f
200359e8
L
4296 // 9214642a0b92c6a530bb93aafa4e0e65
4297 {{0xc0960fbbfb71a51eULL, 0xa8105021a2dbd21dULL,
b2a00c89
L
4298 0xe272467e3d222f3fULL, 0xac8b2d36eed2dac5ULL}},
4299 // (ten2mx >> 256) = ac8b2d36eed2dac5 e272467e3d222f3f
200359e8
L
4300 // a8105021a2dbd21dc0960fbbfb71a51e
4301 {{0x66de72fcc927b74bULL, 0xb9a6a6814f1641b1ULL,
b2a00c89
L
4302 0x1b8e9ecb641b58ffULL, 0x8a08f0f8bf0f156bULL}},
4303 // (ten2mx >> 256) = 8a08f0f8bf0f156b 1b8e9ecb641b58ff
200359e8
L
4304 // b9a6a6814f1641b166de72fcc927b74b
4305 {{0xd7ca5194750c5878ULL, 0xf5d770cee4f0691bULL,
b2a00c89
L
4306 0xf8e431456cf88e65ULL, 0xdcdb1b2798182244ULL}},
4307 // (ten2mx >> 256) = dcdb1b2798182244 f8e431456cf88e65
200359e8
L
4308 // f5d770cee4f0691bd7ca5194750c5878
4309 {{0xdfd50e105da379f9ULL, 0x9179270bea59edafULL,
b2a00c89
L
4310 0x2d835a9df0c6d851ULL, 0xb0af48ec79ace837ULL}},
4311 // (ten2mx >> 256) = b0af48ec79ace837 2d835a9df0c6d851
200359e8
L
4312 // 9179270bea59edafdfd50e105da379f9
4313 {{0x19773e737e1c6194ULL, 0x0dfa85a321e18af3ULL,
b2a00c89
L
4314 0x579c487e5a38ad0eULL, 0x8d590723948a535fULL}},
4315 // (ten2mx >> 256) = 8d590723948a535f 579c487e5a38ad0e
200359e8
L
4316 // dfa85a321e18af319773e737e1c6194
4317 {{0xf58b971f302d68eeULL, 0x165da29e9c9c1184ULL,
b2a00c89
L
4318 0x25c6da63c38de1b0ULL, 0xe2280b6c20dd5232ULL}},
4319 // (ten2mx >> 256) = e2280b6c20dd5232 25c6da63c38de1b0
200359e8
L
4320 // 165da29e9c9c1184f58b971f302d68ee
4321 {{0xc46fac18f3578724ULL, 0x4517b54bb07cdad0ULL,
b2a00c89
L
4322 0x1e38aeb6360b1af3ULL, 0xb4ecd5f01a4aa828ULL}},
4323 // (ten2mx >> 256) = b4ecd5f01a4aa828 1e38aeb6360b1af3
200359e8
L
4324 // 4517b54bb07cdad0c46fac18f3578724
4325 {{0x36bfbce0c2ac6c1dULL, 0x9dac910959fd7bdaULL,
b2a00c89
L
4326 0xb1c6f22b5e6f48c2ULL, 0x90bd77f3483bb9b9ULL}},
4327 // (ten2mx >> 256) = 90bd77f3483bb9b9 b1c6f22b5e6f48c2
200359e8
L
4328 // 9dac910959fd7bda36bfbce0c2ac6c1d
4329 {{0x2465fb01377a4695ULL, 0x2f7a81a88ffbf95dULL,
b2a00c89
L
4330 0xb60b1d1230b20e04ULL, 0xe7958cb87392c2c2ULL}}
4331 // (ten2mx >> 256) = e7958cb87392c2c2 b60b1d1230b20e04
200359e8
L
4332 // 2f7a81a88ffbf95d2465fb01377a4695
4333};