]>
Commit | Line | Data |
---|---|---|
83ffe9cd | 1 | /* Copyright (C) 2007-2023 Free Software Foundation, Inc. |
200359e8 L |
2 | |
3 | This file is part of GCC. | |
4 | ||
5 | GCC is free software; you can redistribute it and/or modify it under | |
6 | the terms of the GNU General Public License as published by the Free | |
748086b7 | 7 | Software Foundation; either version 3, or (at your option) any later |
200359e8 L |
8 | version. |
9 | ||
200359e8 L |
10 | GCC is distributed in the hope that it will be useful, but WITHOUT ANY |
11 | WARRANTY; without even the implied warranty of MERCHANTABILITY or | |
12 | FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License | |
13 | for more details. | |
14 | ||
748086b7 JJ |
15 | Under Section 7 of GPL version 3, you are granted additional |
16 | permissions described in the GCC Runtime Library Exception, version | |
17 | 3.1, as published by the Free Software Foundation. | |
18 | ||
19 | You should have received a copy of the GNU General Public License and | |
20 | a copy of the GCC Runtime Library Exception along with this program; | |
21 | see the files COPYING3 and COPYING.RUNTIME respectively. If not, see | |
22 | <http://www.gnu.org/licenses/>. */ | |
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 |
33 | DEC_DIGITS nr_digits[] = { // only the first entry is used if it is not 0 |
34 | {1, 0x0000000000000000ULL, 0x000000000000000aULL, 1} | |
35 | , // 1-bit n < 10^1 | |
36 | {1, 0x0000000000000000ULL, 0x000000000000000aULL, 1} | |
37 | , // 2-bit n < 10^1 | |
38 | {1, 0x0000000000000000ULL, 0x000000000000000aULL, 1} | |
39 | , // 3-bit n < 10^1 | |
40 | {0, 0x0000000000000000ULL, 0x000000000000000aULL, 1} | |
41 | , // 4-bit n ? 10^1 | |
42 | {2, 0x0000000000000000ULL, 0x0000000000000064ULL, 2} | |
43 | , // 5-bit n < 10^2 | |
44 | {2, 0x0000000000000000ULL, 0x0000000000000064ULL, 2} | |
45 | , // 6-bit n < 10^2 | |
46 | {0, 0x0000000000000000ULL, 0x0000000000000064ULL, 2} | |
47 | , // 7-bit n ? 10^2 | |
48 | {3, 0x0000000000000000ULL, 0x00000000000003e8ULL, 3} | |
49 | , // 8-bit n < 10^3 | |
50 | {3, 0x0000000000000000ULL, 0x00000000000003e8ULL, 3} | |
51 | , // 9-bit n < 10^3 | |
52 | {0, 0x0000000000000000ULL, 0x00000000000003e8ULL, 3} | |
53 | , // 10-bit n ? 10^3 | |
54 | {4, 0x0000000000000000ULL, 0x0000000000002710ULL, 4} | |
55 | , // 11-bit n < 10^4 | |
56 | {4, 0x0000000000000000ULL, 0x0000000000002710ULL, 4} | |
57 | , // 12-bit n < 10^4 | |
58 | {4, 0x0000000000000000ULL, 0x0000000000002710ULL, 4} | |
59 | , // 13-bit n < 10^4 | |
60 | {0, 0x0000000000000000ULL, 0x0000000000002710ULL, 4} | |
61 | , // 14-bit n ? 10^4 | |
62 | {5, 0x0000000000000000ULL, 0x00000000000186a0ULL, 5} | |
63 | , // 15-bit n < 10^5 | |
64 | {5, 0x0000000000000000ULL, 0x00000000000186a0ULL, 5} | |
65 | , // 16-bit n < 10^5 | |
66 | {0, 0x0000000000000000ULL, 0x00000000000186a0ULL, 5} | |
67 | , // 17-bit n ? 10^5 | |
68 | {6, 0x0000000000000000ULL, 0x00000000000f4240ULL, 6} | |
69 | , // 18-bit n < 10^6 | |
70 | {6, 0x0000000000000000ULL, 0x00000000000f4240ULL, 6} | |
71 | , // 19-bit n < 10^6 | |
72 | {0, 0x0000000000000000ULL, 0x00000000000f4240ULL, 6} | |
73 | , // 20-bit n ? 10^6 | |
74 | {7, 0x0000000000000000ULL, 0x0000000000989680ULL, 7} | |
75 | , // 21-bit n < 10^7 | |
76 | {7, 0x0000000000000000ULL, 0x0000000000989680ULL, 7} | |
77 | , // 22-bit n < 10^7 | |
78 | {7, 0x0000000000000000ULL, 0x0000000000989680ULL, 7} | |
79 | , // 23-bit n < 10^7 | |
80 | {0, 0x0000000000000000ULL, 0x0000000000989680ULL, 7} | |
81 | , // 24-bit n ? 10^7 | |
82 | {8, 0x0000000000000000ULL, 0x0000000005f5e100ULL, 8} | |
83 | , // 25-bit n < 10^8 | |
84 | {8, 0x0000000000000000ULL, 0x0000000005f5e100ULL, 8} | |
85 | , // 26-bit n < 10^8 | |
86 | {0, 0x0000000000000000ULL, 0x0000000005f5e100ULL, 8} | |
87 | , // 27-bit n ? 10^8 | |
88 | {9, 0x0000000000000000ULL, 0x000000003b9aca00ULL, 9} | |
89 | , // 28-bit n < 10^9 | |
90 | {9, 0x0000000000000000ULL, 0x000000003b9aca00ULL, 9} | |
91 | , // 29-bit n < 10^9 | |
92 | {0, 0x0000000000000000ULL, 0x000000003b9aca00ULL, 9} | |
93 | , // 30-bit n ? 10^9 | |
94 | {10, 0x0000000000000000ULL, 0x00000002540be400ULL, 10} | |
95 | , // 31-bit n < 10^10 | |
96 | {10, 0x0000000000000000ULL, 0x00000002540be400ULL, 10} | |
97 | , // 32-bit n < 10^10 | |
98 | {10, 0x0000000000000000ULL, 0x00000002540be400ULL, 10} | |
99 | , // 33-bit n < 10^10 | |
100 | {0, 0x0000000000000000ULL, 0x00000002540be400ULL, 10} | |
101 | , // 34-bit n ? 10^10 | |
102 | {11, 0x0000000000000000ULL, 0x000000174876e800ULL, 11} | |
103 | , // 35-bit n < 10^11 | |
104 | {11, 0x0000000000000000ULL, 0x000000174876e800ULL, 11} | |
105 | , // 36-bit n < 10^11 | |
106 | {0, 0x0000000000000000ULL, 0x000000174876e800ULL, 11} | |
107 | , // 37-bit n ? 10^11 | |
108 | {12, 0x0000000000000000ULL, 0x000000e8d4a51000ULL, 12} | |
109 | , // 38-bit n < 10^12 | |
110 | {12, 0x0000000000000000ULL, 0x000000e8d4a51000ULL, 12} | |
111 | , // 39-bit n < 10^12 | |
112 | {0, 0x0000000000000000ULL, 0x000000e8d4a51000ULL, 12} | |
113 | , // 40-bit n ? 10^12 | |
114 | {13, 0x0000000000000000ULL, 0x000009184e72a000ULL, 13} | |
115 | , // 41-bit n < 10^13 | |
116 | {13, 0x0000000000000000ULL, 0x000009184e72a000ULL, 13} | |
117 | , // 42-bit n < 10^13 | |
118 | {13, 0x0000000000000000ULL, 0x000009184e72a000ULL, 13} | |
119 | , // 43-bit n < 10^13 | |
120 | {0, 0x0000000000000000ULL, 0x000009184e72a000ULL, 13} | |
121 | , // 44-bit n ? 10^13 | |
122 | {14, 0x0000000000000000ULL, 0x00005af3107a4000ULL, 14} | |
123 | , // 45-bit n < 10^14 | |
124 | {14, 0x0000000000000000ULL, 0x00005af3107a4000ULL, 14} | |
125 | , // 46-bit n < 10^14 | |
126 | {0, 0x0000000000000000ULL, 0x00005af3107a4000ULL, 14} | |
127 | , // 47-bit n ? 10^14 | |
128 | {15, 0x0000000000000000ULL, 0x00038d7ea4c68000ULL, 15} | |
129 | , // 48-bit n < 10^15 | |
130 | {15, 0x0000000000000000ULL, 0x00038d7ea4c68000ULL, 15} | |
131 | , // 49-bit n < 10^15 | |
132 | {0, 0x0000000000000000ULL, 0x00038d7ea4c68000ULL, 15} | |
133 | , // 50-bit n ? 10^15 | |
134 | {16, 0x0000000000000000ULL, 0x002386f26fc10000ULL, 16} | |
135 | , // 51-bit n < 10^16 | |
136 | {16, 0x0000000000000000ULL, 0x002386f26fc10000ULL, 16} | |
137 | , // 52-bit n < 10^16 | |
138 | {16, 0x0000000000000000ULL, 0x002386f26fc10000ULL, 16} | |
139 | , // 53-bit n < 10^16 | |
140 | {0, 0x0000000000000000ULL, 0x002386f26fc10000ULL, 16} | |
141 | , // 54-bit n ? 10^16 | |
142 | {17, 0x0000000000000000ULL, 0x016345785d8a0000ULL, 17} | |
143 | , // 55-bit n < 10^17 | |
144 | {17, 0x0000000000000000ULL, 0x016345785d8a0000ULL, 17} | |
145 | , // 56-bit n < 10^17 | |
146 | {0, 0x0000000000000000ULL, 0x016345785d8a0000ULL, 17} | |
147 | , // 57-bit n ? 10^17 | |
148 | {18, 0x0000000000000000ULL, 0x0de0b6b3a7640000ULL, 18} | |
149 | , // 58-bit n < 10^18 | |
150 | {18, 0x0000000000000000ULL, 0x0de0b6b3a7640000ULL, 18} | |
151 | , // 59-bit n < 10^18 | |
152 | {0, 0x0000000000000000ULL, 0x0de0b6b3a7640000ULL, 18} | |
153 | , // 60-bit n ? 10^18 | |
154 | {19, 0x0000000000000000ULL, 0x8ac7230489e80000ULL, 19} | |
155 | , // 61-bit n < 10^19 | |
156 | {19, 0x0000000000000000ULL, 0x8ac7230489e80000ULL, 19} | |
157 | , // 62-bit n < 10^19 | |
158 | {19, 0x0000000000000000ULL, 0x8ac7230489e80000ULL, 19} | |
159 | , // 63-bit n < 10^19 | |
160 | {0, 0x0000000000000000ULL, 0x8ac7230489e80000ULL, 19} | |
161 | , // 64-bit n ? 10^19 | |
162 | {20, 0x0000000000000005ULL, 0x6bc75e2d63100000ULL, 20} | |
163 | , // 65-bit n < 10^20 | |
164 | {20, 0x0000000000000005ULL, 0x6bc75e2d63100000ULL, 20} | |
165 | , // 66-bit n < 10^20 | |
166 | {0, 0x0000000000000005ULL, 0x6bc75e2d63100000ULL, 20} | |
167 | , // 67-bit n ? 10^20 | |
168 | {21, 0x0000000000000036ULL, 0x35c9adc5dea00000ULL, 21} | |
169 | , // 68-bit n < 10^21 | |
170 | {21, 0x0000000000000036ULL, 0x35c9adc5dea00000ULL, 21} | |
171 | , // 69-bit n < 10^21 | |
172 | {0, 0x0000000000000036ULL, 0x35c9adc5dea00000ULL, 21} | |
173 | , // 70-bit n ? 10^21 | |
174 | {22, 0x000000000000021eULL, 0x19e0c9bab2400000ULL, 22} | |
175 | , // 71-bit n < 10^22 | |
176 | {22, 0x000000000000021eULL, 0x19e0c9bab2400000ULL, 22} | |
177 | , // 72-bit n < 10^22 | |
178 | {22, 0x000000000000021eULL, 0x19e0c9bab2400000ULL, 22} | |
179 | , // 73-bit n < 10^22 | |
180 | {0, 0x000000000000021eULL, 0x19e0c9bab2400000ULL, 22} | |
181 | , // 74-bit n ? 10^22 | |
182 | {23, 0x000000000000152dULL, 0x02c7e14af6800000ULL, 23} | |
183 | , // 75-bit n < 10^23 | |
184 | {23, 0x000000000000152dULL, 0x02c7e14af6800000ULL, 23} | |
185 | , // 76-bit n < 10^23 | |
186 | {0, 0x000000000000152dULL, 0x02c7e14af6800000ULL, 23} | |
187 | , // 77-bit n ? 10^23 | |
188 | {24, 0x000000000000d3c2ULL, 0x1bcecceda1000000ULL, 24} | |
189 | , // 78-bit n < 10^24 | |
190 | {24, 0x000000000000d3c2ULL, 0x1bcecceda1000000ULL, 24} | |
191 | , // 79-bit n < 10^24 | |
192 | {0, 0x000000000000d3c2ULL, 0x1bcecceda1000000ULL, 24} | |
193 | , // 80-bit n ? 10^24 | |
194 | {25, 0x0000000000084595ULL, 0x161401484a000000ULL, 25} | |
195 | , // 81-bit n < 10^25 | |
196 | {25, 0x0000000000084595ULL, 0x161401484a000000ULL, 25} | |
197 | , // 82-bit n < 10^25 | |
198 | {25, 0x0000000000084595ULL, 0x161401484a000000ULL, 25} | |
199 | , // 83-bit n < 10^25 | |
200 | {0, 0x0000000000084595ULL, 0x161401484a000000ULL, 25} | |
201 | , // 84-bit n ? 10^25 | |
202 | {26, 0x000000000052b7d2ULL, 0xdcc80cd2e4000000ULL, 26} | |
203 | , // 85-bit n < 10^26 | |
204 | {26, 0x000000000052b7d2ULL, 0xdcc80cd2e4000000ULL, 26} | |
205 | , // 86-bit n < 10^26 | |
206 | {0, 0x000000000052b7d2ULL, 0xdcc80cd2e4000000ULL, 26} | |
207 | , // 87-bit n ? 10^26 | |
208 | {27, 0x00000000033b2e3cULL, 0x9fd0803ce8000000ULL, 27} | |
209 | , // 88-bit n < 10^27 | |
210 | {27, 0x00000000033b2e3cULL, 0x9fd0803ce8000000ULL, 27} | |
211 | , // 89-bit n < 10^27 | |
212 | {0, 0x00000000033b2e3cULL, 0x9fd0803ce8000000ULL, 27} | |
213 | , // 90-bit n ? 10^27 | |
214 | {28, 0x00000000204fce5eULL, 0x3e25026110000000ULL, 28} | |
215 | , // 91-bit n < 10^28 | |
216 | {28, 0x00000000204fce5eULL, 0x3e25026110000000ULL, 28} | |
217 | , // 92-bit n < 10^28 | |
218 | {28, 0x00000000204fce5eULL, 0x3e25026110000000ULL, 28} | |
219 | , // 93-bit n < 10^28 | |
220 | {0, 0x00000000204fce5eULL, 0x3e25026110000000ULL, 28} | |
221 | , // 94-bit n ? 10^28 | |
222 | {29, 0x00000001431e0faeULL, 0x6d7217caa0000000ULL, 29} | |
223 | , // 95-bit n < 10^29 | |
224 | {29, 0x00000001431e0faeULL, 0x6d7217caa0000000ULL, 29} | |
225 | , // 96-bit n < 10^29 | |
226 | {0, 0x00000001431e0faeULL, 0x6d7217caa0000000ULL, 29} | |
227 | , // 97-bit n ? 10^29 | |
228 | {30, 0x0000000c9f2c9cd0ULL, 0x4674edea40000000ULL, 30} | |
229 | , // 98-bit n < 10^30 | |
230 | {30, 0x0000000c9f2c9cd0ULL, 0x4674edea40000000ULL, 30} | |
231 | , // 99-bit n < 10^30 | |
232 | {0, 0x0000000c9f2c9cd0ULL, 0x4674edea40000000ULL, 30} | |
233 | , // 100-bit n ? 10^30 | |
234 | {31, 0x0000007e37be2022ULL, 0xc0914b2680000000ULL, 31} | |
235 | , // 101-bit n < 10^31 | |
236 | {31, 0x0000007e37be2022ULL, 0xc0914b2680000000ULL, 31} | |
237 | , // 102-bit n < 10^31 | |
238 | {0, 0x0000007e37be2022ULL, 0xc0914b2680000000ULL, 31} | |
239 | , // 103-bit n ? 10^31 | |
240 | {32, 0x000004ee2d6d415bULL, 0x85acef8100000000ULL, 32} | |
241 | , // 104-bit n < 10^32 | |
242 | {32, 0x000004ee2d6d415bULL, 0x85acef8100000000ULL, 32} | |
243 | , // 105-bit n < 10^32 | |
244 | {32, 0x000004ee2d6d415bULL, 0x85acef8100000000ULL, 32} | |
245 | , // 106-bit n < 10^32 | |
246 | {0, 0x000004ee2d6d415bULL, 0x85acef8100000000ULL, 32} | |
247 | , // 107-bit n ? 10^32 | |
248 | {33, 0x0000314dc6448d93ULL, 0x38c15b0a00000000ULL, 33} | |
249 | , // 108-bit n < 10^33 | |
250 | {33, 0x0000314dc6448d93ULL, 0x38c15b0a00000000ULL, 33} | |
251 | , // 109-bit n < 10^33 | |
252 | {0, 0x0000314dc6448d93ULL, 0x38c15b0a00000000ULL, 33} | |
253 | , // 100-bit n ? 10^33 | |
254 | {34, 0x0001ed09bead87c0ULL, 0x378d8e6400000000ULL, 34} | |
255 | , // 111-bit n < 10^34 | |
256 | {34, 0x0001ed09bead87c0ULL, 0x378d8e6400000000ULL, 34} | |
257 | , // 112-bit n < 10^34 | |
258 | {0, 0x0001ed09bead87c0ULL, 0x378d8e6400000000ULL, 34} // 113-bit n ? 10^34 | |
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 |
263 | UINT64 midpoint64[] = { | |
264 | 0x0000000000000005ULL, // 1/2 * 10^1 = 5 * 10^0 | |
265 | 0x0000000000000032ULL, // 1/2 * 10^2 = 5 * 10^1 | |
266 | 0x00000000000001f4ULL, // 1/2 * 10^3 = 5 * 10^2 | |
267 | 0x0000000000001388ULL, // 1/2 * 10^4 = 5 * 10^3 | |
268 | 0x000000000000c350ULL, // 1/2 * 10^5 = 5 * 10^4 | |
269 | 0x000000000007a120ULL, // 1/2 * 10^6 = 5 * 10^5 | |
270 | 0x00000000004c4b40ULL, // 1/2 * 10^7 = 5 * 10^6 | |
271 | 0x0000000002faf080ULL, // 1/2 * 10^8 = 5 * 10^7 | |
272 | 0x000000001dcd6500ULL, // 1/2 * 10^9 = 5 * 10^8 | |
273 | 0x000000012a05f200ULL, // 1/2 * 10^10 = 5 * 10^9 | |
274 | 0x0000000ba43b7400ULL, // 1/2 * 10^11 = 5 * 10^10 | |
275 | 0x000000746a528800ULL, // 1/2 * 10^12 = 5 * 10^11 | |
276 | 0x0000048c27395000ULL, // 1/2 * 10^13 = 5 * 10^12 | |
277 | 0x00002d79883d2000ULL, // 1/2 * 10^14 = 5 * 10^13 | |
278 | 0x0001c6bf52634000ULL, // 1/2 * 10^15 = 5 * 10^14 | |
279 | 0x0011c37937e08000ULL, // 1/2 * 10^16 = 5 * 10^15 | |
280 | 0x00b1a2bc2ec50000ULL, // 1/2 * 10^17 = 5 * 10^16 | |
281 | 0x06f05b59d3b20000ULL, // 1/2 * 10^18 = 5 * 10^17 | |
282 | 0x4563918244f40000ULL // 1/2 * 10^19 = 5 * 10^18 | |
200359e8 L |
283 | }; |
284 | ||
b2a00c89 L |
285 | // midpoint128[i - 20] = 1/2 * 10^i = 5 * 10^(i-1), 20 <= i <= 38 |
286 | UINT128 midpoint128[] = { // the 64-bit word order is L, H | |
287 | {{0xb5e3af16b1880000ULL, 0x0000000000000002ULL} | |
288 | } | |
289 | , // 1/2 * 10^20 = 5 * 10^19 | |
290 | {{0x1ae4d6e2ef500000ULL, 0x000000000000001bULL} | |
291 | } | |
292 | , // 1/2 * 10^21 = 5 * 10^20 | |
293 | {{0x0cf064dd59200000ULL, 0x000000000000010fULL} | |
294 | } | |
295 | , // 1/2 * 10^22 = 5 * 10^21 | |
296 | {{0x8163f0a57b400000ULL, 0x0000000000000a96ULL} | |
297 | } | |
298 | , // 1/2 * 10^23 = 5 * 10^22 | |
299 | {{0x0de76676d0800000ULL, 0x00000000000069e1ULL} | |
300 | } | |
301 | , // 1/2 * 10^24 = 5 * 10^23 | |
302 | {{0x8b0a00a425000000ULL, 0x00000000000422caULL} | |
303 | } | |
304 | , // 1/2 * 10^25 = 5 * 10^24 | |
305 | {{0x6e64066972000000ULL, 0x0000000000295be9ULL} | |
306 | } | |
307 | , // 1/2 * 10^26 = 5 * 10^25 | |
308 | {{0x4fe8401e74000000ULL, 0x00000000019d971eULL} | |
309 | } | |
310 | , // 1/2 * 10^27 = 5 * 10^26 | |
311 | {{0x1f12813088000000ULL, 0x000000001027e72fULL} | |
312 | } | |
313 | , // 1/2 * 10^28 = 5 * 10^27 | |
314 | {{0x36b90be550000000ULL, 0x00000000a18f07d7ULL} | |
315 | } | |
316 | , // 1/2 * 10^29 = 5 * 10^28 | |
317 | {{0x233a76f520000000ULL, 0x000000064f964e68ULL} | |
318 | } | |
319 | , // 1/2 * 10^30 = 5 * 10^29 | |
320 | {{0x6048a59340000000ULL, 0x0000003f1bdf1011ULL} | |
321 | } | |
322 | , // 1/2 * 10^31 = 5 * 10^30 | |
323 | {{0xc2d677c080000000ULL, 0x0000027716b6a0adULL} | |
324 | } | |
325 | , // 1/2 * 10^32 = 5 * 10^31 | |
326 | {{0x9c60ad8500000000ULL, 0x000018a6e32246c9ULL} | |
327 | } | |
328 | , // 1/2 * 10^33 = 5 * 10^32 | |
329 | {{0x1bc6c73200000000ULL, 0x0000f684df56c3e0ULL} | |
330 | } | |
331 | , // 1/2 * 10^34 = 5 * 10^33 | |
332 | {{0x15c3c7f400000000ULL, 0x0009a130b963a6c1ULL} | |
333 | } | |
334 | , // 1/2 * 10^35 = 5 * 10^34 | |
335 | {{0xd9a5cf8800000000ULL, 0x00604be73de4838aULL} | |
336 | } | |
337 | , // 1/2 * 10^36 = 5 * 10^35 | |
338 | {{0x807a1b5000000000ULL, 0x03c2f7086aed236cULL} | |
339 | } | |
340 | , // 1/2 * 10^37 = 5 * 10^36 | |
341 | {{0x04c5112000000000ULL, 0x259da6542d43623dULL} | |
342 | } // 1/2 * 10^38 = 5 * 10^37 | |
200359e8 L |
343 | }; |
344 | ||
b2a00c89 L |
345 | // midpoint192[i - 39] = 1/2 * 10^i = 5 * 10^(i-1), 39 <= i <= 58 |
346 | UINT192 midpoint192[] = { // the 64-bit word order is L, M, H | |
347 | {{0x2fb2ab4000000000ULL, 0x78287f49c4a1d662ULL, 0x0000000000000001ULL} | |
348 | } | |
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 |
429 | UINT256 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 |
508 | UINT64 ten2k64[] = { | |
509 | 0x0000000000000001ULL, // 10^0 | |
510 | 0x000000000000000aULL, // 10^1 | |
511 | 0x0000000000000064ULL, // 10^2 | |
512 | 0x00000000000003e8ULL, // 10^3 | |
513 | 0x0000000000002710ULL, // 10^4 | |
514 | 0x00000000000186a0ULL, // 10^5 | |
515 | 0x00000000000f4240ULL, // 10^6 | |
516 | 0x0000000000989680ULL, // 10^7 | |
517 | 0x0000000005f5e100ULL, // 10^8 | |
518 | 0x000000003b9aca00ULL, // 10^9 | |
519 | 0x00000002540be400ULL, // 10^10 | |
520 | 0x000000174876e800ULL, // 10^11 | |
521 | 0x000000e8d4a51000ULL, // 10^12 | |
522 | 0x000009184e72a000ULL, // 10^13 | |
523 | 0x00005af3107a4000ULL, // 10^14 | |
524 | 0x00038d7ea4c68000ULL, // 10^15 | |
525 | 0x002386f26fc10000ULL, // 10^16 | |
526 | 0x016345785d8a0000ULL, // 10^17 | |
527 | 0x0de0b6b3a7640000ULL, // 10^18 | |
528 | 0x8ac7230489e80000ULL // 10^19 (20 digits) | |
200359e8 L |
529 | }; |
530 | ||
531 | ||
b2a00c89 L |
532 | // ten2k128[i - 20] = 10^i, 20 <= i <= 38 |
533 | UINT128 ten2k128[] = { // the 64-bit word order is L, H | |
534 | {{0x6bc75e2d63100000ULL, 0x0000000000000005ULL} | |
535 | } | |
536 | , // 10^20 | |
537 | {{0x35c9adc5dea00000ULL, 0x0000000000000036ULL} | |
538 | } | |
539 | , // 10^21 | |
540 | {{0x19e0c9bab2400000ULL, 0x000000000000021eULL} | |
541 | } | |
542 | , // 10^22 | |
543 | {{0x02c7e14af6800000ULL, 0x000000000000152dULL} | |
544 | } | |
545 | , // 10^23 | |
546 | {{0x1bcecceda1000000ULL, 0x000000000000d3c2ULL} | |
547 | } | |
548 | , // 10^24 | |
549 | {{0x161401484a000000ULL, 0x0000000000084595ULL} | |
550 | } | |
551 | , // 10^25 | |
552 | {{0xdcc80cd2e4000000ULL, 0x000000000052b7d2ULL} | |
553 | } | |
554 | , // 10^26 | |
555 | {{0x9fd0803ce8000000ULL, 0x00000000033b2e3cULL} | |
556 | } | |
557 | , // 10^27 | |
558 | {{0x3e25026110000000ULL, 0x00000000204fce5eULL} | |
559 | } | |
560 | , // 10^28 | |
561 | {{0x6d7217caa0000000ULL, 0x00000001431e0faeULL} | |
562 | } | |
563 | , // 10^29 | |
564 | {{0x4674edea40000000ULL, 0x0000000c9f2c9cd0ULL} | |
565 | } | |
566 | , // 10^30 | |
567 | {{0xc0914b2680000000ULL, 0x0000007e37be2022ULL} | |
568 | } | |
569 | , // 10^31 | |
570 | {{0x85acef8100000000ULL, 0x000004ee2d6d415bULL} | |
571 | } | |
572 | , // 10^32 | |
573 | {{0x38c15b0a00000000ULL, 0x0000314dc6448d93ULL} | |
574 | } | |
575 | , // 10^33 | |
576 | {{0x378d8e6400000000ULL, 0x0001ed09bead87c0ULL} | |
577 | } | |
578 | , // 10^34 | |
579 | {{0x2b878fe800000000ULL, 0x0013426172c74d82ULL} | |
580 | } | |
581 | , // 10^35 | |
582 | {{0xb34b9f1000000000ULL, 0x00c097ce7bc90715ULL} | |
583 | } | |
584 | , // 10^36 | |
585 | {{0x00f436a000000000ULL, 0x0785ee10d5da46d9ULL} | |
586 | } | |
587 | , // 10^37 | |
588 | {{0x098a224000000000ULL, 0x4b3b4ca85a86c47aULL} | |
589 | } // 10^38 (39 digits) | |
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 |
595 | UINT256 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 | |
755 | UINT128 ten2mk128[] = { | |
756 | {{0x999999999999999aULL, 0x1999999999999999ULL} | |
757 | } | |
758 | , // 10^(-1) * 2^128 | |
759 | {{0x28f5c28f5c28f5c3ULL, 0x028f5c28f5c28f5cULL} | |
760 | } | |
761 | , // 10^(-2) * 2^128 | |
762 | {{0x9db22d0e56041894ULL, 0x004189374bc6a7efULL} | |
763 | } | |
764 | , // 10^(-3) * 2^128 | |
765 | {{0x4af4f0d844d013aaULL, 0x00346dc5d6388659ULL} | |
766 | } | |
767 | , // 10^(-4) * 2^131 | |
768 | {{0x08c3f3e0370cdc88ULL, 0x0029f16b11c6d1e1ULL} | |
769 | } | |
770 | , // 10^(-5) * 2^134 | |
771 | {{0x6d698fe69270b06dULL, 0x00218def416bdb1aULL} | |
772 | } | |
773 | , // 10^(-6) * 2^137 | |
774 | {{0xaf0f4ca41d811a47ULL, 0x0035afe535795e90ULL} | |
775 | } | |
776 | , // 10^(-7) * 2^141 | |
777 | {{0xbf3f70834acdaea0ULL, 0x002af31dc4611873ULL} | |
778 | } | |
779 | , // 10^(-8) * 2^144 | |
780 | {{0x65cc5a02a23e254dULL, 0x00225c17d04dad29ULL} | |
781 | } | |
782 | , // 10^(-9) * 2^147 | |
783 | {{0x6fad5cd10396a214ULL, 0x0036f9bfb3af7b75ULL} | |
784 | } | |
785 | , // 10^(-10) * 2^151 | |
786 | {{0xbfbde3da69454e76ULL, 0x002bfaffc2f2c92aULL} | |
787 | } | |
788 | , // 10^(-11) * 2^154 | |
789 | {{0x32fe4fe1edd10b92ULL, 0x00232f33025bd422ULL} | |
790 | } | |
791 | , // 10^(-12) * 2^157 | |
792 | {{0x84ca19697c81ac1cULL, 0x00384b84d092ed03ULL} | |
793 | } | |
794 | , // 10^(-13) * 2^161 | |
795 | {{0x03d4e1213067bce4ULL, 0x002d09370d425736ULL} | |
796 | } | |
797 | , // 10^(-14) * 2^164 | |
798 | {{0x3643e74dc052fd83ULL, 0x0024075f3dceac2bULL} | |
799 | } | |
800 | , // 10^(-15) * 2^167 | |
801 | {{0x56d30baf9a1e626bULL, 0x0039a5652fb11378ULL} | |
802 | } | |
803 | , // 10^(-16) * 2^171 | |
804 | {{0x12426fbfae7eb522ULL, 0x002e1dea8c8da92dULL} | |
805 | } | |
806 | , // 10^(-17) * 2^174 | |
807 | {{0x41cebfcc8b9890e8ULL, 0x0024e4bba3a48757ULL} | |
808 | } | |
809 | , // 10^(-18) * 2^177 | |
810 | {{0x694acc7a78f41b0dULL, 0x003b07929f6da558ULL} | |
811 | } | |
812 | , // 10^(-19) * 2^181 | |
813 | {{0xbaa23d2ec729af3eULL, 0x002f394219248446ULL} | |
814 | } | |
815 | , // 10^(-20) * 2^184 | |
816 | {{0xfbb4fdbf05baf298ULL, 0x0025c768141d369eULL} | |
817 | } | |
818 | , // 10^(-21) * 2^187 | |
819 | {{0x2c54c931a2c4b759ULL, 0x003c7240202ebdcbULL} | |
820 | } | |
821 | , // 10^(-22) * 2^191 | |
822 | {{0x89dd6dc14f03c5e1ULL, 0x00305b66802564a2ULL} | |
823 | } | |
824 | , // 10^(-23) * 2^194 | |
825 | {{0xd4b1249aa59c9e4eULL, 0x0026af8533511d4eULL} | |
826 | } | |
827 | , // 10^(-24) * 2^197 | |
828 | {{0x544ea0f76f60fd49ULL, 0x003de5a1ebb4fbb1ULL} | |
829 | } | |
830 | , // 10^(-25) * 2^201 | |
831 | {{0x76a54d92bf80caa1ULL, 0x00318481895d9627ULL} | |
832 | } | |
833 | , // 10^(-26) * 2^204 | |
834 | {{0x921dd7a89933d54eULL, 0x00279d346de4781fULL} | |
835 | } | |
836 | , // 10^(-27) * 2^207 | |
837 | {{0x8362f2a75b862215ULL, 0x003f61ed7ca0c032ULL} | |
838 | } | |
839 | , // 10^(-28) * 2^211 | |
840 | {{0xcf825bb91604e811ULL, 0x0032b4bdfd4d668eULL} | |
841 | } | |
842 | , // 10^(-29) * 2^214 | |
843 | {{0x0c684960de6a5341ULL, 0x00289097fdd7853fULL} | |
844 | } | |
845 | , // 10^(-30) * 2^217 | |
846 | {{0x3d203ab3e521dc34ULL, 0x002073accb12d0ffULL} | |
847 | } | |
848 | , // 10^(-31) * 2^220 | |
849 | {{0x2e99f7863b696053ULL, 0x0033ec47ab514e65ULL} | |
850 | } | |
851 | , // 10^(-32) * 2^224 | |
852 | {{0x587b2c6b62bab376ULL, 0x002989d2ef743eb7ULL} | |
853 | } | |
854 | , // 10^(-33) * 2^227 | |
855 | {{0xad2f56bc4efbc2c5ULL, 0x00213b0f25f69892ULL} | |
856 | } | |
857 | , // 10^(-34) * 2^230 | |
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 |
863 | int shiftright128[] = { |
864 | 0, // 128 - 128 | |
865 | 0, // 128 - 128 | |
866 | 0, // 128 - 128 | |
867 | ||
868 | 3, // 131 - 128 | |
869 | 6, // 134 - 128 | |
870 | 9, // 137 - 128 | |
871 | 13, // 141 - 128 | |
872 | 16, // 144 - 128 | |
873 | 19, // 147 - 128 | |
874 | 23, // 151 - 128 | |
875 | 26, // 154 - 128 | |
876 | 29, // 157 - 128 | |
877 | 33, // 161 - 128 | |
878 | 36, // 164 - 128 | |
879 | 39, // 167 - 128 | |
880 | 43, // 171 - 128 | |
881 | 46, // 174 - 128 | |
882 | 49, // 177 - 128 | |
883 | 53, // 181 - 128 | |
884 | 56, // 184 - 128 | |
885 | 59, // 187 - 128 | |
886 | 63, // 191 - 128 | |
887 | ||
888 | 66, // 194 - 128 | |
889 | 69, // 197 - 128 | |
890 | 73, // 201 - 128 | |
891 | 76, // 204 - 128 | |
892 | 79, // 207 - 128 | |
893 | 83, // 211 - 128 | |
894 | 86, // 214 - 128 | |
895 | 89, // 217 - 128 | |
896 | 92, // 220 - 128 | |
897 | 96, // 224 - 128 | |
898 | 99, // 227 - 128 | |
899 | 102 // 230 - 128 | |
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 |
906 | UINT64 maskhigh128[] = { |
907 | 0x0000000000000000ULL, // 0 = 128 - 128 bits | |
908 | 0x0000000000000000ULL, // 0 = 128 - 128 bits | |
909 | 0x0000000000000000ULL, // 0 = 128 - 128 bits | |
910 | 0x0000000000000007ULL, // 3 = 131 - 128 bits | |
911 | 0x000000000000003fULL, // 6 = 134 - 128 bits | |
912 | 0x00000000000001ffULL, // 9 = 137 - 128 bits | |
913 | 0x0000000000001fffULL, // 13 = 141 - 128 bits | |
914 | 0x000000000000ffffULL, // 16 = 144 - 128 bits | |
915 | 0x000000000007ffffULL, // 19 = 147 - 128 bits | |
916 | 0x00000000007fffffULL, // 23 = 151 - 128 bits | |
917 | 0x0000000003ffffffULL, // 26 = 154 - 128 bits | |
918 | 0x000000001fffffffULL, // 29 = 157 - 128 bits | |
919 | 0x00000001ffffffffULL, // 33 = 161 - 128 bits | |
920 | 0x0000000fffffffffULL, // 36 = 164 - 128 bits | |
921 | 0x0000007fffffffffULL, // 39 = 167 - 128 bits | |
922 | 0x000007ffffffffffULL, // 43 = 171 - 128 bits | |
923 | 0x00003fffffffffffULL, // 46 = 174 - 128 bits | |
924 | 0x0001ffffffffffffULL, // 49 = 177 - 128 bits | |
925 | 0x001fffffffffffffULL, // 53 = 181 - 128 bits | |
926 | 0x00ffffffffffffffULL, // 56 = 184 - 128 bits | |
927 | 0x07ffffffffffffffULL, // 59 = 187 - 128 bits | |
928 | 0x7fffffffffffffffULL, // 63 = 191 - 128 bits | |
929 | 0x0000000000000003ULL, // 2 = 194 - 192 bits | |
930 | 0x000000000000001fULL, // 5 = 197 - 192 bits | |
931 | 0x00000000000001ffULL, // 9 = 201 - 192 bits | |
932 | 0x0000000000000fffULL, // 12 = 204 - 192 bits | |
933 | 0x0000000000007fffULL, // 15 = 207 - 192 bits | |
934 | 0x000000000007ffffULL, // 21 = 211 - 192 bits | |
935 | 0x00000000003fffffULL, // 22 = 214 - 192 bits | |
936 | 0x0000000001ffffffULL, // 25 = 217 - 192 bits | |
937 | 0x000000000fffffffULL, // 28 = 220 - 192 bits | |
938 | 0x00000000ffffffffULL, // 32 = 224 - 192 bits | |
939 | 0x00000007ffffffffULL, // 35 = 227 - 192 bits | |
940 | 0x0000003fffffffffULL // 38 = 230 - 192 bits | |
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 |
947 | UINT64 onehalf128[] = { |
948 | 0x0000000000000000ULL, // 0 bits | |
949 | 0x0000000000000000ULL, // 0 bits | |
950 | 0x0000000000000000ULL, // 0 bits | |
951 | 0x0000000000000004ULL, // 3 bits | |
952 | 0x0000000000000020ULL, // 6 bits | |
953 | 0x0000000000000100ULL, // 9 bits | |
954 | 0x0000000000001000ULL, // 13 bits | |
955 | 0x0000000000008000ULL, // 16 bits | |
956 | 0x0000000000040000ULL, // 19 bits | |
957 | 0x0000000000400000ULL, // 23 bits | |
958 | 0x0000000002000000ULL, // 26 bits | |
959 | 0x0000000010000000ULL, // 29 bits | |
960 | 0x0000000100000000ULL, // 33 bits | |
961 | 0x0000000800000000ULL, // 36 bits | |
962 | 0x0000004000000000ULL, // 39 bits | |
963 | 0x0000040000000000ULL, // 43 bits | |
964 | 0x0000200000000000ULL, // 46 bits | |
965 | 0x0001000000000000ULL, // 49 bits | |
966 | 0x0010000000000000ULL, // 53 bits | |
967 | 0x0080000000000000ULL, // 56 bits | |
968 | 0x0400000000000000ULL, // 59 bits | |
969 | 0x4000000000000000ULL, // 63 bits | |
970 | 0x0000000000000002ULL, // 66 bits | |
971 | 0x0000000000000010ULL, // 69 bits | |
972 | 0x0000000000000100ULL, // 73 bits | |
973 | 0x0000000000000800ULL, // 76 bits | |
974 | 0x0000000000004000ULL, // 79 bits | |
975 | 0x0000000000040000ULL, // 83 bits | |
976 | 0x0000000000200000ULL, // 86 bits | |
977 | 0x0000000001000000ULL, // 89 bits | |
978 | 0x0000000008000000ULL, // 92 bits | |
979 | 0x0000000080000000ULL, // 96 bits | |
980 | 0x0000000400000000ULL, // 99 bits | |
981 | 0x0000002000000000ULL // 102 bits | |
200359e8 L |
982 | }; |
983 | ||
b2a00c89 L |
984 | UINT64 ten2mk64[] = { |
985 | 0x199999999999999aULL, // 10^(-1) * 2^ 64 | |
986 | 0x028f5c28f5c28f5dULL, // 10^(-2) * 2^ 64 | |
987 | 0x004189374bc6a7f0ULL, // 10^(-3) * 2^ 64 | |
988 | 0x00346dc5d638865aULL, // 10^(-4) * 2^ 67 | |
989 | 0x0029f16b11c6d1e2ULL, // 10^(-5) * 2^ 70 | |
990 | 0x00218def416bdb1bULL, // 10^(-6) * 2^ 73 | |
991 | 0x0035afe535795e91ULL, // 10^(-7) * 2^ 77 | |
992 | 0x002af31dc4611874ULL, // 10^(-8) * 2^ 80 | |
993 | 0x00225c17d04dad2aULL, // 10^(-9) * 2^ 83 | |
994 | 0x0036f9bfb3af7b76ULL, // 10^(-10) * 2^ 87 | |
995 | 0x002bfaffc2f2c92bULL, // 10^(-11) * 2^ 90 | |
996 | 0x00232f33025bd423ULL, // 10^(-12) * 2^ 93 | |
997 | 0x00384b84d092ed04ULL, // 10^(-13) * 2^ 97 | |
998 | 0x002d09370d425737ULL, // 10^(-14) * 2^100 | |
999 | 0x0024075f3dceac2cULL, // 10^(-15) * 2^103 | |
1000 | 0x0039a5652fb11379ULL, // 10^(-16) * 2^107 | |
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 |
1006 | UINT128 ten2mk128trunc[] = { |
1007 | {{0x9999999999999999ULL, 0x1999999999999999ULL}}, // 10^(-1) * 2^128 | |
1008 | {{0x28f5c28f5c28f5c2ULL, 0x028f5c28f5c28f5cULL}}, // 10^(-2) * 2^128 | |
1009 | {{0x9db22d0e56041893ULL, 0x004189374bc6a7efULL}}, // 10^(-3) * 2^128 | |
1010 | {{0x4af4f0d844d013a9ULL, 0x00346dc5d6388659ULL}}, // 10^(-4) * 2^131 | |
1011 | {{0x08c3f3e0370cdc87ULL, 0x0029f16b11c6d1e1ULL}}, // 10^(-5) * 2^134 | |
1012 | {{0x6d698fe69270b06cULL, 0x00218def416bdb1aULL}}, // 10^(-6) * 2^137 | |
1013 | {{0xaf0f4ca41d811a46ULL, 0x0035afe535795e90ULL}}, // 10^(-7) * 2^141 | |
1014 | {{0xbf3f70834acdae9fULL, 0x002af31dc4611873ULL}}, // 10^(-8) * 2^144 | |
1015 | {{0x65cc5a02a23e254cULL, 0x00225c17d04dad29ULL}}, // 10^(-9) * 2^147 | |
1016 | {{0x6fad5cd10396a213ULL, 0x0036f9bfb3af7b75ULL}}, // 10^(-10) * 2^151 | |
1017 | {{0xbfbde3da69454e75ULL, 0x002bfaffc2f2c92aULL}}, // 10^(-11) * 2^154 | |
1018 | {{0x32fe4fe1edd10b91ULL, 0x00232f33025bd422ULL}}, // 10^(-12) * 2^157 | |
1019 | {{0x84ca19697c81ac1bULL, 0x00384b84d092ed03ULL}}, // 10^(-13) * 2^161 | |
1020 | {{0x03d4e1213067bce3ULL, 0x002d09370d425736ULL}}, // 10^(-14) * 2^164 | |
1021 | {{0x3643e74dc052fd82ULL, 0x0024075f3dceac2bULL}}, // 10^(-15) * 2^167 | |
1022 | {{0x56d30baf9a1e626aULL, 0x0039a5652fb11378ULL}}, // 10^(-16) * 2^171 | |
1023 | {{0x12426fbfae7eb521ULL, 0x002e1dea8c8da92dULL}}, // 10^(-17) * 2^174 | |
1024 | {{0x41cebfcc8b9890e7ULL, 0x0024e4bba3a48757ULL}}, // 10^(-18) * 2^177 | |
1025 | {{0x694acc7a78f41b0cULL, 0x003b07929f6da558ULL}}, // 10^(-19) * 2^181 | |
1026 | {{0xbaa23d2ec729af3dULL, 0x002f394219248446ULL}}, // 10^(-20) * 2^184 | |
1027 | {{0xfbb4fdbf05baf297ULL, 0x0025c768141d369eULL}}, // 10^(-21) * 2^187 | |
1028 | {{0x2c54c931a2c4b758ULL, 0x003c7240202ebdcbULL}}, // 10^(-22) * 2^191 | |
1029 | {{0x89dd6dc14f03c5e0ULL, 0x00305b66802564a2ULL}}, // 10^(-23) * 2^194 | |
1030 | {{0xd4b1249aa59c9e4dULL, 0x0026af8533511d4eULL}}, // 10^(-24) * 2^197 | |
1031 | {{0x544ea0f76f60fd48ULL, 0x003de5a1ebb4fbb1ULL}}, // 10^(-25) * 2^201 | |
1032 | {{0x76a54d92bf80caa0ULL, 0x00318481895d9627ULL}}, // 10^(-26) * 2^204 | |
1033 | {{0x921dd7a89933d54dULL, 0x00279d346de4781fULL}}, // 10^(-27) * 2^207 | |
1034 | {{0x8362f2a75b862214ULL, 0x003f61ed7ca0c032ULL}}, // 10^(-28) * 2^211 | |
1035 | {{0xcf825bb91604e810ULL, 0x0032b4bdfd4d668eULL}}, // 10^(-29) * 2^214 | |
1036 | {{0x0c684960de6a5340ULL, 0x00289097fdd7853fULL}}, // 10^(-30) * 2^217 | |
1037 | {{0x3d203ab3e521dc33ULL, 0x002073accb12d0ffULL}}, // 10^(-31) * 2^220 | |
1038 | {{0x2e99f7863b696052ULL, 0x0033ec47ab514e65ULL}}, // 10^(-32) * 2^224 | |
1039 | {{0x587b2c6b62bab375ULL, 0x002989d2ef743eb7ULL}}, // 10^(-33) * 2^227 | |
1040 | {{0xad2f56bc4efbc2c4ULL, 0x00213b0f25f69892ULL}}, // 10^(-34) * 2^230 | |
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 |
1046 | UINT128 ten2mk128M[] = { |
1047 | {{0xcccccccccccccccdULL, 0xccccccccccccccccULL}}, // 10^(-1) * 2^131 | |
1048 | {{0x3d70a3d70a3d70a4ULL, 0xa3d70a3d70a3d70aULL}}, // 10^(-2) * 2^134 | |
1049 | {{0x645a1cac083126eaULL, 0x83126e978d4fdf3bULL}}, // 10^(-3) * 2^137 | |
1050 | {{0xd3c36113404ea4a9ULL, 0xd1b71758e219652bULL}} // 10^(-4) * 2^141 | |
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 |
1056 | UINT128 ten2mk128truncM[] = { |
1057 | {{0xccccccccccccccccULL, 0xccccccccccccccccULL}}, // 10^(-1) * 2^131 | |
1058 | {{0x3d70a3d70a3d70a3ULL, 0xa3d70a3d70a3d70aULL}}, // 10^(-2) * 2^134 | |
1059 | {{0x645a1cac083126e9ULL, 0x83126e978d4fdf3bULL}}, // 10^(-3) * 2^137 | |
1060 | {{0xd3c36113404ea4a8ULL, 0xd1b71758e219652bULL}} // 10^(-4) * 2^141 | |
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 |
1065 | int 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 |
1075 | UINT64 maskhigh128M[] = { |
1076 | 0x0000000000000007ULL, // 3 = 131 - 128 bits | |
1077 | 0x000000000000003fULL, // 6 = 134 - 128 bits | |
1078 | 0x00000000000001ffULL, // 9 = 137 - 128 bits | |
1079 | 0x0000000000001fffULL // 13 = 141 - 128 bits | |
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 |
1085 | UINT64 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 |
1095 | UINT192 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 |
1157 | UINT192 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 |
1219 | int shiftright192M[] = { |
1220 | 16, // 208 - 192 | |
1221 | 19, // 211 - 192 | |
1222 | 23, // 215 - 192 | |
1223 | 26, // 218 - 192 | |
1224 | 29, // 221 - 192 | |
1225 | 33, // 225 - 192 | |
1226 | 36, // 228 - 192 | |
1227 | 39, // 231 - 192 | |
1228 | 43, // 235 - 192 | |
1229 | 46, // 238 - 192 | |
1230 | 49, // 241 - 192 | |
1231 | 53, // 245 - 192 | |
1232 | 56, // 248 - 192 | |
1233 | 59, // 251 - 192 | |
1234 | 63, // 255 - 192 | |
1235 | 2, // 258 - 256 | |
1236 | 5, // 261 - 256 | |
1237 | 9, // 265 - 256 | |
1238 | 12 // 268 - 256 | |
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 |
1245 | UINT64 maskhigh192M[] = { |
1246 | 0x000000000000ffffULL, // 16 = 208 - 192 bits | |
1247 | 0x000000000007ffffULL, // 19 = 211 - 192 bits | |
1248 | 0x00000000007fffffULL, // 23 = 215 - 192 bits | |
1249 | 0x0000000003ffffffULL, // 26 = 218 - 192 bits | |
1250 | 0x000000001fffffffULL, // 29 = 221 - 192 bits | |
1251 | 0x00000001ffffffffULL, // 33 = 225 - 192 bits | |
1252 | 0x0000000fffffffffULL, // 36 = 228 - 192 bits | |
1253 | 0x0000007fffffffffULL, // 39 = 231 - 192 bits | |
1254 | 0x000007ffffffffffULL, // 43 = 235 - 192 bits | |
1255 | 0x00003fffffffffffULL, // 46 = 238 - 192 bits | |
1256 | 0x0001ffffffffffffULL, // 49 = 241 - 192 bits | |
1257 | 0x001fffffffffffffULL, // 53 = 245 - 192 bits | |
1258 | 0x00ffffffffffffffULL, // 56 = 248 - 192 bits | |
1259 | 0x07ffffffffffffffULL, // 59 = 251 - 192 bits | |
1260 | 0x7fffffffffffffffULL, // 63 = 255 - 192 bits | |
1261 | 0x0000000000000003ULL, // 2 = 258 - 256 bits | |
1262 | 0x000000000000001fULL, // 5 = 261 - 256 bits | |
1263 | 0x00000000000001ffULL, // 9 = 265 - 256 bits | |
1264 | 0x0000000000000fffULL // 12 = 268 - 256 bits | |
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 |
1271 | UINT64 onehalf192M[] = { |
1272 | 0x0000000000008000ULL, // 16 = 208 - 192 bits | |
1273 | 0x0000000000040000ULL, // 19 = 211 - 192 bits | |
1274 | 0x0000000000400000ULL, // 23 = 215 - 192 bits | |
1275 | 0x0000000002000000ULL, // 26 = 218 - 192 bits | |
1276 | 0x0000000010000000ULL, // 29 = 221 - 192 bits | |
1277 | 0x0000000100000000ULL, // 33 = 225 - 192 bits | |
1278 | 0x0000000800000000ULL, // 36 = 228 - 192 bits | |
1279 | 0x0000004000000000ULL, // 39 = 231 - 192 bits | |
1280 | 0x0000040000000000ULL, // 43 = 235 - 192 bits | |
1281 | 0x0000200000000000ULL, // 46 = 238 - 192 bits | |
1282 | 0x0001000000000000ULL, // 49 = 241 - 192 bits | |
1283 | 0x0010000000000000ULL, // 53 = 245 - 192 bits | |
1284 | 0x0080000000000000ULL, // 56 = 248 - 192 bits | |
1285 | 0x0400000000000000ULL, // 59 = 251 - 192 bits | |
1286 | 0x4000000000000000ULL, // 63 = 255 - 192 bits | |
1287 | 0x0000000000000002ULL, // 2 = 258 - 256 bits | |
1288 | 0x0000000000000010ULL, // 5 = 261 - 256 bits | |
1289 | 0x0000000000000100ULL, // 9 = 265 - 256 bits | |
1290 | 0x0000000000000800ULL // 12 = 268 - 256 bits | |
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 | |
1295 | UINT256 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 | 1322 | UINT256 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 |
1349 | int shiftright256M[] = { |
1350 | 15, // 335 - 320 | |
1351 | 19, // 339 - 320 | |
1352 | 22, // 342 - 320 | |
1353 | 25, // 345 - 320 | |
1354 | 29, // 349 - 320 | |
1355 | 32, // 352 - 320 // careful of 32-bit machines! | |
1356 | 35, // 355 - 320 | |
1357 | 38, // 358 - 320 | |
1358 | 42, // 362 - 320 | |
1359 | 45, // 365 - 320 | |
1360 | 48 // 368 - 320 | |
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 |
1365 | UINT64 maskhigh256M[] = { |
1366 | 0x0000000000007fffULL, // 15 = 335 - 320 bits | |
1367 | 0x000000000007ffffULL, // 19 = 339 - 320 bits | |
1368 | 0x00000000003fffffULL, // 22 = 342 - 320 bits | |
1369 | 0x0000000001ffffffULL, // 25 = 345 - 320 bits | |
1370 | 0x000000001fffffffULL, // 29 = 349 - 320 bits | |
1371 | 0x00000000ffffffffULL, // 32 = 352 - 320 bits | |
1372 | 0x00000007ffffffffULL, // 35 = 355 - 320 bits | |
1373 | 0x0000003fffffffffULL, // 38 = 358 - 320 bits | |
1374 | 0x000003ffffffffffULL, // 42 = 362 - 320 bits | |
1375 | 0x00001fffffffffffULL, // 45 = 365 - 320 bits | |
1376 | 0x0000ffffffffffffULL // 48 = 368 - 320 bits | |
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 |
1381 | UINT64 onehalf256M[] = { |
1382 | 0x0000000000004000ULL, // 15 = 335 - 320 bits | |
1383 | 0x0000000000040000ULL, // 19 = 339 - 320 bits | |
1384 | 0x0000000000200000ULL, // 22 = 342 - 320 bits | |
1385 | 0x0000000001000000ULL, // 25 = 345 - 320 bits | |
1386 | 0x0000000010000000ULL, // 29 = 349 - 320 bits | |
1387 | 0x0000000080000000ULL, // 32 = 352 - 320 bits | |
1388 | 0x0000000400000000ULL, // 35 = 355 - 320 bits | |
1389 | 0x0000002000000000ULL, // 38 = 358 - 320 bits | |
1390 | 0x0000020000000000ULL, // 42 = 362 - 320 bits | |
1391 | 0x0000100000000000ULL, // 45 = 365 - 320 bits | |
1392 | 0x0000800000000000ULL // 48 = 368 - 320 bits | |
200359e8 L |
1393 | }; |
1394 | ||
1395 | ||
b2a00c89 L |
1396 | // char_table2[] is used to convert n to string, where 10 <= n <= 99 |
1397 | unsigned 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 |
1492 | unsigned 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 |
2496 | UINT64 ten2m3k64[] = { | |
2497 | 0x4189374bc6a7ef9eull, // 4189374bc6a7ef9e * 2^-72 = (10^-3)RP,63 | |
2498 | 0x10c6f7a0b5ed8d37ull, // 10c6f7a0b5ed8d37 * 2^-80 = (10^-6)RP,61 | |
2499 | 0x44b82fa09b5a52ccull, // 44b82fa09b5a52cc * 2^-92 = (10^-9)RP,63 | |
2500 | 0x119799812dea111aull, // 119799812dea111a * 2^-100 = (10^-12)RP,61 | |
2501 | 0x480ebe7b9d58566dull // 480ebe7b9d58566d * 2^-112 = (10^-15)RP,63 | |
200359e8 L |
2502 | }; |
2503 | ||
b2a00c89 L |
2504 | unsigned int shift_ten2m3k64[] = { |
2505 | 8, // 72 - 64 | |
2506 | 16, // 80 - 64 | |
2507 | 28, // 92 - 64 | |
2508 | 36, // 100 - 64 | |
2509 | 48 // 112 - 64 | |
200359e8 L |
2510 | }; |
2511 | ||
b2a00c89 L |
2512 | UINT128 ten2m3k128[] = { |
2513 | {{0xb22d0e5604189375ull, 0x4189374bc6a7ef9dull}}, | |
2514 | // 4189374bc6a7ef9d b22d0e5604189375 * 2^-136 = (10^-3)RP,127 | |
2515 | {{0xb4c7f34938583622ull, 0x10c6f7a0b5ed8d36ull}}, | |
2516 | // 10c6f7a0b5ed8d36 b4c7f34938583622 * 2^-144 = (10^-6)RP,125 | |
2517 | {{0x98b405447c4a9819ull, 0x44b82fa09b5a52cbull}}, | |
2518 | // 44b82fa09b5a52cb 98b405447c4a9819 * 2^-156 = (10^-9)RP,127 | |
2519 | {{0x7f27f0f6e885c8bbull, 0x119799812dea1119ull}}, | |
2520 | // 119799812dea1119 7f27f0f6e885c8bb * 2^-164 = (10^-12)RP,125 | |
2521 | {{0x87ce9b80a5fb0509ull, 0x480ebe7b9d58566cull}}, | |
2522 | // 480ebe7b9d58566c 87ce9b80a5fb0509 * 2^-176 = (10^-15)RP,127 | |
2523 | {{0xe75fe645cc4873faull, 0x12725dd1d243aba0ull}}, | |
2524 | // 12725dd1d243aba0 e75fe645cc4873fa * 2^-184 = (10^-18)RP,125 | |
2525 | {{0x69fb7e0b75e52f02ull, 0x4b8ed0283a6d3df7ull}}, | |
2526 | // 4b8ed0283a6d3df7 69fb7e0b75e52f02 * 2^-196 = (10^-21)RP,127 | |
2527 | {{0x58924d52ce4f26a9ull, 0x1357c299a88ea76aull}}, | |
2528 | // 1357c299a88ea76a 58924d52ce4f26a9 * 2^-204 = (10^-24)RP,125 | |
2529 | {{0x3baf513267aa9a3full, 0x4f3a68dbc8f03f24ull}}, | |
2530 | // 4f3a68dbc8f03f24 3baf513267aa9a3f * 2^-216 = (10^-27)RP,127 | |
2531 | {{0x3424b06f3529a052ull, 0x14484bfeebc29f86ull}}, | |
2532 | // 14484bfeebc29f86 3424b06f3529a052 * 2^-224 = (10^-30)RP,125 | |
2533 | {{0xf658d6c57566eac8ull, 0x5313a5dee87d6eb0ull}} | |
2534 | // 5313a5dee87d6eb0 f658d6c57566eac8 * 2^-236 = (10^-33)RP,127 | |
200359e8 L |
2535 | }; |
2536 | ||
b2a00c89 L |
2537 | unsigned int shift_ten2m3k128[] = { |
2538 | 8, // 136 - 128 | |
2539 | 16, // 144 - 128 | |
2540 | 28, // 156 - 128 | |
2541 | 36, // 164 - 128 | |
2542 | 48, // 176 - 128 | |
2543 | 56, // 184 - 128 | |
2544 | 4, // 196 - 192 | |
2545 | 12, // 204 - 192 | |
2546 | 24, // 216 - 192 | |
2547 | 32, // 224 - 192 | |
2548 | 44 // 236 - 192 | |
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 |
2578 | UINT64 Kx64[] = { |
2579 | 0xcccccccccccccccdULL, // 10^-1 ~= cccccccccccccccd * 2^-67 | |
2580 | 0xa3d70a3d70a3d70bULL, // 10^-2 ~= a3d70a3d70a3d70b * 2^-70 | |
2581 | 0x83126e978d4fdf3cULL, // 10^-3 ~= 83126e978d4fdf3c * 2^-73 | |
2582 | 0xd1b71758e219652cULL, // 10^-4 ~= d1b71758e219652c * 2^-77 | |
2583 | 0xa7c5ac471b478424ULL, // 10^-5 ~= a7c5ac471b478424 * 2^-80 | |
2584 | 0x8637bd05af6c69b6ULL, // 10^-6 ~= 8637bd05af6c69b6 * 2^-83 | |
2585 | 0xd6bf94d5e57a42bdULL, // 10^-7 ~= d6bf94d5e57a42bd * 2^-87 | |
2586 | 0xabcc77118461cefdULL, // 10^-8 ~= abcc77118461cefd * 2^-90 | |
2587 | 0x89705f4136b4a598ULL, // 10^-9 ~= 89705f4136b4a598 * 2^-93 | |
2588 | 0xdbe6fecebdedd5bfULL, // 10^-10 ~= dbe6fecebdedd5bf * 2^-97 | |
2589 | 0xafebff0bcb24aaffULL, // 10^-11 ~= afebff0bcb24aaff * 2^-100 | |
2590 | 0x8cbccc096f5088ccULL, // 10^-12 ~= 8cbccc096f5088cc * 2^-103 | |
2591 | 0xe12e13424bb40e14ULL, // 10^-13 ~= e12e13424bb40e14 * 2^-107 | |
2592 | 0xb424dc35095cd810ULL, // 10^-14 ~= b424dc35095cd810 * 2^-110 | |
2593 | 0x901d7cf73ab0acdaULL, // 10^-15 ~= 901d7cf73ab0acda * 2^-113 | |
2594 | 0xe69594bec44de15cULL, // 10^-16 ~= e69594bec44de15c * 2^-117 | |
2595 | 0xb877aa3236a4b44aULL // 10^-17 ~= b877aa3236a4b44a * 2^-120 | |
200359e8 L |
2596 | }; |
2597 | ||
2598 | // Ex-64 from 10^(-x) ~= Kx * 2^(-Ex); Kx rounded up to 64 bits, 1 <= x <= 17 | |
b2a00c89 L |
2599 | unsigned int Ex64m64[] = { |
2600 | 3, // 67 - 64, Ex = 67 | |
2601 | 6, // 70 - 64, Ex = 70 | |
2602 | 9, // 73 - 64, Ex = 73 | |
2603 | 13, // 77 - 64, Ex = 77 | |
2604 | 16, // 80 - 64, Ex = 80 | |
2605 | 19, // 83 - 64, Ex = 83 | |
2606 | 23, // 87 - 64, Ex = 87 | |
2607 | 26, // 90 - 64, Ex = 90 | |
2608 | 29, // 93 - 64, Ex = 93 | |
2609 | 33, // 97 - 64, Ex = 97 | |
2610 | 36, // 100 - 64, Ex = 100 | |
2611 | 39, // 103 - 64, Ex = 103 | |
2612 | 43, // 107 - 64, Ex = 107 | |
2613 | 46, // 110 - 64, Ex = 110 | |
2614 | 49, // 113 - 64, Ex = 113 | |
2615 | 53, // 117 - 64, Ex = 117 | |
2616 | 56 // 120 - 64, Ex = 120 | |
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 |
2622 | UINT64 half64[] = { |
2623 | 0x0000000000000004ULL, // half / 2^64 = 4 | |
2624 | 0x0000000000000020ULL, // half / 2^64 = 20 | |
2625 | 0x0000000000000100ULL, // half / 2^64 = 100 | |
2626 | 0x0000000000001000ULL, // half / 2^64 = 1000 | |
2627 | 0x0000000000008000ULL, // half / 2^64 = 8000 | |
2628 | 0x0000000000040000ULL, // half / 2^64 = 40000 | |
2629 | 0x0000000000400000ULL, // half / 2^64 = 400000 | |
2630 | 0x0000000002000000ULL, // half / 2^64 = 2000000 | |
2631 | 0x0000000010000000ULL, // half / 2^64 = 10000000 | |
2632 | 0x0000000100000000ULL, // half / 2^64 = 100000000 | |
2633 | 0x0000000800000000ULL, // half / 2^64 = 800000000 | |
2634 | 0x0000004000000000ULL, // half / 2^64 = 4000000000 | |
2635 | 0x0000040000000000ULL, // half / 2^64 = 40000000000 | |
2636 | 0x0000200000000000ULL, // half / 2^64 = 200000000000 | |
2637 | 0x0001000000000000ULL, // half / 2^64 = 1000000000000 | |
2638 | 0x0010000000000000ULL, // half / 2^64 = 10000000000000 | |
2639 | 0x0080000000000000ULL // half / 2^64 = 80000000000000 | |
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 |
2645 | UINT64 mask64[] = { |
2646 | 0x0000000000000007ULL, // mask / 2^64 | |
2647 | 0x000000000000003fULL, // mask / 2^64 | |
2648 | 0x00000000000001ffULL, // mask / 2^64 | |
2649 | 0x0000000000001fffULL, // mask / 2^64 | |
2650 | 0x000000000000ffffULL, // mask / 2^64 | |
2651 | 0x000000000007ffffULL, // mask / 2^64 | |
2652 | 0x00000000007fffffULL, // mask / 2^64 | |
2653 | 0x0000000003ffffffULL, // mask / 2^64 | |
2654 | 0x000000001fffffffULL, // mask / 2^64 | |
2655 | 0x00000001ffffffffULL, // mask / 2^64 | |
2656 | 0x0000000fffffffffULL, // mask / 2^64 | |
2657 | 0x0000007fffffffffULL, // mask / 2^64 | |
2658 | 0x000007ffffffffffULL, // mask / 2^64 | |
2659 | 0x00003fffffffffffULL, // mask / 2^64 | |
2660 | 0x0001ffffffffffffULL, // mask / 2^64 | |
2661 | 0x001fffffffffffffULL, // mask / 2^64 | |
2662 | 0x00ffffffffffffffULL // mask / 2^64 | |
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 |
2669 | UINT64 ten2mxtrunc64[] = { |
2670 | 0xccccccccccccccccULL, // (ten2mx >> 64) = cccccccccccccccc | |
2671 | 0xa3d70a3d70a3d70aULL, // (ten2mx >> 64) = a3d70a3d70a3d70a | |
2672 | 0x83126e978d4fdf3bULL, // (ten2mx >> 64) = 83126e978d4fdf3b | |
2673 | 0xd1b71758e219652bULL, // (ten2mx >> 64) = d1b71758e219652b | |
2674 | 0xa7c5ac471b478423ULL, // (ten2mx >> 64) = a7c5ac471b478423 | |
2675 | 0x8637bd05af6c69b5ULL, // (ten2mx >> 64) = 8637bd05af6c69b5 | |
2676 | 0xd6bf94d5e57a42bcULL, // (ten2mx >> 64) = d6bf94d5e57a42bc | |
2677 | 0xabcc77118461cefcULL, // (ten2mx >> 64) = abcc77118461cefc | |
2678 | 0x89705f4136b4a597ULL, // (ten2mx >> 64) = 89705f4136b4a597 | |
2679 | 0xdbe6fecebdedd5beULL, // (ten2mx >> 64) = dbe6fecebdedd5be | |
2680 | 0xafebff0bcb24aafeULL, // (ten2mx >> 64) = afebff0bcb24aafe | |
2681 | 0x8cbccc096f5088cbULL, // (ten2mx >> 64) = 8cbccc096f5088cb | |
2682 | 0xe12e13424bb40e13ULL, // (ten2mx >> 64) = e12e13424bb40e13 | |
2683 | 0xb424dc35095cd80fULL, // (ten2mx >> 64) = b424dc35095cd80f | |
2684 | 0x901d7cf73ab0acd9ULL, // (ten2mx >> 64) = 901d7cf73ab0acd9 | |
2685 | 0xe69594bec44de15bULL, // (ten2mx >> 64) = e69594bec44de15b | |
2686 | 0xb877aa3236a4b449ULL // (ten2mx >> 64) = b877aa3236a4b449 | |
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 | 2693 | UINT128 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 |
2771 | unsigned int Ex128m128[] = { |
2772 | 3, // 131 - 128, Ex = 131 | |
2773 | 6, // 134 - 128, Ex = 134 | |
2774 | 9, // 137 - 128, Ex = 137 | |
2775 | 13, // 141 - 128, Ex = 141 | |
2776 | 16, // 144 - 128, Ex = 144 | |
2777 | 19, // 147 - 128, Ex = 147 | |
2778 | 23, // 151 - 128, Ex = 151 | |
2779 | 26, // 154 - 128, Ex = 154 | |
2780 | 29, // 157 - 128, Ex = 157 | |
2781 | 33, // 161 - 128, Ex = 161 | |
2782 | 36, // 164 - 128, Ex = 164 | |
2783 | 39, // 167 - 128, Ex = 167 | |
2784 | 43, // 171 - 128, Ex = 171 | |
2785 | 46, // 174 - 128, Ex = 174 | |
2786 | 49, // 177 - 128, Ex = 177 | |
2787 | 53, // 181 - 128, Ex = 181 | |
2788 | 56, // 184 - 128, Ex = 184 | |
2789 | 59, // 187 - 128, Ex = 187 | |
2790 | 63, // 191 - 128, Ex = 191 | |
2791 | 2, // 194 - 192, Ex = 194 | |
2792 | 5, // 197 - 192, Ex = 197 | |
2793 | 9, // 201 - 192, Ex = 201 | |
2794 | 12, // 204 - 192, Ex = 204 | |
2795 | 15, // 207 - 192, Ex = 207 | |
2796 | 19, // 211 - 192, Ex = 211 | |
2797 | 22, // 214 - 192, Ex = 214 | |
2798 | 25, // 217 - 192, Ex = 217 | |
2799 | 29, // 221 - 192, Ex = 221 | |
2800 | 32, // 224 - 192, Ex = 224 | |
2801 | 35, // 227 - 192, Ex = 227 | |
2802 | 38, // 230 - 192, Ex = 230 | |
2803 | 42, // 234 - 192, Ex = 234 | |
2804 | 45, // 237 - 192, Ex = 237 | |
2805 | 48, // 240 - 192, Ex = 240 | |
2806 | 52, // 244 - 192, Ex = 244 | |
2807 | 55, // 247 - 192, Ex = 247 | |
2808 | 58 // 250 - 192, Ex = 250 | |
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 |
2814 | UINT64 half128[] = { |
2815 | 0x0000000000000004ULL, // half / 2^128 = 4 | |
2816 | 0x0000000000000020ULL, // half / 2^128 = 20 | |
2817 | 0x0000000000000100ULL, // half / 2^128 = 100 | |
2818 | 0x0000000000001000ULL, // half / 2^128 = 1000 | |
2819 | 0x0000000000008000ULL, // half / 2^128 = 8000 | |
2820 | 0x0000000000040000ULL, // half / 2^128 = 40000 | |
2821 | 0x0000000000400000ULL, // half / 2^128 = 400000 | |
2822 | 0x0000000002000000ULL, // half / 2^128 = 2000000 | |
2823 | 0x0000000010000000ULL, // half / 2^128 = 10000000 | |
2824 | 0x0000000100000000ULL, // half / 2^128 = 100000000 | |
2825 | 0x0000000800000000ULL, // half / 2^128 = 800000000 | |
2826 | 0x0000004000000000ULL, // half / 2^128 = 4000000000 | |
2827 | 0x0000040000000000ULL, // half / 2^128 = 40000000000 | |
2828 | 0x0000200000000000ULL, // half / 2^128 = 200000000000 | |
2829 | 0x0001000000000000ULL, // half / 2^128 = 1000000000000 | |
2830 | 0x0010000000000000ULL, // half / 2^128 = 10000000000000 | |
2831 | 0x0080000000000000ULL, // half / 2^128 = 80000000000000 | |
2832 | 0x0400000000000000ULL, // half / 2^128 = 400000000000000 | |
2833 | 0x4000000000000000ULL, // half / 2^128 = 4000000000000000 | |
2834 | 0x0000000000000002ULL, // half / 2^192 = 2 | |
2835 | 0x0000000000000010ULL, // half / 2^192 = 10 | |
2836 | 0x0000000000000100ULL, // half / 2^192 = 100 | |
2837 | 0x0000000000000800ULL, // half / 2^192 = 800 | |
2838 | 0x0000000000004000ULL, // half / 2^192 = 4000 | |
2839 | 0x0000000000040000ULL, // half / 2^192 = 40000 | |
2840 | 0x0000000000200000ULL, // half / 2^192 = 200000 | |
2841 | 0x0000000001000000ULL, // half / 2^192 = 1000000 | |
2842 | 0x0000000010000000ULL, // half / 2^192 = 10000000 | |
2843 | 0x0000000080000000ULL, // half / 2^192 = 80000000 | |
2844 | 0x0000000400000000ULL, // half / 2^192 = 400000000 | |
2845 | 0x0000002000000000ULL, // half / 2^192 = 2000000000 | |
2846 | 0x0000020000000000ULL, // half / 2^192 = 20000000000 | |
2847 | 0x0000100000000000ULL, // half / 2^192 = 100000000000 | |
2848 | 0x0000800000000000ULL, // half / 2^192 = 800000000000 | |
2849 | 0x0008000000000000ULL, // half / 2^192 = 8000000000000 | |
2850 | 0x0040000000000000ULL, // half / 2^192 = 40000000000000 | |
2851 | 0x0200000000000000ULL // half / 2^192 = 200000000000000 | |
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 |
2857 | UINT64 mask128[] = { |
2858 | 0x0000000000000007ULL, // mask / 2^128 | |
2859 | 0x000000000000003fULL, // mask / 2^128 | |
2860 | 0x00000000000001ffULL, // mask / 2^128 | |
2861 | 0x0000000000001fffULL, // mask / 2^128 | |
2862 | 0x000000000000ffffULL, // mask / 2^128 | |
2863 | 0x000000000007ffffULL, // mask / 2^128 | |
2864 | 0x00000000007fffffULL, // mask / 2^128 | |
2865 | 0x0000000003ffffffULL, // mask / 2^128 | |
2866 | 0x000000001fffffffULL, // mask / 2^128 | |
2867 | 0x00000001ffffffffULL, // mask / 2^128 | |
2868 | 0x0000000fffffffffULL, // mask / 2^128 | |
2869 | 0x0000007fffffffffULL, // mask / 2^128 | |
2870 | 0x000007ffffffffffULL, // mask / 2^128 | |
2871 | 0x00003fffffffffffULL, // mask / 2^128 | |
2872 | 0x0001ffffffffffffULL, // mask / 2^128 | |
2873 | 0x001fffffffffffffULL, // mask / 2^128 | |
2874 | 0x00ffffffffffffffULL, // mask / 2^128 | |
2875 | 0x07ffffffffffffffULL, // mask / 2^128 | |
2876 | 0x7fffffffffffffffULL, // mask / 2^128 | |
2877 | 0x0000000000000003ULL, // mask / 2^192 | |
2878 | 0x000000000000001fULL, // mask / 2^192 | |
2879 | 0x00000000000001ffULL, // mask / 2^192 | |
2880 | 0x0000000000000fffULL, // mask / 2^192 | |
2881 | 0x0000000000007fffULL, // mask / 2^192 | |
2882 | 0x000000000007ffffULL, // mask / 2^192 | |
2883 | 0x00000000003fffffULL, // mask / 2^192 | |
2884 | 0x0000000001ffffffULL, // mask / 2^192 | |
2885 | 0x000000001fffffffULL, // mask / 2^192 | |
2886 | 0x00000000ffffffffULL, // mask / 2^192 | |
2887 | 0x00000007ffffffffULL, // mask / 2^192 | |
2888 | 0x0000003fffffffffULL, // mask / 2^192 | |
2889 | 0x000003ffffffffffULL, // mask / 2^192 | |
2890 | 0x00001fffffffffffULL, // mask / 2^192 | |
2891 | 0x0000ffffffffffffULL, // mask / 2^192 | |
2892 | 0x000fffffffffffffULL, // mask / 2^192 | |
2893 | 0x007fffffffffffffULL, // mask / 2^192 | |
2894 | 0x03ffffffffffffffULL // mask / 2^192 | |
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 | 2901 | UINT128 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 |
2978 | UINT192 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 |
3148 | unsigned int Ex192m192[] = { |
3149 | 3, // 195 - 192, Ex = 195 | |
3150 | 6, // 198 - 192, Ex = 198 | |
3151 | 9, // 201 - 192, Ex = 201 | |
3152 | 13, // 205 - 192, Ex = 205 | |
3153 | 16, // 208 - 192, Ex = 208 | |
3154 | 19, // 211 - 192, Ex = 211 | |
3155 | 23, // 215 - 192, Ex = 215 | |
3156 | 26, // 218 - 192, Ex = 218 | |
3157 | 29, // 221 - 192, Ex = 221 | |
3158 | 33, // 225 - 192, Ex = 225 | |
3159 | 36, // 228 - 192, Ex = 228 | |
3160 | 39, // 231 - 192, Ex = 231 | |
3161 | 43, // 235 - 192, Ex = 235 | |
3162 | 46, // 238 - 192, Ex = 238 | |
3163 | 49, // 241 - 192, Ex = 241 | |
3164 | 53, // 245 - 192, Ex = 245 | |
3165 | 56, // 248 - 192, Ex = 248 | |
3166 | 59, // 251 - 192, Ex = 251 | |
3167 | 63, // 255 - 192, Ex = 255 | |
3168 | 2, // 258 - 256, Ex = 258 | |
3169 | 5, // 261 - 256, Ex = 261 | |
3170 | 9, // 265 - 256, Ex = 265 | |
3171 | 12, // 268 - 256, Ex = 268 | |
3172 | 15, // 271 - 256, Ex = 271 | |
3173 | 19, // 275 - 256, Ex = 275 | |
3174 | 22, // 278 - 256, Ex = 278 | |
3175 | 25, // 281 - 256, Ex = 281 | |
3176 | 29, // 285 - 256, Ex = 285 | |
3177 | 32, // 288 - 256, Ex = 288 | |
3178 | 35, // 291 - 256, Ex = 291 | |
3179 | 38, // 294 - 256, Ex = 294 | |
3180 | 42, // 298 - 256, Ex = 298 | |
3181 | 45, // 301 - 256, Ex = 301 | |
3182 | 48, // 304 - 256, Ex = 304 | |
3183 | 52, // 308 - 256, Ex = 308 | |
3184 | 55, // 311 - 256, Ex = 311 | |
3185 | 58, // 314 - 256, Ex = 314 | |
3186 | 62, // 318 - 256, Ex = 318 | |
3187 | 1, // 321 - 320, Ex = 321 | |
3188 | 4, // 324 - 320, Ex = 324 | |
3189 | 8, // 328 - 320, Ex = 328 | |
3190 | 11, // 331 - 320, Ex = 331 | |
3191 | 14, // 334 - 320, Ex = 334 | |
3192 | 18, // 338 - 320, Ex = 338 | |
3193 | 21, // 341 - 320, Ex = 341 | |
3194 | 24, // 344 - 320, Ex = 344 | |
3195 | 28, // 348 - 320, Ex = 348 | |
3196 | 31, // 351 - 320, Ex = 351 | |
3197 | 34, // 354 - 320, Ex = 354 | |
3198 | 38, // 358 - 320, Ex = 358 | |
3199 | 41, // 361 - 320, Ex = 361 | |
3200 | 44, // 364 - 320, Ex = 364 | |
3201 | 48, // 368 - 320, Ex = 368 | |
3202 | 51, // 371 - 320, Ex = 371 | |
3203 | 54, // 374 - 320, Ex = 374 | |
3204 | 58 // 378 - 320, Ex = 378 | |
200359e8 L |
3205 | }; |
3206 | ||
b2a00c89 L |
3207 | UINT64 half192[] = { |
3208 | 0x0000000000000004ULL, // half / 2^192 = 4 | |
3209 | 0x0000000000000020ULL, // half / 2^192 = 20 | |
3210 | 0x0000000000000100ULL, // half / 2^192 = 100 | |
3211 | 0x0000000000001000ULL, // half / 2^192 = 1000 | |
3212 | 0x0000000000008000ULL, // half / 2^192 = 8000 | |
3213 | 0x0000000000040000ULL, // half / 2^192 = 40000 | |
3214 | 0x0000000000400000ULL, // half / 2^192 = 400000 | |
3215 | 0x0000000002000000ULL, // half / 2^192 = 2000000 | |
3216 | 0x0000000010000000ULL, // half / 2^192 = 10000000 | |
3217 | 0x0000000100000000ULL, // half / 2^192 = 100000000 | |
3218 | 0x0000000800000000ULL, // half / 2^192 = 800000000 | |
3219 | 0x0000004000000000ULL, // half / 2^192 = 4000000000 | |
3220 | 0x0000040000000000ULL, // half / 2^192 = 40000000000 | |
3221 | 0x0000200000000000ULL, // half / 2^192 = 200000000000 | |
3222 | 0x0001000000000000ULL, // half / 2^192 = 1000000000000 | |
3223 | 0x0010000000000000ULL, // half / 2^192 = 10000000000000 | |
3224 | 0x0080000000000000ULL, // half / 2^192 = 80000000000000 | |
3225 | 0x0400000000000000ULL, // half / 2^192 = 400000000000000 | |
3226 | 0x4000000000000000ULL, // half / 2^192 = 4000000000000000 | |
3227 | 0x0000000000000002ULL, // half / 2^256 = 2 | |
3228 | 0x0000000000000010ULL, // half / 2^256 = 10 | |
3229 | 0x0000000000000100ULL, // half / 2^256 = 100 | |
3230 | 0x0000000000000800ULL, // half / 2^256 = 800 | |
3231 | 0x0000000000004000ULL, // half / 2^256 = 4000 | |
3232 | 0x0000000000040000ULL, // half / 2^256 = 40000 | |
3233 | 0x0000000000200000ULL, // half / 2^256 = 200000 | |
3234 | 0x0000000001000000ULL, // half / 2^256 = 1000000 | |
3235 | 0x0000000010000000ULL, // half / 2^256 = 10000000 | |
3236 | 0x0000000080000000ULL, // half / 2^256 = 80000000 | |
3237 | 0x0000000400000000ULL, // half / 2^256 = 400000000 | |
3238 | 0x0000002000000000ULL, // half / 2^256 = 2000000000 | |
3239 | 0x0000020000000000ULL, // half / 2^256 = 20000000000 | |
3240 | 0x0000100000000000ULL, // half / 2^256 = 100000000000 | |
3241 | 0x0000800000000000ULL, // half / 2^256 = 800000000000 | |
3242 | 0x0008000000000000ULL, // half / 2^256 = 8000000000000 | |
3243 | 0x0040000000000000ULL, // half / 2^256 = 40000000000000 | |
3244 | 0x0200000000000000ULL, // half / 2^256 = 200000000000000 | |
3245 | 0x2000000000000000ULL, // half / 2^256 = 2000000000000000 | |
3246 | 0x0000000000000001ULL, // half / 2^320 = 1 | |
3247 | 0x0000000000000008ULL, // half / 2^320 = 8 | |
3248 | 0x0000000000000080ULL, // half / 2^320 = 80 | |
3249 | 0x0000000000000400ULL, // half / 2^320 = 400 | |
3250 | 0x0000000000002000ULL, // half / 2^320 = 2000 | |
3251 | 0x0000000000020000ULL, // half / 2^320 = 20000 | |
3252 | 0x0000000000100000ULL, // half / 2^320 = 100000 | |
3253 | 0x0000000000800000ULL, // half / 2^320 = 800000 | |
3254 | 0x0000000008000000ULL, // half / 2^320 = 8000000 | |
3255 | 0x0000000040000000ULL, // half / 2^320 = 40000000 | |
3256 | 0x0000000200000000ULL, // half / 2^320 = 200000000 | |
3257 | 0x0000002000000000ULL, // half / 2^320 = 2000000000 | |
3258 | 0x0000010000000000ULL, // half / 2^320 = 10000000000 | |
3259 | 0x0000080000000000ULL, // half / 2^320 = 80000000000 | |
3260 | 0x0000800000000000ULL, // half / 2^320 = 800000000000 | |
3261 | 0x0004000000000000ULL, // half / 2^320 = 4000000000000 | |
3262 | 0x0020000000000000ULL, // half / 2^320 = 20000000000000 | |
3263 | 0x0200000000000000ULL // half / 2^320 = 200000000000000 | |
200359e8 L |
3264 | }; |
3265 | ||
b2a00c89 L |
3266 | UINT64 mask192[] = { |
3267 | 0x0000000000000007ULL, // mask / 2^192 | |
3268 | 0x000000000000003fULL, // mask / 2^192 | |
3269 | 0x00000000000001ffULL, // mask / 2^192 | |
3270 | 0x0000000000001fffULL, // mask / 2^192 | |
3271 | 0x000000000000ffffULL, // mask / 2^192 | |
3272 | 0x000000000007ffffULL, // mask / 2^192 | |
3273 | 0x00000000007fffffULL, // mask / 2^192 | |
3274 | 0x0000000003ffffffULL, // mask / 2^192 | |
3275 | 0x000000001fffffffULL, // mask / 2^192 | |
3276 | 0x00000001ffffffffULL, // mask / 2^192 | |
3277 | 0x0000000fffffffffULL, // mask / 2^192 | |
3278 | 0x0000007fffffffffULL, // mask / 2^192 | |
3279 | 0x000007ffffffffffULL, // mask / 2^192 | |
3280 | 0x00003fffffffffffULL, // mask / 2^192 | |
3281 | 0x0001ffffffffffffULL, // mask / 2^192 | |
3282 | 0x001fffffffffffffULL, // mask / 2^192 | |
3283 | 0x00ffffffffffffffULL, // mask / 2^192 | |
3284 | 0x07ffffffffffffffULL, // mask / 2^192 | |
3285 | 0x7fffffffffffffffULL, // mask / 2^192 | |
3286 | 0x0000000000000003ULL, // mask / 2^256 | |
3287 | 0x000000000000001fULL, // mask / 2^256 | |
3288 | 0x00000000000001ffULL, // mask / 2^256 | |
3289 | 0x0000000000000fffULL, // mask / 2^256 | |
3290 | 0x0000000000007fffULL, // mask / 2^256 | |
3291 | 0x000000000007ffffULL, // mask / 2^256 | |
3292 | 0x00000000003fffffULL, // mask / 2^256 | |
3293 | 0x0000000001ffffffULL, // mask / 2^256 | |
3294 | 0x000000001fffffffULL, // mask / 2^256 | |
3295 | 0x00000000ffffffffULL, // mask / 2^256 | |
3296 | 0x00000007ffffffffULL, // mask / 2^256 | |
3297 | 0x0000003fffffffffULL, // mask / 2^256 | |
3298 | 0x000003ffffffffffULL, // mask / 2^256 | |
3299 | 0x00001fffffffffffULL, // mask / 2^256 | |
3300 | 0x0000ffffffffffffULL, // mask / 2^256 | |
3301 | 0x000fffffffffffffULL, // mask / 2^256 | |
3302 | 0x007fffffffffffffULL, // mask / 2^256 | |
3303 | 0x03ffffffffffffffULL, // mask / 2^256 | |
3304 | 0x3fffffffffffffffULL, // mask / 2^256 | |
3305 | 0x0000000000000001ULL, // mask / 2^320 | |
3306 | 0x000000000000000fULL, // mask / 2^320 | |
3307 | 0x00000000000000ffULL, // mask / 2^320 | |
3308 | 0x00000000000007ffULL, // mask / 2^320 | |
3309 | 0x0000000000003fffULL, // mask / 2^320 | |
3310 | 0x000000000003ffffULL, // mask / 2^320 | |
3311 | 0x00000000001fffffULL, // mask / 2^320 | |
3312 | 0x0000000000ffffffULL, // mask / 2^320 | |
3313 | 0x000000000fffffffULL, // mask / 2^320 | |
3314 | 0x000000007fffffffULL, // mask / 2^320 | |
3315 | 0x00000003ffffffffULL, // mask / 2^320 | |
3316 | 0x0000003fffffffffULL, // mask / 2^320 | |
3317 | 0x000001ffffffffffULL, // mask / 2^320 | |
3318 | 0x00000fffffffffffULL, // mask / 2^320 | |
3319 | 0x0000ffffffffffffULL, // mask / 2^320 | |
3320 | 0x0007ffffffffffffULL, // mask / 2^320 | |
3321 | 0x003fffffffffffffULL, // mask / 2^320 | |
3322 | 0x03ffffffffffffffULL // mask / 2^320 | |
200359e8 L |
3323 | }; |
3324 | ||
b2a00c89 L |
3325 | UINT192 ten2mxtrunc192[] = { |
3326 | {{0xccccccccccccccccULL, 0xccccccccccccccccULL, | |
3327 | 0xccccccccccccccccULL}}, | |
3328 | // (ten2mx >> 192) = cccccccccccccccccccccccccccccccccccccccccccccccc | |
3329 | {{0xd70a3d70a3d70a3dULL, 0x3d70a3d70a3d70a3ULL, | |
3330 | 0xa3d70a3d70a3d70aULL}}, | |
3331 | // (ten2mx >> 192) = a3d70a3d70a3d70a3d70a3d70a3d70a3d70a3d70a3d70a3d | |
3332 | {{0x78d4fdf3b645a1caULL, 0x645a1cac083126e9ULL, | |
3333 | 0x83126e978d4fdf3bULL}}, | |
3334 | // (ten2mx >> 192) = 83126e978d4fdf3b645a1cac083126e978d4fdf3b645a1ca | |
3335 | {{0xc154c985f06f6944ULL, 0xd3c36113404ea4a8ULL, | |
3336 | 0xd1b71758e219652bULL}}, | |
3337 | // (ten2mx >> 192) = d1b71758e219652bd3c36113404ea4a8c154c985f06f6944 | |
3338 | {{0xcddd6e04c0592103ULL, 0x0fcf80dc33721d53ULL, | |
3339 | 0xa7c5ac471b478423ULL}}, | |
3340 | // (ten2mx >> 192) = a7c5ac471b4784230fcf80dc33721d53cddd6e04c0592103 | |
3341 | {{0xd7e45803cd141a69ULL, 0xa63f9a49c2c1b10fULL, | |
3342 | 0x8637bd05af6c69b5ULL}}, | |
3343 | // (ten2mx >> 192) = 8637bd05af6c69b5a63f9a49c2c1b10fd7e45803cd141a69 | |
3344 | {{0x8ca08cd2e1b9c3dbULL, 0x3d32907604691b4cULL, | |
3345 | 0xd6bf94d5e57a42bcULL}}, | |
3346 | // (ten2mx >> 192) = d6bf94d5e57a42bc3d32907604691b4c8ca08cd2e1b9c3db | |
3347 | {{0x3d4d3d758161697cULL, 0xfdc20d2b36ba7c3dULL, | |
3348 | 0xabcc77118461cefcULL}}, | |
3349 | // (ten2mx >> 192) = abcc77118461cefcfdc20d2b36ba7c3d3d4d3d758161697c | |
3350 | {{0xfdd7645e011abac9ULL, 0x31680a88f8953030ULL, | |
3351 | 0x89705f4136b4a597ULL}}, | |
3352 | // (ten2mx >> 192) = 89705f4136b4a59731680a88f8953030fdd7645e011abac9 | |
3353 | {{0x2fbf06fcce912adcULL, 0xb573440e5a884d1bULL, | |
3354 | 0xdbe6fecebdedd5beULL}}, | |
3355 | // (ten2mx >> 192) = dbe6fecebdedd5beb573440e5a884d1b2fbf06fcce912adc | |
3356 | {{0xf2ff38ca3eda88b0ULL, 0xf78f69a51539d748ULL, | |
3357 | 0xafebff0bcb24aafeULL}}, | |
3358 | // (ten2mx >> 192) = afebff0bcb24aafef78f69a51539d748f2ff38ca3eda88b0 | |
3359 | {{0xf598fa3b657ba08dULL, 0xf93f87b7442e45d3ULL, | |
3360 | 0x8cbccc096f5088cbULL}}, | |
3361 | // (ten2mx >> 192) = 8cbccc096f5088cbf93f87b7442e45d3f598fa3b657ba08d | |
3362 | {{0x88f4c3923bf900e2ULL, 0x2865a5f206b06fb9ULL, | |
3363 | 0xe12e13424bb40e13ULL}}, | |
3364 | // (ten2mx >> 192) = e12e13424bb40e132865a5f206b06fb988f4c3923bf900e2 | |
3365 | {{0x6d909c74fcc733e8ULL, 0x538484c19ef38c94ULL, | |
3366 | 0xb424dc35095cd80fULL}}, | |
3367 | // (ten2mx >> 192) = b424dc35095cd80f538484c19ef38c946d909c74fcc733e8 | |
3368 | {{0x57a6e390ca38f653ULL, 0x0f9d37014bf60a10ULL, | |
3369 | 0x901d7cf73ab0acd9ULL}}, | |
3370 | // (ten2mx >> 192) = 901d7cf73ab0acd90f9d37014bf60a1057a6e390ca38f653 | |
3371 | {{0xbf716c1add27f085ULL, 0x4c2ebe687989a9b3ULL, | |
3372 | 0xe69594bec44de15bULL}}, | |
3373 | // (ten2mx >> 192) = e69594bec44de15b4c2ebe687989a9b3bf716c1add27f085 | |
3374 | {{0xff8df0157db98d37ULL, 0x09befeb9fad487c2ULL, | |
3375 | 0xb877aa3236a4b449ULL}}, | |
3376 | // (ten2mx >> 192) = b877aa3236a4b44909befeb9fad487c2ff8df0157db98d37 | |
3377 | {{0x32d7f344649470f9ULL, 0x3aff322e62439fcfULL, | |
3378 | 0x9392ee8e921d5d07ULL}}, | |
3379 | // (ten2mx >> 192) = 9392ee8e921d5d073aff322e62439fcf32d7f344649470f9 | |
3380 | {{0x1e2652070753e7f4ULL, 0x2b31e9e3d06c32e5ULL, | |
3381 | 0xec1e4a7db69561a5ULL}}, | |
3382 | // (ten2mx >> 192) = ec1e4a7db69561a52b31e9e3d06c32e51e2652070753e7f4 | |
3383 | {{0x181ea8059f76532aULL, 0x88f4bb1ca6bcf584ULL, | |
3384 | 0xbce5086492111aeaULL}}, | |
3385 | // (ten2mx >> 192) = bce5086492111aea88f4bb1ca6bcf584181ea8059f76532a | |
3386 | {{0x467eecd14c5ea8eeULL, 0xd3f6fc16ebca5e03ULL, | |
3387 | 0x971da05074da7beeULL}}, | |
3388 | // (ten2mx >> 192) = 971da05074da7beed3f6fc16ebca5e03467eecd14c5ea8ee | |
3389 | {{0x70cb148213caa7e4ULL, 0x5324c68b12dd6338ULL, | |
3390 | 0xf1c90080baf72cb1ULL}}, | |
3391 | // (ten2mx >> 192) = f1c90080baf72cb15324c68b12dd633870cb148213caa7e4 | |
3392 | {{0x8d6f439b43088650ULL, 0x75b7053c0f178293ULL, | |
3393 | 0xc16d9a0095928a27ULL}}, | |
3394 | // (ten2mx >> 192) = c16d9a0095928a2775b7053c0f1782938d6f439b43088650 | |
3395 | {{0xd78c3615cf3a050cULL, 0xc4926a9672793542ULL, | |
3396 | 0x9abe14cd44753b52ULL}}, | |
3397 | // (ten2mx >> 192) = 9abe14cd44753b52c4926a9672793542d78c3615cf3a050c | |
3398 | {{0x8c1389bc7ec33b47ULL, 0x3a83ddbd83f52204ULL, | |
3399 | 0xf79687aed3eec551ULL}}, | |
3400 | // (ten2mx >> 192) = f79687aed3eec5513a83ddbd83f522048c1389bc7ec33b47 | |
3401 | {{0x3cdc6e306568fc39ULL, 0x95364afe032a819dULL, | |
3402 | 0xc612062576589ddaULL}}, | |
3403 | // (ten2mx >> 192) = c612062576589dda95364afe032a819d3cdc6e306568fc39 | |
3404 | {{0xca49f1c05120c9c7ULL, 0x775ea264cf55347dULL, | |
3405 | 0x9e74d1b791e07e48ULL}}, | |
3406 | // (ten2mx >> 192) = 9e74d1b791e07e48775ea264cf55347dca49f1c05120c9c7 | |
3407 | {{0x76dcb60081ce0fa5ULL, 0x8bca9d6e188853fcULL, | |
3408 | 0xfd87b5f28300ca0dULL}}, | |
3409 | // (ten2mx >> 192) = fd87b5f28300ca0d8bca9d6e188853fc76dcb60081ce0fa5 | |
3410 | {{0x5f16f80067d80c84ULL, 0x096ee45813a04330ULL, | |
3411 | 0xcad2f7f5359a3b3eULL}}, | |
3412 | // (ten2mx >> 192) = cad2f7f5359a3b3e096ee45813a043305f16f80067d80c84 | |
3413 | {{0x18df2ccd1fe00a03ULL, 0xa1258379a94d028dULL, | |
3414 | 0xa2425ff75e14fc31ULL}}, | |
3415 | // (ten2mx >> 192) = a2425ff75e14fc31a1258379a94d028d18df2ccd1fe00a03 | |
3416 | {{0x4718f0a419800802ULL, 0x80eacf948770ced7ULL, | |
3417 | 0x81ceb32c4b43fcf4ULL}}, | |
3418 | // (ten2mx >> 192) = 81ceb32c4b43fcf480eacf948770ced74718f0a419800802 | |
3419 | {{0x0b5b1aa028ccd99eULL, 0x67de18eda5814af2ULL, | |
3420 | 0xcfb11ead453994baULL}}, | |
3421 | // (ten2mx >> 192) = cfb11ead453994ba67de18eda5814af20b5b1aa028ccd99e | |
3422 | {{0x6f7c154ced70ae18ULL, 0xecb1ad8aeacdd58eULL, | |
3423 | 0xa6274bbdd0fadd61ULL}}, | |
3424 | // (ten2mx >> 192) = a6274bbdd0fadd61ecb1ad8aeacdd58e6f7c154ced70ae18 | |
3425 | {{0xbf967770bdf3be79ULL, 0xbd5af13bef0b113eULL, | |
3426 | 0x84ec3c97da624ab4ULL}}, | |
3427 | // (ten2mx >> 192) = 84ec3c97da624ab4bd5af13bef0b113ebf967770bdf3be79 | |
3428 | {{0x65bd8be79652ca5cULL, 0x955e4ec64b44e864ULL, | |
3429 | 0xd4ad2dbfc3d07787ULL}}, | |
3430 | // (ten2mx >> 192) = d4ad2dbfc3d07787955e4ec64b44e86465bd8be79652ca5c | |
3431 | {{0xeafe098611dbd516ULL, 0xdde50bd1d5d0b9e9ULL, | |
3432 | 0xaa242499697392d2ULL}}, | |
3433 | // (ten2mx >> 192) = aa242499697392d2dde50bd1d5d0b9e9eafe098611dbd516 | |
3434 | {{0xbbfe6e04db164412ULL, 0x7e50d64177da2e54ULL, | |
3435 | 0x881cea14545c7575ULL}}, | |
3436 | // (ten2mx >> 192) = 881cea14545c75757e50d64177da2e54bbfe6e04db164412 | |
3437 | {{0x2cca49a15e8a0683ULL, 0x96e7bd358c904a21ULL, | |
3438 | 0xd9c7dced53c72255ULL}}, | |
3439 | // (ten2mx >> 192) = d9c7dced53c7225596e7bd358c904a212cca49a15e8a0683 | |
3440 | {{0x8a3b6e1ab2080536ULL, 0xabec975e0a0d081aULL, | |
3441 | 0xae397d8aa96c1b77ULL}}, | |
3442 | // (ten2mx >> 192) = ae397d8aa96c1b77abec975e0a0d081a8a3b6e1ab2080536 | |
3443 | {{0x3b62be7bc1a0042bULL, 0x2323ac4b3b3da015ULL, | |
3444 | 0x8b61313bbabce2c6ULL}}, | |
3445 | // (ten2mx >> 192) = 8b61313bbabce2c62323ac4b3b3da0153b62be7bc1a0042b | |
3446 | {{0x5f0463f935ccd378ULL, 0x6b6c46dec52f6688ULL, | |
3447 | 0xdf01e85f912e37a3ULL}}, | |
3448 | // (ten2mx >> 192) = df01e85f912e37a36b6c46dec52f66885f0463f935ccd378 | |
3449 | {{0x7f36b660f7d70f93ULL, 0x55f038b237591ed3ULL, | |
3450 | 0xb267ed1940f1c61cULL}}, | |
3451 | // (ten2mx >> 192) = b267ed1940f1c61c55f038b237591ed37f36b660f7d70f93 | |
3452 | {{0xcc2bc51a5fdf3fa9ULL, 0x77f3608e92adb242ULL, | |
3453 | 0x8eb98a7a9a5b04e3ULL}}, | |
3454 | // (ten2mx >> 192) = 8eb98a7a9a5b04e377f3608e92adb242cc2bc51a5fdf3fa9 | |
3455 | {{0xe046082a32fecc41ULL, 0x8cb89a7db77c506aULL, | |
3456 | 0xe45c10c42a2b3b05ULL}}, | |
3457 | // (ten2mx >> 192) = e45c10c42a2b3b058cb89a7db77c506ae046082a32fecc41 | |
3458 | {{0x4d04d354f598a367ULL, 0x3d607b97c5fd0d22ULL, | |
3459 | 0xb6b00d69bb55c8d1ULL}}, | |
3460 | // (ten2mx >> 192) = b6b00d69bb55c8d13d607b97c5fd0d224d04d354f598a367 | |
3461 | {{0x3d9d75dd9146e91fULL, 0xcab3961304ca70e8ULL, | |
3462 | 0x9226712162ab070dULL}}, | |
3463 | // (ten2mx >> 192) = 9226712162ab070dcab3961304ca70e83d9d75dd9146e91f | |
3464 | {{0xc8fbefc8e87174ffULL, 0xaab8f01e6e10b4a6ULL, | |
3465 | 0xe9d71b689dde71afULL}}, | |
3466 | // (ten2mx >> 192) = e9d71b689dde71afaab8f01e6e10b4a6c8fbefc8e87174ff | |
3467 | {{0x3a63263a538df733ULL, 0x5560c018580d5d52ULL, | |
3468 | 0xbb127c53b17ec159ULL}}, | |
3469 | // (ten2mx >> 192) = bb127c53b17ec1595560c018580d5d523a63263a538df733 | |
3470 | {{0x2eb5b82ea93e5f5cULL, 0xdde7001379a44aa8ULL, | |
3471 | 0x95a8637627989aadULL}}, | |
3472 | // (ten2mx >> 192) = 95a8637627989aaddde7001379a44aa82eb5b82ea93e5f5c | |
3473 | {{0x4abc59e441fd6560ULL, 0x963e66858f6d4440ULL, | |
3474 | 0xef73d256a5c0f77cULL}}, | |
3475 | // (ten2mx >> 192) = ef73d256a5c0f77c963e66858f6d44404abc59e441fd6560 | |
3476 | {{0x6efd14b69b311de6ULL, 0xde98520472bdd033ULL, | |
3477 | 0xbf8fdb78849a5f96ULL}}, | |
3478 | // (ten2mx >> 192) = bf8fdb78849a5f96de98520472bdd0336efd14b69b311de6 | |
3479 | {{0x259743c548f417ebULL, 0xe546a8038efe4029ULL, | |
3480 | 0x993fe2c6d07b7fabULL}}, | |
3481 | // (ten2mx >> 192) = 993fe2c6d07b7fabe546a8038efe4029259743c548f417eb | |
3482 | {{0x3c25393ba7ecf312ULL, 0xd53dd99f4b3066a8ULL, | |
3483 | 0xf53304714d9265dfULL}}, | |
3484 | // (ten2mx >> 192) = f53304714d9265dfd53dd99f4b3066a83c25393ba7ecf312 | |
3485 | {{0x96842dc95323f5a8ULL, 0xaa97e14c3c26b886ULL, | |
3486 | 0xc428d05aa4751e4cULL}}, | |
3487 | // (ten2mx >> 192) = c428d05aa4751e4caa97e14c3c26b88696842dc95323f5a8 | |
3488 | {{0xab9cf16ddc1cc486ULL, 0x55464dd69685606bULL, | |
3489 | 0x9ced737bb6c4183dULL}}, | |
3490 | // (ten2mx >> 192) = 9ced737bb6c4183d55464dd69685606bab9cf16ddc1cc486 | |
200359e8 | 3491 | {{0xac2e4f162cfad40aULL, 0xeed6e2f0f0d56712ULL, 0xfb158592be068d2eULL}} |
b2a00c89 | 3492 | // (ten2mx >> 192) = fb158592be068d2eeed6e2f0f0d56712ac2e4f162cfad40a |
200359e8 L |
3493 | }; |
3494 | ||
b2a00c89 | 3495 | UINT256 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 |
3798 | unsigned int Ex256m256[] = { |
3799 | 3, // 259 - 256, Ex = 259 | |
3800 | 6, // 262 - 256, Ex = 262 | |
3801 | 9, // 265 - 256, Ex = 265 | |
3802 | 13, // 269 - 256, Ex = 269 | |
3803 | 16, // 272 - 256, Ex = 272 | |
3804 | 19, // 275 - 256, Ex = 275 | |
3805 | 23, // 279 - 256, Ex = 279 | |
3806 | 26, // 282 - 256, Ex = 282 | |
3807 | 29, // 285 - 256, Ex = 285 | |
3808 | 33, // 289 - 256, Ex = 289 | |
3809 | 36, // 292 - 256, Ex = 292 | |
3810 | 39, // 295 - 256, Ex = 295 | |
3811 | 43, // 299 - 256, Ex = 299 | |
3812 | 46, // 302 - 256, Ex = 302 | |
3813 | 49, // 305 - 256, Ex = 305 | |
3814 | 53, // 309 - 256, Ex = 309 | |
3815 | 56, // 312 - 256, Ex = 312 | |
3816 | 59, // 315 - 256, Ex = 315 | |
3817 | 63, // 319 - 256, Ex = 319 | |
3818 | 2, // 322 - 320, Ex = 322 | |
3819 | 5, // 325 - 320, Ex = 325 | |
3820 | 9, // 329 - 320, Ex = 329 | |
3821 | 12, // 332 - 320, Ex = 332 | |
3822 | 15, // 335 - 320, Ex = 335 | |
3823 | 19, // 339 - 320, Ex = 339 | |
3824 | 22, // 342 - 320, Ex = 342 | |
3825 | 25, // 345 - 320, Ex = 345 | |
3826 | 29, // 349 - 320, Ex = 349 | |
3827 | 32, // 352 - 320, Ex = 352 | |
3828 | 35, // 355 - 320, Ex = 355 | |
3829 | 38, // 358 - 320, Ex = 358 | |
3830 | 42, // 362 - 320, Ex = 362 | |
3831 | 45, // 365 - 320, Ex = 365 | |
3832 | 48, // 368 - 320, Ex = 368 | |
3833 | 52, // 372 - 320, Ex = 372 | |
3834 | 55, // 375 - 320, Ex = 375 | |
3835 | 58, // 378 - 320, Ex = 378 | |
3836 | 62, // 382 - 320, Ex = 382 | |
3837 | 1, // 385 - 384, Ex = 385 | |
3838 | 4, // 388 - 384, Ex = 388 | |
3839 | 8, // 392 - 384, Ex = 392 | |
3840 | 11, // 395 - 384, Ex = 395 | |
3841 | 14, // 398 - 384, Ex = 398 | |
3842 | 18, // 402 - 384, Ex = 402 | |
3843 | 21, // 405 - 384, Ex = 405 | |
3844 | 24, // 408 - 384, Ex = 408 | |
3845 | 28, // 412 - 384, Ex = 412 | |
3846 | 31, // 415 - 384, Ex = 415 | |
3847 | 34, // 418 - 384, Ex = 418 | |
3848 | 38, // 422 - 384, Ex = 422 | |
3849 | 41, // 425 - 384, Ex = 425 | |
3850 | 44, // 428 - 384, Ex = 428 | |
3851 | 48, // 432 - 384, Ex = 432 | |
3852 | 51, // 435 - 384, Ex = 435 | |
3853 | 54, // 438 - 384, Ex = 438 | |
3854 | 58, // 442 - 384, Ex = 442 | |
3855 | 61, // 445 - 384, Ex = 445 | |
3856 | 0, // 448 - 448, Ex = 448 | |
3857 | 3, // 451 - 448, Ex = 451 | |
3858 | 7, // 455 - 448, Ex = 455 | |
3859 | 10, // 458 - 448, Ex = 458 | |
3860 | 13, // 461 - 448, Ex = 461 | |
3861 | 17, // 465 - 448, Ex = 465 | |
3862 | 20, // 468 - 448, Ex = 468 | |
3863 | 23, // 471 - 448, Ex = 471 | |
3864 | 27, // 475 - 448, Ex = 475 | |
3865 | 30, // 478 - 448, Ex = 478 | |
3866 | 33, // 481 - 448, Ex = 481 | |
3867 | 37, // 485 - 448, Ex = 485 | |
3868 | 40, // 488 - 448, Ex = 488 | |
3869 | 43, // 491 - 448, Ex = 491 | |
3870 | 47, // 495 - 448, Ex = 495 | |
3871 | 50, // 498 - 448, Ex = 498 | |
3872 | 53, // 501 - 448, Ex = 501 | |
3873 | 57 // 505 - 448, Ex = 505 | |
200359e8 L |
3874 | }; |
3875 | ||
b2a00c89 L |
3876 | UINT64 half256[] = { |
3877 | 0x0000000000000004ULL, // half / 2^256 = 4 | |
3878 | 0x0000000000000020ULL, // half / 2^256 = 20 | |
3879 | 0x0000000000000100ULL, // half / 2^256 = 100 | |
3880 | 0x0000000000001000ULL, // half / 2^256 = 1000 | |
3881 | 0x0000000000008000ULL, // half / 2^256 = 8000 | |
3882 | 0x0000000000040000ULL, // half / 2^256 = 40000 | |
3883 | 0x0000000000400000ULL, // half / 2^256 = 400000 | |
3884 | 0x0000000002000000ULL, // half / 2^256 = 2000000 | |
3885 | 0x0000000010000000ULL, // half / 2^256 = 10000000 | |
3886 | 0x0000000100000000ULL, // half / 2^256 = 100000000 | |
3887 | 0x0000000800000000ULL, // half / 2^256 = 800000000 | |
3888 | 0x0000004000000000ULL, // half / 2^256 = 4000000000 | |
3889 | 0x0000040000000000ULL, // half / 2^256 = 40000000000 | |
3890 | 0x0000200000000000ULL, // half / 2^256 = 200000000000 | |
3891 | 0x0001000000000000ULL, // half / 2^256 = 1000000000000 | |
3892 | 0x0010000000000000ULL, // half / 2^256 = 10000000000000 | |
3893 | 0x0080000000000000ULL, // half / 2^256 = 80000000000000 | |
3894 | 0x0400000000000000ULL, // half / 2^256 = 400000000000000 | |
3895 | 0x4000000000000000ULL, // half / 2^256 = 4000000000000000 | |
3896 | 0x0000000000000002ULL, // half / 2^320 = 2 | |
3897 | 0x0000000000000010ULL, // half / 2^320 = 10 | |
3898 | 0x0000000000000100ULL, // half / 2^320 = 100 | |
3899 | 0x0000000000000800ULL, // half / 2^320 = 800 | |
3900 | 0x0000000000004000ULL, // half / 2^320 = 4000 | |
3901 | 0x0000000000040000ULL, // half / 2^320 = 40000 | |
3902 | 0x0000000000200000ULL, // half / 2^320 = 200000 | |
3903 | 0x0000000001000000ULL, // half / 2^320 = 1000000 | |
3904 | 0x0000000010000000ULL, // half / 2^320 = 10000000 | |
3905 | 0x0000000080000000ULL, // half / 2^320 = 80000000 | |
3906 | 0x0000000400000000ULL, // half / 2^320 = 400000000 | |
3907 | 0x0000002000000000ULL, // half / 2^320 = 2000000000 | |
3908 | 0x0000020000000000ULL, // half / 2^320 = 20000000000 | |
3909 | 0x0000100000000000ULL, // half / 2^320 = 100000000000 | |
3910 | 0x0000800000000000ULL, // half / 2^320 = 800000000000 | |
3911 | 0x0008000000000000ULL, // half / 2^320 = 8000000000000 | |
3912 | 0x0040000000000000ULL, // half / 2^320 = 40000000000000 | |
3913 | 0x0200000000000000ULL, // half / 2^320 = 200000000000000 | |
3914 | 0x2000000000000000ULL, // half / 2^320 = 2000000000000000 | |
3915 | 0x0000000000000001ULL, // half / 2^384 = 1 | |
3916 | 0x0000000000000008ULL, // half / 2^384 = 8 | |
3917 | 0x0000000000000080ULL, // half / 2^384 = 80 | |
3918 | 0x0000000000000400ULL, // half / 2^384 = 400 | |
3919 | 0x0000000000002000ULL, // half / 2^384 = 2000 | |
3920 | 0x0000000000020000ULL, // half / 2^384 = 20000 | |
3921 | 0x0000000000100000ULL, // half / 2^384 = 100000 | |
3922 | 0x0000000000800000ULL, // half / 2^384 = 800000 | |
3923 | 0x0000000008000000ULL, // half / 2^384 = 8000000 | |
3924 | 0x0000000040000000ULL, // half / 2^384 = 40000000 | |
3925 | 0x0000000200000000ULL, // half / 2^384 = 200000000 | |
3926 | 0x0000002000000000ULL, // half / 2^384 = 2000000000 | |
3927 | 0x0000010000000000ULL, // half / 2^384 = 10000000000 | |
3928 | 0x0000080000000000ULL, // half / 2^384 = 80000000000 | |
3929 | 0x0000800000000000ULL, // half / 2^384 = 800000000000 | |
3930 | 0x0004000000000000ULL, // half / 2^384 = 4000000000000 | |
3931 | 0x0020000000000000ULL, // half / 2^384 = 20000000000000 | |
3932 | 0x0200000000000000ULL, // half / 2^384 = 200000000000000 | |
3933 | 0x1000000000000000ULL, // half / 2^384 = 1000000000000000 | |
3934 | 0x8000000000000000ULL, // half / 2^384 = 8000000000000000 | |
3935 | 0x0000000000000004ULL, // half / 2^448 = 4 | |
3936 | 0x0000000000000040ULL, // half / 2^448 = 40 | |
3937 | 0x0000000000000200ULL, // half / 2^448 = 200 | |
3938 | 0x0000000000001000ULL, // half / 2^448 = 1000 | |
3939 | 0x0000000000010000ULL, // half / 2^448 = 10000 | |
3940 | 0x0000000000080000ULL, // half / 2^448 = 80000 | |
3941 | 0x0000000000400000ULL, // half / 2^448 = 400000 | |
3942 | 0x0000000004000000ULL, // half / 2^448 = 4000000 | |
3943 | 0x0000000020000000ULL, // half / 2^448 = 20000000 | |
3944 | 0x0000000100000000ULL, // half / 2^448 = 100000000 | |
3945 | 0x0000001000000000ULL, // half / 2^448 = 1000000000 | |
3946 | 0x0000008000000000ULL, // half / 2^448 = 8000000000 | |
3947 | 0x0000040000000000ULL, // half / 2^448 = 40000000000 | |
3948 | 0x0000400000000000ULL, // half / 2^448 = 400000000000 | |
3949 | 0x0002000000000000ULL, // half / 2^448 = 2000000000000 | |
3950 | 0x0010000000000000ULL, // half / 2^448 = 10000000000000 | |
3951 | 0x0100000000000000ULL // half / 2^448 = 100000000000000 | |
200359e8 L |
3952 | }; |
3953 | ||
b2a00c89 L |
3954 | UINT64 mask256[] = { |
3955 | 0x0000000000000007ULL, // mask / 2^256 | |
3956 | 0x000000000000003fULL, // mask / 2^256 | |
3957 | 0x00000000000001ffULL, // mask / 2^256 | |
3958 | 0x0000000000001fffULL, // mask / 2^256 | |
3959 | 0x000000000000ffffULL, // mask / 2^256 | |
3960 | 0x000000000007ffffULL, // mask / 2^256 | |
3961 | 0x00000000007fffffULL, // mask / 2^256 | |
3962 | 0x0000000003ffffffULL, // mask / 2^256 | |
3963 | 0x000000001fffffffULL, // mask / 2^256 | |
3964 | 0x00000001ffffffffULL, // mask / 2^256 | |
3965 | 0x0000000fffffffffULL, // mask / 2^256 | |
3966 | 0x0000007fffffffffULL, // mask / 2^256 | |
3967 | 0x000007ffffffffffULL, // mask / 2^256 | |
3968 | 0x00003fffffffffffULL, // mask / 2^256 | |
3969 | 0x0001ffffffffffffULL, // mask / 2^256 | |
3970 | 0x001fffffffffffffULL, // mask / 2^256 | |
3971 | 0x00ffffffffffffffULL, // mask / 2^256 | |
3972 | 0x07ffffffffffffffULL, // mask / 2^256 | |
3973 | 0x7fffffffffffffffULL, // mask / 2^256 | |
3974 | 0x0000000000000003ULL, // mask / 2^320 | |
3975 | 0x000000000000001fULL, // mask / 2^320 | |
3976 | 0x00000000000001ffULL, // mask / 2^320 | |
3977 | 0x0000000000000fffULL, // mask / 2^320 | |
3978 | 0x0000000000007fffULL, // mask / 2^320 | |
3979 | 0x000000000007ffffULL, // mask / 2^320 | |
3980 | 0x00000000003fffffULL, // mask / 2^320 | |
3981 | 0x0000000001ffffffULL, // mask / 2^320 | |
3982 | 0x000000001fffffffULL, // mask / 2^320 | |
3983 | 0x00000000ffffffffULL, // mask / 2^320 | |
3984 | 0x00000007ffffffffULL, // mask / 2^320 | |
3985 | 0x0000003fffffffffULL, // mask / 2^320 | |
3986 | 0x000003ffffffffffULL, // mask / 2^320 | |
3987 | 0x00001fffffffffffULL, // mask / 2^320 | |
3988 | 0x0000ffffffffffffULL, // mask / 2^320 | |
3989 | 0x000fffffffffffffULL, // mask / 2^320 | |
3990 | 0x007fffffffffffffULL, // mask / 2^320 | |
3991 | 0x03ffffffffffffffULL, // mask / 2^320 | |
3992 | 0x3fffffffffffffffULL, // mask / 2^320 | |
3993 | 0x0000000000000001ULL, // mask / 2^384 | |
3994 | 0x000000000000000fULL, // mask / 2^384 | |
3995 | 0x00000000000000ffULL, // mask / 2^384 | |
3996 | 0x00000000000007ffULL, // mask / 2^384 | |
3997 | 0x0000000000003fffULL, // mask / 2^384 | |
3998 | 0x000000000003ffffULL, // mask / 2^384 | |
3999 | 0x00000000001fffffULL, // mask / 2^384 | |
4000 | 0x0000000000ffffffULL, // mask / 2^384 | |
4001 | 0x000000000fffffffULL, // mask / 2^384 | |
4002 | 0x000000007fffffffULL, // mask / 2^384 | |
4003 | 0x00000003ffffffffULL, // mask / 2^384 | |
4004 | 0x0000003fffffffffULL, // mask / 2^384 | |
4005 | 0x000001ffffffffffULL, // mask / 2^384 | |
4006 | 0x00000fffffffffffULL, // mask / 2^384 | |
4007 | 0x0000ffffffffffffULL, // mask / 2^384 | |
4008 | 0x0007ffffffffffffULL, // mask / 2^384 | |
4009 | 0x003fffffffffffffULL, // mask / 2^384 | |
4010 | 0x03ffffffffffffffULL, // mask / 2^384 | |
4011 | 0x1fffffffffffffffULL, // mask / 2^384 | |
4012 | 0xffffffffffffffffULL, // mask / 2^384 | |
4013 | 0x0000000000000007ULL, // mask / 2^448 | |
4014 | 0x000000000000007fULL, // mask / 2^448 | |
4015 | 0x00000000000003ffULL, // mask / 2^448 | |
4016 | 0x0000000000001fffULL, // mask / 2^448 | |
4017 | 0x000000000001ffffULL, // mask / 2^448 | |
4018 | 0x00000000000fffffULL, // mask / 2^448 | |
4019 | 0x00000000007fffffULL, // mask / 2^448 | |
4020 | 0x0000000007ffffffULL, // mask / 2^448 | |
4021 | 0x000000003fffffffULL, // mask / 2^448 | |
4022 | 0x00000001ffffffffULL, // mask / 2^448 | |
4023 | 0x0000001fffffffffULL, // mask / 2^448 | |
4024 | 0x000000ffffffffffULL, // mask / 2^448 | |
4025 | 0x000007ffffffffffULL, // mask / 2^448 | |
4026 | 0x00007fffffffffffULL, // mask / 2^448 | |
4027 | 0x0003ffffffffffffULL, // mask / 2^448 | |
4028 | 0x001fffffffffffffULL, // mask / 2^448 | |
4029 | 0x01ffffffffffffffULL // mask / 2^448 | |
200359e8 L |
4030 | }; |
4031 | ||
b2a00c89 | 4032 | UINT256 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 | }; |