17 {
21
22#define b1 base
23#define b1n n
25 rn = n;
28 rn <<= 1;
29 rn -= (sq[rn - 1] == 0) ? 1 : 0;
31 int i = 62 - lz;
32 exp <<= lz + 1;
33
34
35
36
37
38 for ( ; i > 0; ) {
40 if (lz == 0) {
42
44 rn <<= 1;
45 rn -= (sq[rn - 1] == 0) ? 1 : 0;
46 --i;
47 exp <<= 1;
48 } else {
49 int j = 2;
50 if (lz & 1) {
53 rn <<= 1;
54 rn -= (sq[rn - 1] == 0);
55 ++j;
56 for (; j <= lz; j += 2) {
58 rn <<= 1;
59 rn -= (dst[rn - 1] == 0);
61 rn <<= 1;
62 rn -= (sq[rn - 1] == 0);
63 }
64 } else {
65 for (; j <= lz; j += 2) {
67 rn <<= 1;
68 rn -= (dst[rn - 1] == 0);
70 rn <<= 1;
71 rn -= (sq[rn - 1] == 0);
72 }
73 }
74
75 i -= lz;
76 exp <<= lz;
77 }
78 }
80
82
84 return rn;
85
86#undef b1
87#undef b1n
88#undef new_b
89}
#define lmmp_copy(dst, src, n)
#define lmmp_debug_assert(x)
#define lmmp_param_assert(x)
int lmmp_leading_zeros_(mp_limb_t x)
计算一个单精度数(limb)中前导零的个数
void lmmp_sqr_(mp_ptr dst, mp_srcptr numa, mp_size_t na)
大数平方操作 [dst,2*na] = [numa,na]^2
#define TALLOC_TYPE(n, type)