summaryrefslogtreecommitdiff
path: root/mpz/fib_ui.c
diff options
context:
space:
mode:
authorKevin Ryde <user42@zip.com.au>2000-10-27 02:27:22 +0200
committerKevin Ryde <user42@zip.com.au>2000-10-27 02:27:22 +0200
commit5ce840fbf6f8ebe924ac3448c6b95d2c5860649e (patch)
treef4ace884809ab16d8a51eb7377ad2980940a5252 /mpz/fib_ui.c
parent1c0dab2fa3042faed0486b68825166c39208c206 (diff)
downloadgmp-5ce840fbf6f8ebe924ac3448c6b95d2c5860649e.tar.gz
Yet another amendment to:
* mpz/fib_ui.c: Rewrite, same formulas but using mpn functions and some lookup tables, much faster at small to moderate sizes. Use hex constants for table data, to stop GCC whinging about constants so big they're unsigned.
Diffstat (limited to 'mpz/fib_ui.c')
-rw-r--r--mpz/fib_ui.c576
1 files changed, 289 insertions, 287 deletions
diff --git a/mpz/fib_ui.c b/mpz/fib_ui.c
index 07d8f9634..04dd26941 100644
--- a/mpz/fib_ui.c
+++ b/mpz/fib_ui.c
@@ -61,297 +61,299 @@ MA 02111-1307, USA. */
#if BITS_PER_MP_LIMB == 32
static const mp_limb_t table1[] = {
- CNST_LIMB (0), /* 0 */
- CNST_LIMB (1), /* 1 */
- CNST_LIMB (1), /* 2 */
- CNST_LIMB (2), /* 3 */
- CNST_LIMB (3), /* 4 */
- CNST_LIMB (5), /* 5 */
- CNST_LIMB (8), /* 6 */
- CNST_LIMB (13), /* 7 */
- CNST_LIMB (21), /* 8 */
- CNST_LIMB (34), /* 9 */
- CNST_LIMB (55), /* 10 */
- CNST_LIMB (89), /* 11 */
- CNST_LIMB (144), /* 12 */
- CNST_LIMB (233), /* 13 */
- CNST_LIMB (377), /* 14 */
- CNST_LIMB (610), /* 15 */
- CNST_LIMB (987), /* 16 */
- CNST_LIMB (1597), /* 17 */
- CNST_LIMB (2584), /* 18 */
- CNST_LIMB (4181), /* 19 */
- CNST_LIMB (6765), /* 20 */
- CNST_LIMB (10946), /* 21 */
- CNST_LIMB (17711), /* 22 */
- CNST_LIMB (28657), /* 23 */
- CNST_LIMB (46368), /* 24 */
- CNST_LIMB (75025), /* 25 */
- CNST_LIMB (121393), /* 26 */
- CNST_LIMB (196418), /* 27 */
- CNST_LIMB (317811), /* 28 */
- CNST_LIMB (514229), /* 29 */
- CNST_LIMB (832040), /* 30 */
- CNST_LIMB (1346269), /* 31 */
- CNST_LIMB (2178309), /* 32 */
- CNST_LIMB (3524578), /* 33 */
- CNST_LIMB (5702887), /* 34 */
- CNST_LIMB (9227465), /* 35 */
- CNST_LIMB (14930352), /* 36 */
- CNST_LIMB (24157817), /* 37 */
- CNST_LIMB (39088169), /* 38 */
- CNST_LIMB (63245986), /* 39 */
- CNST_LIMB (102334155), /* 40 */
- CNST_LIMB (165580141), /* 41 */
- CNST_LIMB (267914296), /* 42 */
- CNST_LIMB (433494437), /* 43 */
- CNST_LIMB (701408733), /* 44 */
- CNST_LIMB (1134903170), /* 45 */
- CNST_LIMB (1836311903), /* 46 */
- CNST_LIMB (2971215073), /* 47 */
+ CNST_LIMB (0x0), /* 0 */
+ CNST_LIMB (0x1), /* 1 */
+ CNST_LIMB (0x1), /* 2 */
+ CNST_LIMB (0x2), /* 3 */
+ CNST_LIMB (0x3), /* 4 */
+ CNST_LIMB (0x5), /* 5 */
+ CNST_LIMB (0x8), /* 6 */
+ CNST_LIMB (0xD), /* 7 */
+ CNST_LIMB (0x15), /* 8 */
+ CNST_LIMB (0x22), /* 9 */
+ CNST_LIMB (0x37), /* 10 */
+ CNST_LIMB (0x59), /* 11 */
+ CNST_LIMB (0x90), /* 12 */
+ CNST_LIMB (0xE9), /* 13 */
+ CNST_LIMB (0x179), /* 14 */
+ CNST_LIMB (0x262), /* 15 */
+ CNST_LIMB (0x3DB), /* 16 */
+ CNST_LIMB (0x63D), /* 17 */
+ CNST_LIMB (0xA18), /* 18 */
+ CNST_LIMB (0x1055), /* 19 */
+ CNST_LIMB (0x1A6D), /* 20 */
+ CNST_LIMB (0x2AC2), /* 21 */
+ CNST_LIMB (0x452F), /* 22 */
+ CNST_LIMB (0x6FF1), /* 23 */
+ CNST_LIMB (0xB520), /* 24 */
+ CNST_LIMB (0x12511), /* 25 */
+ CNST_LIMB (0x1DA31), /* 26 */
+ CNST_LIMB (0x2FF42), /* 27 */
+ CNST_LIMB (0x4D973), /* 28 */
+ CNST_LIMB (0x7D8B5), /* 29 */
+ CNST_LIMB (0xCB228), /* 30 */
+ CNST_LIMB (0x148ADD), /* 31 */
+ CNST_LIMB (0x213D05), /* 32 */
+ CNST_LIMB (0x35C7E2), /* 33 */
+ CNST_LIMB (0x5704E7), /* 34 */
+ CNST_LIMB (0x8CCCC9), /* 35 */
+ CNST_LIMB (0xE3D1B0), /* 36 */
+ CNST_LIMB (0x1709E79), /* 37 */
+ CNST_LIMB (0x2547029), /* 38 */
+ CNST_LIMB (0x3C50EA2), /* 39 */
+ CNST_LIMB (0x6197ECB), /* 40 */
+ CNST_LIMB (0x9DE8D6D), /* 41 */
+ CNST_LIMB (0xFF80C38), /* 42 */
+ CNST_LIMB (0x19D699A5), /* 43 */
+ CNST_LIMB (0x29CEA5DD), /* 44 */
+ CNST_LIMB (0x43A53F82), /* 45 */
+ CNST_LIMB (0x6D73E55F), /* 46 */
+ CNST_LIMB (0xB11924E1), /* 47 */
};
static const mp_limb_t table2[][2] = {
- {CNST_LIMB(512559680), CNST_LIMB(1)}, /* 48 */
- {CNST_LIMB(3483774753), CNST_LIMB(1)}, /* 49 */
- {CNST_LIMB(3996334433), CNST_LIMB(2)}, /* 50 */
- {CNST_LIMB(3185141890), CNST_LIMB(4)}, /* 51 */
- {CNST_LIMB(2886509027), CNST_LIMB(7)}, /* 52 */
- {CNST_LIMB(1776683621), CNST_LIMB(12)}, /* 53 */
- {CNST_LIMB(368225352), CNST_LIMB(20)}, /* 54 */
- {CNST_LIMB(2144908973), CNST_LIMB(32)}, /* 55 */
- {CNST_LIMB(2513134325), CNST_LIMB(52)}, /* 56 */
- {CNST_LIMB(363076002), CNST_LIMB(85)}, /* 57 */
- {CNST_LIMB(2876210327), CNST_LIMB(137)}, /* 58 */
- {CNST_LIMB(3239286329), CNST_LIMB(222)}, /* 59 */
- {CNST_LIMB(1820529360), CNST_LIMB(360)}, /* 60 */
- {CNST_LIMB(764848393), CNST_LIMB(583)}, /* 61 */
- {CNST_LIMB(2585377753), CNST_LIMB(943)}, /* 62 */
- {CNST_LIMB(3350226146), CNST_LIMB(1526)}, /* 63 */
- {CNST_LIMB(1640636603), CNST_LIMB(2470)}, /* 64 */
- {CNST_LIMB(695895453), CNST_LIMB(3997)}, /* 65 */
- {CNST_LIMB(2336532056), CNST_LIMB(6467)}, /* 66 */
- {CNST_LIMB(3032427509), CNST_LIMB(10464)}, /* 67 */
- {CNST_LIMB(1073992269), CNST_LIMB(16932)}, /* 68 */
- {CNST_LIMB(4106419778), CNST_LIMB(27396)}, /* 69 */
- {CNST_LIMB(885444751), CNST_LIMB(44329)}, /* 70 */
- {CNST_LIMB(696897233), CNST_LIMB(71726)}, /* 71 */
- {CNST_LIMB(1582341984), CNST_LIMB(116055)}, /* 72 */
- {CNST_LIMB(2279239217), CNST_LIMB(187781)}, /* 73 */
- {CNST_LIMB(3861581201), CNST_LIMB(303836)}, /* 74 */
- {CNST_LIMB(1845853122), CNST_LIMB(491618)}, /* 75 */
- {CNST_LIMB(1412467027), CNST_LIMB(795455)}, /* 76 */
- {CNST_LIMB(3258320149), CNST_LIMB(1287073)}, /* 77 */
- {CNST_LIMB(375819880), CNST_LIMB(2082529)}, /* 78 */
- {CNST_LIMB(3634140029), CNST_LIMB(3369602)}, /* 79 */
- {CNST_LIMB(4009959909), CNST_LIMB(5452131)}, /* 80 */
- {CNST_LIMB(3349132642), CNST_LIMB(8821734)}, /* 81 */
- {CNST_LIMB(3064125255), CNST_LIMB(14273866)}, /* 82 */
- {CNST_LIMB(2118290601), CNST_LIMB(23095601)}, /* 83 */
- {CNST_LIMB(887448560), CNST_LIMB(37369468)}, /* 84 */
- {CNST_LIMB(3005739161), CNST_LIMB(60465069)}, /* 85 */
- {CNST_LIMB(3893187721), CNST_LIMB(97834537)}, /* 86 */
- {CNST_LIMB(2603959586), CNST_LIMB(158299607)}, /* 87 */
- {CNST_LIMB(2202180011), CNST_LIMB(256134145)}, /* 88 */
- {CNST_LIMB(511172301), CNST_LIMB(414433753)}, /* 89 */
- {CNST_LIMB(2713352312), CNST_LIMB(670567898)}, /* 90 */
- {CNST_LIMB(3224524613), CNST_LIMB(1085001651)}, /* 91 */
- {CNST_LIMB(1642909629), CNST_LIMB(1755569550)}, /* 92 */
- {CNST_LIMB(572466946), CNST_LIMB(2840571202)}, /* 93 */
+ {CNST_LIMB(0x1E8D0A40), CNST_LIMB(0x1)}, /* 48 */
+ {CNST_LIMB(0xCFA62F21), CNST_LIMB(0x1)}, /* 49 */
+ {CNST_LIMB(0xEE333961), CNST_LIMB(0x2)}, /* 50 */
+ {CNST_LIMB(0xBDD96882), CNST_LIMB(0x4)}, /* 51 */
+ {CNST_LIMB(0xAC0CA1E3), CNST_LIMB(0x7)}, /* 52 */
+ {CNST_LIMB(0x69E60A65), CNST_LIMB(0xC)}, /* 53 */
+ {CNST_LIMB(0x15F2AC48), CNST_LIMB(0x14)}, /* 54 */
+ {CNST_LIMB(0x7FD8B6AD), CNST_LIMB(0x20)}, /* 55 */
+ {CNST_LIMB(0x95CB62F5), CNST_LIMB(0x34)}, /* 56 */
+ {CNST_LIMB(0x15A419A2), CNST_LIMB(0x55)}, /* 57 */
+ {CNST_LIMB(0xAB6F7C97), CNST_LIMB(0x89)}, /* 58 */
+ {CNST_LIMB(0xC1139639), CNST_LIMB(0xDE)}, /* 59 */
+ {CNST_LIMB(0x6C8312D0), CNST_LIMB(0x168)}, /* 60 */
+ {CNST_LIMB(0x2D96A909), CNST_LIMB(0x247)}, /* 61 */
+ {CNST_LIMB(0x9A19BBD9), CNST_LIMB(0x3AF)}, /* 62 */
+ {CNST_LIMB(0xC7B064E2), CNST_LIMB(0x5F6)}, /* 63 */
+ {CNST_LIMB(0x61CA20BB), CNST_LIMB(0x9A6)}, /* 64 */
+ {CNST_LIMB(0x297A859D), CNST_LIMB(0xF9D)}, /* 65 */
+ {CNST_LIMB(0x8B44A658), CNST_LIMB(0x1943)}, /* 66 */
+ {CNST_LIMB(0xB4BF2BF5), CNST_LIMB(0x28E0)}, /* 67 */
+ {CNST_LIMB(0x4003D24D), CNST_LIMB(0x4224)}, /* 68 */
+ {CNST_LIMB(0xF4C2FE42), CNST_LIMB(0x6B04)}, /* 69 */
+ {CNST_LIMB(0x34C6D08F), CNST_LIMB(0xAD29)}, /* 70 */
+ {CNST_LIMB(0x2989CED1), CNST_LIMB(0x1182E)}, /* 71 */
+ {CNST_LIMB(0x5E509F60), CNST_LIMB(0x1C557)}, /* 72 */
+ {CNST_LIMB(0x87DA6E31), CNST_LIMB(0x2DD85)}, /* 73 */
+ {CNST_LIMB(0xE62B0D91), CNST_LIMB(0x4A2DC)}, /* 74 */
+ {CNST_LIMB(0x6E057BC2), CNST_LIMB(0x78062)}, /* 75 */
+ {CNST_LIMB(0x54308953), CNST_LIMB(0xC233F)}, /* 76 */
+ {CNST_LIMB(0xC2360515), CNST_LIMB(0x13A3A1)}, /* 77 */
+ {CNST_LIMB(0x16668E68), CNST_LIMB(0x1FC6E1)}, /* 78 */
+ {CNST_LIMB(0xD89C937D), CNST_LIMB(0x336A82)}, /* 79 */
+ {CNST_LIMB(0xEF0321E5), CNST_LIMB(0x533163)}, /* 80 */
+ {CNST_LIMB(0xC79FB562), CNST_LIMB(0x869BE6)}, /* 81 */
+ {CNST_LIMB(0xB6A2D747), CNST_LIMB(0xD9CD4A)}, /* 82 */
+ {CNST_LIMB(0x7E428CA9), CNST_LIMB(0x1606931)}, /* 83 */
+ {CNST_LIMB(0x34E563F0), CNST_LIMB(0x23A367C)}, /* 84 */
+ {CNST_LIMB(0xB327F099), CNST_LIMB(0x39A9FAD)}, /* 85 */
+ {CNST_LIMB(0xE80D5489), CNST_LIMB(0x5D4D629)}, /* 86 */
+ {CNST_LIMB(0x9B354522), CNST_LIMB(0x96F75D7)}, /* 87 */
+ {CNST_LIMB(0x834299AB), CNST_LIMB(0xF444C01)}, /* 88 */
+ {CNST_LIMB(0x1E77DECD), CNST_LIMB(0x18B3C1D9)}, /* 89 */
+ {CNST_LIMB(0xA1BA7878), CNST_LIMB(0x27F80DDA)}, /* 90 */
+ {CNST_LIMB(0xC0325745), CNST_LIMB(0x40ABCFB3)}, /* 91 */
+ {CNST_LIMB(0x61ECCFBD), CNST_LIMB(0x68A3DD8E)}, /* 92 */
+ {CNST_LIMB(0x221F2702), CNST_LIMB(0xA94FAD42)}, /* 93 */
};
+/* total 560 bytes if BITS_PER_LIMB==32 */
#endif
#if BITS_PER_MP_LIMB == 64
static const mp_limb_t table1[] = {
- CNST_LIMB (0), /* 0 */
- CNST_LIMB (1), /* 1 */
- CNST_LIMB (1), /* 2 */
- CNST_LIMB (2), /* 3 */
- CNST_LIMB (3), /* 4 */
- CNST_LIMB (5), /* 5 */
- CNST_LIMB (8), /* 6 */
- CNST_LIMB (13), /* 7 */
- CNST_LIMB (21), /* 8 */
- CNST_LIMB (34), /* 9 */
- CNST_LIMB (55), /* 10 */
- CNST_LIMB (89), /* 11 */
- CNST_LIMB (144), /* 12 */
- CNST_LIMB (233), /* 13 */
- CNST_LIMB (377), /* 14 */
- CNST_LIMB (610), /* 15 */
- CNST_LIMB (987), /* 16 */
- CNST_LIMB (1597), /* 17 */
- CNST_LIMB (2584), /* 18 */
- CNST_LIMB (4181), /* 19 */
- CNST_LIMB (6765), /* 20 */
- CNST_LIMB (10946), /* 21 */
- CNST_LIMB (17711), /* 22 */
- CNST_LIMB (28657), /* 23 */
- CNST_LIMB (46368), /* 24 */
- CNST_LIMB (75025), /* 25 */
- CNST_LIMB (121393), /* 26 */
- CNST_LIMB (196418), /* 27 */
- CNST_LIMB (317811), /* 28 */
- CNST_LIMB (514229), /* 29 */
- CNST_LIMB (832040), /* 30 */
- CNST_LIMB (1346269), /* 31 */
- CNST_LIMB (2178309), /* 32 */
- CNST_LIMB (3524578), /* 33 */
- CNST_LIMB (5702887), /* 34 */
- CNST_LIMB (9227465), /* 35 */
- CNST_LIMB (14930352), /* 36 */
- CNST_LIMB (24157817), /* 37 */
- CNST_LIMB (39088169), /* 38 */
- CNST_LIMB (63245986), /* 39 */
- CNST_LIMB (102334155), /* 40 */
- CNST_LIMB (165580141), /* 41 */
- CNST_LIMB (267914296), /* 42 */
- CNST_LIMB (433494437), /* 43 */
- CNST_LIMB (701408733), /* 44 */
- CNST_LIMB (1134903170), /* 45 */
- CNST_LIMB (1836311903), /* 46 */
- CNST_LIMB (2971215073), /* 47 */
- CNST_LIMB (4807526976), /* 48 */
- CNST_LIMB (7778742049), /* 49 */
- CNST_LIMB (12586269025), /* 50 */
- CNST_LIMB (20365011074), /* 51 */
- CNST_LIMB (32951280099), /* 52 */
- CNST_LIMB (53316291173), /* 53 */
- CNST_LIMB (86267571272), /* 54 */
- CNST_LIMB (139583862445), /* 55 */
- CNST_LIMB (225851433717), /* 56 */
- CNST_LIMB (365435296162), /* 57 */
- CNST_LIMB (591286729879), /* 58 */
- CNST_LIMB (956722026041), /* 59 */
- CNST_LIMB (1548008755920), /* 60 */
- CNST_LIMB (2504730781961), /* 61 */
- CNST_LIMB (4052739537881), /* 62 */
- CNST_LIMB (6557470319842), /* 63 */
- CNST_LIMB (10610209857723), /* 64 */
- CNST_LIMB (17167680177565), /* 65 */
- CNST_LIMB (27777890035288), /* 66 */
- CNST_LIMB (44945570212853), /* 67 */
- CNST_LIMB (72723460248141), /* 68 */
- CNST_LIMB (117669030460994), /* 69 */
- CNST_LIMB (190392490709135), /* 70 */
- CNST_LIMB (308061521170129), /* 71 */
- CNST_LIMB (498454011879264), /* 72 */
- CNST_LIMB (806515533049393), /* 73 */
- CNST_LIMB (1304969544928657), /* 74 */
- CNST_LIMB (2111485077978050), /* 75 */
- CNST_LIMB (3416454622906707), /* 76 */
- CNST_LIMB (5527939700884757), /* 77 */
- CNST_LIMB (8944394323791464), /* 78 */
- CNST_LIMB (14472334024676221), /* 79 */
- CNST_LIMB (23416728348467685), /* 80 */
- CNST_LIMB (37889062373143906), /* 81 */
- CNST_LIMB (61305790721611591), /* 82 */
- CNST_LIMB (99194853094755497), /* 83 */
- CNST_LIMB (160500643816367088), /* 84 */
- CNST_LIMB (259695496911122585), /* 85 */
- CNST_LIMB (420196140727489673), /* 86 */
- CNST_LIMB (679891637638612258), /* 87 */
- CNST_LIMB (1100087778366101931), /* 88 */
- CNST_LIMB (1779979416004714189), /* 89 */
- CNST_LIMB (2880067194370816120), /* 90 */
- CNST_LIMB (4660046610375530309), /* 91 */
- CNST_LIMB (7540113804746346429), /* 92 */
- CNST_LIMB (12200160415121876738), /* 93 */
+ CNST_LIMB (0x0), /* 0 */
+ CNST_LIMB (0x1), /* 1 */
+ CNST_LIMB (0x1), /* 2 */
+ CNST_LIMB (0x2), /* 3 */
+ CNST_LIMB (0x3), /* 4 */
+ CNST_LIMB (0x5), /* 5 */
+ CNST_LIMB (0x8), /* 6 */
+ CNST_LIMB (0xD), /* 7 */
+ CNST_LIMB (0x15), /* 8 */
+ CNST_LIMB (0x22), /* 9 */
+ CNST_LIMB (0x37), /* 10 */
+ CNST_LIMB (0x59), /* 11 */
+ CNST_LIMB (0x90), /* 12 */
+ CNST_LIMB (0xE9), /* 13 */
+ CNST_LIMB (0x179), /* 14 */
+ CNST_LIMB (0x262), /* 15 */
+ CNST_LIMB (0x3DB), /* 16 */
+ CNST_LIMB (0x63D), /* 17 */
+ CNST_LIMB (0xA18), /* 18 */
+ CNST_LIMB (0x1055), /* 19 */
+ CNST_LIMB (0x1A6D), /* 20 */
+ CNST_LIMB (0x2AC2), /* 21 */
+ CNST_LIMB (0x452F), /* 22 */
+ CNST_LIMB (0x6FF1), /* 23 */
+ CNST_LIMB (0xB520), /* 24 */
+ CNST_LIMB (0x12511), /* 25 */
+ CNST_LIMB (0x1DA31), /* 26 */
+ CNST_LIMB (0x2FF42), /* 27 */
+ CNST_LIMB (0x4D973), /* 28 */
+ CNST_LIMB (0x7D8B5), /* 29 */
+ CNST_LIMB (0xCB228), /* 30 */
+ CNST_LIMB (0x148ADD), /* 31 */
+ CNST_LIMB (0x213D05), /* 32 */
+ CNST_LIMB (0x35C7E2), /* 33 */
+ CNST_LIMB (0x5704E7), /* 34 */
+ CNST_LIMB (0x8CCCC9), /* 35 */
+ CNST_LIMB (0xE3D1B0), /* 36 */
+ CNST_LIMB (0x1709E79), /* 37 */
+ CNST_LIMB (0x2547029), /* 38 */
+ CNST_LIMB (0x3C50EA2), /* 39 */
+ CNST_LIMB (0x6197ECB), /* 40 */
+ CNST_LIMB (0x9DE8D6D), /* 41 */
+ CNST_LIMB (0xFF80C38), /* 42 */
+ CNST_LIMB (0x19D699A5), /* 43 */
+ CNST_LIMB (0x29CEA5DD), /* 44 */
+ CNST_LIMB (0x43A53F82), /* 45 */
+ CNST_LIMB (0x6D73E55F), /* 46 */
+ CNST_LIMB (0xB11924E1), /* 47 */
+ CNST_LIMB (0x11E8D0A40), /* 48 */
+ CNST_LIMB (0x1CFA62F21), /* 49 */
+ CNST_LIMB (0x2EE333961), /* 50 */
+ CNST_LIMB (0x4BDD96882), /* 51 */
+ CNST_LIMB (0x7AC0CA1E3), /* 52 */
+ CNST_LIMB (0xC69E60A65), /* 53 */
+ CNST_LIMB (0x1415F2AC48), /* 54 */
+ CNST_LIMB (0x207FD8B6AD), /* 55 */
+ CNST_LIMB (0x3495CB62F5), /* 56 */
+ CNST_LIMB (0x5515A419A2), /* 57 */
+ CNST_LIMB (0x89AB6F7C97), /* 58 */
+ CNST_LIMB (0xDEC1139639), /* 59 */
+ CNST_LIMB (0x1686C8312D0), /* 60 */
+ CNST_LIMB (0x2472D96A909), /* 61 */
+ CNST_LIMB (0x3AF9A19BBD9), /* 62 */
+ CNST_LIMB (0x5F6C7B064E2), /* 63 */
+ CNST_LIMB (0x9A661CA20BB), /* 64 */
+ CNST_LIMB (0xF9D297A859D), /* 65 */
+ CNST_LIMB (0x19438B44A658), /* 66 */
+ CNST_LIMB (0x28E0B4BF2BF5), /* 67 */
+ CNST_LIMB (0x42244003D24D), /* 68 */
+ CNST_LIMB (0x6B04F4C2FE42), /* 69 */
+ CNST_LIMB (0xAD2934C6D08F), /* 70 */
+ CNST_LIMB (0x1182E2989CED1), /* 71 */
+ CNST_LIMB (0x1C5575E509F60), /* 72 */
+ CNST_LIMB (0x2DD8587DA6E31), /* 73 */
+ CNST_LIMB (0x4A2DCE62B0D91), /* 74 */
+ CNST_LIMB (0x780626E057BC2), /* 75 */
+ CNST_LIMB (0xC233F54308953), /* 76 */
+ CNST_LIMB (0x13A3A1C2360515), /* 77 */
+ CNST_LIMB (0x1FC6E116668E68), /* 78 */
+ CNST_LIMB (0x336A82D89C937D), /* 79 */
+ CNST_LIMB (0x533163EF0321E5), /* 80 */
+ CNST_LIMB (0x869BE6C79FB562), /* 81 */
+ CNST_LIMB (0xD9CD4AB6A2D747), /* 82 */
+ CNST_LIMB (0x16069317E428CA9), /* 83 */
+ CNST_LIMB (0x23A367C34E563F0), /* 84 */
+ CNST_LIMB (0x39A9FADB327F099), /* 85 */
+ CNST_LIMB (0x5D4D629E80D5489), /* 86 */
+ CNST_LIMB (0x96F75D79B354522), /* 87 */
+ CNST_LIMB (0xF444C01834299AB), /* 88 */
+ CNST_LIMB (0x18B3C1D91E77DECD), /* 89 */
+ CNST_LIMB (0x27F80DDAA1BA7878), /* 90 */
+ CNST_LIMB (0x40ABCFB3C0325745), /* 91 */
+ CNST_LIMB (0x68A3DD8E61ECCFBD), /* 92 */
+ CNST_LIMB (0xA94FAD42221F2702), /* 93 */
};
static const mp_limb_t table2[][2] = {
- {CNST_LIMB(1293530146158671551), CNST_LIMB(1)}, /* 94 */
- {CNST_LIMB(13493690561280548289), CNST_LIMB(1)}, /* 95 */
- {CNST_LIMB(14787220707439219840), CNST_LIMB(2)}, /* 96 */
- {CNST_LIMB(9834167195010216513), CNST_LIMB(4)}, /* 97 */
- {CNST_LIMB(6174643828739884737), CNST_LIMB(7)}, /* 98 */
- {CNST_LIMB(16008811023750101250), CNST_LIMB(11)}, /* 99 */
- {CNST_LIMB(3736710778780434371), CNST_LIMB(19)}, /* 100 */
- {CNST_LIMB(1298777728820984005), CNST_LIMB(31)}, /* 101 */
- {CNST_LIMB(5035488507601418376), CNST_LIMB(50)}, /* 102 */
- {CNST_LIMB(6334266236422402381), CNST_LIMB(81)}, /* 103 */
- {CNST_LIMB(11369754744023820757), CNST_LIMB(131)}, /* 104 */
- {CNST_LIMB(17704020980446223138), CNST_LIMB(212)}, /* 105 */
- {CNST_LIMB(10627031650760492279), CNST_LIMB(344)}, /* 106 */
- {CNST_LIMB(9884308557497163801), CNST_LIMB(557)}, /* 107 */
- {CNST_LIMB(2064596134548104464), CNST_LIMB(902)}, /* 108 */
- {CNST_LIMB(11948904692045268265), CNST_LIMB(1459)}, /* 109 */
- {CNST_LIMB(14013500826593372729), CNST_LIMB(2361)}, /* 110 */
- {CNST_LIMB(7515661444929089378), CNST_LIMB(3821)}, /* 111 */
- {CNST_LIMB(3082418197812910491), CNST_LIMB(6183)}, /* 112 */
- {CNST_LIMB(10598079642741999869), CNST_LIMB(10004)}, /* 113 */
- {CNST_LIMB(13680497840554910360), CNST_LIMB(16187)}, /* 114 */
- {CNST_LIMB(5831833409587358613), CNST_LIMB(26192)}, /* 115 */
- {CNST_LIMB(1065587176432717357), CNST_LIMB(42380)}, /* 116 */
- {CNST_LIMB(6897420586020075970), CNST_LIMB(68572)}, /* 117 */
- {CNST_LIMB(7963007762452793327), CNST_LIMB(110952)}, /* 118 */
- {CNST_LIMB(14860428348472869297), CNST_LIMB(179524)}, /* 119 */
- {CNST_LIMB(4376692037216111008), CNST_LIMB(290477)}, /* 120 */
- {CNST_LIMB(790376311979428689), CNST_LIMB(470002)}, /* 121 */
- {CNST_LIMB(5167068349195539697), CNST_LIMB(760479)}, /* 122 */
- {CNST_LIMB(5957444661174968386), CNST_LIMB(1230481)}, /* 123 */
- {CNST_LIMB(11124513010370508083), CNST_LIMB(1990960)}, /* 124 */
- {CNST_LIMB(17081957671545476469), CNST_LIMB(3221441)}, /* 125 */
- {CNST_LIMB(9759726608206432936), CNST_LIMB(5212402)}, /* 126 */
- {CNST_LIMB(8394940206042357789), CNST_LIMB(8433844)}, /* 127 */
- {CNST_LIMB(18154666814248790725), CNST_LIMB(13646246)}, /* 128 */
- {CNST_LIMB(8102862946581596898), CNST_LIMB(22080091)}, /* 129 */
- {CNST_LIMB(7810785687120836007), CNST_LIMB(35726338)}, /* 130 */
- {CNST_LIMB(15913648633702432905), CNST_LIMB(57806429)}, /* 131 */
- {CNST_LIMB(5277690247113717296), CNST_LIMB(93532768)}, /* 132 */
- {CNST_LIMB(2744594807106598585), CNST_LIMB(151339198)}, /* 133 */
- {CNST_LIMB(8022285054220315881), CNST_LIMB(244871966)}, /* 134 */
- {CNST_LIMB(10766879861326914466), CNST_LIMB(396211164)}, /* 135 */
- {CNST_LIMB(342420841837678731), CNST_LIMB(641083131)}, /* 136 */
- {CNST_LIMB(11109300703164593197), CNST_LIMB(1037294295)}, /* 137 */
- {CNST_LIMB(11451721545002271928), CNST_LIMB(1678377426)}, /* 138 */
- {CNST_LIMB(4114278174457313509), CNST_LIMB(2715671722)}, /* 139 */
- {CNST_LIMB(15565999719459585437), CNST_LIMB(4394049148)}, /* 140 */
- {CNST_LIMB(1233533820207347330), CNST_LIMB(7109720871)}, /* 141 */
- {CNST_LIMB(16799533539666932767), CNST_LIMB(11503770019)}, /* 142 */
- {CNST_LIMB(18033067359874280097), CNST_LIMB(18613490890)}, /* 143 */
- {CNST_LIMB(16385856825831661248), CNST_LIMB(30117260910)}, /* 144 */
- {CNST_LIMB(15972180111996389729), CNST_LIMB(48730751801)}, /* 145 */
- {CNST_LIMB(13911292864118499361), CNST_LIMB(78848012712)}, /* 146 */
- {CNST_LIMB(11436728902405337474), CNST_LIMB(127578764514)}, /* 147 */
- {CNST_LIMB(6901277692814285219), CNST_LIMB(206426777227)}, /* 148 */
- {CNST_LIMB(18338006595219622693), CNST_LIMB(334005541741)}, /* 149 */
- {CNST_LIMB(6792540214324356296), CNST_LIMB(540432318969)}, /* 150 */
- {CNST_LIMB(6683802735834427373), CNST_LIMB(874437860711)}, /* 151 */
- {CNST_LIMB(13476342950158783669), CNST_LIMB(1414870179680)}, /* 152 */
- {CNST_LIMB(1713401612283659426), CNST_LIMB(2289308040392)}, /* 153 */
- {CNST_LIMB(15189744562442443095), CNST_LIMB(3704178220072)}, /* 154 */
- {CNST_LIMB(16903146174726102521), CNST_LIMB(5993486260464)}, /* 155 */
- {CNST_LIMB(13646146663458994000), CNST_LIMB(9697664480537)}, /* 156 */
- {CNST_LIMB(12102548764475544905), CNST_LIMB(15691150741002)}, /* 157 */
- {CNST_LIMB(7301951354224987289), CNST_LIMB(25388815221540)}, /* 158 */
- {CNST_LIMB(957756044990980578), CNST_LIMB(41079965962543)}, /* 159 */
- {CNST_LIMB(8259707399215967867), CNST_LIMB(66468781184083)}, /* 160 */
- {CNST_LIMB(9217463444206948445), CNST_LIMB(107548747146626)}, /* 161 */
- {CNST_LIMB(17477170843422916312), CNST_LIMB(174017528330709)}, /* 162 */
- {CNST_LIMB(8247890213920313141), CNST_LIMB(281566275477336)}, /* 163 */
- {CNST_LIMB(7278316983633677837), CNST_LIMB(455583803808046)}, /* 164 */
- {CNST_LIMB(15526207197553990978), CNST_LIMB(737150079285382)}, /* 165 */
- {CNST_LIMB(4357780107478117199), CNST_LIMB(1192733883093429)}, /* 166 */
- {CNST_LIMB(1437243231322556561), CNST_LIMB(1929883962378812)}, /* 167 */
- {CNST_LIMB(5795023338800673760), CNST_LIMB(3122617845472241)}, /* 168 */
- {CNST_LIMB(7232266570123230321), CNST_LIMB(5052501807851053)}, /* 169 */
- {CNST_LIMB(13027289908923904081), CNST_LIMB(8175119653323294)}, /* 170 */
- {CNST_LIMB(1812812405337582786), CNST_LIMB(13227621461174348)}, /* 171 */
- {CNST_LIMB(14840102314261486867), CNST_LIMB(21402741114497642)}, /* 172 */
- {CNST_LIMB(16652914719599069653), CNST_LIMB(34630362575671990)}, /* 173 */
- {CNST_LIMB(13046272960151004904), CNST_LIMB(56033103690169633)}, /* 174 */
- {CNST_LIMB(11252443606040522941), CNST_LIMB(90663466265841624)}, /* 175 */
- {CNST_LIMB(5851972492481976229), CNST_LIMB(146696569956011258)}, /* 176 */
- {CNST_LIMB(17104416098522499170), CNST_LIMB(237360036221852882)}, /* 177 */
- {CNST_LIMB(4509644517294923783), CNST_LIMB(384056606177864141)}, /* 178 */
- {CNST_LIMB(3167316542107871337), CNST_LIMB(621416642399717024)}, /* 179 */
- {CNST_LIMB(7676961059402795120), CNST_LIMB(1005473248577581165)}, /* 180 */
- {CNST_LIMB(10844277601510666457), CNST_LIMB(1626889890977298189)}, /* 181 */
- {CNST_LIMB(74494587203909961), CNST_LIMB(2632363139554879355)}, /* 182 */
- {CNST_LIMB(10918772188714576418), CNST_LIMB(4259253030532177544)}, /* 183 */
- {CNST_LIMB(10993266775918486379), CNST_LIMB(6891616170087056899)}, /* 184 */
- {CNST_LIMB(3465294890923511181), CNST_LIMB(11150869200619234444)}, /* 185 */
- {CNST_LIMB(14458561666841997560), CNST_LIMB(18042485370706291343)}, /* 186 */
+ {CNST_LIMB(0x11F38AD0840BF6BF), CNST_LIMB(0x1)}, /* 94 */
+ {CNST_LIMB(0xBB433812A62B1DC1), CNST_LIMB(0x1)}, /* 95 */
+ {CNST_LIMB(0xCD36C2E32A371480), CNST_LIMB(0x2)}, /* 96 */
+ {CNST_LIMB(0x8879FAF5D0623241), CNST_LIMB(0x4)}, /* 97 */
+ {CNST_LIMB(0x55B0BDD8FA9946C1), CNST_LIMB(0x7)}, /* 98 */
+ {CNST_LIMB(0xDE2AB8CECAFB7902), CNST_LIMB(0xB)}, /* 99 */
+ {CNST_LIMB(0x33DB76A7C594BFC3), CNST_LIMB(0x13)}, /* 100 */
+ {CNST_LIMB(0x12062F76909038C5), CNST_LIMB(0x1F)}, /* 101 */
+ {CNST_LIMB(0x45E1A61E5624F888), CNST_LIMB(0x32)}, /* 102 */
+ {CNST_LIMB(0x57E7D594E6B5314D), CNST_LIMB(0x51)}, /* 103 */
+ {CNST_LIMB(0x9DC97BB33CDA29D5), CNST_LIMB(0x83)}, /* 104 */
+ {CNST_LIMB(0xF5B15148238F5B22), CNST_LIMB(0xD4)}, /* 105 */
+ {CNST_LIMB(0x937ACCFB606984F7), CNST_LIMB(0x158)}, /* 106 */
+ {CNST_LIMB(0x892C1E4383F8E019), CNST_LIMB(0x22D)}, /* 107 */
+ {CNST_LIMB(0x1CA6EB3EE4626510), CNST_LIMB(0x386)}, /* 108 */
+ {CNST_LIMB(0xA5D30982685B4529), CNST_LIMB(0x5B3)}, /* 109 */
+ {CNST_LIMB(0xC279F4C14CBDAA39), CNST_LIMB(0x939)}, /* 110 */
+ {CNST_LIMB(0x684CFE43B518EF62), CNST_LIMB(0xEED)}, /* 111 */
+ {CNST_LIMB(0x2AC6F30501D6999B), CNST_LIMB(0x1827)}, /* 112 */
+ {CNST_LIMB(0x9313F148B6EF88FD), CNST_LIMB(0x2714)}, /* 113 */
+ {CNST_LIMB(0xBDDAE44DB8C62298), CNST_LIMB(0x3F3B)}, /* 114 */
+ {CNST_LIMB(0x50EED5966FB5AB95), CNST_LIMB(0x6650)}, /* 115 */
+ {CNST_LIMB(0xEC9B9E4287BCE2D), CNST_LIMB(0xA58C)}, /* 116 */
+ {CNST_LIMB(0x5FB88F7A983179C2), CNST_LIMB(0x10BDC)}, /* 117 */
+ {CNST_LIMB(0x6E82495EC0AD47EF), CNST_LIMB(0x1B168)}, /* 118 */
+ {CNST_LIMB(0xCE3AD8D958DEC1B1), CNST_LIMB(0x2BD44)}, /* 119 */
+ {CNST_LIMB(0x3CBD2238198C09A0), CNST_LIMB(0x46EAD)}, /* 120 */
+ {CNST_LIMB(0xAF7FB11726ACB51), CNST_LIMB(0x72BF2)}, /* 121 */
+ {CNST_LIMB(0x47B51D498BF6D4F1), CNST_LIMB(0xB9A9F)}, /* 122 */
+ {CNST_LIMB(0x52AD185AFE61A042), CNST_LIMB(0x12C691)}, /* 123 */
+ {CNST_LIMB(0x9A6235A48A587533), CNST_LIMB(0x1E6130)}, /* 124 */
+ {CNST_LIMB(0xED0F4DFF88BA1575), CNST_LIMB(0x3127C1)}, /* 125 */
+ {CNST_LIMB(0x877183A413128AA8), CNST_LIMB(0x4F88F2)}, /* 126 */
+ {CNST_LIMB(0x7480D1A39BCCA01D), CNST_LIMB(0x80B0B4)}, /* 127 */
+ {CNST_LIMB(0xFBF25547AEDF2AC5), CNST_LIMB(0xD039A6)}, /* 128 */
+ {CNST_LIMB(0x707326EB4AABCAE2), CNST_LIMB(0x150EA5B)}, /* 129 */
+ {CNST_LIMB(0x6C657C32F98AF5A7), CNST_LIMB(0x2212402)}, /* 130 */
+ {CNST_LIMB(0xDCD8A31E4436C089), CNST_LIMB(0x3720E5D)}, /* 131 */
+ {CNST_LIMB(0x493E1F513DC1B630), CNST_LIMB(0x5933260)}, /* 132 */
+ {CNST_LIMB(0x2616C26F81F876B9), CNST_LIMB(0x90540BE)}, /* 133 */
+ {CNST_LIMB(0x6F54E1C0BFBA2CE9), CNST_LIMB(0xE98731E)}, /* 134 */
+ {CNST_LIMB(0x956BA43041B2A3A2), CNST_LIMB(0x179DB3DC)}, /* 135 */
+ {CNST_LIMB(0x4C085F1016CD08B), CNST_LIMB(0x263626FB)}, /* 136 */
+ {CNST_LIMB(0x9A2C2A21431F742D), CNST_LIMB(0x3DD3DAD7)}, /* 137 */
+ {CNST_LIMB(0x9EECB012448C44B8), CNST_LIMB(0x640A01D2)}, /* 138 */
+ {CNST_LIMB(0x3918DA3387ABB8E5), CNST_LIMB(0xA1DDDCAA)}, /* 139 */
+ {CNST_LIMB(0xD8058A45CC37FD9D), CNST_LIMB(0x105E7DE7C)}, /* 140 */
+ {CNST_LIMB(0x111E647953E3B682), CNST_LIMB(0x1A7C5BB27)}, /* 141 */
+ {CNST_LIMB(0xE923EEBF201BB41F), CNST_LIMB(0x2ADAD99A3)}, /* 142 */
+ {CNST_LIMB(0xFA42533873FF6AA1), CNST_LIMB(0x4557354CA)}, /* 143 */
+ {CNST_LIMB(0xE36641F7941B1EC0), CNST_LIMB(0x70320EE6E)}, /* 144 */
+ {CNST_LIMB(0xDDA89530081A8961), CNST_LIMB(0xB58944339)}, /* 145 */
+ {CNST_LIMB(0xC10ED7279C35A821), CNST_LIMB(0x125BB531A8)}, /* 146 */
+ {CNST_LIMB(0x9EB76C57A4503182), CNST_LIMB(0x1DB44974E2)}, /* 147 */
+ {CNST_LIMB(0x5FC6437F4085D9A3), CNST_LIMB(0x300FFEA68B)}, /* 148 */
+ {CNST_LIMB(0xFE7DAFD6E4D60B25), CNST_LIMB(0x4DC4481B6D)}, /* 149 */
+ {CNST_LIMB(0x5E43F356255BE4C8), CNST_LIMB(0x7DD446C1F9)}, /* 150 */
+ {CNST_LIMB(0x5CC1A32D0A31EFED), CNST_LIMB(0xCB988EDD67)}, /* 151 */
+ {CNST_LIMB(0xBB0596832F8DD4B5), CNST_LIMB(0x1496CD59F60)}, /* 152 */
+ {CNST_LIMB(0x17C739B039BFC4A2), CNST_LIMB(0x21505647CC8)}, /* 153 */
+ {CNST_LIMB(0xD2CCD033694D9957), CNST_LIMB(0x35E723A1C28)}, /* 154 */
+ {CNST_LIMB(0xEA9409E3A30D5DF9), CNST_LIMB(0x573779E98F0)}, /* 155 */
+ {CNST_LIMB(0xBD60DA170C5AF750), CNST_LIMB(0x8D1E9D8B519)}, /* 156 */
+ {CNST_LIMB(0xA7F4E3FAAF685549), CNST_LIMB(0xE4561774E0A)}, /* 157 */
+ {CNST_LIMB(0x6555BE11BBC34C99), CNST_LIMB(0x17174B500324)}, /* 158 */
+ {CNST_LIMB(0xD4AA20C6B2BA1E2), CNST_LIMB(0x255CACC7512F)}, /* 159 */
+ {CNST_LIMB(0x72A0601E26EEEE7B), CNST_LIMB(0x3C73F8175453)}, /* 160 */
+ {CNST_LIMB(0x7FEB022A921A905D), CNST_LIMB(0x61D0A4DEA582)}, /* 161 */
+ {CNST_LIMB(0xF28B6248B9097ED8), CNST_LIMB(0x9E449CF5F9D5)}, /* 162 */
+ {CNST_LIMB(0x727664734B240F35), CNST_LIMB(0x1001541D49F58)}, /* 163 */
+ {CNST_LIMB(0x6501C6BC042D8E0D), CNST_LIMB(0x19E59DECA992E)}, /* 164 */
+ {CNST_LIMB(0xD7782B2F4F519D42), CNST_LIMB(0x29E6F209F3886)}, /* 165 */
+ {CNST_LIMB(0x3C79F1EB537F2B4F), CNST_LIMB(0x43CC8FF69D1B5)}, /* 166 */
+ {CNST_LIMB(0x13F21D1AA2D0C891), CNST_LIMB(0x6DB3820090A3C)}, /* 167 */
+ {CNST_LIMB(0x506C0F05F64FF3E0), CNST_LIMB(0xB18011F72DBF1)}, /* 168 */
+ {CNST_LIMB(0x645E2C209920BC71), CNST_LIMB(0x11F3393F7BE62D)}, /* 169 */
+ {CNST_LIMB(0xB4CA3B268F70B051), CNST_LIMB(0x1D0B3A5EEEC21E)}, /* 170 */
+ {CNST_LIMB(0x1928674728916CC2), CNST_LIMB(0x2EFE739E6AA84C)}, /* 171 */
+ {CNST_LIMB(0xCDF2A26DB8021D13), CNST_LIMB(0x4C09ADFD596A6A)}, /* 172 */
+ {CNST_LIMB(0xE71B09B4E09389D5), CNST_LIMB(0x7B08219BC412B6)}, /* 173 */
+ {CNST_LIMB(0xB50DAC229895A6E8), CNST_LIMB(0xC711CF991D7D21)}, /* 174 */
+ {CNST_LIMB(0x9C28B5D7792930BD), CNST_LIMB(0x14219F134E18FD8)}, /* 175 */
+ {CNST_LIMB(0x513661FA11BED7A5), CNST_LIMB(0x2092BC0CDFF0CFA)}, /* 176 */
+ {CNST_LIMB(0xED5F17D18AE80862), CNST_LIMB(0x34B45B202E09CD2)}, /* 177 */
+ {CNST_LIMB(0x3E9579CB9CA6E007), CNST_LIMB(0x5547172D0DFA9CD)}, /* 178 */
+ {CNST_LIMB(0x2BF4919D278EE869), CNST_LIMB(0x89FB724D3C046A0)}, /* 179 */
+ {CNST_LIMB(0x6A8A0B68C435C870), CNST_LIMB(0xDF42897A49FF06D)}, /* 180 */
+ {CNST_LIMB(0x967E9D05EBC4B0D9), CNST_LIMB(0x1693DFBC7860370D)}, /* 181 */
+ {CNST_LIMB(0x108A86EAFFA7949), CNST_LIMB(0x248808541D00277B)}, /* 182 */
+ {CNST_LIMB(0x978745749BBF2A22), CNST_LIMB(0x3B1BE81095605E88)}, /* 183 */
+ {CNST_LIMB(0x988FEDE34BB9A36B), CNST_LIMB(0x5FA3F064B2608603)}, /* 184 */
+ {CNST_LIMB(0x30173357E778CD8D), CNST_LIMB(0x9ABFD87547C0E48C)}, /* 185 */
+ {CNST_LIMB(0xC8A7213B333270F8), CNST_LIMB(0xFA63C8D9FA216A8F)}, /* 186 */
};
+/* total 2240 bytes if BITS_PER_LIMB==64 */
#endif
@@ -675,8 +677,8 @@ generate (int bpml)
if (mpz_sizeinbase(fn,2) <= bpml)
{
- printf (" CNST_LIMB (");
- mpz_out_str (stdout, 10, fn);
+ printf (" CNST_LIMB (0x");
+ mpz_out_str (stdout, -16, fn);
printf("), /* %d */\n", n);
bytes += bpml/8;
}
@@ -685,10 +687,10 @@ generate (int bpml)
mpz_fdiv_q_2exp (hi, fn, bpml);
mpz_fdiv_r_2exp (lo, fn, bpml);
- printf (" {CNST_LIMB(");
- mpz_out_str (stdout, 10, lo);
- printf("), CNST_LIMB(");
- mpz_out_str (stdout, 10, hi);
+ printf (" {CNST_LIMB(0x");
+ mpz_out_str (stdout, -16, lo);
+ printf("), CNST_LIMB(0x");
+ mpz_out_str (stdout, -16, hi);
printf(")}, /* %d */\n", n);
bytes += 2 * bpml/8;
}