|
14 | 14 | #include "mpn_extras.h" |
15 | 15 | #include "radix.h" |
16 | 16 |
|
17 | | -static const uint8_t n_sizeinbase10_tab1[64] = { |
18 | | - 1, 1, 1, 2, 2, 2, 3, 3, 3, 4, 4, 4, 4, 5, 5, 5, 6, 6, 6, 7, 7, 7, 7, 8, |
19 | | - 8, 8, 9, 9, 9, 10, 10, 10, 10, 11, 11, 11, 12, 12, 12, 13, 13, 13, 13, |
20 | | - 14, 14, 14, 15, 15, 15, 16, 16, 16, 16, 17, 17, 17, 18, 18, 18, 19, 19, |
21 | | - 19, 19, 20, |
22 | | -}; |
23 | | - |
24 | | -static const ulong n_sizeinbase10_tab2[FLINT_BITS] = { |
25 | | - 1, 1, 1, 10, 10, 10, 100, 100, 100, 1000, 1000, 1000, 1000, 10000, 10000, |
26 | | - 10000, 100000, 100000, 100000, 1000000, 1000000, 1000000, 1000000, 10000000, |
27 | | - 10000000, 10000000, 100000000, 100000000, 100000000, 1000000000, |
28 | | - 1000000000, 1000000000, |
29 | | -#if FLINT_BITS == 64 |
30 | | - 1000000000, UWORD(10000000000), UWORD(10000000000), UWORD(10000000000), |
31 | | - UWORD(100000000000), UWORD(100000000000), UWORD(100000000000), |
32 | | - UWORD(1000000000000), UWORD(1000000000000), UWORD(1000000000000), |
33 | | - UWORD(1000000000000), UWORD(10000000000000), UWORD(10000000000000), |
34 | | - UWORD(10000000000000), UWORD(100000000000000), UWORD(100000000000000), |
35 | | - UWORD(100000000000000), UWORD(1000000000000000), UWORD(1000000000000000), |
36 | | - UWORD(1000000000000000), UWORD(1000000000000000), UWORD(10000000000000000), |
37 | | - UWORD(10000000000000000), UWORD(10000000000000000), |
38 | | - UWORD(100000000000000000), UWORD(100000000000000000), |
39 | | - UWORD(100000000000000000), UWORD(1000000000000000000), |
40 | | - UWORD(1000000000000000000), UWORD(1000000000000000000), |
41 | | - UWORD(1000000000000000000), UWORD(10000000000000000000), |
42 | | -#endif |
43 | | -}; |
44 | | - |
45 | 17 | static const char dec_to_str_tab[200] = |
46 | 18 | "000102030405060708091011121314151617181920212223242526272829" |
47 | 19 | "303132333435363738394041424344454647484950515253545556575859" |
@@ -103,14 +75,6 @@ n_get_str_nd(char * s, ulong x, int d) |
103 | 75 | } |
104 | 76 | } |
105 | 77 |
|
106 | | -static slong |
107 | | -n_nonzero_sizeinbase10(ulong n) |
108 | | -{ |
109 | | - FLINT_ASSERT(n != 0); |
110 | | - int b = FLINT_BIT_COUNT(n) - 1; |
111 | | - return n_sizeinbase10_tab1[b] - (n < n_sizeinbase10_tab2[b]); |
112 | | -} |
113 | | - |
114 | 78 | static char * _radix_decimal_get_str(char * res, nn_srcptr t, slong decimal_limbs, int negative, slong digits_per_limb) |
115 | 79 | { |
116 | 80 | slong i; |
@@ -159,7 +123,7 @@ char * radix_get_str_decimal(char * res, nn_srcptr x, slong n, int negative, con |
159 | 123 | { |
160 | 124 | return _radix_decimal_get_str(res, x, n, negative, radix->exp); |
161 | 125 | } |
162 | | - else if (n == 1 && LIMB_RADIX(radix) < n_sizeinbase10_tab2[FLINT_BITS - 1]) /* todo: could work even for 10/20-digit input */ |
| 126 | + else if (n == 1 && n_nonzero_sizeinbase10(LIMB_RADIX(radix)) <= ((FLINT_BITS == 64) ? 19 : 9)) /* todo: could work even for 10/20-digit input */ |
163 | 127 | { |
164 | 128 | return _radix_decimal_get_str(res, x, 1, negative, ((FLINT_BITS == 64) ? 19 : 9)); |
165 | 129 | } |
|
0 commit comments