38 {
39 if (na == 0 && nb != 0) {
41 return nb;
42 } else if (na != 0 && nb == 0) {
44 return na;
45 } else if (na == 0 && nb == 0) {
46 dst[0] = 0;
47 return 0;
48 } else if (na < 0 && nb < 0) {
49 na = -na;
50 nb = -nb;
51 if (na > nb) {
52 dst[na] =
lmmp_add_(dst, numa, na, numb, nb);
53 return dst[na] == 0 ? -na : -(na + 1);
54 } else {
55 dst[nb] =
lmmp_add_(dst, numb, nb, numa, na);
56 return dst[nb] == 0 ? -nb : -(nb + 1);
57 }
58 } else if (na > 0 && nb > 0) {
59 if (na > nb) {
60 dst[na] =
lmmp_add_(dst, numa, na, numb, nb);
61 return dst[na] == 0 ? na : na + 1;
62 } else {
63 dst[nb] =
lmmp_add_(dst, numb, nb, numa, na);
64 return dst[nb] == 0 ? nb : nb + 1;
65 }
66 } else if (na < 0 && nb > 0) {
67 na = -na;
68 if (na < nb) {
70 while (dst[nb - 1] == 0 && nb > 0) {
71 --nb;
72 }
73 return nb;
74 } else if (na > nb) {
76 while (dst[na - 1] == 0 && na > 0) {
77 --na;
78 }
79 return -na;
80 } else {
82 if (cmp < 0) {
84 while (dst[nb - 1] == 0 && nb > 0) {
85 --nb;
86 }
87 return nb;
88 } else if (cmp > 0) {
90 while (dst[na - 1] == 0 && na > 0) {
91 --na;
92 }
93 return -na;
94 } else {
95 dst[0] = 0;
96 return 0;
97 }
98 }
99 } else {
100
101 nb = -nb;
102 if (na < nb) {
104 while (dst[nb - 1] == 0 && nb > 0) {
105 --nb;
106 }
107 return -nb;
108 } else if (na > nb) {
110 while (dst[na - 1] == 0 && na > 0) {
111 --na;
112 }
113 return na;
114 } else {
116 if (cmp < 0) {
118 while (dst[nb - 1] == 0 && nb > 0) {
119 --nb;
120 }
121 return -nb;
122 } else if (cmp > 0) {
124 while (dst[na - 1] == 0 && na > 0) {
125 --na;
126 }
127 return na;
128 } else {
129 dst[0] = 0;
130 return 0;
131 }
132 }
133 }
134}
#define lmmp_copy(dst, src, n)
static mp_limb_t lmmp_add_(mp_ptr dst, mp_srcptr numa, mp_size_t na, mp_srcptr numb, mp_size_t nb)
大数加法静态内联函数 [dst,na]=[numa,na]+[numb,nb]
static int lmmp_cmp_(mp_srcptr numa, mp_srcptr numb, mp_size_t n)
大数比较函数(内联)
static mp_limb_t lmmp_sub_(mp_ptr dst, mp_srcptr numa, mp_size_t na, mp_srcptr numb, mp_size_t nb)
大数减法静态内联函数 [dst,na]=[numa,na]-[numb,nb]