1 /* mpfr_get_str -- output a floating-point number to a string
3 Copyright 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009 Free Software Foundation, Inc.
4 Contributed by the Arenaire and Cacao projects, INRIA.
5 Contributed by Alain Delplanque and Paul Zimmermann.
7 This file is part of the GNU MPFR Library.
9 The GNU MPFR Library is free software; you can redistribute it and/or modify
10 it under the terms of the GNU Lesser General Public License as published by
11 the Free Software Foundation; either version 2.1 of the License, or (at your
12 option) any later version.
14 The GNU MPFR Library is distributed in the hope that it will be useful, but
15 WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
16 or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public
17 License for more details.
19 You should have received a copy of the GNU Lesser General Public License
20 along with the GNU MPFR Library; see the file COPYING.LIB. If not, write to
21 the Free Software Foundation, Inc., 51 Franklin St, Fifth Floor, Boston,
22 MA 02110-1301, USA. */
24 #include <string.h> /* For strlen */
26 #define MPFR_NEED_LONGLONG_H
27 #include "mpfr-impl.h"
29 static int mpfr_get_str_aux (char *const, mp_exp_t
*const, mp_limb_t
*const,
30 mp_size_t
, mp_exp_t
, long, int, size_t, mp_rnd_t
);
32 /* The implicit \0 is useless, but we do not write num_to_text[36]
33 otherwise g++ complains. */
34 static const char num_to_text
[] = "0123456789abcdefghijklmnopqrstuvwxyz";
36 /* copy most important limbs of {op, n2} in {rp, n1} */
37 /* if n1 > n2 put 0 in low limbs of {rp, n1} */
38 #define MPN_COPY2(rp, n1, op, n2) \
41 MPN_COPY ((rp), (op) + (n2) - (n1), (n1)); \
45 MPN_COPY ((rp) + (n1) - (n2), (op), (n2)); \
46 MPN_ZERO ((rp), (n1) - (n2)); \
49 #define MPFR_ROUND_FAILED 3
51 /* Input: an approximation r*2^f of an real Y, with |r*2^f-Y| <= 2^(e+f).
52 Returns if possible in the string s the mantissa corresponding to
53 the integer nearest to Y, within the direction rnd, and returns the
55 n is the number of limbs of r.
56 e represents the maximal error in the approximation of Y
57 (e < 0 iff the approximation is exact, i.e. r*2^f = Y).
58 b is the wanted base (2 <= b <= 36).
59 m is the number of wanted digits in the mantissa.
60 rnd is the rounding mode.
61 It is assumed that b^(m-1) <= Y < b^(m+1), thus the returned value
62 satisfies b^(m-1) <= rnd(Y) < b^(m+1).
64 Rounding may fail for two reasons:
65 - the error is too large to determine the integer N nearest to Y
66 - either the number of digits of N in base b is too large (m+1),
67 N=2*N1+(b/2) and the rounding mode is to nearest. This can
68 only happen when b is even.
71 - the direction of rounding (-1, 0, 1) if rounding is possible
72 - -MPFR_ROUND_FAILED if rounding not possible because m+1 digits
73 - MPFR_ROUND_FAILED otherwise (too large error)
76 mpfr_get_str_aux (char *const str
, mp_exp_t
*const exp
, mp_limb_t
*const r
,
77 mp_size_t n
, mp_exp_t f
, long e
, int b
, size_t m
,
80 int dir
; /* direction of the rounded result */
81 mp_limb_t ret
= 0; /* possible carry in addition */
82 mp_size_t i0
, j0
; /* number of limbs and bits of Y */
83 unsigned char *str1
; /* string of m+2 characters */
84 size_t size_s1
; /* length of str1 */
88 MPFR_TMP_DECL(marker
);
90 /* if f > 0, then the maximal error 2^(e+f) is larger than 2 so we can't
91 determine the integer Y */
93 /* if f is too small, then r*2^f is smaller than 1 */
94 MPFR_ASSERTN(f
> (-n
* BITS_PER_MP_LIMB
));
96 MPFR_TMP_MARK(marker
);
98 /* R = 2^f sum r[i]K^(i)
99 r[i] = (r_(i,k-1)...r_(i,0))_2
100 R = sum r(i,j)2^(j+ki+f)
101 the bits from R are referenced by pairs (i,j) */
103 /* check if is possible to round r with rnd mode
104 where |r*2^f-Y| <= 2^(e+f)
105 the exponent of R is: f + n*BITS_PER_MP_LIMB
106 we must have e + f == f + n*BITS_PER_MP_LIMB - err
107 err = n*BITS_PER_MP_LIMB - e
108 R contains exactly -f bits after the integer point:
109 to determine the nearest integer, we thus need a precision of
110 n * BITS_PER_MP_LIMB + f */
112 if (exact
|| mpfr_can_round_raw (r
, n
, (mp_size_t
) 1,
113 n
* BITS_PER_MP_LIMB
- e
, GMP_RNDN
, rnd
, n
* BITS_PER_MP_LIMB
+ f
))
115 /* compute the nearest integer to R */
117 /* bit of weight 0 in R has position j0 in limb r[i0] */
118 i0
= (-f
) / BITS_PER_MP_LIMB
;
119 j0
= (-f
) % BITS_PER_MP_LIMB
;
121 ret
= mpfr_round_raw (r
+ i0
, r
, n
* BITS_PER_MP_LIMB
, 0,
122 n
* BITS_PER_MP_LIMB
+ f
, rnd
, &dir
);
123 MPFR_ASSERTD(dir
!= MPFR_ROUND_FAILED
);
125 /* warning: mpfr_round_raw_generic returns MPFR_EVEN_INEX (2) or
126 -MPFR_EVEN_INEX (-2) in case of even rounding */
128 if (ret
) /* Y is a power of 2 */
131 r
[n
- 1] = MPFR_LIMB_HIGHBIT
>> (j0
- 1);
132 else /* j0=0, necessarily i0 >= 1 otherwise f=0 and r is exact */
135 r
[--i0
] = 0; /* set to zero the new low limb */
138 else /* shift r to the right by (-f) bits (i0 already done) */
141 mpn_rshift (r
+ i0
, r
+ i0
, n
- i0
, j0
);
144 /* now the rounded value Y is in {r+i0, n-i0} */
146 /* convert r+i0 into base b */
147 str1
= (unsigned char*) MPFR_TMP_ALLOC (m
+ 3); /* need one extra character for mpn_get_str */
148 size_s1
= mpn_get_str (str1
, b
, r
+ i0
, n
- i0
);
151 MPFR_ASSERTN(size_s1
>= m
);
152 *exp
= size_s1
- m
; /* number of superfluous characters */
154 /* if size_s1 = m + 2, necessarily we have b^(m+1) as result,
155 and the result will not change */
157 /* so we have to double-round only when size_s1 = m + 1 and
158 (i) the result is inexact
159 (ii) or the last digit is non-zero */
160 if ((size_s1
== m
+ 1) && ((dir
!= 0) || (str1
[size_s1
- 1] != 0)))
165 /* round to nearest case */
168 if (2 * str1
[size_s1
- 1] == b
)
170 if (dir
== 0 && exact
) /* exact: even rounding */
172 rnd1
= ((str1
[size_s1
-2] & 1) == 0)
173 ? GMP_RNDD
: GMP_RNDU
;
177 /* otherwise we cannot round correctly: for example
178 if b=10, we might have a mantissa of
179 xxxxxxx5.00000000 which can be rounded to nearest
180 to 8 digits but not to 7 */
181 dir
= -MPFR_ROUND_FAILED
;
182 MPFR_ASSERTD(dir
!= MPFR_EVEN_INEX
);
183 goto free_and_return
;
186 else if (2 * str1
[size_s1
- 1] < b
)
192 /* now rnd1 is either GMP_RNDD or GMP_RNDZ -> truncate
193 or GMP_RDNU -> round towards infinity */
195 /* round away from zero */
196 if (rnd1
== GMP_RNDU
)
198 if (str1
[size_s1
- 1] != 0)
200 /* the carry cannot propagate to the whole string, since
201 Y = x*b^(m-g) < 2*b^m <= b^(m+1)-b
202 where x is the input float */
203 MPFR_ASSERTN(size_s1
>= 2);
205 while (str1
[i
] == b
- 1)
214 /* round toward zero (truncate) */
219 /* copy str1 into str and convert to characters (digits and
220 lowercase letters from the source character set) */
221 for (i
= 0; i
< m
; i
++)
222 str
[i
] = num_to_text
[(int) str1
[i
]]; /* str1[i] is an unsigned char */
225 /* mpfr_can_round_raw failed: rounding is not possible */
228 dir
= MPFR_ROUND_FAILED
; /* should be different from MPFR_EVEN_INEX */
229 MPFR_ASSERTD(dir
!= MPFR_EVEN_INEX
);
233 MPFR_TMP_FREE(marker
);
238 /***************************************************************************
239 * __gmpfr_l2b[b-2][0] is a 23-bit upper approximation to log(b)/log(2), *
240 * __gmpfr_l2b[b-2][1] is a 76-bit upper approximation to log(2)/log(b). *
241 * The following code is generated by tests/tl2b (with an argument). *
242 ***************************************************************************/
245 #elif BITS_PER_MP_LIMB == 16
246 const mp_limb_t mpfr_l2b_2_0__tab
[] = { 0x0000, 0x8000 };
247 #elif BITS_PER_MP_LIMB == 32
248 const mp_limb_t mpfr_l2b_2_0__tab
[] = { 0x80000000 };
249 #elif BITS_PER_MP_LIMB == 64
250 const mp_limb_t mpfr_l2b_2_0__tab
[] = { 0x8000000000000000 };
251 #elif BITS_PER_MP_LIMB == 96
252 const mp_limb_t mpfr_l2b_2_0__tab
[] = { 0x800000000000000000000000 };
253 #elif BITS_PER_MP_LIMB == 128
254 const mp_limb_t mpfr_l2b_2_0__tab
[] = { 0x80000000000000000000000000000000 };
255 #elif BITS_PER_MP_LIMB == 256
256 const mp_limb_t mpfr_l2b_2_0__tab
[] = { 0x8000000000000000000000000000000000000000000000000000000000000000 };
260 #elif BITS_PER_MP_LIMB == 16
261 const mp_limb_t mpfr_l2b_2_1__tab
[] = { 0x0000, 0x0000, 0x0000, 0x0000, 0x8000 };
262 #elif BITS_PER_MP_LIMB == 32
263 const mp_limb_t mpfr_l2b_2_1__tab
[] = { 0x00000000, 0x00000000, 0x80000000 };
264 #elif BITS_PER_MP_LIMB == 64
265 const mp_limb_t mpfr_l2b_2_1__tab
[] = { 0x0000000000000000, 0x8000000000000000 };
266 #elif BITS_PER_MP_LIMB == 96
267 const mp_limb_t mpfr_l2b_2_1__tab
[] = { 0x800000000000000000000000 };
268 #elif BITS_PER_MP_LIMB == 128
269 const mp_limb_t mpfr_l2b_2_1__tab
[] = { 0x80000000000000000000000000000000 };
270 #elif BITS_PER_MP_LIMB == 256
271 const mp_limb_t mpfr_l2b_2_1__tab
[] = { 0x8000000000000000000000000000000000000000000000000000000000000000 };
275 #elif BITS_PER_MP_LIMB == 16
276 const mp_limb_t mpfr_l2b_3_0__tab
[] = { 0x0e00, 0xcae0 };
277 #elif BITS_PER_MP_LIMB == 32
278 const mp_limb_t mpfr_l2b_3_0__tab
[] = { 0xcae00e00 };
279 #elif BITS_PER_MP_LIMB == 64
280 const mp_limb_t mpfr_l2b_3_0__tab
[] = { 0xcae00e0000000000 };
281 #elif BITS_PER_MP_LIMB == 96
282 const mp_limb_t mpfr_l2b_3_0__tab
[] = { 0xcae00e000000000000000000 };
283 #elif BITS_PER_MP_LIMB == 128
284 const mp_limb_t mpfr_l2b_3_0__tab
[] = { 0xcae00e00000000000000000000000000 };
285 #elif BITS_PER_MP_LIMB == 256
286 const mp_limb_t mpfr_l2b_3_0__tab
[] = { 0xcae00e0000000000000000000000000000000000000000000000000000000000 };
290 #elif BITS_PER_MP_LIMB == 16
291 const mp_limb_t mpfr_l2b_3_1__tab
[] = { 0x0448, 0xe94e, 0xa9a9, 0x9cc1, 0xa184 };
292 #elif BITS_PER_MP_LIMB == 32
293 const mp_limb_t mpfr_l2b_3_1__tab
[] = { 0x04480000, 0xa9a9e94e, 0xa1849cc1 };
294 #elif BITS_PER_MP_LIMB == 64
295 const mp_limb_t mpfr_l2b_3_1__tab
[] = { 0x0448000000000000, 0xa1849cc1a9a9e94e };
296 #elif BITS_PER_MP_LIMB == 96
297 const mp_limb_t mpfr_l2b_3_1__tab
[] = { 0xa1849cc1a9a9e94e04480000 };
298 #elif BITS_PER_MP_LIMB == 128
299 const mp_limb_t mpfr_l2b_3_1__tab
[] = { 0xa1849cc1a9a9e94e0448000000000000 };
300 #elif BITS_PER_MP_LIMB == 256
301 const mp_limb_t mpfr_l2b_3_1__tab
[] = { 0xa1849cc1a9a9e94e044800000000000000000000000000000000000000000000 };
305 #elif BITS_PER_MP_LIMB == 16
306 const mp_limb_t mpfr_l2b_4_0__tab
[] = { 0x0000, 0x8000 };
307 #elif BITS_PER_MP_LIMB == 32
308 const mp_limb_t mpfr_l2b_4_0__tab
[] = { 0x80000000 };
309 #elif BITS_PER_MP_LIMB == 64
310 const mp_limb_t mpfr_l2b_4_0__tab
[] = { 0x8000000000000000 };
311 #elif BITS_PER_MP_LIMB == 96
312 const mp_limb_t mpfr_l2b_4_0__tab
[] = { 0x800000000000000000000000 };
313 #elif BITS_PER_MP_LIMB == 128
314 const mp_limb_t mpfr_l2b_4_0__tab
[] = { 0x80000000000000000000000000000000 };
315 #elif BITS_PER_MP_LIMB == 256
316 const mp_limb_t mpfr_l2b_4_0__tab
[] = { 0x8000000000000000000000000000000000000000000000000000000000000000 };
320 #elif BITS_PER_MP_LIMB == 16
321 const mp_limb_t mpfr_l2b_4_1__tab
[] = { 0x0000, 0x0000, 0x0000, 0x0000, 0x8000 };
322 #elif BITS_PER_MP_LIMB == 32
323 const mp_limb_t mpfr_l2b_4_1__tab
[] = { 0x00000000, 0x00000000, 0x80000000 };
324 #elif BITS_PER_MP_LIMB == 64
325 const mp_limb_t mpfr_l2b_4_1__tab
[] = { 0x0000000000000000, 0x8000000000000000 };
326 #elif BITS_PER_MP_LIMB == 96
327 const mp_limb_t mpfr_l2b_4_1__tab
[] = { 0x800000000000000000000000 };
328 #elif BITS_PER_MP_LIMB == 128
329 const mp_limb_t mpfr_l2b_4_1__tab
[] = { 0x80000000000000000000000000000000 };
330 #elif BITS_PER_MP_LIMB == 256
331 const mp_limb_t mpfr_l2b_4_1__tab
[] = { 0x8000000000000000000000000000000000000000000000000000000000000000 };
335 #elif BITS_PER_MP_LIMB == 16
336 const mp_limb_t mpfr_l2b_5_0__tab
[] = { 0x7a00, 0x949a };
337 #elif BITS_PER_MP_LIMB == 32
338 const mp_limb_t mpfr_l2b_5_0__tab
[] = { 0x949a7a00 };
339 #elif BITS_PER_MP_LIMB == 64
340 const mp_limb_t mpfr_l2b_5_0__tab
[] = { 0x949a7a0000000000 };
341 #elif BITS_PER_MP_LIMB == 96
342 const mp_limb_t mpfr_l2b_5_0__tab
[] = { 0x949a7a000000000000000000 };
343 #elif BITS_PER_MP_LIMB == 128
344 const mp_limb_t mpfr_l2b_5_0__tab
[] = { 0x949a7a00000000000000000000000000 };
345 #elif BITS_PER_MP_LIMB == 256
346 const mp_limb_t mpfr_l2b_5_0__tab
[] = { 0x949a7a0000000000000000000000000000000000000000000000000000000000 };
350 #elif BITS_PER_MP_LIMB == 16
351 const mp_limb_t mpfr_l2b_5_1__tab
[] = { 0x67b8, 0x9728, 0x287b, 0xa348, 0xdc81 };
352 #elif BITS_PER_MP_LIMB == 32
353 const mp_limb_t mpfr_l2b_5_1__tab
[] = { 0x67b80000, 0x287b9728, 0xdc81a348 };
354 #elif BITS_PER_MP_LIMB == 64
355 const mp_limb_t mpfr_l2b_5_1__tab
[] = { 0x67b8000000000000, 0xdc81a348287b9728 };
356 #elif BITS_PER_MP_LIMB == 96
357 const mp_limb_t mpfr_l2b_5_1__tab
[] = { 0xdc81a348287b972867b80000 };
358 #elif BITS_PER_MP_LIMB == 128
359 const mp_limb_t mpfr_l2b_5_1__tab
[] = { 0xdc81a348287b972867b8000000000000 };
360 #elif BITS_PER_MP_LIMB == 256
361 const mp_limb_t mpfr_l2b_5_1__tab
[] = { 0xdc81a348287b972867b800000000000000000000000000000000000000000000 };
365 #elif BITS_PER_MP_LIMB == 16
366 const mp_limb_t mpfr_l2b_6_0__tab
[] = { 0x0800, 0xa570 };
367 #elif BITS_PER_MP_LIMB == 32
368 const mp_limb_t mpfr_l2b_6_0__tab
[] = { 0xa5700800 };
369 #elif BITS_PER_MP_LIMB == 64
370 const mp_limb_t mpfr_l2b_6_0__tab
[] = { 0xa570080000000000 };
371 #elif BITS_PER_MP_LIMB == 96
372 const mp_limb_t mpfr_l2b_6_0__tab
[] = { 0xa57008000000000000000000 };
373 #elif BITS_PER_MP_LIMB == 128
374 const mp_limb_t mpfr_l2b_6_0__tab
[] = { 0xa5700800000000000000000000000000 };
375 #elif BITS_PER_MP_LIMB == 256
376 const mp_limb_t mpfr_l2b_6_0__tab
[] = { 0xa570080000000000000000000000000000000000000000000000000000000000 };
380 #elif BITS_PER_MP_LIMB == 16
381 const mp_limb_t mpfr_l2b_6_1__tab
[] = { 0xff10, 0xf9e9, 0xe054, 0x9236, 0xc611 };
382 #elif BITS_PER_MP_LIMB == 32
383 const mp_limb_t mpfr_l2b_6_1__tab
[] = { 0xff100000, 0xe054f9e9, 0xc6119236 };
384 #elif BITS_PER_MP_LIMB == 64
385 const mp_limb_t mpfr_l2b_6_1__tab
[] = { 0xff10000000000000, 0xc6119236e054f9e9 };
386 #elif BITS_PER_MP_LIMB == 96
387 const mp_limb_t mpfr_l2b_6_1__tab
[] = { 0xc6119236e054f9e9ff100000 };
388 #elif BITS_PER_MP_LIMB == 128
389 const mp_limb_t mpfr_l2b_6_1__tab
[] = { 0xc6119236e054f9e9ff10000000000000 };
390 #elif BITS_PER_MP_LIMB == 256
391 const mp_limb_t mpfr_l2b_6_1__tab
[] = { 0xc6119236e054f9e9ff1000000000000000000000000000000000000000000000 };
395 #elif BITS_PER_MP_LIMB == 16
396 const mp_limb_t mpfr_l2b_7_0__tab
[] = { 0xb400, 0xb3ab };
397 #elif BITS_PER_MP_LIMB == 32
398 const mp_limb_t mpfr_l2b_7_0__tab
[] = { 0xb3abb400 };
399 #elif BITS_PER_MP_LIMB == 64
400 const mp_limb_t mpfr_l2b_7_0__tab
[] = { 0xb3abb40000000000 };
401 #elif BITS_PER_MP_LIMB == 96
402 const mp_limb_t mpfr_l2b_7_0__tab
[] = { 0xb3abb4000000000000000000 };
403 #elif BITS_PER_MP_LIMB == 128
404 const mp_limb_t mpfr_l2b_7_0__tab
[] = { 0xb3abb400000000000000000000000000 };
405 #elif BITS_PER_MP_LIMB == 256
406 const mp_limb_t mpfr_l2b_7_0__tab
[] = { 0xb3abb40000000000000000000000000000000000000000000000000000000000 };
410 #elif BITS_PER_MP_LIMB == 16
411 const mp_limb_t mpfr_l2b_7_1__tab
[] = { 0x37b8, 0xa711, 0x754d, 0xc9d6, 0xb660 };
412 #elif BITS_PER_MP_LIMB == 32
413 const mp_limb_t mpfr_l2b_7_1__tab
[] = { 0x37b80000, 0x754da711, 0xb660c9d6 };
414 #elif BITS_PER_MP_LIMB == 64
415 const mp_limb_t mpfr_l2b_7_1__tab
[] = { 0x37b8000000000000, 0xb660c9d6754da711 };
416 #elif BITS_PER_MP_LIMB == 96
417 const mp_limb_t mpfr_l2b_7_1__tab
[] = { 0xb660c9d6754da71137b80000 };
418 #elif BITS_PER_MP_LIMB == 128
419 const mp_limb_t mpfr_l2b_7_1__tab
[] = { 0xb660c9d6754da71137b8000000000000 };
420 #elif BITS_PER_MP_LIMB == 256
421 const mp_limb_t mpfr_l2b_7_1__tab
[] = { 0xb660c9d6754da71137b800000000000000000000000000000000000000000000 };
425 #elif BITS_PER_MP_LIMB == 16
426 const mp_limb_t mpfr_l2b_8_0__tab
[] = { 0x0000, 0xc000 };
427 #elif BITS_PER_MP_LIMB == 32
428 const mp_limb_t mpfr_l2b_8_0__tab
[] = { 0xc0000000 };
429 #elif BITS_PER_MP_LIMB == 64
430 const mp_limb_t mpfr_l2b_8_0__tab
[] = { 0xc000000000000000 };
431 #elif BITS_PER_MP_LIMB == 96
432 const mp_limb_t mpfr_l2b_8_0__tab
[] = { 0xc00000000000000000000000 };
433 #elif BITS_PER_MP_LIMB == 128
434 const mp_limb_t mpfr_l2b_8_0__tab
[] = { 0xc0000000000000000000000000000000 };
435 #elif BITS_PER_MP_LIMB == 256
436 const mp_limb_t mpfr_l2b_8_0__tab
[] = { 0xc000000000000000000000000000000000000000000000000000000000000000 };
440 #elif BITS_PER_MP_LIMB == 16
441 const mp_limb_t mpfr_l2b_8_1__tab
[] = { 0xaab0, 0xaaaa, 0xaaaa, 0xaaaa, 0xaaaa };
442 #elif BITS_PER_MP_LIMB == 32
443 const mp_limb_t mpfr_l2b_8_1__tab
[] = { 0xaab00000, 0xaaaaaaaa, 0xaaaaaaaa };
444 #elif BITS_PER_MP_LIMB == 64
445 const mp_limb_t mpfr_l2b_8_1__tab
[] = { 0xaab0000000000000, 0xaaaaaaaaaaaaaaaa };
446 #elif BITS_PER_MP_LIMB == 96
447 const mp_limb_t mpfr_l2b_8_1__tab
[] = { 0xaaaaaaaaaaaaaaaaaab00000 };
448 #elif BITS_PER_MP_LIMB == 128
449 const mp_limb_t mpfr_l2b_8_1__tab
[] = { 0xaaaaaaaaaaaaaaaaaab0000000000000 };
450 #elif BITS_PER_MP_LIMB == 256
451 const mp_limb_t mpfr_l2b_8_1__tab
[] = { 0xaaaaaaaaaaaaaaaaaab000000000000000000000000000000000000000000000 };
455 #elif BITS_PER_MP_LIMB == 16
456 const mp_limb_t mpfr_l2b_9_0__tab
[] = { 0x0e00, 0xcae0 };
457 #elif BITS_PER_MP_LIMB == 32
458 const mp_limb_t mpfr_l2b_9_0__tab
[] = { 0xcae00e00 };
459 #elif BITS_PER_MP_LIMB == 64
460 const mp_limb_t mpfr_l2b_9_0__tab
[] = { 0xcae00e0000000000 };
461 #elif BITS_PER_MP_LIMB == 96
462 const mp_limb_t mpfr_l2b_9_0__tab
[] = { 0xcae00e000000000000000000 };
463 #elif BITS_PER_MP_LIMB == 128
464 const mp_limb_t mpfr_l2b_9_0__tab
[] = { 0xcae00e00000000000000000000000000 };
465 #elif BITS_PER_MP_LIMB == 256
466 const mp_limb_t mpfr_l2b_9_0__tab
[] = { 0xcae00e0000000000000000000000000000000000000000000000000000000000 };
470 #elif BITS_PER_MP_LIMB == 16
471 const mp_limb_t mpfr_l2b_9_1__tab
[] = { 0x0448, 0xe94e, 0xa9a9, 0x9cc1, 0xa184 };
472 #elif BITS_PER_MP_LIMB == 32
473 const mp_limb_t mpfr_l2b_9_1__tab
[] = { 0x04480000, 0xa9a9e94e, 0xa1849cc1 };
474 #elif BITS_PER_MP_LIMB == 64
475 const mp_limb_t mpfr_l2b_9_1__tab
[] = { 0x0448000000000000, 0xa1849cc1a9a9e94e };
476 #elif BITS_PER_MP_LIMB == 96
477 const mp_limb_t mpfr_l2b_9_1__tab
[] = { 0xa1849cc1a9a9e94e04480000 };
478 #elif BITS_PER_MP_LIMB == 128
479 const mp_limb_t mpfr_l2b_9_1__tab
[] = { 0xa1849cc1a9a9e94e0448000000000000 };
480 #elif BITS_PER_MP_LIMB == 256
481 const mp_limb_t mpfr_l2b_9_1__tab
[] = { 0xa1849cc1a9a9e94e044800000000000000000000000000000000000000000000 };
485 #elif BITS_PER_MP_LIMB == 16
486 const mp_limb_t mpfr_l2b_10_0__tab
[] = { 0x7a00, 0xd49a };
487 #elif BITS_PER_MP_LIMB == 32
488 const mp_limb_t mpfr_l2b_10_0__tab
[] = { 0xd49a7a00 };
489 #elif BITS_PER_MP_LIMB == 64
490 const mp_limb_t mpfr_l2b_10_0__tab
[] = { 0xd49a7a0000000000 };
491 #elif BITS_PER_MP_LIMB == 96
492 const mp_limb_t mpfr_l2b_10_0__tab
[] = { 0xd49a7a000000000000000000 };
493 #elif BITS_PER_MP_LIMB == 128
494 const mp_limb_t mpfr_l2b_10_0__tab
[] = { 0xd49a7a00000000000000000000000000 };
495 #elif BITS_PER_MP_LIMB == 256
496 const mp_limb_t mpfr_l2b_10_0__tab
[] = { 0xd49a7a0000000000000000000000000000000000000000000000000000000000 };
500 #elif BITS_PER_MP_LIMB == 16
501 const mp_limb_t mpfr_l2b_10_1__tab
[] = { 0x8f90, 0xf798, 0xfbcf, 0x9a84, 0x9a20 };
502 #elif BITS_PER_MP_LIMB == 32
503 const mp_limb_t mpfr_l2b_10_1__tab
[] = { 0x8f900000, 0xfbcff798, 0x9a209a84 };
504 #elif BITS_PER_MP_LIMB == 64
505 const mp_limb_t mpfr_l2b_10_1__tab
[] = { 0x8f90000000000000, 0x9a209a84fbcff798 };
506 #elif BITS_PER_MP_LIMB == 96
507 const mp_limb_t mpfr_l2b_10_1__tab
[] = { 0x9a209a84fbcff7988f900000 };
508 #elif BITS_PER_MP_LIMB == 128
509 const mp_limb_t mpfr_l2b_10_1__tab
[] = { 0x9a209a84fbcff7988f90000000000000 };
510 #elif BITS_PER_MP_LIMB == 256
511 const mp_limb_t mpfr_l2b_10_1__tab
[] = { 0x9a209a84fbcff7988f9000000000000000000000000000000000000000000000 };
515 #elif BITS_PER_MP_LIMB == 16
516 const mp_limb_t mpfr_l2b_11_0__tab
[] = { 0x5400, 0xdd67 };
517 #elif BITS_PER_MP_LIMB == 32
518 const mp_limb_t mpfr_l2b_11_0__tab
[] = { 0xdd675400 };
519 #elif BITS_PER_MP_LIMB == 64
520 const mp_limb_t mpfr_l2b_11_0__tab
[] = { 0xdd67540000000000 };
521 #elif BITS_PER_MP_LIMB == 96
522 const mp_limb_t mpfr_l2b_11_0__tab
[] = { 0xdd6754000000000000000000 };
523 #elif BITS_PER_MP_LIMB == 128
524 const mp_limb_t mpfr_l2b_11_0__tab
[] = { 0xdd675400000000000000000000000000 };
525 #elif BITS_PER_MP_LIMB == 256
526 const mp_limb_t mpfr_l2b_11_0__tab
[] = { 0xdd67540000000000000000000000000000000000000000000000000000000000 };
530 #elif BITS_PER_MP_LIMB == 16
531 const mp_limb_t mpfr_l2b_11_1__tab
[] = { 0xe170, 0x9d10, 0xeb22, 0x4e0e, 0x9400 };
532 #elif BITS_PER_MP_LIMB == 32
533 const mp_limb_t mpfr_l2b_11_1__tab
[] = { 0xe1700000, 0xeb229d10, 0x94004e0e };
534 #elif BITS_PER_MP_LIMB == 64
535 const mp_limb_t mpfr_l2b_11_1__tab
[] = { 0xe170000000000000, 0x94004e0eeb229d10 };
536 #elif BITS_PER_MP_LIMB == 96
537 const mp_limb_t mpfr_l2b_11_1__tab
[] = { 0x94004e0eeb229d10e1700000 };
538 #elif BITS_PER_MP_LIMB == 128
539 const mp_limb_t mpfr_l2b_11_1__tab
[] = { 0x94004e0eeb229d10e170000000000000 };
540 #elif BITS_PER_MP_LIMB == 256
541 const mp_limb_t mpfr_l2b_11_1__tab
[] = { 0x94004e0eeb229d10e17000000000000000000000000000000000000000000000 };
545 #elif BITS_PER_MP_LIMB == 16
546 const mp_limb_t mpfr_l2b_12_0__tab
[] = { 0x0800, 0xe570 };
547 #elif BITS_PER_MP_LIMB == 32
548 const mp_limb_t mpfr_l2b_12_0__tab
[] = { 0xe5700800 };
549 #elif BITS_PER_MP_LIMB == 64
550 const mp_limb_t mpfr_l2b_12_0__tab
[] = { 0xe570080000000000 };
551 #elif BITS_PER_MP_LIMB == 96
552 const mp_limb_t mpfr_l2b_12_0__tab
[] = { 0xe57008000000000000000000 };
553 #elif BITS_PER_MP_LIMB == 128
554 const mp_limb_t mpfr_l2b_12_0__tab
[] = { 0xe5700800000000000000000000000000 };
555 #elif BITS_PER_MP_LIMB == 256
556 const mp_limb_t mpfr_l2b_12_0__tab
[] = { 0xe570080000000000000000000000000000000000000000000000000000000000 };
560 #elif BITS_PER_MP_LIMB == 16
561 const mp_limb_t mpfr_l2b_12_1__tab
[] = { 0xfe28, 0x1c24, 0x0b03, 0x9c1a, 0x8ed1 };
562 #elif BITS_PER_MP_LIMB == 32
563 const mp_limb_t mpfr_l2b_12_1__tab
[] = { 0xfe280000, 0x0b031c24, 0x8ed19c1a };
564 #elif BITS_PER_MP_LIMB == 64
565 const mp_limb_t mpfr_l2b_12_1__tab
[] = { 0xfe28000000000000, 0x8ed19c1a0b031c24 };
566 #elif BITS_PER_MP_LIMB == 96
567 const mp_limb_t mpfr_l2b_12_1__tab
[] = { 0x8ed19c1a0b031c24fe280000 };
568 #elif BITS_PER_MP_LIMB == 128
569 const mp_limb_t mpfr_l2b_12_1__tab
[] = { 0x8ed19c1a0b031c24fe28000000000000 };
570 #elif BITS_PER_MP_LIMB == 256
571 const mp_limb_t mpfr_l2b_12_1__tab
[] = { 0x8ed19c1a0b031c24fe2800000000000000000000000000000000000000000000 };
575 #elif BITS_PER_MP_LIMB == 16
576 const mp_limb_t mpfr_l2b_13_0__tab
[] = { 0x0200, 0xecd4 };
577 #elif BITS_PER_MP_LIMB == 32
578 const mp_limb_t mpfr_l2b_13_0__tab
[] = { 0xecd40200 };
579 #elif BITS_PER_MP_LIMB == 64
580 const mp_limb_t mpfr_l2b_13_0__tab
[] = { 0xecd4020000000000 };
581 #elif BITS_PER_MP_LIMB == 96
582 const mp_limb_t mpfr_l2b_13_0__tab
[] = { 0xecd402000000000000000000 };
583 #elif BITS_PER_MP_LIMB == 128
584 const mp_limb_t mpfr_l2b_13_0__tab
[] = { 0xecd40200000000000000000000000000 };
585 #elif BITS_PER_MP_LIMB == 256
586 const mp_limb_t mpfr_l2b_13_0__tab
[] = { 0xecd4020000000000000000000000000000000000000000000000000000000000 };
590 #elif BITS_PER_MP_LIMB == 16
591 const mp_limb_t mpfr_l2b_13_1__tab
[] = { 0x57f8, 0xf7b4, 0xcb20, 0xa7c6, 0x8a5c };
592 #elif BITS_PER_MP_LIMB == 32
593 const mp_limb_t mpfr_l2b_13_1__tab
[] = { 0x57f80000, 0xcb20f7b4, 0x8a5ca7c6 };
594 #elif BITS_PER_MP_LIMB == 64
595 const mp_limb_t mpfr_l2b_13_1__tab
[] = { 0x57f8000000000000, 0x8a5ca7c6cb20f7b4 };
596 #elif BITS_PER_MP_LIMB == 96
597 const mp_limb_t mpfr_l2b_13_1__tab
[] = { 0x8a5ca7c6cb20f7b457f80000 };
598 #elif BITS_PER_MP_LIMB == 128
599 const mp_limb_t mpfr_l2b_13_1__tab
[] = { 0x8a5ca7c6cb20f7b457f8000000000000 };
600 #elif BITS_PER_MP_LIMB == 256
601 const mp_limb_t mpfr_l2b_13_1__tab
[] = { 0x8a5ca7c6cb20f7b457f800000000000000000000000000000000000000000000 };
605 #elif BITS_PER_MP_LIMB == 16
606 const mp_limb_t mpfr_l2b_14_0__tab
[] = { 0xb400, 0xf3ab };
607 #elif BITS_PER_MP_LIMB == 32
608 const mp_limb_t mpfr_l2b_14_0__tab
[] = { 0xf3abb400 };
609 #elif BITS_PER_MP_LIMB == 64
610 const mp_limb_t mpfr_l2b_14_0__tab
[] = { 0xf3abb40000000000 };
611 #elif BITS_PER_MP_LIMB == 96
612 const mp_limb_t mpfr_l2b_14_0__tab
[] = { 0xf3abb4000000000000000000 };
613 #elif BITS_PER_MP_LIMB == 128
614 const mp_limb_t mpfr_l2b_14_0__tab
[] = { 0xf3abb400000000000000000000000000 };
615 #elif BITS_PER_MP_LIMB == 256
616 const mp_limb_t mpfr_l2b_14_0__tab
[] = { 0xf3abb40000000000000000000000000000000000000000000000000000000000 };
620 #elif BITS_PER_MP_LIMB == 16
621 const mp_limb_t mpfr_l2b_14_1__tab
[] = { 0x85a8, 0x5cab, 0x96b5, 0xfff6, 0x8679 };
622 #elif BITS_PER_MP_LIMB == 32
623 const mp_limb_t mpfr_l2b_14_1__tab
[] = { 0x85a80000, 0x96b55cab, 0x8679fff6 };
624 #elif BITS_PER_MP_LIMB == 64
625 const mp_limb_t mpfr_l2b_14_1__tab
[] = { 0x85a8000000000000, 0x8679fff696b55cab };
626 #elif BITS_PER_MP_LIMB == 96
627 const mp_limb_t mpfr_l2b_14_1__tab
[] = { 0x8679fff696b55cab85a80000 };
628 #elif BITS_PER_MP_LIMB == 128
629 const mp_limb_t mpfr_l2b_14_1__tab
[] = { 0x8679fff696b55cab85a8000000000000 };
630 #elif BITS_PER_MP_LIMB == 256
631 const mp_limb_t mpfr_l2b_14_1__tab
[] = { 0x8679fff696b55cab85a800000000000000000000000000000000000000000000 };
635 #elif BITS_PER_MP_LIMB == 16
636 const mp_limb_t mpfr_l2b_15_0__tab
[] = { 0x8000, 0xfa0a };
637 #elif BITS_PER_MP_LIMB == 32
638 const mp_limb_t mpfr_l2b_15_0__tab
[] = { 0xfa0a8000 };
639 #elif BITS_PER_MP_LIMB == 64
640 const mp_limb_t mpfr_l2b_15_0__tab
[] = { 0xfa0a800000000000 };
641 #elif BITS_PER_MP_LIMB == 96
642 const mp_limb_t mpfr_l2b_15_0__tab
[] = { 0xfa0a80000000000000000000 };
643 #elif BITS_PER_MP_LIMB == 128
644 const mp_limb_t mpfr_l2b_15_0__tab
[] = { 0xfa0a8000000000000000000000000000 };
645 #elif BITS_PER_MP_LIMB == 256
646 const mp_limb_t mpfr_l2b_15_0__tab
[] = { 0xfa0a800000000000000000000000000000000000000000000000000000000000 };
650 #elif BITS_PER_MP_LIMB == 16
651 const mp_limb_t mpfr_l2b_15_1__tab
[] = { 0x6f80, 0xa6aa, 0x69f0, 0xee23, 0x830c };
652 #elif BITS_PER_MP_LIMB == 32
653 const mp_limb_t mpfr_l2b_15_1__tab
[] = { 0x6f800000, 0x69f0a6aa, 0x830cee23 };
654 #elif BITS_PER_MP_LIMB == 64
655 const mp_limb_t mpfr_l2b_15_1__tab
[] = { 0x6f80000000000000, 0x830cee2369f0a6aa };
656 #elif BITS_PER_MP_LIMB == 96
657 const mp_limb_t mpfr_l2b_15_1__tab
[] = { 0x830cee2369f0a6aa6f800000 };
658 #elif BITS_PER_MP_LIMB == 128
659 const mp_limb_t mpfr_l2b_15_1__tab
[] = { 0x830cee2369f0a6aa6f80000000000000 };
660 #elif BITS_PER_MP_LIMB == 256
661 const mp_limb_t mpfr_l2b_15_1__tab
[] = { 0x830cee2369f0a6aa6f8000000000000000000000000000000000000000000000 };
665 #elif BITS_PER_MP_LIMB == 16
666 const mp_limb_t mpfr_l2b_16_0__tab
[] = { 0x0000, 0x8000 };
667 #elif BITS_PER_MP_LIMB == 32
668 const mp_limb_t mpfr_l2b_16_0__tab
[] = { 0x80000000 };
669 #elif BITS_PER_MP_LIMB == 64
670 const mp_limb_t mpfr_l2b_16_0__tab
[] = { 0x8000000000000000 };
671 #elif BITS_PER_MP_LIMB == 96
672 const mp_limb_t mpfr_l2b_16_0__tab
[] = { 0x800000000000000000000000 };
673 #elif BITS_PER_MP_LIMB == 128
674 const mp_limb_t mpfr_l2b_16_0__tab
[] = { 0x80000000000000000000000000000000 };
675 #elif BITS_PER_MP_LIMB == 256
676 const mp_limb_t mpfr_l2b_16_0__tab
[] = { 0x8000000000000000000000000000000000000000000000000000000000000000 };
680 #elif BITS_PER_MP_LIMB == 16
681 const mp_limb_t mpfr_l2b_16_1__tab
[] = { 0x0000, 0x0000, 0x0000, 0x0000, 0x8000 };
682 #elif BITS_PER_MP_LIMB == 32
683 const mp_limb_t mpfr_l2b_16_1__tab
[] = { 0x00000000, 0x00000000, 0x80000000 };
684 #elif BITS_PER_MP_LIMB == 64
685 const mp_limb_t mpfr_l2b_16_1__tab
[] = { 0x0000000000000000, 0x8000000000000000 };
686 #elif BITS_PER_MP_LIMB == 96
687 const mp_limb_t mpfr_l2b_16_1__tab
[] = { 0x800000000000000000000000 };
688 #elif BITS_PER_MP_LIMB == 128
689 const mp_limb_t mpfr_l2b_16_1__tab
[] = { 0x80000000000000000000000000000000 };
690 #elif BITS_PER_MP_LIMB == 256
691 const mp_limb_t mpfr_l2b_16_1__tab
[] = { 0x8000000000000000000000000000000000000000000000000000000000000000 };
695 #elif BITS_PER_MP_LIMB == 16
696 const mp_limb_t mpfr_l2b_17_0__tab
[] = { 0x8000, 0x82cc };
697 #elif BITS_PER_MP_LIMB == 32
698 const mp_limb_t mpfr_l2b_17_0__tab
[] = { 0x82cc8000 };
699 #elif BITS_PER_MP_LIMB == 64
700 const mp_limb_t mpfr_l2b_17_0__tab
[] = { 0x82cc800000000000 };
701 #elif BITS_PER_MP_LIMB == 96
702 const mp_limb_t mpfr_l2b_17_0__tab
[] = { 0x82cc80000000000000000000 };
703 #elif BITS_PER_MP_LIMB == 128
704 const mp_limb_t mpfr_l2b_17_0__tab
[] = { 0x82cc8000000000000000000000000000 };
705 #elif BITS_PER_MP_LIMB == 256
706 const mp_limb_t mpfr_l2b_17_0__tab
[] = { 0x82cc800000000000000000000000000000000000000000000000000000000000 };
710 #elif BITS_PER_MP_LIMB == 16
711 const mp_limb_t mpfr_l2b_17_1__tab
[] = { 0x8720, 0x259b, 0x62c4, 0xabf5, 0xfa85 };
712 #elif BITS_PER_MP_LIMB == 32
713 const mp_limb_t mpfr_l2b_17_1__tab
[] = { 0x87200000, 0x62c4259b, 0xfa85abf5 };
714 #elif BITS_PER_MP_LIMB == 64
715 const mp_limb_t mpfr_l2b_17_1__tab
[] = { 0x8720000000000000, 0xfa85abf562c4259b };
716 #elif BITS_PER_MP_LIMB == 96
717 const mp_limb_t mpfr_l2b_17_1__tab
[] = { 0xfa85abf562c4259b87200000 };
718 #elif BITS_PER_MP_LIMB == 128
719 const mp_limb_t mpfr_l2b_17_1__tab
[] = { 0xfa85abf562c4259b8720000000000000 };
720 #elif BITS_PER_MP_LIMB == 256
721 const mp_limb_t mpfr_l2b_17_1__tab
[] = { 0xfa85abf562c4259b872000000000000000000000000000000000000000000000 };
725 #elif BITS_PER_MP_LIMB == 16
726 const mp_limb_t mpfr_l2b_18_0__tab
[] = { 0x0800, 0x8570 };
727 #elif BITS_PER_MP_LIMB == 32
728 const mp_limb_t mpfr_l2b_18_0__tab
[] = { 0x85700800 };
729 #elif BITS_PER_MP_LIMB == 64
730 const mp_limb_t mpfr_l2b_18_0__tab
[] = { 0x8570080000000000 };
731 #elif BITS_PER_MP_LIMB == 96
732 const mp_limb_t mpfr_l2b_18_0__tab
[] = { 0x857008000000000000000000 };
733 #elif BITS_PER_MP_LIMB == 128
734 const mp_limb_t mpfr_l2b_18_0__tab
[] = { 0x85700800000000000000000000000000 };
735 #elif BITS_PER_MP_LIMB == 256
736 const mp_limb_t mpfr_l2b_18_0__tab
[] = { 0x8570080000000000000000000000000000000000000000000000000000000000 };
740 #elif BITS_PER_MP_LIMB == 16
741 const mp_limb_t mpfr_l2b_18_1__tab
[] = { 0x3698, 0x1378, 0x5537, 0x6634, 0xf591 };
742 #elif BITS_PER_MP_LIMB == 32
743 const mp_limb_t mpfr_l2b_18_1__tab
[] = { 0x36980000, 0x55371378, 0xf5916634 };
744 #elif BITS_PER_MP_LIMB == 64
745 const mp_limb_t mpfr_l2b_18_1__tab
[] = { 0x3698000000000000, 0xf591663455371378 };
746 #elif BITS_PER_MP_LIMB == 96
747 const mp_limb_t mpfr_l2b_18_1__tab
[] = { 0xf59166345537137836980000 };
748 #elif BITS_PER_MP_LIMB == 128
749 const mp_limb_t mpfr_l2b_18_1__tab
[] = { 0xf5916634553713783698000000000000 };
750 #elif BITS_PER_MP_LIMB == 256
751 const mp_limb_t mpfr_l2b_18_1__tab
[] = { 0xf591663455371378369800000000000000000000000000000000000000000000 };
755 #elif BITS_PER_MP_LIMB == 16
756 const mp_limb_t mpfr_l2b_19_0__tab
[] = { 0x0600, 0x87ef };
757 #elif BITS_PER_MP_LIMB == 32
758 const mp_limb_t mpfr_l2b_19_0__tab
[] = { 0x87ef0600 };
759 #elif BITS_PER_MP_LIMB == 64
760 const mp_limb_t mpfr_l2b_19_0__tab
[] = { 0x87ef060000000000 };
761 #elif BITS_PER_MP_LIMB == 96
762 const mp_limb_t mpfr_l2b_19_0__tab
[] = { 0x87ef06000000000000000000 };
763 #elif BITS_PER_MP_LIMB == 128
764 const mp_limb_t mpfr_l2b_19_0__tab
[] = { 0x87ef0600000000000000000000000000 };
765 #elif BITS_PER_MP_LIMB == 256
766 const mp_limb_t mpfr_l2b_19_0__tab
[] = { 0x87ef060000000000000000000000000000000000000000000000000000000000 };
770 #elif BITS_PER_MP_LIMB == 16
771 const mp_limb_t mpfr_l2b_19_1__tab
[] = { 0x0db8, 0x558c, 0x62ed, 0x08c0, 0xf10f };
772 #elif BITS_PER_MP_LIMB == 32
773 const mp_limb_t mpfr_l2b_19_1__tab
[] = { 0x0db80000, 0x62ed558c, 0xf10f08c0 };
774 #elif BITS_PER_MP_LIMB == 64
775 const mp_limb_t mpfr_l2b_19_1__tab
[] = { 0x0db8000000000000, 0xf10f08c062ed558c };
776 #elif BITS_PER_MP_LIMB == 96
777 const mp_limb_t mpfr_l2b_19_1__tab
[] = { 0xf10f08c062ed558c0db80000 };
778 #elif BITS_PER_MP_LIMB == 128
779 const mp_limb_t mpfr_l2b_19_1__tab
[] = { 0xf10f08c062ed558c0db8000000000000 };
780 #elif BITS_PER_MP_LIMB == 256
781 const mp_limb_t mpfr_l2b_19_1__tab
[] = { 0xf10f08c062ed558c0db800000000000000000000000000000000000000000000 };
785 #elif BITS_PER_MP_LIMB == 16
786 const mp_limb_t mpfr_l2b_20_0__tab
[] = { 0x3e00, 0x8a4d };
787 #elif BITS_PER_MP_LIMB == 32
788 const mp_limb_t mpfr_l2b_20_0__tab
[] = { 0x8a4d3e00 };
789 #elif BITS_PER_MP_LIMB == 64
790 const mp_limb_t mpfr_l2b_20_0__tab
[] = { 0x8a4d3e0000000000 };
791 #elif BITS_PER_MP_LIMB == 96
792 const mp_limb_t mpfr_l2b_20_0__tab
[] = { 0x8a4d3e000000000000000000 };
793 #elif BITS_PER_MP_LIMB == 128
794 const mp_limb_t mpfr_l2b_20_0__tab
[] = { 0x8a4d3e00000000000000000000000000 };
795 #elif BITS_PER_MP_LIMB == 256
796 const mp_limb_t mpfr_l2b_20_0__tab
[] = { 0x8a4d3e0000000000000000000000000000000000000000000000000000000000 };
800 #elif BITS_PER_MP_LIMB == 16
801 const mp_limb_t mpfr_l2b_20_1__tab
[] = { 0x0b40, 0xa71c, 0x1cc1, 0x690a, 0xecee };
802 #elif BITS_PER_MP_LIMB == 32
803 const mp_limb_t mpfr_l2b_20_1__tab
[] = { 0x0b400000, 0x1cc1a71c, 0xecee690a };
804 #elif BITS_PER_MP_LIMB == 64
805 const mp_limb_t mpfr_l2b_20_1__tab
[] = { 0x0b40000000000000, 0xecee690a1cc1a71c };
806 #elif BITS_PER_MP_LIMB == 96
807 const mp_limb_t mpfr_l2b_20_1__tab
[] = { 0xecee690a1cc1a71c0b400000 };
808 #elif BITS_PER_MP_LIMB == 128
809 const mp_limb_t mpfr_l2b_20_1__tab
[] = { 0xecee690a1cc1a71c0b40000000000000 };
810 #elif BITS_PER_MP_LIMB == 256
811 const mp_limb_t mpfr_l2b_20_1__tab
[] = { 0xecee690a1cc1a71c0b4000000000000000000000000000000000000000000000 };
815 #elif BITS_PER_MP_LIMB == 16
816 const mp_limb_t mpfr_l2b_21_0__tab
[] = { 0xde00, 0x8c8d };
817 #elif BITS_PER_MP_LIMB == 32
818 const mp_limb_t mpfr_l2b_21_0__tab
[] = { 0x8c8dde00 };
819 #elif BITS_PER_MP_LIMB == 64
820 const mp_limb_t mpfr_l2b_21_0__tab
[] = { 0x8c8dde0000000000 };
821 #elif BITS_PER_MP_LIMB == 96
822 const mp_limb_t mpfr_l2b_21_0__tab
[] = { 0x8c8dde000000000000000000 };
823 #elif BITS_PER_MP_LIMB == 128
824 const mp_limb_t mpfr_l2b_21_0__tab
[] = { 0x8c8dde00000000000000000000000000 };
825 #elif BITS_PER_MP_LIMB == 256
826 const mp_limb_t mpfr_l2b_21_0__tab
[] = { 0x8c8dde0000000000000000000000000000000000000000000000000000000000 };
830 #elif BITS_PER_MP_LIMB == 16
831 const mp_limb_t mpfr_l2b_21_1__tab
[] = { 0x4108, 0x6b26, 0xb3d0, 0x63c1, 0xe922 };
832 #elif BITS_PER_MP_LIMB == 32
833 const mp_limb_t mpfr_l2b_21_1__tab
[] = { 0x41080000, 0xb3d06b26, 0xe92263c1 };
834 #elif BITS_PER_MP_LIMB == 64
835 const mp_limb_t mpfr_l2b_21_1__tab
[] = { 0x4108000000000000, 0xe92263c1b3d06b26 };
836 #elif BITS_PER_MP_LIMB == 96
837 const mp_limb_t mpfr_l2b_21_1__tab
[] = { 0xe92263c1b3d06b2641080000 };
838 #elif BITS_PER_MP_LIMB == 128
839 const mp_limb_t mpfr_l2b_21_1__tab
[] = { 0xe92263c1b3d06b264108000000000000 };
840 #elif BITS_PER_MP_LIMB == 256
841 const mp_limb_t mpfr_l2b_21_1__tab
[] = { 0xe92263c1b3d06b26410800000000000000000000000000000000000000000000 };
845 #elif BITS_PER_MP_LIMB == 16
846 const mp_limb_t mpfr_l2b_22_0__tab
[] = { 0xaa00, 0x8eb3 };
847 #elif BITS_PER_MP_LIMB == 32
848 const mp_limb_t mpfr_l2b_22_0__tab
[] = { 0x8eb3aa00 };
849 #elif BITS_PER_MP_LIMB == 64
850 const mp_limb_t mpfr_l2b_22_0__tab
[] = { 0x8eb3aa0000000000 };
851 #elif BITS_PER_MP_LIMB == 96
852 const mp_limb_t mpfr_l2b_22_0__tab
[] = { 0x8eb3aa000000000000000000 };
853 #elif BITS_PER_MP_LIMB == 128
854 const mp_limb_t mpfr_l2b_22_0__tab
[] = { 0x8eb3aa00000000000000000000000000 };
855 #elif BITS_PER_MP_LIMB == 256
856 const mp_limb_t mpfr_l2b_22_0__tab
[] = { 0x8eb3aa0000000000000000000000000000000000000000000000000000000000 };
860 #elif BITS_PER_MP_LIMB == 16
861 const mp_limb_t mpfr_l2b_22_1__tab
[] = { 0xdbe8, 0xf061, 0x60b9, 0x2c4d, 0xe5a0 };
862 #elif BITS_PER_MP_LIMB == 32
863 const mp_limb_t mpfr_l2b_22_1__tab
[] = { 0xdbe80000, 0x60b9f061, 0xe5a02c4d };
864 #elif BITS_PER_MP_LIMB == 64
865 const mp_limb_t mpfr_l2b_22_1__tab
[] = { 0xdbe8000000000000, 0xe5a02c4d60b9f061 };
866 #elif BITS_PER_MP_LIMB == 96
867 const mp_limb_t mpfr_l2b_22_1__tab
[] = { 0xe5a02c4d60b9f061dbe80000 };
868 #elif BITS_PER_MP_LIMB == 128
869 const mp_limb_t mpfr_l2b_22_1__tab
[] = { 0xe5a02c4d60b9f061dbe8000000000000 };
870 #elif BITS_PER_MP_LIMB == 256
871 const mp_limb_t mpfr_l2b_22_1__tab
[] = { 0xe5a02c4d60b9f061dbe800000000000000000000000000000000000000000000 };
875 #elif BITS_PER_MP_LIMB == 16
876 const mp_limb_t mpfr_l2b_23_0__tab
[] = { 0x0600, 0x90c1 };
877 #elif BITS_PER_MP_LIMB == 32
878 const mp_limb_t mpfr_l2b_23_0__tab
[] = { 0x90c10600 };
879 #elif BITS_PER_MP_LIMB == 64
880 const mp_limb_t mpfr_l2b_23_0__tab
[] = { 0x90c1060000000000 };
881 #elif BITS_PER_MP_LIMB == 96
882 const mp_limb_t mpfr_l2b_23_0__tab
[] = { 0x90c106000000000000000000 };
883 #elif BITS_PER_MP_LIMB == 128
884 const mp_limb_t mpfr_l2b_23_0__tab
[] = { 0x90c10600000000000000000000000000 };
885 #elif BITS_PER_MP_LIMB == 256
886 const mp_limb_t mpfr_l2b_23_0__tab
[] = { 0x90c1060000000000000000000000000000000000000000000000000000000000 };
890 #elif BITS_PER_MP_LIMB == 16
891 const mp_limb_t mpfr_l2b_23_1__tab
[] = { 0xc3e0, 0x586a, 0x46b9, 0xcadd, 0xe25e };
892 #elif BITS_PER_MP_LIMB == 32
893 const mp_limb_t mpfr_l2b_23_1__tab
[] = { 0xc3e00000, 0x46b9586a, 0xe25ecadd };
894 #elif BITS_PER_MP_LIMB == 64
895 const mp_limb_t mpfr_l2b_23_1__tab
[] = { 0xc3e0000000000000, 0xe25ecadd46b9586a };
896 #elif BITS_PER_MP_LIMB == 96
897 const mp_limb_t mpfr_l2b_23_1__tab
[] = { 0xe25ecadd46b9586ac3e00000 };
898 #elif BITS_PER_MP_LIMB == 128
899 const mp_limb_t mpfr_l2b_23_1__tab
[] = { 0xe25ecadd46b9586ac3e0000000000000 };
900 #elif BITS_PER_MP_LIMB == 256
901 const mp_limb_t mpfr_l2b_23_1__tab
[] = { 0xe25ecadd46b9586ac3e000000000000000000000000000000000000000000000 };
905 #elif BITS_PER_MP_LIMB == 16
906 const mp_limb_t mpfr_l2b_24_0__tab
[] = { 0x0400, 0x92b8 };
907 #elif BITS_PER_MP_LIMB == 32
908 const mp_limb_t mpfr_l2b_24_0__tab
[] = { 0x92b80400 };
909 #elif BITS_PER_MP_LIMB == 64
910 const mp_limb_t mpfr_l2b_24_0__tab
[] = { 0x92b8040000000000 };
911 #elif BITS_PER_MP_LIMB == 96
912 const mp_limb_t mpfr_l2b_24_0__tab
[] = { 0x92b804000000000000000000 };
913 #elif BITS_PER_MP_LIMB == 128
914 const mp_limb_t mpfr_l2b_24_0__tab
[] = { 0x92b80400000000000000000000000000 };
915 #elif BITS_PER_MP_LIMB == 256
916 const mp_limb_t mpfr_l2b_24_0__tab
[] = { 0x92b8040000000000000000000000000000000000000000000000000000000000 };
920 #elif BITS_PER_MP_LIMB == 16
921 const mp_limb_t mpfr_l2b_24_1__tab
[] = { 0x3668, 0x7263, 0xc7c6, 0xbb44, 0xdf56 };
922 #elif BITS_PER_MP_LIMB == 32
923 const mp_limb_t mpfr_l2b_24_1__tab
[] = { 0x36680000, 0xc7c67263, 0xdf56bb44 };
924 #elif BITS_PER_MP_LIMB == 64
925 const mp_limb_t mpfr_l2b_24_1__tab
[] = { 0x3668000000000000, 0xdf56bb44c7c67263 };
926 #elif BITS_PER_MP_LIMB == 96
927 const mp_limb_t mpfr_l2b_24_1__tab
[] = { 0xdf56bb44c7c6726336680000 };
928 #elif BITS_PER_MP_LIMB == 128
929 const mp_limb_t mpfr_l2b_24_1__tab
[] = { 0xdf56bb44c7c672633668000000000000 };
930 #elif BITS_PER_MP_LIMB == 256
931 const mp_limb_t mpfr_l2b_24_1__tab
[] = { 0xdf56bb44c7c67263366800000000000000000000000000000000000000000000 };
935 #elif BITS_PER_MP_LIMB == 16
936 const mp_limb_t mpfr_l2b_25_0__tab
[] = { 0x7a00, 0x949a };
937 #elif BITS_PER_MP_LIMB == 32
938 const mp_limb_t mpfr_l2b_25_0__tab
[] = { 0x949a7a00 };
939 #elif BITS_PER_MP_LIMB == 64
940 const mp_limb_t mpfr_l2b_25_0__tab
[] = { 0x949a7a0000000000 };
941 #elif BITS_PER_MP_LIMB == 96
942 const mp_limb_t mpfr_l2b_25_0__tab
[] = { 0x949a7a000000000000000000 };
943 #elif BITS_PER_MP_LIMB == 128
944 const mp_limb_t mpfr_l2b_25_0__tab
[] = { 0x949a7a00000000000000000000000000 };
945 #elif BITS_PER_MP_LIMB == 256
946 const mp_limb_t mpfr_l2b_25_0__tab
[] = { 0x949a7a0000000000000000000000000000000000000000000000000000000000 };
950 #elif BITS_PER_MP_LIMB == 16
951 const mp_limb_t mpfr_l2b_25_1__tab
[] = { 0x67b8, 0x9728, 0x287b, 0xa348, 0xdc81 };
952 #elif BITS_PER_MP_LIMB == 32
953 const mp_limb_t mpfr_l2b_25_1__tab
[] = { 0x67b80000, 0x287b9728, 0xdc81a348 };
954 #elif BITS_PER_MP_LIMB == 64
955 const mp_limb_t mpfr_l2b_25_1__tab
[] = { 0x67b8000000000000, 0xdc81a348287b9728 };
956 #elif BITS_PER_MP_LIMB == 96
957 const mp_limb_t mpfr_l2b_25_1__tab
[] = { 0xdc81a348287b972867b80000 };
958 #elif BITS_PER_MP_LIMB == 128
959 const mp_limb_t mpfr_l2b_25_1__tab
[] = { 0xdc81a348287b972867b8000000000000 };
960 #elif BITS_PER_MP_LIMB == 256
961 const mp_limb_t mpfr_l2b_25_1__tab
[] = { 0xdc81a348287b972867b800000000000000000000000000000000000000000000 };
965 #elif BITS_PER_MP_LIMB == 16
966 const mp_limb_t mpfr_l2b_26_0__tab
[] = { 0x0200, 0x966a };
967 #elif BITS_PER_MP_LIMB == 32
968 const mp_limb_t mpfr_l2b_26_0__tab
[] = { 0x966a0200 };
969 #elif BITS_PER_MP_LIMB == 64
970 const mp_limb_t mpfr_l2b_26_0__tab
[] = { 0x966a020000000000 };
971 #elif BITS_PER_MP_LIMB == 96
972 const mp_limb_t mpfr_l2b_26_0__tab
[] = { 0x966a02000000000000000000 };
973 #elif BITS_PER_MP_LIMB == 128
974 const mp_limb_t mpfr_l2b_26_0__tab
[] = { 0x966a0200000000000000000000000000 };
975 #elif BITS_PER_MP_LIMB == 256
976 const mp_limb_t mpfr_l2b_26_0__tab
[] = { 0x966a020000000000000000000000000000000000000000000000000000000000 };
980 #elif BITS_PER_MP_LIMB == 16
981 const mp_limb_t mpfr_l2b_26_1__tab
[] = { 0x6458, 0x78a4, 0x7583, 0x19f9, 0xd9da };
982 #elif BITS_PER_MP_LIMB == 32
983 const mp_limb_t mpfr_l2b_26_1__tab
[] = { 0x64580000, 0x758378a4, 0xd9da19f9 };
984 #elif BITS_PER_MP_LIMB == 64
985 const mp_limb_t mpfr_l2b_26_1__tab
[] = { 0x6458000000000000, 0xd9da19f9758378a4 };
986 #elif BITS_PER_MP_LIMB == 96
987 const mp_limb_t mpfr_l2b_26_1__tab
[] = { 0xd9da19f9758378a464580000 };
988 #elif BITS_PER_MP_LIMB == 128
989 const mp_limb_t mpfr_l2b_26_1__tab
[] = { 0xd9da19f9758378a46458000000000000 };
990 #elif BITS_PER_MP_LIMB == 256
991 const mp_limb_t mpfr_l2b_26_1__tab
[] = { 0xd9da19f9758378a4645800000000000000000000000000000000000000000000 };
995 #elif BITS_PER_MP_LIMB == 16
996 const mp_limb_t mpfr_l2b_27_0__tab
[] = { 0x0a00, 0x9828 };
997 #elif BITS_PER_MP_LIMB == 32
998 const mp_limb_t mpfr_l2b_27_0__tab
[] = { 0x98280a00 };
999 #elif BITS_PER_MP_LIMB == 64
1000 const mp_limb_t mpfr_l2b_27_0__tab
[] = { 0x98280a0000000000 };
1001 #elif BITS_PER_MP_LIMB == 96
1002 const mp_limb_t mpfr_l2b_27_0__tab
[] = { 0x98280a000000000000000000 };
1003 #elif BITS_PER_MP_LIMB == 128
1004 const mp_limb_t mpfr_l2b_27_0__tab
[] = { 0x98280a00000000000000000000000000 };
1005 #elif BITS_PER_MP_LIMB == 256
1006 const mp_limb_t mpfr_l2b_27_0__tab
[] = { 0x98280a0000000000000000000000000000000000000000000000000000000000 };
1010 #elif BITS_PER_MP_LIMB == 16
1011 const mp_limb_t mpfr_l2b_27_1__tab
[] = { 0x5b08, 0xe1bd, 0xe237, 0x7bac, 0xd75b };
1012 #elif BITS_PER_MP_LIMB == 32
1013 const mp_limb_t mpfr_l2b_27_1__tab
[] = { 0x5b080000, 0xe237e1bd, 0xd75b7bac };
1014 #elif BITS_PER_MP_LIMB == 64
1015 const mp_limb_t mpfr_l2b_27_1__tab
[] = { 0x5b08000000000000, 0xd75b7bace237e1bd };
1016 #elif BITS_PER_MP_LIMB == 96
1017 const mp_limb_t mpfr_l2b_27_1__tab
[] = { 0xd75b7bace237e1bd5b080000 };
1018 #elif BITS_PER_MP_LIMB == 128
1019 const mp_limb_t mpfr_l2b_27_1__tab
[] = { 0xd75b7bace237e1bd5b08000000000000 };
1020 #elif BITS_PER_MP_LIMB == 256
1021 const mp_limb_t mpfr_l2b_27_1__tab
[] = { 0xd75b7bace237e1bd5b0800000000000000000000000000000000000000000000 };
1025 #elif BITS_PER_MP_LIMB == 16
1026 const mp_limb_t mpfr_l2b_28_0__tab
[] = { 0xda00, 0x99d5 };
1027 #elif BITS_PER_MP_LIMB == 32
1028 const mp_limb_t mpfr_l2b_28_0__tab
[] = { 0x99d5da00 };
1029 #elif BITS_PER_MP_LIMB == 64
1030 const mp_limb_t mpfr_l2b_28_0__tab
[] = { 0x99d5da0000000000 };
1031 #elif BITS_PER_MP_LIMB == 96
1032 const mp_limb_t mpfr_l2b_28_0__tab
[] = { 0x99d5da000000000000000000 };
1033 #elif BITS_PER_MP_LIMB == 128
1034 const mp_limb_t mpfr_l2b_28_0__tab
[] = { 0x99d5da00000000000000000000000000 };
1035 #elif BITS_PER_MP_LIMB == 256
1036 const mp_limb_t mpfr_l2b_28_0__tab
[] = { 0x99d5da0000000000000000000000000000000000000000000000000000000000 };
1040 #elif BITS_PER_MP_LIMB == 16
1041 const mp_limb_t mpfr_l2b_28_1__tab
[] = { 0xdeb8, 0xe8b8, 0x71df, 0xc758, 0xd501 };
1042 #elif BITS_PER_MP_LIMB == 32
1043 const mp_limb_t mpfr_l2b_28_1__tab
[] = { 0xdeb80000, 0x71dfe8b8, 0xd501c758 };
1044 #elif BITS_PER_MP_LIMB == 64
1045 const mp_limb_t mpfr_l2b_28_1__tab
[] = { 0xdeb8000000000000, 0xd501c75871dfe8b8 };
1046 #elif BITS_PER_MP_LIMB == 96
1047 const mp_limb_t mpfr_l2b_28_1__tab
[] = { 0xd501c75871dfe8b8deb80000 };
1048 #elif BITS_PER_MP_LIMB == 128
1049 const mp_limb_t mpfr_l2b_28_1__tab
[] = { 0xd501c75871dfe8b8deb8000000000000 };
1050 #elif BITS_PER_MP_LIMB == 256
1051 const mp_limb_t mpfr_l2b_28_1__tab
[] = { 0xd501c75871dfe8b8deb800000000000000000000000000000000000000000000 };
1055 #elif BITS_PER_MP_LIMB == 16
1056 const mp_limb_t mpfr_l2b_29_0__tab
[] = { 0x9600, 0x9b74 };
1057 #elif BITS_PER_MP_LIMB == 32
1058 const mp_limb_t mpfr_l2b_29_0__tab
[] = { 0x9b749600 };
1059 #elif BITS_PER_MP_LIMB == 64
1060 const mp_limb_t mpfr_l2b_29_0__tab
[] = { 0x9b74960000000000 };
1061 #elif BITS_PER_MP_LIMB == 96
1062 const mp_limb_t mpfr_l2b_29_0__tab
[] = { 0x9b7496000000000000000000 };
1063 #elif BITS_PER_MP_LIMB == 128
1064 const mp_limb_t mpfr_l2b_29_0__tab
[] = { 0x9b749600000000000000000000000000 };
1065 #elif BITS_PER_MP_LIMB == 256
1066 const mp_limb_t mpfr_l2b_29_0__tab
[] = { 0x9b74960000000000000000000000000000000000000000000000000000000000 };
1070 #elif BITS_PER_MP_LIMB == 16
1071 const mp_limb_t mpfr_l2b_29_1__tab
[] = { 0xccc8, 0x62b3, 0x9c6c, 0x8315, 0xd2c9 };
1072 #elif BITS_PER_MP_LIMB == 32
1073 const mp_limb_t mpfr_l2b_29_1__tab
[] = { 0xccc80000, 0x9c6c62b3, 0xd2c98315 };
1074 #elif BITS_PER_MP_LIMB == 64
1075 const mp_limb_t mpfr_l2b_29_1__tab
[] = { 0xccc8000000000000, 0xd2c983159c6c62b3 };
1076 #elif BITS_PER_MP_LIMB == 96
1077 const mp_limb_t mpfr_l2b_29_1__tab
[] = { 0xd2c983159c6c62b3ccc80000 };
1078 #elif BITS_PER_MP_LIMB == 128
1079 const mp_limb_t mpfr_l2b_29_1__tab
[] = { 0xd2c983159c6c62b3ccc8000000000000 };
1080 #elif BITS_PER_MP_LIMB == 256
1081 const mp_limb_t mpfr_l2b_29_1__tab
[] = { 0xd2c983159c6c62b3ccc800000000000000000000000000000000000000000000 };
1085 #elif BITS_PER_MP_LIMB == 16
1086 const mp_limb_t mpfr_l2b_30_0__tab
[] = { 0x4000, 0x9d05 };
1087 #elif BITS_PER_MP_LIMB == 32
1088 const mp_limb_t mpfr_l2b_30_0__tab
[] = { 0x9d054000 };
1089 #elif BITS_PER_MP_LIMB == 64
1090 const mp_limb_t mpfr_l2b_30_0__tab
[] = { 0x9d05400000000000 };
1091 #elif BITS_PER_MP_LIMB == 96
1092 const mp_limb_t mpfr_l2b_30_0__tab
[] = { 0x9d0540000000000000000000 };
1093 #elif BITS_PER_MP_LIMB == 128
1094 const mp_limb_t mpfr_l2b_30_0__tab
[] = { 0x9d054000000000000000000000000000 };
1095 #elif BITS_PER_MP_LIMB == 256
1096 const mp_limb_t mpfr_l2b_30_0__tab
[] = { 0x9d05400000000000000000000000000000000000000000000000000000000000 };
1100 #elif BITS_PER_MP_LIMB == 16
1101 const mp_limb_t mpfr_l2b_30_1__tab
[] = { 0x3588, 0x1732, 0x5cad, 0xa619, 0xd0af };
1102 #elif BITS_PER_MP_LIMB == 32
1103 const mp_limb_t mpfr_l2b_30_1__tab
[] = { 0x35880000, 0x5cad1732, 0xd0afa619 };
1104 #elif BITS_PER_MP_LIMB == 64
1105 const mp_limb_t mpfr_l2b_30_1__tab
[] = { 0x3588000000000000, 0xd0afa6195cad1732 };
1106 #elif BITS_PER_MP_LIMB == 96
1107 const mp_limb_t mpfr_l2b_30_1__tab
[] = { 0xd0afa6195cad173235880000 };
1108 #elif BITS_PER_MP_LIMB == 128
1109 const mp_limb_t mpfr_l2b_30_1__tab
[] = { 0xd0afa6195cad17323588000000000000 };
1110 #elif BITS_PER_MP_LIMB == 256
1111 const mp_limb_t mpfr_l2b_30_1__tab
[] = { 0xd0afa6195cad1732358800000000000000000000000000000000000000000000 };
1115 #elif BITS_PER_MP_LIMB == 16
1116 const mp_limb_t mpfr_l2b_31_0__tab
[] = { 0xc800, 0x9e88 };
1117 #elif BITS_PER_MP_LIMB == 32
1118 const mp_limb_t mpfr_l2b_31_0__tab
[] = { 0x9e88c800 };
1119 #elif BITS_PER_MP_LIMB == 64
1120 const mp_limb_t mpfr_l2b_31_0__tab
[] = { 0x9e88c80000000000 };
1121 #elif BITS_PER_MP_LIMB == 96
1122 const mp_limb_t mpfr_l2b_31_0__tab
[] = { 0x9e88c8000000000000000000 };
1123 #elif BITS_PER_MP_LIMB == 128
1124 const mp_limb_t mpfr_l2b_31_0__tab
[] = { 0x9e88c800000000000000000000000000 };
1125 #elif BITS_PER_MP_LIMB == 256
1126 const mp_limb_t mpfr_l2b_31_0__tab
[] = { 0x9e88c80000000000000000000000000000000000000000000000000000000000 };
1130 #elif BITS_PER_MP_LIMB == 16
1131 const mp_limb_t mpfr_l2b_31_1__tab
[] = { 0xd578, 0xf7ca, 0x63ee, 0x86e6, 0xceb1 };
1132 #elif BITS_PER_MP_LIMB == 32
1133 const mp_limb_t mpfr_l2b_31_1__tab
[] = { 0xd5780000, 0x63eef7ca, 0xceb186e6 };
1134 #elif BITS_PER_MP_LIMB == 64
1135 const mp_limb_t mpfr_l2b_31_1__tab
[] = { 0xd578000000000000, 0xceb186e663eef7ca };
1136 #elif BITS_PER_MP_LIMB == 96
1137 const mp_limb_t mpfr_l2b_31_1__tab
[] = { 0xceb186e663eef7cad5780000 };
1138 #elif BITS_PER_MP_LIMB == 128
1139 const mp_limb_t mpfr_l2b_31_1__tab
[] = { 0xceb186e663eef7cad578000000000000 };
1140 #elif BITS_PER_MP_LIMB == 256
1141 const mp_limb_t mpfr_l2b_31_1__tab
[] = { 0xceb186e663eef7cad57800000000000000000000000000000000000000000000 };
1145 #elif BITS_PER_MP_LIMB == 16
1146 const mp_limb_t mpfr_l2b_32_0__tab
[] = { 0x0000, 0xa000 };
1147 #elif BITS_PER_MP_LIMB == 32
1148 const mp_limb_t mpfr_l2b_32_0__tab
[] = { 0xa0000000 };
1149 #elif BITS_PER_MP_LIMB == 64
1150 const mp_limb_t mpfr_l2b_32_0__tab
[] = { 0xa000000000000000 };
1151 #elif BITS_PER_MP_LIMB == 96
1152 const mp_limb_t mpfr_l2b_32_0__tab
[] = { 0xa00000000000000000000000 };
1153 #elif BITS_PER_MP_LIMB == 128
1154 const mp_limb_t mpfr_l2b_32_0__tab
[] = { 0xa0000000000000000000000000000000 };
1155 #elif BITS_PER_MP_LIMB == 256
1156 const mp_limb_t mpfr_l2b_32_0__tab
[] = { 0xa000000000000000000000000000000000000000000000000000000000000000 };
1160 #elif BITS_PER_MP_LIMB == 16
1161 const mp_limb_t mpfr_l2b_32_1__tab
[] = { 0xccd0, 0xcccc, 0xcccc, 0xcccc, 0xcccc };
1162 #elif BITS_PER_MP_LIMB == 32
1163 const mp_limb_t mpfr_l2b_32_1__tab
[] = { 0xccd00000, 0xcccccccc, 0xcccccccc };
1164 #elif BITS_PER_MP_LIMB == 64
1165 const mp_limb_t mpfr_l2b_32_1__tab
[] = { 0xccd0000000000000, 0xcccccccccccccccc };
1166 #elif BITS_PER_MP_LIMB == 96
1167 const mp_limb_t mpfr_l2b_32_1__tab
[] = { 0xccccccccccccccccccd00000 };
1168 #elif BITS_PER_MP_LIMB == 128
1169 const mp_limb_t mpfr_l2b_32_1__tab
[] = { 0xccccccccccccccccccd0000000000000 };
1170 #elif BITS_PER_MP_LIMB == 256
1171 const mp_limb_t mpfr_l2b_32_1__tab
[] = { 0xccccccccccccccccccd000000000000000000000000000000000000000000000 };
1175 #elif BITS_PER_MP_LIMB == 16
1176 const mp_limb_t mpfr_l2b_33_0__tab
[] = { 0xae00, 0xa16b };
1177 #elif BITS_PER_MP_LIMB == 32
1178 const mp_limb_t mpfr_l2b_33_0__tab
[] = { 0xa16bae00 };
1179 #elif BITS_PER_MP_LIMB == 64
1180 const mp_limb_t mpfr_l2b_33_0__tab
[] = { 0xa16bae0000000000 };
1181 #elif BITS_PER_MP_LIMB == 96
1182 const mp_limb_t mpfr_l2b_33_0__tab
[] = { 0xa16bae000000000000000000 };
1183 #elif BITS_PER_MP_LIMB == 128
1184 const mp_limb_t mpfr_l2b_33_0__tab
[] = { 0xa16bae00000000000000000000000000 };
1185 #elif BITS_PER_MP_LIMB == 256
1186 const mp_limb_t mpfr_l2b_33_0__tab
[] = { 0xa16bae0000000000000000000000000000000000000000000000000000000000 };
1190 #elif BITS_PER_MP_LIMB == 16
1191 const mp_limb_t mpfr_l2b_33_1__tab
[] = { 0x0888, 0xa187, 0x5304, 0x6404, 0xcaff };
1192 #elif BITS_PER_MP_LIMB == 32
1193 const mp_limb_t mpfr_l2b_33_1__tab
[] = { 0x08880000, 0x5304a187, 0xcaff6404 };
1194 #elif BITS_PER_MP_LIMB == 64
1195 const mp_limb_t mpfr_l2b_33_1__tab
[] = { 0x0888000000000000, 0xcaff64045304a187 };
1196 #elif BITS_PER_MP_LIMB == 96
1197 const mp_limb_t mpfr_l2b_33_1__tab
[] = { 0xcaff64045304a18708880000 };
1198 #elif BITS_PER_MP_LIMB == 128
1199 const mp_limb_t mpfr_l2b_33_1__tab
[] = { 0xcaff64045304a1870888000000000000 };
1200 #elif BITS_PER_MP_LIMB == 256
1201 const mp_limb_t mpfr_l2b_33_1__tab
[] = { 0xcaff64045304a187088800000000000000000000000000000000000000000000 };
1205 #elif BITS_PER_MP_LIMB == 16
1206 const mp_limb_t mpfr_l2b_34_0__tab
[] = { 0x8000, 0xa2cc };
1207 #elif BITS_PER_MP_LIMB == 32
1208 const mp_limb_t mpfr_l2b_34_0__tab
[] = { 0xa2cc8000 };
1209 #elif BITS_PER_MP_LIMB == 64
1210 const mp_limb_t mpfr_l2b_34_0__tab
[] = { 0xa2cc800000000000 };
1211 #elif BITS_PER_MP_LIMB == 96
1212 const mp_limb_t mpfr_l2b_34_0__tab
[] = { 0xa2cc80000000000000000000 };
1213 #elif BITS_PER_MP_LIMB == 128
1214 const mp_limb_t mpfr_l2b_34_0__tab
[] = { 0xa2cc8000000000000000000000000000 };
1215 #elif BITS_PER_MP_LIMB == 256
1216 const mp_limb_t mpfr_l2b_34_0__tab
[] = { 0xa2cc800000000000000000000000000000000000000000000000000000000000 };
1220 #elif BITS_PER_MP_LIMB == 16
1221 const mp_limb_t mpfr_l2b_34_1__tab
[] = { 0xfb50, 0x17ca, 0x5a79, 0x73d8, 0xc947 };
1222 #elif BITS_PER_MP_LIMB == 32
1223 const mp_limb_t mpfr_l2b_34_1__tab
[] = { 0xfb500000, 0x5a7917ca, 0xc94773d8 };
1224 #elif BITS_PER_MP_LIMB == 64
1225 const mp_limb_t mpfr_l2b_34_1__tab
[] = { 0xfb50000000000000, 0xc94773d85a7917ca };
1226 #elif BITS_PER_MP_LIMB == 96
1227 const mp_limb_t mpfr_l2b_34_1__tab
[] = { 0xc94773d85a7917cafb500000 };
1228 #elif BITS_PER_MP_LIMB == 128
1229 const mp_limb_t mpfr_l2b_34_1__tab
[] = { 0xc94773d85a7917cafb50000000000000 };
1230 #elif BITS_PER_MP_LIMB == 256
1231 const mp_limb_t mpfr_l2b_34_1__tab
[] = { 0xc94773d85a7917cafb5000000000000000000000000000000000000000000000 };
1235 #elif BITS_PER_MP_LIMB == 16
1236 const mp_limb_t mpfr_l2b_35_0__tab
[] = { 0x1800, 0xa423 };
1237 #elif BITS_PER_MP_LIMB == 32
1238 const mp_limb_t mpfr_l2b_35_0__tab
[] = { 0xa4231800 };
1239 #elif BITS_PER_MP_LIMB == 64
1240 const mp_limb_t mpfr_l2b_35_0__tab
[] = { 0xa423180000000000 };
1241 #elif BITS_PER_MP_LIMB == 96
1242 const mp_limb_t mpfr_l2b_35_0__tab
[] = { 0xa42318000000000000000000 };
1243 #elif BITS_PER_MP_LIMB == 128
1244 const mp_limb_t mpfr_l2b_35_0__tab
[] = { 0xa4231800000000000000000000000000 };
1245 #elif BITS_PER_MP_LIMB == 256
1246 const mp_limb_t mpfr_l2b_35_0__tab
[] = { 0xa423180000000000000000000000000000000000000000000000000000000000 };
1250 #elif BITS_PER_MP_LIMB == 16
1251 const mp_limb_t mpfr_l2b_35_1__tab
[] = { 0x6960, 0x18c2, 0x6037, 0x567c, 0xc7a3 };
1252 #elif BITS_PER_MP_LIMB == 32
1253 const mp_limb_t mpfr_l2b_35_1__tab
[] = { 0x69600000, 0x603718c2, 0xc7a3567c };
1254 #elif BITS_PER_MP_LIMB == 64
1255 const mp_limb_t mpfr_l2b_35_1__tab
[] = { 0x6960000000000000, 0xc7a3567c603718c2 };
1256 #elif BITS_PER_MP_LIMB == 96
1257 const mp_limb_t mpfr_l2b_35_1__tab
[] = { 0xc7a3567c603718c269600000 };
1258 #elif BITS_PER_MP_LIMB == 128
1259 const mp_limb_t mpfr_l2b_35_1__tab
[] = { 0xc7a3567c603718c26960000000000000 };
1260 #elif BITS_PER_MP_LIMB == 256
1261 const mp_limb_t mpfr_l2b_35_1__tab
[] = { 0xc7a3567c603718c2696000000000000000000000000000000000000000000000 };
1265 #elif BITS_PER_MP_LIMB == 16
1266 const mp_limb_t mpfr_l2b_36_0__tab
[] = { 0x0800, 0xa570 };
1267 #elif BITS_PER_MP_LIMB == 32
1268 const mp_limb_t mpfr_l2b_36_0__tab
[] = { 0xa5700800 };
1269 #elif BITS_PER_MP_LIMB == 64
1270 const mp_limb_t mpfr_l2b_36_0__tab
[] = { 0xa570080000000000 };
1271 #elif BITS_PER_MP_LIMB == 96
1272 const mp_limb_t mpfr_l2b_36_0__tab
[] = { 0xa57008000000000000000000 };
1273 #elif BITS_PER_MP_LIMB == 128
1274 const mp_limb_t mpfr_l2b_36_0__tab
[] = { 0xa5700800000000000000000000000000 };
1275 #elif BITS_PER_MP_LIMB == 256
1276 const mp_limb_t mpfr_l2b_36_0__tab
[] = { 0xa570080000000000000000000000000000000000000000000000000000000000 };
1280 #elif BITS_PER_MP_LIMB == 16
1281 const mp_limb_t mpfr_l2b_36_1__tab
[] = { 0xff10, 0xf9e9, 0xe054, 0x9236, 0xc611 };
1282 #elif BITS_PER_MP_LIMB == 32
1283 const mp_limb_t mpfr_l2b_36_1__tab
[] = { 0xff100000, 0xe054f9e9, 0xc6119236 };
1284 #elif BITS_PER_MP_LIMB == 64
1285 const mp_limb_t mpfr_l2b_36_1__tab
[] = { 0xff10000000000000, 0xc6119236e054f9e9 };
1286 #elif BITS_PER_MP_LIMB == 96
1287 const mp_limb_t mpfr_l2b_36_1__tab
[] = { 0xc6119236e054f9e9ff100000 };
1288 #elif BITS_PER_MP_LIMB == 128
1289 const mp_limb_t mpfr_l2b_36_1__tab
[] = { 0xc6119236e054f9e9ff10000000000000 };
1290 #elif BITS_PER_MP_LIMB == 256
1291 const mp_limb_t mpfr_l2b_36_1__tab
[] = { 0xc6119236e054f9e9ff1000000000000000000000000000000000000000000000 };
1294 const __mpfr_struct __gmpfr_l2b
[BASE_MAX
-1][2] = {
1295 { { 23, 1, 1, (mp_limb_t
*) mpfr_l2b_2_0__tab
},
1296 { 77, 1, 1, (mp_limb_t
*) mpfr_l2b_2_1__tab
} },
1297 { { 23, 1, 1, (mp_limb_t
*) mpfr_l2b_3_0__tab
},
1298 { 77, 1, 0, (mp_limb_t
*) mpfr_l2b_3_1__tab
} },
1299 { { 23, 1, 2, (mp_limb_t
*) mpfr_l2b_4_0__tab
},
1300 { 77, 1, 0, (mp_limb_t
*) mpfr_l2b_4_1__tab
} },
1301 { { 23, 1, 2, (mp_limb_t
*) mpfr_l2b_5_0__tab
},
1302 { 77, 1, -1, (mp_limb_t
*) mpfr_l2b_5_1__tab
} },
1303 { { 23, 1, 2, (mp_limb_t
*) mpfr_l2b_6_0__tab
},
1304 { 77, 1, -1, (mp_limb_t
*) mpfr_l2b_6_1__tab
} },
1305 { { 23, 1, 2, (mp_limb_t
*) mpfr_l2b_7_0__tab
},
1306 { 77, 1, -1, (mp_limb_t
*) mpfr_l2b_7_1__tab
} },
1307 { { 23, 1, 2, (mp_limb_t
*) mpfr_l2b_8_0__tab
},
1308 { 77, 1, -1, (mp_limb_t
*) mpfr_l2b_8_1__tab
} },
1309 { { 23, 1, 2, (mp_limb_t
*) mpfr_l2b_9_0__tab
},
1310 { 77, 1, -1, (mp_limb_t
*) mpfr_l2b_9_1__tab
} },
1311 { { 23, 1, 2, (mp_limb_t
*) mpfr_l2b_10_0__tab
},
1312 { 77, 1, -1, (mp_limb_t
*) mpfr_l2b_10_1__tab
} },
1313 { { 23, 1, 2, (mp_limb_t
*) mpfr_l2b_11_0__tab
},
1314 { 77, 1, -1, (mp_limb_t
*) mpfr_l2b_11_1__tab
} },
1315 { { 23, 1, 2, (mp_limb_t
*) mpfr_l2b_12_0__tab
},
1316 { 77, 1, -1, (mp_limb_t
*) mpfr_l2b_12_1__tab
} },
1317 { { 23, 1, 2, (mp_limb_t
*) mpfr_l2b_13_0__tab
},
1318 { 77, 1, -1, (mp_limb_t
*) mpfr_l2b_13_1__tab
} },
1319 { { 23, 1, 2, (mp_limb_t
*) mpfr_l2b_14_0__tab
},
1320 { 77, 1, -1, (mp_limb_t
*) mpfr_l2b_14_1__tab
} },
1321 { { 23, 1, 2, (mp_limb_t
*) mpfr_l2b_15_0__tab
},
1322 { 77, 1, -1, (mp_limb_t
*) mpfr_l2b_15_1__tab
} },
1323 { { 23, 1, 3, (mp_limb_t
*) mpfr_l2b_16_0__tab
},
1324 { 77, 1, -1, (mp_limb_t
*) mpfr_l2b_16_1__tab
} },
1325 { { 23, 1, 3, (mp_limb_t
*) mpfr_l2b_17_0__tab
},
1326 { 77, 1, -2, (mp_limb_t
*) mpfr_l2b_17_1__tab
} },
1327 { { 23, 1, 3, (mp_limb_t
*) mpfr_l2b_18_0__tab
},
1328 { 77, 1, -2, (mp_limb_t
*) mpfr_l2b_18_1__tab
} },
1329 { { 23, 1, 3, (mp_limb_t
*) mpfr_l2b_19_0__tab
},
1330 { 77, 1, -2, (mp_limb_t
*) mpfr_l2b_19_1__tab
} },
1331 { { 23, 1, 3, (mp_limb_t
*) mpfr_l2b_20_0__tab
},
1332 { 77, 1, -2, (mp_limb_t
*) mpfr_l2b_20_1__tab
} },
1333 { { 23, 1, 3, (mp_limb_t
*) mpfr_l2b_21_0__tab
},
1334 { 77, 1, -2, (mp_limb_t
*) mpfr_l2b_21_1__tab
} },
1335 { { 23, 1, 3, (mp_limb_t
*) mpfr_l2b_22_0__tab
},
1336 { 77, 1, -2, (mp_limb_t
*) mpfr_l2b_22_1__tab
} },
1337 { { 23, 1, 3, (mp_limb_t
*) mpfr_l2b_23_0__tab
},
1338 { 77, 1, -2, (mp_limb_t
*) mpfr_l2b_23_1__tab
} },
1339 { { 23, 1, 3, (mp_limb_t
*) mpfr_l2b_24_0__tab
},
1340 { 77, 1, -2, (mp_limb_t
*) mpfr_l2b_24_1__tab
} },
1341 { { 23, 1, 3, (mp_limb_t
*) mpfr_l2b_25_0__tab
},
1342 { 77, 1, -2, (mp_limb_t
*) mpfr_l2b_25_1__tab
} },
1343 { { 23, 1, 3, (mp_limb_t
*) mpfr_l2b_26_0__tab
},
1344 { 77, 1, -2, (mp_limb_t
*) mpfr_l2b_26_1__tab
} },
1345 { { 23, 1, 3, (mp_limb_t
*) mpfr_l2b_27_0__tab
},
1346 { 77, 1, -2, (mp_limb_t
*) mpfr_l2b_27_1__tab
} },
1347 { { 23, 1, 3, (mp_limb_t
*) mpfr_l2b_28_0__tab
},
1348 { 77, 1, -2, (mp_limb_t
*) mpfr_l2b_28_1__tab
} },
1349 { { 23, 1, 3, (mp_limb_t
*) mpfr_l2b_29_0__tab
},
1350 { 77, 1, -2, (mp_limb_t
*) mpfr_l2b_29_1__tab
} },
1351 { { 23, 1, 3, (mp_limb_t
*) mpfr_l2b_30_0__tab
},
1352 { 77, 1, -2, (mp_limb_t
*) mpfr_l2b_30_1__tab
} },
1353 { { 23, 1, 3, (mp_limb_t
*) mpfr_l2b_31_0__tab
},
1354 { 77, 1, -2, (mp_limb_t
*) mpfr_l2b_31_1__tab
} },
1355 { { 23, 1, 3, (mp_limb_t
*) mpfr_l2b_32_0__tab
},
1356 { 77, 1, -2, (mp_limb_t
*) mpfr_l2b_32_1__tab
} },
1357 { { 23, 1, 3, (mp_limb_t
*) mpfr_l2b_33_0__tab
},
1358 { 77, 1, -2, (mp_limb_t
*) mpfr_l2b_33_1__tab
} },
1359 { { 23, 1, 3, (mp_limb_t
*) mpfr_l2b_34_0__tab
},
1360 { 77, 1, -2, (mp_limb_t
*) mpfr_l2b_34_1__tab
} },
1361 { { 23, 1, 3, (mp_limb_t
*) mpfr_l2b_35_0__tab
},
1362 { 77, 1, -2, (mp_limb_t
*) mpfr_l2b_35_1__tab
} },
1363 { { 23, 1, 3, (mp_limb_t
*) mpfr_l2b_36_0__tab
},
1364 { 77, 1, -2, (mp_limb_t
*) mpfr_l2b_36_1__tab
} } };
1366 /***************************************************************************/
1368 /* returns ceil(e * log2(b)^((-1)^i)), or ... + 1 */
1370 ceil_mul (mp_exp_t e
, int beta
, int i
)
1376 p
= &__gmpfr_l2b
[beta
-2][i
];
1377 mpfr_init2 (t
, sizeof (mp_exp_t
) * CHAR_BIT
);
1378 mpfr_set_exp_t (t
, e
, GMP_RNDU
);
1379 mpfr_mul (t
, t
, p
, GMP_RNDU
);
1380 r
= mpfr_get_exp_t (t
, GMP_RNDU
);
1385 /* prints the mantissa of x in the string s, and writes the corresponding
1387 x is rounded with direction rnd, m is the number of digits of the mantissa,
1388 b is the given base (2 <= b <= 36).
1391 if s=NULL, allocates a string to store the mantissa, with
1392 m characters, plus a final '\0', plus a possible minus sign
1393 (thus m+1 or m+2 characters).
1395 Important: when you call this function with s=NULL, don't forget to free
1396 the memory space allocated, with free(s, strlen(s)).
1399 mpfr_get_str (char *s
, mp_exp_t
*e
, int b
, size_t m
, mpfr_srcptr x
, mp_rnd_t rnd
)
1401 int exact
; /* exact result */
1403 mp_exp_t prec
; /* precision of the computation */
1414 int ret
; /* return value of mpfr_get_str_aux */
1415 MPFR_ZIV_DECL (loop
);
1416 MPFR_SAVE_EXPO_DECL (expo
);
1417 MPFR_TMP_DECL(marker
);
1419 /* if exact = 1 then err is undefined */
1420 /* otherwise err is such that |x*b^(m-g)-a*2^exp_a| < 2^(err+exp_a) */
1422 /* is the base valid? */
1423 if (b
< 2 || b
> 36)
1426 if (MPFR_UNLIKELY (MPFR_IS_NAN (x
)))
1429 s
= (char *) (*__gmp_allocate_func
) (6);
1430 strcpy (s
, "@NaN@");
1434 neg
= MPFR_SIGN(x
) < 0; /* 0 if positive, 1 if negative */
1436 if (MPFR_UNLIKELY (MPFR_IS_INF (x
)))
1439 s
= (char *) (*__gmp_allocate_func
) (neg
+ 6);
1440 strcpy (s
, (neg
) ? "-@Inf@" : "@Inf@");
1444 MPFR_SAVE_EXPO_MARK (expo
); /* needed for ceil_mul (at least) */
1449 /* take at least 1 + ceil(n*log(2)/log(b)) digits, where n is the
1450 number of bits of the mantissa, to ensure back conversion from
1451 the output gives the same floating-point.
1453 Warning: if b = 2^k, this may be too large. The worst case is when
1454 the first base-b digit contains only one bit, so we get
1455 1 + ceil((n-1)/k) = 2 + floor((n-2)/k) instead.
1457 m
= 1 + ceil_mul (IS_POW2(b
) ? MPFR_PREC(x
) - 1: MPFR_PREC(x
), b
, 1);
1462 /* the code below for non-power-of-two bases works for m=1 */
1463 MPFR_ASSERTN (m
>= 2 || (IS_POW2(b
) == 0 && m
>= 1));
1465 /* x is a floating-point number */
1467 if (MPFR_IS_ZERO(x
))
1470 s
= (char*) (*__gmp_allocate_func
) (neg
+ m
+ 1);
1476 *e
= 0; /* a bit like frexp() in ISO C99 */
1477 MPFR_SAVE_EXPO_FREE (expo
);
1478 return s0
; /* strlen(s0) = neg + m */
1482 s
= (char*) (*__gmp_allocate_func
) (neg
+ m
+ 1);
1497 count_leading_zeros (pow2
, (mp_limb_t
) b
);
1498 pow2
= BITS_PER_MP_LIMB
- pow2
- 1; /* base = 2^pow2 */
1500 /* set MPFR_EXP(x) = f*pow2 + r, 1 <= r <= pow2 */
1501 f
= (MPFR_GET_EXP (x
) - 1) / pow2
;
1502 r
= MPFR_GET_EXP (x
) - f
* pow2
;
1509 /* the first digit will contain only r bits */
1510 prec
= (m
- 1) * pow2
+ r
; /* total number of bits */
1511 n
= (prec
- 1) / BITS_PER_MP_LIMB
+ 1;
1513 MPFR_TMP_MARK (marker
);
1514 x1
= (mp_limb_t
*) MPFR_TMP_ALLOC((n
+ 1) * sizeof (mp_limb_t
));
1515 nb
= n
* BITS_PER_MP_LIMB
- prec
;
1516 /* round xp to the precision prec, and put it into x1
1517 put the carry into x1[n] */
1518 if ((x1
[n
] = mpfr_round_raw (x1
, xp
, MPFR_PREC(x
),
1519 MPFR_IS_STRICTNEG(x
),
1520 prec
, rnd
, &inexp
)))
1522 /* overflow when rounding x: x1 = 2^prec */
1523 if (r
== pow2
) /* prec = m * pow2,
1524 2^prec will need (m+1) digits in base 2^pow2 */
1526 /* divide x1 by 2^pow2, and increase the exponent */
1527 mpn_rshift (x1
, x1
, n
+ 1, pow2
);
1530 else /* 2^prec needs still m digits, but x1 may need n+1 limbs */
1534 /* it remains to shift x1 by nb limbs to the right, since mpn_get_str
1535 expects a right-normalized number */
1538 mpn_rshift (x1
, x1
, n
, nb
);
1539 /* the most significant word may be zero */
1544 mpn_get_str ((unsigned char*) s
, b
, x1
, n
);
1546 s
[i
] = num_to_text
[(int) s
[i
]];
1549 /* the exponent of s is f + 1 */
1552 MPFR_TMP_FREE(marker
);
1553 MPFR_SAVE_EXPO_FREE (expo
);
1557 /* if x < 0, reduce to x > 0 */
1559 rnd
= MPFR_INVERT_RND(rnd
);
1561 g
= ceil_mul (MPFR_GET_EXP (x
) - 1, b
, 1);
1563 prec
= ceil_mul (m
, b
, 0) + 1;
1564 exp
= ((mp_exp_t
) m
< g
) ? g
- (mp_exp_t
) m
: (mp_exp_t
) m
- g
;
1565 prec
+= MPFR_INT_CEIL_LOG2 (prec
); /* number of guard bits */
1566 if (exp
!= 0) /* add maximal exponentiation error */
1567 prec
+= 3 * (mp_exp_t
) MPFR_INT_CEIL_LOG2 (exp
);
1569 MPFR_ZIV_INIT (loop
, prec
);
1572 MPFR_TMP_MARK(marker
);
1576 /* number of limbs */
1577 n
= 1 + (prec
- 1) / BITS_PER_MP_LIMB
;
1579 /* a will contain the approximation of the mantissa */
1580 a
= (mp_limb_t
*) MPFR_TMP_ALLOC (n
* sizeof (mp_limb_t
));
1582 nx
= 1 + (MPFR_PREC(x
) - 1) / BITS_PER_MP_LIMB
;
1584 if ((mp_exp_t
) m
== g
) /* final exponent is 0, no multiplication or
1585 division to perform */
1588 exact
= mpn_scan1 (xp
, 0) >= (nx
- n
) * BITS_PER_MP_LIMB
;
1590 MPN_COPY2 (a
, n
, xp
, nx
);
1591 exp_a
= MPFR_GET_EXP (x
) - n
* BITS_PER_MP_LIMB
;
1593 else if ((mp_exp_t
) m
> g
) /* we have to multiply x by b^exp */
1597 /* a2*2^exp_a = b^e */
1598 err
= mpfr_mpn_exp (a
, &exp_a
, b
, exp
, n
);
1599 /* here, the error on a is at most 2^err ulps */
1600 exact
= (err
== -1);
1602 /* x = x1*2^(n*BITS_PER_MP_LIMB) */
1603 x1
= (nx
>= n
) ? xp
+ nx
- n
: xp
;
1604 nx1
= (nx
>= n
) ? n
: nx
; /* nx1 = min(n, nx) */
1609 ((mpn_scan1 (xp
, 0) >= (nx
- n
) * BITS_PER_MP_LIMB
)));
1611 /* we loose one more bit in the multiplication,
1612 except when err=0 where we loose two bits */
1613 err
= (err
<= 0) ? 2 : err
+ 1;
1615 /* result = a * x */
1616 result
= (mp_limb_t
*) MPFR_TMP_ALLOC ((n
+ nx1
) * sizeof (mp_limb_t
));
1617 mpn_mul (result
, a
, n
, x1
, nx1
);
1618 exp_a
+= MPFR_GET_EXP (x
);
1619 if (mpn_scan1 (result
, 0) < (nx1
* BITS_PER_MP_LIMB
))
1622 /* normalize a and truncate */
1623 if ((result
[n
+ nx1
- 1] & MPFR_LIMB_HIGHBIT
) == 0)
1625 mpn_lshift (a
, result
+ nx1
, n
, 1);
1626 a
[0] |= result
[nx1
- 1] >> (BITS_PER_MP_LIMB
- 1);
1630 MPN_COPY (a
, result
+ nx1
, n
);
1636 /* a2*2^exp_a = b^e */
1637 err
= mpfr_mpn_exp (a
, &exp_a
, b
, exp
, n
);
1638 exact
= (err
== -1);
1640 /* allocate memory for x1, result and reste */
1641 x1
= (mp_limb_t
*) MPFR_TMP_ALLOC (2 * n
* sizeof (mp_limb_t
));
1642 result
= (mp_limb_t
*) MPFR_TMP_ALLOC ((n
+ 1) * sizeof (mp_limb_t
));
1643 reste
= (mp_limb_t
*) MPFR_TMP_ALLOC (n
* sizeof (mp_limb_t
));
1645 /* initialize x1 = x */
1646 MPN_COPY2 (x1
, 2 * n
, xp
, nx
);
1647 if ((exact
) && (nx
> 2 * n
) &&
1648 (mpn_scan1 (xp
, 0) < (nx
- 2 * n
) * BITS_PER_MP_LIMB
))
1651 /* result = x / a */
1652 mpn_tdiv_qr (result
, reste
, 0, x1
, 2 * n
, a
, n
);
1653 exp_a
= MPFR_GET_EXP (x
) - exp_a
- 2 * n
* BITS_PER_MP_LIMB
;
1655 /* test if division was exact */
1657 exact
= mpn_popcount (reste
, n
) == 0;
1659 /* normalize the result and copy into a */
1662 mpn_rshift (a
, result
, n
, 1);
1663 a
[n
- 1] |= MPFR_LIMB_HIGHBIT
;;
1667 MPN_COPY (a
, result
, n
);
1669 err
= (err
== -1) ? 2 : err
+ 2;
1672 /* check if rounding is possible */
1675 ret
= mpfr_get_str_aux (s
, e
, a
, n
, exp_a
, err
, b
, m
, rnd
);
1676 if (ret
== MPFR_ROUND_FAILED
)
1678 /* too large error: increment the working precision */
1679 MPFR_ZIV_NEXT (loop
, prec
);
1681 else if (ret
== -MPFR_ROUND_FAILED
)
1683 /* too many digits in mantissa: exp = |m-g| */
1684 if ((mp_exp_t
) m
> g
) /* exp = m - g, multiply by b^exp */
1689 else /* exp = g - m, divide by b^exp */
1698 MPFR_TMP_FREE(marker
);
1700 MPFR_ZIV_FREE (loop
);
1704 MPFR_TMP_FREE(marker
);
1705 MPFR_SAVE_EXPO_FREE (expo
);
1709 void mpfr_free_str (char *str
)
1711 (*__gmp_free_func
) (str
, strlen (str
) + 1);