27
|
1 /* Long (arbitrary precision) integer object implementation */
|
|
2
|
|
3 /* XXX The functional organization of this file is terrible */
|
|
4
|
|
5 #include "Python.h"
|
|
6 #include "longintrepr.h"
|
|
7
|
|
8
|
|
9 /* convert a PyLong of size 1, 0 or -1 to an sdigit */
|
|
10 #define MEDIUM_VALUE(x) (Py_SIZE(x) < 0 ? -(sdigit)(x)->ob_digit[0] : \
|
|
11 (Py_SIZE(x) == 0 ? (sdigit)0 : \
|
|
12 (sdigit)(x)->ob_digit[0]))
|
|
13 #define ABS(x) ((x) < 0 ? -(x) : (x))
|
|
14
|
|
15 /* If a freshly-allocated long is already shared, it must
|
|
16 be a small integer, so negating it must go to PyLong_FromLong */
|
|
17 #define NEGATE(x) \
|
|
18 do if (Py_REFCNT(x) == 1) Py_SIZE(x) = -Py_SIZE(x); \
|
|
19 else { PyObject* tmp=PyLong_FromLong(-MEDIUM_VALUE(x)); \
|
|
20 Py_DECREF(x); (x) = (PyLongObject*)tmp; } \
|
|
21 while(0)
|
|
22 /* For long multiplication, use the O(N**2) school algorithm unless
|
|
23 * both operands contain more than KARATSUBA_CUTOFF digits (this
|
|
24 * being an internal Python long digit, in base BASE).
|
|
25 */
|
|
26 #define KARATSUBA_CUTOFF 70
|
|
27 #define KARATSUBA_SQUARE_CUTOFF (2 * KARATSUBA_CUTOFF)
|
|
28
|
|
29 /* For exponentiation, use the binary left-to-right algorithm
|
|
30 * unless the exponent contains more than FIVEARY_CUTOFF digits.
|
|
31 * In that case, do 5 bits at a time. The potential drawback is that
|
|
32 * a table of 2**5 intermediate results is computed.
|
|
33 */
|
|
34 #define FIVEARY_CUTOFF 8
|
|
35
|
|
36 #undef MIN
|
|
37 #undef MAX
|
|
38 #define MAX(x, y) ((x) < (y) ? (y) : (x))
|
|
39 #define MIN(x, y) ((x) > (y) ? (y) : (x))
|
|
40
|
|
41 #define SIGCHECK(PyTryBlock) \
|
|
42 do { \
|
|
43 if (PyErr_CheckSignals()) PyTryBlock \
|
|
44 } while(0)
|
|
45
|
|
46 /* Normalize (remove leading zeros from) a long int object.
|
|
47 Doesn't attempt to free the storage--in most cases, due to the nature
|
|
48 of the algorithms used, this could save at most be one word anyway. */
|
|
49
|
|
50 static PyLongObject *
|
|
51 long_normalize(register PyLongObject *v)
|
|
52 {
|
|
53 Py_ssize_t j = ABS(Py_SIZE(v));
|
|
54 Py_ssize_t i = j;
|
|
55
|
|
56 while (i > 0 && v->ob_digit[i-1] == 0)
|
|
57 --i;
|
|
58 if (i != j)
|
|
59 Py_SIZE(v) = (Py_SIZE(v) < 0) ? -(i) : i;
|
|
60 return v;
|
|
61 }
|
|
62
|
|
63 /* Allocate a new long int object with size digits.
|
|
64 Return NULL and set exception if we run out of memory. */
|
|
65
|
|
66 #define MAX_LONG_DIGITS \
|
|
67 ((PY_SSIZE_T_MAX - offsetof(PyLongObject, ob_digit))/sizeof(digit))
|
|
68
|
|
69 PyLongObject *
|
|
70 _PyLong_New(Py_ssize_t size)
|
|
71 {
|
|
72 PyLongObject *result;
|
|
73 /* Number of bytes needed is: offsetof(PyLongObject, ob_digit) +
|
|
74 sizeof(digit)*size. Previous incarnations of this code used
|
|
75 sizeof(PyVarObject) instead of the offsetof, but this risks being
|
|
76 incorrect in the presence of padding between the PyVarObject header
|
|
77 and the digits. */
|
|
78 if (size > (Py_ssize_t)MAX_LONG_DIGITS) {
|
|
79 PyErr_SetString(PyExc_OverflowError,
|
|
80 "too many digits in integer");
|
|
81 return NULL;
|
|
82 }
|
|
83 result = PyObject_MALLOC(offsetof(PyLongObject, ob_digit) +
|
|
84 size*sizeof(digit));
|
|
85 if (!result) {
|
|
86 PyErr_NoMemory();
|
|
87 return NULL;
|
|
88 }
|
|
89 return (PyLongObject*)PyObject_INIT_VAR(result, &PyLong_Type, size);
|
|
90 }
|
|
91
|
|
92 PyObject *
|
|
93 _PyLong_Copy(PyLongObject *src)
|
|
94 {
|
|
95 PyLongObject *result;
|
|
96 Py_ssize_t i;
|
|
97
|
|
98 assert(src != NULL);
|
|
99 i = Py_SIZE(src);
|
|
100 if (i < 0)
|
|
101 i = -(i);
|
|
102 if (i < 2) {
|
|
103 sdigit ival = src->ob_digit[0];
|
|
104 if (Py_SIZE(src) < 0)
|
|
105 ival = -ival;
|
|
106 CHECK_SMALL_INT(ival);
|
|
107 }
|
|
108 result = _PyLong_New(i);
|
|
109 if (result != NULL) {
|
|
110 Py_SIZE(result) = Py_SIZE(src);
|
|
111 while (--i >= 0)
|
|
112 result->ob_digit[i] = src->ob_digit[i];
|
|
113 }
|
|
114 return (PyObject *)result;
|
|
115 }
|
|
116
|
|
117 /* Create a new long int object from a C long int */
|
|
118
|
|
119 PyObject *
|
|
120 PyLong_FromLong(long ival)
|
|
121 {
|
|
122 PyLongObject *v;
|
|
123 unsigned long abs_ival;
|
|
124 unsigned long t; /* unsigned so >> doesn't propagate sign bit */
|
|
125 int ndigits = 0;
|
|
126 int sign = 1;
|
|
127
|
|
128 if (ival < 0) {
|
|
129 /* negate: can't write this as abs_ival = -ival since that
|
|
130 invokes undefined behaviour when ival is LONG_MIN */
|
|
131 abs_ival = 0U-(unsigned long)ival;
|
|
132 sign = -1;
|
|
133 }
|
|
134 else {
|
|
135 abs_ival = (unsigned long)ival;
|
|
136 }
|
|
137
|
|
138 /* Fast path for single-digit ints */
|
|
139 if (!(abs_ival >> PyLong_SHIFT)) {
|
|
140 v = _PyLong_New(1);
|
|
141 if (v) {
|
|
142 Py_SIZE(v) = sign;
|
|
143 v->ob_digit[0] = Py_SAFE_DOWNCAST(
|
|
144 abs_ival, unsigned long, digit);
|
|
145 }
|
|
146 return (PyObject*)v;
|
|
147 }
|
|
148
|
|
149 #if PyLong_SHIFT==15
|
|
150 /* 2 digits */
|
|
151 if (!(abs_ival >> 2*PyLong_SHIFT)) {
|
|
152 v = _PyLong_New(2);
|
|
153 if (v) {
|
|
154 Py_SIZE(v) = 2*sign;
|
|
155 v->ob_digit[0] = Py_SAFE_DOWNCAST(
|
|
156 abs_ival & PyLong_MASK, unsigned long, digit);
|
|
157 v->ob_digit[1] = Py_SAFE_DOWNCAST(
|
|
158 abs_ival >> PyLong_SHIFT, unsigned long, digit);
|
|
159 }
|
|
160 return (PyObject*)v;
|
|
161 }
|
|
162 #endif
|
|
163
|
|
164 /* Larger numbers: loop to determine number of digits */
|
|
165 t = abs_ival;
|
|
166 while (t) {
|
|
167 ++ndigits;
|
|
168 t >>= PyLong_SHIFT;
|
|
169 }
|
|
170 v = _PyLong_New(ndigits);
|
|
171 if (v != NULL) {
|
|
172 digit *p = v->ob_digit;
|
|
173 Py_SIZE(v) = ndigits*sign;
|
|
174 t = abs_ival;
|
|
175 while (t) {
|
|
176 *p++ = Py_SAFE_DOWNCAST(
|
|
177 t & PyLong_MASK, unsigned long, digit);
|
|
178 t >>= PyLong_SHIFT;
|
|
179 }
|
|
180 }
|
|
181 return (PyObject *)v;
|
|
182 }
|
|
183
|
|
184 /* Create a new long int object from a C unsigned long int */
|
|
185
|
|
186 PyObject *
|
|
187 PyLong_FromUnsignedLong(unsigned long ival)
|
|
188 {
|
|
189 PyLongObject *v;
|
|
190 unsigned long t;
|
|
191 int ndigits = 0;
|
|
192
|
|
193 if (ival < PyLong_BASE)
|
|
194 return PyLong_FromLong(ival);
|
|
195 /* Count the number of Python digits. */
|
|
196 t = (unsigned long)ival;
|
|
197 while (t) {
|
|
198 ++ndigits;
|
|
199 t >>= PyLong_SHIFT;
|
|
200 }
|
|
201 v = _PyLong_New(ndigits);
|
|
202 if (v != NULL) {
|
|
203 digit *p = v->ob_digit;
|
|
204 Py_SIZE(v) = ndigits;
|
|
205 while (ival) {
|
|
206 *p++ = (digit)(ival & PyLong_MASK);
|
|
207 ival >>= PyLong_SHIFT;
|
|
208 }
|
|
209 }
|
|
210 return (PyObject *)v;
|
|
211 }
|
|
212
|
|
213 /* Create a new long int object from a C double */
|
|
214
|
|
215 PyObject *
|
|
216 PyLong_FromDouble(double dval)
|
|
217 {
|
|
218 PyLongObject *v;
|
|
219 double frac;
|
|
220 int i, ndig, expo, neg;
|
|
221 neg = 0;
|
|
222 if (Py_IS_INFINITY(dval)) {
|
|
223 PyErr_SetString(PyExc_OverflowError,
|
|
224 "cannot convert float infinity to integer");
|
|
225 return NULL;
|
|
226 }
|
|
227 if (Py_IS_NAN(dval)) {
|
|
228 PyErr_SetString(PyExc_ValueError,
|
|
229 "cannot convert float NaN to integer");
|
|
230 return NULL;
|
|
231 }
|
|
232 if (dval < 0.0) {
|
|
233 neg = 1;
|
|
234 dval = -dval;
|
|
235 }
|
|
236 frac = frexp(dval, &expo); /* dval = frac*2**expo; 0.0 <= frac < 1.0 */
|
|
237 if (expo <= 0)
|
|
238 return PyLong_FromLong(0L);
|
|
239 ndig = (expo-1) / PyLong_SHIFT + 1; /* Number of 'digits' in result */
|
|
240 v = _PyLong_New(ndig);
|
|
241 if (v == NULL)
|
|
242 return NULL;
|
|
243 frac = ldexp(frac, (expo-1) % PyLong_SHIFT + 1);
|
|
244 for (i = ndig; --i >= 0; ) {
|
|
245 digit bits = (digit)frac;
|
|
246 v->ob_digit[i] = bits;
|
|
247 frac = frac - (double)bits;
|
|
248 frac = ldexp(frac, PyLong_SHIFT);
|
|
249 }
|
|
250 if (neg)
|
|
251 Py_SIZE(v) = -(Py_SIZE(v));
|
|
252 return (PyObject *)v;
|
|
253 }
|
|
254
|
|
255 /* Checking for overflow in PyLong_AsLong is a PITA since C doesn't define
|
|
256 * anything about what happens when a signed integer operation overflows,
|
|
257 * and some compilers think they're doing you a favor by being "clever"
|
|
258 * then. The bit pattern for the largest postive signed long is
|
|
259 * (unsigned long)LONG_MAX, and for the smallest negative signed long
|
|
260 * it is abs(LONG_MIN), which we could write -(unsigned long)LONG_MIN.
|
|
261 * However, some other compilers warn about applying unary minus to an
|
|
262 * unsigned operand. Hence the weird "0-".
|
|
263 */
|
|
264 #define PY_ABS_LONG_MIN (0-(unsigned long)LONG_MIN)
|
|
265 #define PY_ABS_SSIZE_T_MIN (0-(size_t)PY_SSIZE_T_MIN)
|
|
266
|
|
267 /* Get a C long int from a long int object or any object that has an __int__
|
|
268 method.
|
|
269
|
|
270 On overflow, return -1 and set *overflow to 1 or -1 depending on the sign of
|
|
271 the result. Otherwise *overflow is 0.
|
|
272
|
|
273 For other errors (e.g., TypeError), return -1 and set an error condition.
|
|
274 In this case *overflow will be 0.
|
|
275 */
|
|
276
|
|
277 long
|
|
278 PyLong_AsLongAndOverflow(PyObject *vv, int *overflow)
|
|
279 {
|
|
280 /* This version by Tim Peters */
|
|
281 register PyLongObject *v;
|
|
282 unsigned long x, prev;
|
|
283 long res;
|
|
284 Py_ssize_t i;
|
|
285 int sign;
|
|
286 int do_decref = 0; /* if nb_int was called */
|
|
287
|
|
288 *overflow = 0;
|
|
289 if (vv == NULL) {
|
|
290 PyErr_BadInternalCall();
|
|
291 return -1;
|
|
292 }
|
|
293
|
|
294 if (!PyLong_Check(vv)) {
|
|
295 PyNumberMethods *nb;
|
|
296 nb = vv->ob_type->tp_as_number;
|
|
297 if (nb == NULL || nb->nb_int == NULL) {
|
|
298 PyErr_SetString(PyExc_TypeError,
|
|
299 "an integer is required");
|
|
300 return -1;
|
|
301 }
|
|
302 vv = (*nb->nb_int) (vv);
|
|
303 if (vv == NULL)
|
|
304 return -1;
|
|
305 do_decref = 1;
|
|
306 if (!PyLong_Check(vv)) {
|
|
307 Py_DECREF(vv);
|
|
308 PyErr_SetString(PyExc_TypeError,
|
|
309 "nb_int should return int object");
|
|
310 return -1;
|
|
311 }
|
|
312 }
|
|
313
|
|
314 res = -1;
|
|
315 v = (PyLongObject *)vv;
|
|
316 i = Py_SIZE(v);
|
|
317
|
|
318 switch (i) {
|
|
319 case -1:
|
|
320 res = -(sdigit)v->ob_digit[0];
|
|
321 break;
|
|
322 case 0:
|
|
323 res = 0;
|
|
324 break;
|
|
325 case 1:
|
|
326 res = v->ob_digit[0];
|
|
327 break;
|
|
328 default:
|
|
329 sign = 1;
|
|
330 x = 0;
|
|
331 if (i < 0) {
|
|
332 sign = -1;
|
|
333 i = -(i);
|
|
334 }
|
|
335 while (--i >= 0) {
|
|
336 prev = x;
|
|
337 x = (x << PyLong_SHIFT) | v->ob_digit[i];
|
|
338 if ((x >> PyLong_SHIFT) != prev) {
|
|
339 *overflow = sign;
|
|
340 goto exit;
|
|
341 }
|
|
342 }
|
|
343 /* Haven't lost any bits, but casting to long requires extra
|
|
344 * care (see comment above).
|
|
345 */
|
|
346 if (x <= (unsigned long)LONG_MAX) {
|
|
347 res = (long)x * sign;
|
|
348 }
|
|
349 else if (sign < 0 && x == PY_ABS_LONG_MIN) {
|
|
350 res = LONG_MIN;
|
|
351 }
|
|
352 else {
|
|
353 *overflow = sign;
|
|
354 /* res is already set to -1 */
|
|
355 }
|
|
356 }
|
|
357 exit:
|
|
358 if (do_decref) {
|
|
359 Py_DECREF(vv);
|
|
360 }
|
|
361 return res;
|
|
362 }
|
|
363
|
|
364 /* Get a C long int from a long int object or any object that has an __int__
|
|
365 method. Return -1 and set an error if overflow occurs. */
|
|
366
|
|
367 long
|
|
368 PyLong_AsLong(PyObject *obj)
|
|
369 {
|
|
370 int overflow;
|
|
371 long result = PyLong_AsLongAndOverflow(obj, &overflow);
|
|
372 if (overflow) {
|
|
373 /* XXX: could be cute and give a different
|
|
374 message for overflow == -1 */
|
|
375 PyErr_SetString(PyExc_OverflowError,
|
|
376 "Python int too large to convert to C long");
|
|
377 }
|
|
378 return result;
|
|
379 }
|
|
380
|
|
381 /* Get a Py_ssize_t from a long int object.
|
|
382 Returns -1 and sets an error condition if overflow occurs. */
|
|
383
|
|
384 Py_ssize_t
|
|
385 PyLong_AsSsize_t(PyObject *vv) {
|
|
386 register PyLongObject *v;
|
|
387 size_t x, prev;
|
|
388 Py_ssize_t i;
|
|
389 int sign;
|
|
390
|
|
391 if (vv == NULL) {
|
|
392 PyErr_BadInternalCall();
|
|
393 return -1;
|
|
394 }
|
|
395 if (!PyLong_Check(vv)) {
|
|
396 PyErr_SetString(PyExc_TypeError, "an integer is required");
|
|
397 return -1;
|
|
398 }
|
|
399
|
|
400 v = (PyLongObject *)vv;
|
|
401 i = Py_SIZE(v);
|
|
402 switch (i) {
|
|
403 case -1: return -(sdigit)v->ob_digit[0];
|
|
404 case 0: return 0;
|
|
405 case 1: return v->ob_digit[0];
|
|
406 }
|
|
407 sign = 1;
|
|
408 x = 0;
|
|
409 if (i < 0) {
|
|
410 sign = -1;
|
|
411 i = -(i);
|
|
412 }
|
|
413 while (--i >= 0) {
|
|
414 prev = x;
|
|
415 x = (x << PyLong_SHIFT) | v->ob_digit[i];
|
|
416 if ((x >> PyLong_SHIFT) != prev)
|
|
417 goto overflow;
|
|
418 }
|
|
419 /* Haven't lost any bits, but casting to a signed type requires
|
|
420 * extra care (see comment above).
|
|
421 */
|
|
422 if (x <= (size_t)PY_SSIZE_T_MAX) {
|
|
423 return (Py_ssize_t)x * sign;
|
|
424 }
|
|
425 else if (sign < 0 && x == PY_ABS_SSIZE_T_MIN) {
|
|
426 return PY_SSIZE_T_MIN;
|
|
427 }
|
|
428 /* else overflow */
|
|
429
|
|
430 overflow:
|
|
431 PyErr_SetString(PyExc_OverflowError,
|
|
432 "Python int too large to convert to C ssize_t");
|
|
433 return -1;
|
|
434 }
|
|
435
|
|
436 /* Get a C unsigned long int from a long int object.
|
|
437 Returns -1 and sets an error condition if overflow occurs. */
|
|
438
|
|
439 unsigned long
|
|
440 PyLong_AsUnsignedLong(PyObject *vv)
|
|
441 {
|
|
442 register PyLongObject *v;
|
|
443 unsigned long x, prev;
|
|
444 Py_ssize_t i;
|
|
445
|
|
446 if (vv == NULL) {
|
|
447 PyErr_BadInternalCall();
|
|
448 return (unsigned long)-1;
|
|
449 }
|
|
450 if (!PyLong_Check(vv)) {
|
|
451 PyErr_SetString(PyExc_TypeError, "an integer is required");
|
|
452 return (unsigned long)-1;
|
|
453 }
|
|
454
|
|
455 v = (PyLongObject *)vv;
|
|
456 i = Py_SIZE(v);
|
|
457 x = 0;
|
|
458 if (i < 0) {
|
|
459 PyErr_SetString(PyExc_OverflowError,
|
|
460 "can't convert negative value to unsigned int");
|
|
461 return (unsigned long) -1;
|
|
462 }
|
|
463 switch (i) {
|
|
464 case 0: return 0;
|
|
465 case 1: return v->ob_digit[0];
|
|
466 }
|
|
467 while (--i >= 0) {
|
|
468 prev = x;
|
|
469 x = (x << PyLong_SHIFT) | v->ob_digit[i];
|
|
470 if ((x >> PyLong_SHIFT) != prev) {
|
|
471 PyErr_SetString(PyExc_OverflowError,
|
|
472 "python int too large to convert "
|
|
473 "to C unsigned long");
|
|
474 return (unsigned long) -1;
|
|
475 }
|
|
476 }
|
|
477 return x;
|
|
478 }
|
|
479
|
|
480 /* Get a C size_t from a long int object. Returns (size_t)-1 and sets
|
|
481 an error condition if overflow occurs. */
|
|
482
|
|
483 size_t
|
|
484 PyLong_AsSize_t(PyObject *vv)
|
|
485 {
|
|
486 register PyLongObject *v;
|
|
487 size_t x, prev;
|
|
488 Py_ssize_t i;
|
|
489
|
|
490 if (vv == NULL) {
|
|
491 PyErr_BadInternalCall();
|
|
492 return (size_t) -1;
|
|
493 }
|
|
494 if (!PyLong_Check(vv)) {
|
|
495 PyErr_SetString(PyExc_TypeError, "an integer is required");
|
|
496 return (size_t)-1;
|
|
497 }
|
|
498
|
|
499 v = (PyLongObject *)vv;
|
|
500 i = Py_SIZE(v);
|
|
501 x = 0;
|
|
502 if (i < 0) {
|
|
503 PyErr_SetString(PyExc_OverflowError,
|
|
504 "can't convert negative value to size_t");
|
|
505 return (size_t) -1;
|
|
506 }
|
|
507 switch (i) {
|
|
508 case 0: return 0;
|
|
509 case 1: return v->ob_digit[0];
|
|
510 }
|
|
511 while (--i >= 0) {
|
|
512 prev = x;
|
|
513 x = (x << PyLong_SHIFT) | v->ob_digit[i];
|
|
514 if ((x >> PyLong_SHIFT) != prev) {
|
|
515 PyErr_SetString(PyExc_OverflowError,
|
|
516 "Python int too large to convert to C size_t");
|
|
517 return (size_t) -1;
|
|
518 }
|
|
519 }
|
|
520 return x;
|
|
521 }
|
|
522
|
|
523 /* Get a C unsigned long int from a long int object, ignoring the high bits.
|
|
524 Returns -1 and sets an error condition if an error occurs. */
|
|
525
|
|
526 static unsigned long
|
|
527 _PyLong_AsUnsignedLongMask(PyObject *vv)
|
|
528 {
|
|
529 register PyLongObject *v;
|
|
530 unsigned long x;
|
|
531 Py_ssize_t i;
|
|
532 int sign;
|
|
533
|
|
534 if (vv == NULL || !PyLong_Check(vv)) {
|
|
535 PyErr_BadInternalCall();
|
|
536 return (unsigned long) -1;
|
|
537 }
|
|
538 v = (PyLongObject *)vv;
|
|
539 i = Py_SIZE(v);
|
|
540 switch (i) {
|
|
541 case 0: return 0;
|
|
542 case 1: return v->ob_digit[0];
|
|
543 }
|
|
544 sign = 1;
|
|
545 x = 0;
|
|
546 if (i < 0) {
|
|
547 sign = -1;
|
|
548 i = -i;
|
|
549 }
|
|
550 while (--i >= 0) {
|
|
551 x = (x << PyLong_SHIFT) | v->ob_digit[i];
|
|
552 }
|
|
553 return x * sign;
|
|
554 }
|
|
555
|
|
556 unsigned long
|
|
557 PyLong_AsUnsignedLongMask(register PyObject *op)
|
|
558 {
|
|
559 PyNumberMethods *nb;
|
|
560 PyLongObject *lo;
|
|
561 unsigned long val;
|
|
562
|
|
563 if (op && PyLong_Check(op))
|
|
564 return _PyLong_AsUnsignedLongMask(op);
|
|
565
|
|
566 if (op == NULL || (nb = op->ob_type->tp_as_number) == NULL ||
|
|
567 nb->nb_int == NULL) {
|
|
568 PyErr_SetString(PyExc_TypeError, "an integer is required");
|
|
569 return (unsigned long)-1;
|
|
570 }
|
|
571
|
|
572 lo = (PyLongObject*) (*nb->nb_int) (op);
|
|
573 if (lo == NULL)
|
|
574 return (unsigned long)-1;
|
|
575 if (PyLong_Check(lo)) {
|
|
576 val = _PyLong_AsUnsignedLongMask((PyObject *)lo);
|
|
577 Py_DECREF(lo);
|
|
578 if (PyErr_Occurred())
|
|
579 return (unsigned long)-1;
|
|
580 return val;
|
|
581 }
|
|
582 else
|
|
583 {
|
|
584 Py_DECREF(lo);
|
|
585 PyErr_SetString(PyExc_TypeError,
|
|
586 "nb_int should return int object");
|
|
587 return (unsigned long)-1;
|
|
588 }
|
|
589 }
|
|
590
|
|
591 int
|
|
592 _PyLong_Sign(PyObject *vv)
|
|
593 {
|
|
594 PyLongObject *v = (PyLongObject *)vv;
|
|
595
|
|
596 assert(v != NULL);
|
|
597 assert(PyLong_Check(v));
|
|
598
|
|
599 return Py_SIZE(v) == 0 ? 0 : (Py_SIZE(v) < 0 ? -1 : 1);
|
|
600 }
|
|
601
|
|
602 size_t
|
|
603 _PyLong_NumBits(PyObject *vv)
|
|
604 {
|
|
605 PyLongObject *v = (PyLongObject *)vv;
|
|
606 size_t result = 0;
|
|
607 Py_ssize_t ndigits;
|
|
608
|
|
609 assert(v != NULL);
|
|
610 assert(PyLong_Check(v));
|
|
611 ndigits = ABS(Py_SIZE(v));
|
|
612 assert(ndigits == 0 || v->ob_digit[ndigits - 1] != 0);
|
|
613 if (ndigits > 0) {
|
|
614 digit msd = v->ob_digit[ndigits - 1];
|
|
615
|
|
616 result = (ndigits - 1) * PyLong_SHIFT;
|
|
617 if (result / PyLong_SHIFT != (size_t)(ndigits - 1))
|
|
618 goto Overflow;
|
|
619 do {
|
|
620 ++result;
|
|
621 if (result == 0)
|
|
622 goto Overflow;
|
|
623 msd >>= 1;
|
|
624 } while (msd);
|
|
625 }
|
|
626 return result;
|
|
627
|
|
628 Overflow:
|
|
629 PyErr_SetString(PyExc_OverflowError, "int has too many bits "
|
|
630 "to express in a platform size_t");
|
|
631 return (size_t)-1;
|
|
632 }
|
|
633
|
|
634 PyObject *
|
|
635 _PyLong_FromByteArray(const unsigned char* bytes, size_t n,
|
|
636 int little_endian, int is_signed)
|
|
637 {
|
|
638 const unsigned char* pstartbyte; /* LSB of bytes */
|
|
639 int incr; /* direction to move pstartbyte */
|
|
640 const unsigned char* pendbyte; /* MSB of bytes */
|
|
641 size_t numsignificantbytes; /* number of bytes that matter */
|
|
642 Py_ssize_t ndigits; /* number of Python long digits */
|
|
643 PyLongObject* v; /* result */
|
|
644 Py_ssize_t idigit = 0; /* next free index in v->ob_digit */
|
|
645
|
|
646 if (n == 0)
|
|
647 return PyLong_FromLong(0L);
|
|
648
|
|
649 if (little_endian) {
|
|
650 pstartbyte = bytes;
|
|
651 pendbyte = bytes + n - 1;
|
|
652 incr = 1;
|
|
653 }
|
|
654 else {
|
|
655 pstartbyte = bytes + n - 1;
|
|
656 pendbyte = bytes;
|
|
657 incr = -1;
|
|
658 }
|
|
659
|
|
660 if (is_signed)
|
|
661 is_signed = *pendbyte >= 0x80;
|
|
662
|
|
663 /* Compute numsignificantbytes. This consists of finding the most
|
|
664 significant byte. Leading 0 bytes are insignificant if the number
|
|
665 is positive, and leading 0xff bytes if negative. */
|
|
666 {
|
|
667 size_t i;
|
|
668 const unsigned char* p = pendbyte;
|
|
669 const int pincr = -incr; /* search MSB to LSB */
|
|
670 const unsigned char insignficant = is_signed ? 0xff : 0x00;
|
|
671
|
|
672 for (i = 0; i < n; ++i, p += pincr) {
|
|
673 if (*p != insignficant)
|
|
674 break;
|
|
675 }
|
|
676 numsignificantbytes = n - i;
|
|
677 /* 2's-comp is a bit tricky here, e.g. 0xff00 == -0x0100, so
|
|
678 actually has 2 significant bytes. OTOH, 0xff0001 ==
|
|
679 -0x00ffff, so we wouldn't *need* to bump it there; but we
|
|
680 do for 0xffff = -0x0001. To be safe without bothering to
|
|
681 check every case, bump it regardless. */
|
|
682 if (is_signed && numsignificantbytes < n)
|
|
683 ++numsignificantbytes;
|
|
684 }
|
|
685
|
|
686 /* How many Python long digits do we need? We have
|
|
687 8*numsignificantbytes bits, and each Python long digit has
|
|
688 PyLong_SHIFT bits, so it's the ceiling of the quotient. */
|
|
689 /* catch overflow before it happens */
|
|
690 if (numsignificantbytes > (PY_SSIZE_T_MAX - PyLong_SHIFT) / 8) {
|
|
691 PyErr_SetString(PyExc_OverflowError,
|
|
692 "byte array too long to convert to int");
|
|
693 return NULL;
|
|
694 }
|
|
695 ndigits = (numsignificantbytes * 8 + PyLong_SHIFT - 1) / PyLong_SHIFT;
|
|
696 v = _PyLong_New(ndigits);
|
|
697 if (v == NULL)
|
|
698 return NULL;
|
|
699
|
|
700 /* Copy the bits over. The tricky parts are computing 2's-comp on
|
|
701 the fly for signed numbers, and dealing with the mismatch between
|
|
702 8-bit bytes and (probably) 15-bit Python digits.*/
|
|
703 {
|
|
704 size_t i;
|
|
705 twodigits carry = 1; /* for 2's-comp calculation */
|
|
706 twodigits accum = 0; /* sliding register */
|
|
707 unsigned int accumbits = 0; /* number of bits in accum */
|
|
708 const unsigned char* p = pstartbyte;
|
|
709
|
|
710 for (i = 0; i < numsignificantbytes; ++i, p += incr) {
|
|
711 twodigits thisbyte = *p;
|
|
712 /* Compute correction for 2's comp, if needed. */
|
|
713 if (is_signed) {
|
|
714 thisbyte = (0xff ^ thisbyte) + carry;
|
|
715 carry = thisbyte >> 8;
|
|
716 thisbyte &= 0xff;
|
|
717 }
|
|
718 /* Because we're going LSB to MSB, thisbyte is
|
|
719 more significant than what's already in accum,
|
|
720 so needs to be prepended to accum. */
|
|
721 accum |= (twodigits)thisbyte << accumbits;
|
|
722 accumbits += 8;
|
|
723 if (accumbits >= PyLong_SHIFT) {
|
|
724 /* There's enough to fill a Python digit. */
|
|
725 assert(idigit < ndigits);
|
|
726 v->ob_digit[idigit] = (digit)(accum & PyLong_MASK);
|
|
727 ++idigit;
|
|
728 accum >>= PyLong_SHIFT;
|
|
729 accumbits -= PyLong_SHIFT;
|
|
730 assert(accumbits < PyLong_SHIFT);
|
|
731 }
|
|
732 }
|
|
733 assert(accumbits < PyLong_SHIFT);
|
|
734 if (accumbits) {
|
|
735 assert(idigit < ndigits);
|
|
736 v->ob_digit[idigit] = (digit)accum;
|
|
737 ++idigit;
|
|
738 }
|
|
739 }
|
|
740
|
|
741 Py_SIZE(v) = is_signed ? -idigit : idigit;
|
|
742 return (PyObject *)long_normalize(v);
|
|
743 }
|
|
744
|
|
745 int
|
|
746 _PyLong_AsByteArray(PyLongObject* v,
|
|
747 unsigned char* bytes, size_t n,
|
|
748 int little_endian, int is_signed)
|
|
749 {
|
|
750 Py_ssize_t i; /* index into v->ob_digit */
|
|
751 Py_ssize_t ndigits; /* |v->ob_size| */
|
|
752 twodigits accum; /* sliding register */
|
|
753 unsigned int accumbits; /* # bits in accum */
|
|
754 int do_twos_comp; /* store 2's-comp? is_signed and v < 0 */
|
|
755 digit carry; /* for computing 2's-comp */
|
|
756 size_t j; /* # bytes filled */
|
|
757 unsigned char* p; /* pointer to next byte in bytes */
|
|
758 int pincr; /* direction to move p */
|
|
759
|
|
760 assert(v != NULL && PyLong_Check(v));
|
|
761
|
|
762 if (Py_SIZE(v) < 0) {
|
|
763 ndigits = -(Py_SIZE(v));
|
|
764 if (!is_signed) {
|
|
765 PyErr_SetString(PyExc_OverflowError,
|
|
766 "can't convert negative int to unsigned");
|
|
767 return -1;
|
|
768 }
|
|
769 do_twos_comp = 1;
|
|
770 }
|
|
771 else {
|
|
772 ndigits = Py_SIZE(v);
|
|
773 do_twos_comp = 0;
|
|
774 }
|
|
775
|
|
776 if (little_endian) {
|
|
777 p = bytes;
|
|
778 pincr = 1;
|
|
779 }
|
|
780 else {
|
|
781 p = bytes + n - 1;
|
|
782 pincr = -1;
|
|
783 }
|
|
784
|
|
785 /* Copy over all the Python digits.
|
|
786 It's crucial that every Python digit except for the MSD contribute
|
|
787 exactly PyLong_SHIFT bits to the total, so first assert that the long is
|
|
788 normalized. */
|
|
789 assert(ndigits == 0 || v->ob_digit[ndigits - 1] != 0);
|
|
790 j = 0;
|
|
791 accum = 0;
|
|
792 accumbits = 0;
|
|
793 carry = do_twos_comp ? 1 : 0;
|
|
794 for (i = 0; i < ndigits; ++i) {
|
|
795 digit thisdigit = v->ob_digit[i];
|
|
796 if (do_twos_comp) {
|
|
797 thisdigit = (thisdigit ^ PyLong_MASK) + carry;
|
|
798 carry = thisdigit >> PyLong_SHIFT;
|
|
799 thisdigit &= PyLong_MASK;
|
|
800 }
|
|
801 /* Because we're going LSB to MSB, thisdigit is more
|
|
802 significant than what's already in accum, so needs to be
|
|
803 prepended to accum. */
|
|
804 accum |= (twodigits)thisdigit << accumbits;
|
|
805
|
|
806 /* The most-significant digit may be (probably is) at least
|
|
807 partly empty. */
|
|
808 if (i == ndigits - 1) {
|
|
809 /* Count # of sign bits -- they needn't be stored,
|
|
810 * although for signed conversion we need later to
|
|
811 * make sure at least one sign bit gets stored. */
|
|
812 digit s = do_twos_comp ? thisdigit ^ PyLong_MASK : thisdigit;
|
|
813 while (s != 0) {
|
|
814 s >>= 1;
|
|
815 accumbits++;
|
|
816 }
|
|
817 }
|
|
818 else
|
|
819 accumbits += PyLong_SHIFT;
|
|
820
|
|
821 /* Store as many bytes as possible. */
|
|
822 while (accumbits >= 8) {
|
|
823 if (j >= n)
|
|
824 goto Overflow;
|
|
825 ++j;
|
|
826 *p = (unsigned char)(accum & 0xff);
|
|
827 p += pincr;
|
|
828 accumbits -= 8;
|
|
829 accum >>= 8;
|
|
830 }
|
|
831 }
|
|
832
|
|
833 /* Store the straggler (if any). */
|
|
834 assert(accumbits < 8);
|
|
835 assert(carry == 0); /* else do_twos_comp and *every* digit was 0 */
|
|
836 if (accumbits > 0) {
|
|
837 if (j >= n)
|
|
838 goto Overflow;
|
|
839 ++j;
|
|
840 if (do_twos_comp) {
|
|
841 /* Fill leading bits of the byte with sign bits
|
|
842 (appropriately pretending that the long had an
|
|
843 infinite supply of sign bits). */
|
|
844 accum |= (~(twodigits)0) << accumbits;
|
|
845 }
|
|
846 *p = (unsigned char)(accum & 0xff);
|
|
847 p += pincr;
|
|
848 }
|
|
849 else if (j == n && n > 0 && is_signed) {
|
|
850 /* The main loop filled the byte array exactly, so the code
|
|
851 just above didn't get to ensure there's a sign bit, and the
|
|
852 loop below wouldn't add one either. Make sure a sign bit
|
|
853 exists. */
|
|
854 unsigned char msb = *(p - pincr);
|
|
855 int sign_bit_set = msb >= 0x80;
|
|
856 assert(accumbits == 0);
|
|
857 if (sign_bit_set == do_twos_comp)
|
|
858 return 0;
|
|
859 else
|
|
860 goto Overflow;
|
|
861 }
|
|
862
|
|
863 /* Fill remaining bytes with copies of the sign bit. */
|
|
864 {
|
|
865 unsigned char signbyte = do_twos_comp ? 0xffU : 0U;
|
|
866 for ( ; j < n; ++j, p += pincr)
|
|
867 *p = signbyte;
|
|
868 }
|
|
869
|
|
870 return 0;
|
|
871
|
|
872 Overflow:
|
|
873 PyErr_SetString(PyExc_OverflowError, "int too big to convert");
|
|
874 return -1;
|
|
875
|
|
876 }
|
|
877
|
|
878 /* Create a new long int object from a C pointer */
|
|
879
|
|
880 PyObject *
|
|
881 PyLong_FromVoidPtr(void *p)
|
|
882 {
|
|
883 #ifndef HAVE_LONG_LONG
|
|
884 # error "PyLong_FromVoidPtr: sizeof(void*) > sizeof(long), but no long long"
|
|
885 #endif
|
|
886 #if SIZEOF_LONG_LONG < SIZEOF_VOID_P
|
|
887 # error "PyLong_FromVoidPtr: sizeof(PY_LONG_LONG) < sizeof(void*)"
|
|
888 #endif
|
|
889 /* special-case null pointer */
|
|
890 if (!p)
|
|
891 return PyLong_FromLong(0);
|
|
892 return PyLong_FromUnsignedLongLong((unsigned PY_LONG_LONG)(Py_uintptr_t)p);
|
|
893
|
|
894 }
|
|
895
|
|
896 /* Get a C pointer from a long int object. */
|
|
897
|
|
898 void *
|
|
899 PyLong_AsVoidPtr(PyObject *vv)
|
|
900 {
|
|
901 #if SIZEOF_VOID_P <= SIZEOF_LONG
|
|
902 long x;
|
|
903
|
|
904 if (PyLong_Check(vv) && _PyLong_Sign(vv) < 0)
|
|
905 x = PyLong_AsLong(vv);
|
|
906 else
|
|
907 x = PyLong_AsUnsignedLong(vv);
|
|
908 #else
|
|
909
|
|
910 #ifndef HAVE_LONG_LONG
|
|
911 # error "PyLong_AsVoidPtr: sizeof(void*) > sizeof(long), but no long long"
|
|
912 #endif
|
|
913 #if SIZEOF_LONG_LONG < SIZEOF_VOID_P
|
|
914 # error "PyLong_AsVoidPtr: sizeof(PY_LONG_LONG) < sizeof(void*)"
|
|
915 #endif
|
|
916 PY_LONG_LONG x;
|
|
917
|
|
918 if (PyLong_Check(vv) && _PyLong_Sign(vv) < 0)
|
|
919 x = PyLong_AsLongLong(vv);
|
|
920 else
|
|
921 x = PyLong_AsUnsignedLongLong(vv);
|
|
922
|
|
923 #endif /* SIZEOF_VOID_P <= SIZEOF_LONG */
|
|
924
|
|
925 if (x == -1 && PyErr_Occurred())
|
|
926 return NULL;
|
|
927 return (void *)x;
|
|
928 }
|
|
929
|
|
930 #ifdef HAVE_LONG_LONG
|
|
931
|
|
932 /* Initial PY_LONG_LONG support by Chris Herborth (chrish@qnx.com), later
|
|
933 * rewritten to use the newer PyLong_{As,From}ByteArray API.
|
|
934 */
|
|
935
|
|
936 #define IS_LITTLE_ENDIAN (int)*(unsigned char*)&one
|
|
937 #define PY_ABS_LLONG_MIN (0-(unsigned PY_LONG_LONG)PY_LLONG_MIN)
|
|
938
|
|
939 /* Create a new long int object from a C PY_LONG_LONG int. */
|
|
940
|
|
941 PyObject *
|
|
942 PyLong_FromLongLong(PY_LONG_LONG ival)
|
|
943 {
|
|
944 PyLongObject *v;
|
|
945 unsigned PY_LONG_LONG abs_ival;
|
|
946 unsigned PY_LONG_LONG t; /* unsigned so >> doesn't propagate sign bit */
|
|
947 int ndigits = 0;
|
|
948 int negative = 0;
|
|
949
|
|
950 if (ival < 0) {
|
|
951 /* avoid signed overflow on negation; see comments
|
|
952 in PyLong_FromLong above. */
|
|
953 abs_ival = (unsigned PY_LONG_LONG)(-1-ival) + 1;
|
|
954 negative = 1;
|
|
955 }
|
|
956 else {
|
|
957 abs_ival = (unsigned PY_LONG_LONG)ival;
|
|
958 }
|
|
959
|
|
960 /* Count the number of Python digits.
|
|
961 We used to pick 5 ("big enough for anything"), but that's a
|
|
962 waste of time and space given that 5*15 = 75 bits are rarely
|
|
963 needed. */
|
|
964 t = abs_ival;
|
|
965 while (t) {
|
|
966 ++ndigits;
|
|
967 t >>= PyLong_SHIFT;
|
|
968 }
|
|
969 v = _PyLong_New(ndigits);
|
|
970 if (v != NULL) {
|
|
971 digit *p = v->ob_digit;
|
|
972 Py_SIZE(v) = negative ? -ndigits : ndigits;
|
|
973 t = abs_ival;
|
|
974 while (t) {
|
|
975 *p++ = (digit)(t & PyLong_MASK);
|
|
976 t >>= PyLong_SHIFT;
|
|
977 }
|
|
978 }
|
|
979 return (PyObject *)v;
|
|
980 }
|
|
981
|
|
982 /* Create a new long int object from a C unsigned PY_LONG_LONG int. */
|
|
983
|
|
984 PyObject *
|
|
985 PyLong_FromUnsignedLongLong(unsigned PY_LONG_LONG ival)
|
|
986 {
|
|
987 PyLongObject *v;
|
|
988 unsigned PY_LONG_LONG t;
|
|
989 int ndigits = 0;
|
|
990
|
|
991 if (ival < PyLong_BASE)
|
|
992 return PyLong_FromLong((long)ival);
|
|
993 /* Count the number of Python digits. */
|
|
994 t = (unsigned PY_LONG_LONG)ival;
|
|
995 while (t) {
|
|
996 ++ndigits;
|
|
997 t >>= PyLong_SHIFT;
|
|
998 }
|
|
999 v = _PyLong_New(ndigits);
|
|
1000 if (v != NULL) {
|
|
1001 digit *p = v->ob_digit;
|
|
1002 Py_SIZE(v) = ndigits;
|
|
1003 while (ival) {
|
|
1004 *p++ = (digit)(ival & PyLong_MASK);
|
|
1005 ival >>= PyLong_SHIFT;
|
|
1006 }
|
|
1007 }
|
|
1008 return (PyObject *)v;
|
|
1009 }
|
|
1010
|
|
1011 /* Create a new long int object from a C Py_ssize_t. */
|
|
1012
|
|
1013 PyObject *
|
|
1014 PyLong_FromSsize_t(Py_ssize_t ival)
|
|
1015 {
|
|
1016 PyLongObject *v;
|
|
1017 size_t abs_ival;
|
|
1018 size_t t; /* unsigned so >> doesn't propagate sign bit */
|
|
1019 int ndigits = 0;
|
|
1020 int negative = 0;
|
|
1021
|
|
1022 CHECK_SMALL_INT(ival);
|
|
1023 if (ival < 0) {
|
|
1024 /* avoid signed overflow when ival = SIZE_T_MIN */
|
|
1025 abs_ival = (size_t)(-1-ival)+1;
|
|
1026 negative = 1;
|
|
1027 }
|
|
1028 else {
|
|
1029 abs_ival = (size_t)ival;
|
|
1030 }
|
|
1031
|
|
1032 /* Count the number of Python digits. */
|
|
1033 t = abs_ival;
|
|
1034 while (t) {
|
|
1035 ++ndigits;
|
|
1036 t >>= PyLong_SHIFT;
|
|
1037 }
|
|
1038 v = _PyLong_New(ndigits);
|
|
1039 if (v != NULL) {
|
|
1040 digit *p = v->ob_digit;
|
|
1041 Py_SIZE(v) = negative ? -ndigits : ndigits;
|
|
1042 t = abs_ival;
|
|
1043 while (t) {
|
|
1044 *p++ = (digit)(t & PyLong_MASK);
|
|
1045 t >>= PyLong_SHIFT;
|
|
1046 }
|
|
1047 }
|
|
1048 return (PyObject *)v;
|
|
1049 }
|
|
1050
|
|
1051 /* Create a new long int object from a C size_t. */
|
|
1052
|
|
1053 PyObject *
|
|
1054 PyLong_FromSize_t(size_t ival)
|
|
1055 {
|
|
1056 PyLongObject *v;
|
|
1057 size_t t;
|
|
1058 int ndigits = 0;
|
|
1059
|
|
1060 if (ival < PyLong_BASE)
|
|
1061 return PyLong_FromLong((long)ival);
|
|
1062 /* Count the number of Python digits. */
|
|
1063 t = ival;
|
|
1064 while (t) {
|
|
1065 ++ndigits;
|
|
1066 t >>= PyLong_SHIFT;
|
|
1067 }
|
|
1068 v = _PyLong_New(ndigits);
|
|
1069 if (v != NULL) {
|
|
1070 digit *p = v->ob_digit;
|
|
1071 Py_SIZE(v) = ndigits;
|
|
1072 while (ival) {
|
|
1073 *p++ = (digit)(ival & PyLong_MASK);
|
|
1074 ival >>= PyLong_SHIFT;
|
|
1075 }
|
|
1076 }
|
|
1077 return (PyObject *)v;
|
|
1078 }
|
|
1079
|
|
1080 /* Get a C long long int from a long int object or any object that has an
|
|
1081 __int__ method. Return -1 and set an error if overflow occurs. */
|
|
1082
|
|
1083 PY_LONG_LONG
|
|
1084 PyLong_AsLongLong(PyObject *vv)
|
|
1085 {
|
|
1086 PyLongObject *v;
|
|
1087 PY_LONG_LONG bytes;
|
|
1088 int one = 1;
|
|
1089 int res;
|
|
1090
|
|
1091 if (vv == NULL) {
|
|
1092 PyErr_BadInternalCall();
|
|
1093 return -1;
|
|
1094 }
|
|
1095 if (!PyLong_Check(vv)) {
|
|
1096 PyNumberMethods *nb;
|
|
1097 PyObject *io;
|
|
1098 if ((nb = vv->ob_type->tp_as_number) == NULL ||
|
|
1099 nb->nb_int == NULL) {
|
|
1100 PyErr_SetString(PyExc_TypeError, "an integer is required");
|
|
1101 return -1;
|
|
1102 }
|
|
1103 io = (*nb->nb_int) (vv);
|
|
1104 if (io == NULL)
|
|
1105 return -1;
|
|
1106 if (PyLong_Check(io)) {
|
|
1107 bytes = PyLong_AsLongLong(io);
|
|
1108 Py_DECREF(io);
|
|
1109 return bytes;
|
|
1110 }
|
|
1111 Py_DECREF(io);
|
|
1112 PyErr_SetString(PyExc_TypeError, "integer conversion failed");
|
|
1113 return -1;
|
|
1114 }
|
|
1115
|
|
1116 v = (PyLongObject*)vv;
|
|
1117 switch(Py_SIZE(v)) {
|
|
1118 case -1: return -(sdigit)v->ob_digit[0];
|
|
1119 case 0: return 0;
|
|
1120 case 1: return v->ob_digit[0];
|
|
1121 }
|
|
1122 res = _PyLong_AsByteArray((PyLongObject *)vv, (unsigned char *)&bytes,
|
|
1123 SIZEOF_LONG_LONG, IS_LITTLE_ENDIAN, 1);
|
|
1124
|
|
1125 /* Plan 9 can't handle PY_LONG_LONG in ? : expressions */
|
|
1126 if (res < 0)
|
|
1127 return (PY_LONG_LONG)-1;
|
|
1128 else
|
|
1129 return bytes;
|
|
1130 }
|
|
1131
|
|
1132 /* Get a C unsigned PY_LONG_LONG int from a long int object.
|
|
1133 Return -1 and set an error if overflow occurs. */
|
|
1134
|
|
1135 unsigned PY_LONG_LONG
|
|
1136 PyLong_AsUnsignedLongLong(PyObject *vv)
|
|
1137 {
|
|
1138 PyLongObject *v;
|
|
1139 unsigned PY_LONG_LONG bytes;
|
|
1140 int one = 1;
|
|
1141 int res;
|
|
1142
|
|
1143 if (vv == NULL) {
|
|
1144 PyErr_BadInternalCall();
|
|
1145 return (unsigned PY_LONG_LONG)-1;
|
|
1146 }
|
|
1147 if (!PyLong_Check(vv)) {
|
|
1148 PyErr_SetString(PyExc_TypeError, "an integer is required");
|
|
1149 return (unsigned PY_LONG_LONG)-1;
|
|
1150 }
|
|
1151
|
|
1152 v = (PyLongObject*)vv;
|
|
1153 switch(Py_SIZE(v)) {
|
|
1154 case 0: return 0;
|
|
1155 case 1: return v->ob_digit[0];
|
|
1156 }
|
|
1157
|
|
1158 res = _PyLong_AsByteArray((PyLongObject *)vv, (unsigned char *)&bytes,
|
|
1159 SIZEOF_LONG_LONG, IS_LITTLE_ENDIAN, 0);
|
|
1160
|
|
1161 /* Plan 9 can't handle PY_LONG_LONG in ? : expressions */
|
|
1162 if (res < 0)
|
|
1163 return (unsigned PY_LONG_LONG)res;
|
|
1164 else
|
|
1165 return bytes;
|
|
1166 }
|
|
1167
|
|
1168 /* Get a C unsigned long int from a long int object, ignoring the high bits.
|
|
1169 Returns -1 and sets an error condition if an error occurs. */
|
|
1170
|
|
1171 static unsigned PY_LONG_LONG
|
|
1172 _PyLong_AsUnsignedLongLongMask(PyObject *vv)
|
|
1173 {
|
|
1174 register PyLongObject *v;
|
|
1175 unsigned PY_LONG_LONG x;
|
|
1176 Py_ssize_t i;
|
|
1177 int sign;
|
|
1178
|
|
1179 if (vv == NULL || !PyLong_Check(vv)) {
|
|
1180 PyErr_BadInternalCall();
|
|
1181 return (unsigned long) -1;
|
|
1182 }
|
|
1183 v = (PyLongObject *)vv;
|
|
1184 switch(Py_SIZE(v)) {
|
|
1185 case 0: return 0;
|
|
1186 case 1: return v->ob_digit[0];
|
|
1187 }
|
|
1188 i = Py_SIZE(v);
|
|
1189 sign = 1;
|
|
1190 x = 0;
|
|
1191 if (i < 0) {
|
|
1192 sign = -1;
|
|
1193 i = -i;
|
|
1194 }
|
|
1195 while (--i >= 0) {
|
|
1196 x = (x << PyLong_SHIFT) | v->ob_digit[i];
|
|
1197 }
|
|
1198 return x * sign;
|
|
1199 }
|
|
1200
|
|
1201 unsigned PY_LONG_LONG
|
|
1202 PyLong_AsUnsignedLongLongMask(register PyObject *op)
|
|
1203 {
|
|
1204 PyNumberMethods *nb;
|
|
1205 PyLongObject *lo;
|
|
1206 unsigned PY_LONG_LONG val;
|
|
1207
|
|
1208 if (op && PyLong_Check(op))
|
|
1209 return _PyLong_AsUnsignedLongLongMask(op);
|
|
1210
|
|
1211 if (op == NULL || (nb = op->ob_type->tp_as_number) == NULL ||
|
|
1212 nb->nb_int == NULL) {
|
|
1213 PyErr_SetString(PyExc_TypeError, "an integer is required");
|
|
1214 return (unsigned PY_LONG_LONG)-1;
|
|
1215 }
|
|
1216
|
|
1217 lo = (PyLongObject*) (*nb->nb_int) (op);
|
|
1218 if (lo == NULL)
|
|
1219 return (unsigned PY_LONG_LONG)-1;
|
|
1220 if (PyLong_Check(lo)) {
|
|
1221 val = _PyLong_AsUnsignedLongLongMask((PyObject *)lo);
|
|
1222 Py_DECREF(lo);
|
|
1223 if (PyErr_Occurred())
|
|
1224 return (unsigned PY_LONG_LONG)-1;
|
|
1225 return val;
|
|
1226 }
|
|
1227 else
|
|
1228 {
|
|
1229 Py_DECREF(lo);
|
|
1230 PyErr_SetString(PyExc_TypeError,
|
|
1231 "nb_int should return int object");
|
|
1232 return (unsigned PY_LONG_LONG)-1;
|
|
1233 }
|
|
1234 }
|
|
1235 #undef IS_LITTLE_ENDIAN
|
|
1236
|
|
1237 /* Get a C long long int from a long int object or any object that has an
|
|
1238 __int__ method.
|
|
1239
|
|
1240 On overflow, return -1 and set *overflow to 1 or -1 depending on the sign of
|
|
1241 the result. Otherwise *overflow is 0.
|
|
1242
|
|
1243 For other errors (e.g., TypeError), return -1 and set an error condition.
|
|
1244 In this case *overflow will be 0.
|
|
1245 */
|
|
1246
|
|
1247 PY_LONG_LONG
|
|
1248 PyLong_AsLongLongAndOverflow(PyObject *vv, int *overflow)
|
|
1249 {
|
|
1250 /* This version by Tim Peters */
|
|
1251 register PyLongObject *v;
|
|
1252 unsigned PY_LONG_LONG x, prev;
|
|
1253 PY_LONG_LONG res;
|
|
1254 Py_ssize_t i;
|
|
1255 int sign;
|
|
1256 int do_decref = 0; /* if nb_int was called */
|
|
1257
|
|
1258 *overflow = 0;
|
|
1259 if (vv == NULL) {
|
|
1260 PyErr_BadInternalCall();
|
|
1261 return -1;
|
|
1262 }
|
|
1263
|
|
1264 if (!PyLong_Check(vv)) {
|
|
1265 PyNumberMethods *nb;
|
|
1266 nb = vv->ob_type->tp_as_number;
|
|
1267 if (nb == NULL || nb->nb_int == NULL) {
|
|
1268 PyErr_SetString(PyExc_TypeError,
|
|
1269 "an integer is required");
|
|
1270 return -1;
|
|
1271 }
|
|
1272 vv = (*nb->nb_int) (vv);
|
|
1273 if (vv == NULL)
|
|
1274 return -1;
|
|
1275 do_decref = 1;
|
|
1276 if (!PyLong_Check(vv)) {
|
|
1277 Py_DECREF(vv);
|
|
1278 PyErr_SetString(PyExc_TypeError,
|
|
1279 "nb_int should return int object");
|
|
1280 return -1;
|
|
1281 }
|
|
1282 }
|
|
1283
|
|
1284 res = -1;
|
|
1285 v = (PyLongObject *)vv;
|
|
1286 i = Py_SIZE(v);
|
|
1287
|
|
1288 switch (i) {
|
|
1289 case -1:
|
|
1290 res = -(sdigit)v->ob_digit[0];
|
|
1291 break;
|
|
1292 case 0:
|
|
1293 res = 0;
|
|
1294 break;
|
|
1295 case 1:
|
|
1296 res = v->ob_digit[0];
|
|
1297 break;
|
|
1298 default:
|
|
1299 sign = 1;
|
|
1300 x = 0;
|
|
1301 if (i < 0) {
|
|
1302 sign = -1;
|
|
1303 i = -(i);
|
|
1304 }
|
|
1305 while (--i >= 0) {
|
|
1306 prev = x;
|
|
1307 x = (x << PyLong_SHIFT) + v->ob_digit[i];
|
|
1308 if ((x >> PyLong_SHIFT) != prev) {
|
|
1309 *overflow = sign;
|
|
1310 goto exit;
|
|
1311 }
|
|
1312 }
|
|
1313 /* Haven't lost any bits, but casting to long requires extra
|
|
1314 * care (see comment above).
|
|
1315 */
|
|
1316 if (x <= (unsigned PY_LONG_LONG)PY_LLONG_MAX) {
|
|
1317 res = (PY_LONG_LONG)x * sign;
|
|
1318 }
|
|
1319 else if (sign < 0 && x == PY_ABS_LLONG_MIN) {
|
|
1320 res = PY_LLONG_MIN;
|
|
1321 }
|
|
1322 else {
|
|
1323 *overflow = sign;
|
|
1324 /* res is already set to -1 */
|
|
1325 }
|
|
1326 }
|
|
1327 exit:
|
|
1328 if (do_decref) {
|
|
1329 Py_DECREF(vv);
|
|
1330 }
|
|
1331 return res;
|
|
1332 }
|
|
1333
|
|
1334 #endif /* HAVE_LONG_LONG */
|
|
1335
|
|
1336 #define CHECK_BINOP(v,w) \
|
|
1337 do { \
|
|
1338 if (!PyLong_Check(v) || !PyLong_Check(w)) \
|
|
1339 Py_RETURN_NOTIMPLEMENTED; \
|
|
1340 } while(0)
|
|
1341
|
|
1342 /* bits_in_digit(d) returns the unique integer k such that 2**(k-1) <= d <
|
|
1343 2**k if d is nonzero, else 0. */
|
|
1344
|
|
1345 static const unsigned char BitLengthTable[32] = {
|
|
1346 0, 1, 2, 2, 3, 3, 3, 3, 4, 4, 4, 4, 4, 4, 4, 4,
|
|
1347 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5
|
|
1348 };
|
|
1349
|
|
1350 static int
|
|
1351 bits_in_digit(digit d)
|
|
1352 {
|
|
1353 int d_bits = 0;
|
|
1354 while (d >= 32) {
|
|
1355 d_bits += 6;
|
|
1356 d >>= 6;
|
|
1357 }
|
|
1358 d_bits += (int)BitLengthTable[d];
|
|
1359 return d_bits;
|
|
1360 }
|
|
1361
|
|
1362 /* x[0:m] and y[0:n] are digit vectors, LSD first, m >= n required. x[0:n]
|
|
1363 * is modified in place, by adding y to it. Carries are propagated as far as
|
|
1364 * x[m-1], and the remaining carry (0 or 1) is returned.
|
|
1365 */
|
|
1366 static digit
|
|
1367 v_iadd(digit *x, Py_ssize_t m, digit *y, Py_ssize_t n)
|
|
1368 {
|
|
1369 Py_ssize_t i;
|
|
1370 digit carry = 0;
|
|
1371
|
|
1372 assert(m >= n);
|
|
1373 for (i = 0; i < n; ++i) {
|
|
1374 carry += x[i] + y[i];
|
|
1375 x[i] = carry & PyLong_MASK;
|
|
1376 carry >>= PyLong_SHIFT;
|
|
1377 assert((carry & 1) == carry);
|
|
1378 }
|
|
1379 for (; carry && i < m; ++i) {
|
|
1380 carry += x[i];
|
|
1381 x[i] = carry & PyLong_MASK;
|
|
1382 carry >>= PyLong_SHIFT;
|
|
1383 assert((carry & 1) == carry);
|
|
1384 }
|
|
1385 return carry;
|
|
1386 }
|
|
1387
|
|
1388 /* x[0:m] and y[0:n] are digit vectors, LSD first, m >= n required. x[0:n]
|
|
1389 * is modified in place, by subtracting y from it. Borrows are propagated as
|
|
1390 * far as x[m-1], and the remaining borrow (0 or 1) is returned.
|
|
1391 */
|
|
1392 static digit
|
|
1393 v_isub(digit *x, Py_ssize_t m, digit *y, Py_ssize_t n)
|
|
1394 {
|
|
1395 Py_ssize_t i;
|
|
1396 digit borrow = 0;
|
|
1397
|
|
1398 assert(m >= n);
|
|
1399 for (i = 0; i < n; ++i) {
|
|
1400 borrow = x[i] - y[i] - borrow;
|
|
1401 x[i] = borrow & PyLong_MASK;
|
|
1402 borrow >>= PyLong_SHIFT;
|
|
1403 borrow &= 1; /* keep only 1 sign bit */
|
|
1404 }
|
|
1405 for (; borrow && i < m; ++i) {
|
|
1406 borrow = x[i] - borrow;
|
|
1407 x[i] = borrow & PyLong_MASK;
|
|
1408 borrow >>= PyLong_SHIFT;
|
|
1409 borrow &= 1;
|
|
1410 }
|
|
1411 return borrow;
|
|
1412 }
|
|
1413
|
|
1414 /* Shift digit vector a[0:m] d bits left, with 0 <= d < PyLong_SHIFT. Put
|
|
1415 * result in z[0:m], and return the d bits shifted out of the top.
|
|
1416 */
|
|
1417 static digit
|
|
1418 v_lshift(digit *z, digit *a, Py_ssize_t m, int d)
|
|
1419 {
|
|
1420 Py_ssize_t i;
|
|
1421 digit carry = 0;
|
|
1422
|
|
1423 assert(0 <= d && d < PyLong_SHIFT);
|
|
1424 for (i=0; i < m; i++) {
|
|
1425 twodigits acc = (twodigits)a[i] << d | carry;
|
|
1426 z[i] = (digit)acc & PyLong_MASK;
|
|
1427 carry = (digit)(acc >> PyLong_SHIFT);
|
|
1428 }
|
|
1429 return carry;
|
|
1430 }
|
|
1431
|
|
1432 /* Shift digit vector a[0:m] d bits right, with 0 <= d < PyLong_SHIFT. Put
|
|
1433 * result in z[0:m], and return the d bits shifted out of the bottom.
|
|
1434 */
|
|
1435 static digit
|
|
1436 v_rshift(digit *z, digit *a, Py_ssize_t m, int d)
|
|
1437 {
|
|
1438 Py_ssize_t i;
|
|
1439 digit carry = 0;
|
|
1440 digit mask = ((digit)1 << d) - 1U;
|
|
1441
|
|
1442 assert(0 <= d && d < PyLong_SHIFT);
|
|
1443 for (i=m; i-- > 0;) {
|
|
1444 twodigits acc = (twodigits)carry << PyLong_SHIFT | a[i];
|
|
1445 carry = (digit)acc & mask;
|
|
1446 z[i] = (digit)(acc >> d);
|
|
1447 }
|
|
1448 return carry;
|
|
1449 }
|
|
1450
|
|
1451 /* Divide long pin, w/ size digits, by non-zero digit n, storing quotient
|
|
1452 in pout, and returning the remainder. pin and pout point at the LSD.
|
|
1453 It's OK for pin == pout on entry, which saves oodles of mallocs/frees in
|
|
1454 _PyLong_Format, but that should be done with great care since longs are
|
|
1455 immutable. */
|
|
1456
|
|
1457 static digit
|
|
1458 inplace_divrem1(digit *pout, digit *pin, Py_ssize_t size, digit n)
|
|
1459 {
|
|
1460 twodigits rem = 0;
|
|
1461
|
|
1462 assert(n > 0 && n <= PyLong_MASK);
|
|
1463 pin += size;
|
|
1464 pout += size;
|
|
1465 while (--size >= 0) {
|
|
1466 digit hi;
|
|
1467 rem = (rem << PyLong_SHIFT) | *--pin;
|
|
1468 *--pout = hi = (digit)(rem / n);
|
|
1469 rem -= (twodigits)hi * n;
|
|
1470 }
|
|
1471 return (digit)rem;
|
|
1472 }
|
|
1473
|
|
1474 /* Divide a long integer by a digit, returning both the quotient
|
|
1475 (as function result) and the remainder (through *prem).
|
|
1476 The sign of a is ignored; n should not be zero. */
|
|
1477
|
|
1478 static PyLongObject *
|
|
1479 divrem1(PyLongObject *a, digit n, digit *prem)
|
|
1480 {
|
|
1481 const Py_ssize_t size = ABS(Py_SIZE(a));
|
|
1482 PyLongObject *z;
|
|
1483
|
|
1484 assert(n > 0 && n <= PyLong_MASK);
|
|
1485 z = _PyLong_New(size);
|
|
1486 if (z == NULL)
|
|
1487 return NULL;
|
|
1488 *prem = inplace_divrem1(z->ob_digit, a->ob_digit, size, n);
|
|
1489 return long_normalize(z);
|
|
1490 }
|
|
1491
|
|
1492 /* Convert a long integer to a base 10 string. Returns a new non-shared
|
|
1493 string. (Return value is non-shared so that callers can modify the
|
|
1494 returned value if necessary.) */
|
|
1495
|
|
1496 static PyObject *
|
|
1497 long_to_decimal_string(PyObject *aa)
|
|
1498 {
|
|
1499 PyLongObject *scratch, *a;
|
|
1500 PyObject *str;
|
|
1501 Py_ssize_t size, strlen, size_a, i, j;
|
|
1502 digit *pout, *pin, rem, tenpow;
|
|
1503 unsigned char *p;
|
|
1504 int negative;
|
|
1505
|
|
1506 a = (PyLongObject *)aa;
|
|
1507 if (a == NULL || !PyLong_Check(a)) {
|
|
1508 PyErr_BadInternalCall();
|
|
1509 return NULL;
|
|
1510 }
|
|
1511 size_a = ABS(Py_SIZE(a));
|
|
1512 negative = Py_SIZE(a) < 0;
|
|
1513
|
|
1514 /* quick and dirty upper bound for the number of digits
|
|
1515 required to express a in base _PyLong_DECIMAL_BASE:
|
|
1516
|
|
1517 #digits = 1 + floor(log2(a) / log2(_PyLong_DECIMAL_BASE))
|
|
1518
|
|
1519 But log2(a) < size_a * PyLong_SHIFT, and
|
|
1520 log2(_PyLong_DECIMAL_BASE) = log2(10) * _PyLong_DECIMAL_SHIFT
|
|
1521 > 3 * _PyLong_DECIMAL_SHIFT
|
|
1522 */
|
|
1523 if (size_a > PY_SSIZE_T_MAX / PyLong_SHIFT) {
|
|
1524 PyErr_SetString(PyExc_OverflowError,
|
|
1525 "long is too large to format");
|
|
1526 return NULL;
|
|
1527 }
|
|
1528 /* the expression size_a * PyLong_SHIFT is now safe from overflow */
|
|
1529 size = 1 + size_a * PyLong_SHIFT / (3 * _PyLong_DECIMAL_SHIFT);
|
|
1530 scratch = _PyLong_New(size);
|
|
1531 if (scratch == NULL)
|
|
1532 return NULL;
|
|
1533
|
|
1534 /* convert array of base _PyLong_BASE digits in pin to an array of
|
|
1535 base _PyLong_DECIMAL_BASE digits in pout, following Knuth (TAOCP,
|
|
1536 Volume 2 (3rd edn), section 4.4, Method 1b). */
|
|
1537 pin = a->ob_digit;
|
|
1538 pout = scratch->ob_digit;
|
|
1539 size = 0;
|
|
1540 for (i = size_a; --i >= 0; ) {
|
|
1541 digit hi = pin[i];
|
|
1542 for (j = 0; j < size; j++) {
|
|
1543 twodigits z = (twodigits)pout[j] << PyLong_SHIFT | hi;
|
|
1544 hi = (digit)(z / _PyLong_DECIMAL_BASE);
|
|
1545 pout[j] = (digit)(z - (twodigits)hi *
|
|
1546 _PyLong_DECIMAL_BASE);
|
|
1547 }
|
|
1548 while (hi) {
|
|
1549 pout[size++] = hi % _PyLong_DECIMAL_BASE;
|
|
1550 hi /= _PyLong_DECIMAL_BASE;
|
|
1551 }
|
|
1552 /* check for keyboard interrupt */
|
|
1553 SIGCHECK({
|
|
1554 Py_DECREF(scratch);
|
|
1555 return NULL;
|
|
1556 });
|
|
1557 }
|
|
1558 /* pout should have at least one digit, so that the case when a = 0
|
|
1559 works correctly */
|
|
1560 if (size == 0)
|
|
1561 pout[size++] = 0;
|
|
1562
|
|
1563 /* calculate exact length of output string, and allocate */
|
|
1564 strlen = negative + 1 + (size - 1) * _PyLong_DECIMAL_SHIFT;
|
|
1565 tenpow = 10;
|
|
1566 rem = pout[size-1];
|
|
1567 while (rem >= tenpow) {
|
|
1568 tenpow *= 10;
|
|
1569 strlen++;
|
|
1570 }
|
|
1571 str = PyUnicode_New(strlen, '9');
|
|
1572 if (str == NULL) {
|
|
1573 Py_DECREF(scratch);
|
|
1574 return NULL;
|
|
1575 }
|
|
1576
|
|
1577 /* fill the string right-to-left */
|
|
1578 assert(PyUnicode_KIND(str) == PyUnicode_1BYTE_KIND);
|
|
1579 p = PyUnicode_1BYTE_DATA(str) + strlen;
|
|
1580 *p = '\0';
|
|
1581 /* pout[0] through pout[size-2] contribute exactly
|
|
1582 _PyLong_DECIMAL_SHIFT digits each */
|
|
1583 for (i=0; i < size - 1; i++) {
|
|
1584 rem = pout[i];
|
|
1585 for (j = 0; j < _PyLong_DECIMAL_SHIFT; j++) {
|
|
1586 *--p = '0' + rem % 10;
|
|
1587 rem /= 10;
|
|
1588 }
|
|
1589 }
|
|
1590 /* pout[size-1]: always produce at least one decimal digit */
|
|
1591 rem = pout[i];
|
|
1592 do {
|
|
1593 *--p = '0' + rem % 10;
|
|
1594 rem /= 10;
|
|
1595 } while (rem != 0);
|
|
1596
|
|
1597 /* and sign */
|
|
1598 if (negative)
|
|
1599 *--p = '-';
|
|
1600
|
|
1601 /* check we've counted correctly */
|
|
1602 assert(p == PyUnicode_1BYTE_DATA(str));
|
|
1603 Py_DECREF(scratch);
|
|
1604 return (PyObject *)str;
|
|
1605 }
|
|
1606
|
|
1607 /* Convert a long int object to a string, using a given conversion base,
|
|
1608 which should be one of 2, 8, 10 or 16. Return a string object.
|
|
1609 If base is 2, 8 or 16, add the proper prefix '0b', '0o' or '0x'. */
|
|
1610
|
|
1611 PyObject *
|
|
1612 _PyLong_Format(PyObject *aa, int base)
|
|
1613 {
|
|
1614 register PyLongObject *a = (PyLongObject *)aa;
|
|
1615 PyObject *v;
|
|
1616 Py_ssize_t i, sz;
|
|
1617 Py_ssize_t size_a;
|
|
1618 char *p;
|
|
1619 char sign = '\0';
|
|
1620 char *buffer;
|
|
1621 int bits;
|
|
1622
|
|
1623 assert(base == 2 || base == 8 || base == 10 || base == 16);
|
|
1624 if (base == 10)
|
|
1625 return long_to_decimal_string((PyObject *)a);
|
|
1626
|
|
1627 if (a == NULL || !PyLong_Check(a)) {
|
|
1628 PyErr_BadInternalCall();
|
|
1629 return NULL;
|
|
1630 }
|
|
1631 size_a = ABS(Py_SIZE(a));
|
|
1632
|
|
1633 /* Compute a rough upper bound for the length of the string */
|
|
1634 switch (base) {
|
|
1635 case 16:
|
|
1636 bits = 4;
|
|
1637 break;
|
|
1638 case 8:
|
|
1639 bits = 3;
|
|
1640 break;
|
|
1641 case 2:
|
|
1642 bits = 1;
|
|
1643 break;
|
|
1644 default:
|
|
1645 assert(0); /* shouldn't ever get here */
|
|
1646 bits = 0; /* to silence gcc warning */
|
|
1647 }
|
|
1648 /* compute length of output string: allow 2 characters for prefix and
|
|
1649 1 for possible '-' sign. */
|
|
1650 if (size_a > (PY_SSIZE_T_MAX - 3) / PyLong_SHIFT / sizeof(Py_UCS4)) {
|
|
1651 PyErr_SetString(PyExc_OverflowError,
|
|
1652 "int is too large to format");
|
|
1653 return NULL;
|
|
1654 }
|
|
1655 /* now size_a * PyLong_SHIFT + 3 <= PY_SSIZE_T_MAX, so the RHS below
|
|
1656 is safe from overflow */
|
|
1657 sz = 3 + (size_a * PyLong_SHIFT + (bits - 1)) / bits;
|
|
1658 assert(sz >= 0);
|
|
1659 buffer = PyMem_Malloc(sz);
|
|
1660 if (buffer == NULL) {
|
|
1661 PyErr_NoMemory();
|
|
1662 return NULL;
|
|
1663 }
|
|
1664 p = &buffer[sz];
|
|
1665 if (Py_SIZE(a) < 0)
|
|
1666 sign = '-';
|
|
1667
|
|
1668 if (Py_SIZE(a) == 0) {
|
|
1669 *--p = '0';
|
|
1670 }
|
|
1671 else {
|
|
1672 /* JRH: special case for power-of-2 bases */
|
|
1673 twodigits accum = 0;
|
|
1674 int accumbits = 0; /* # of bits in accum */
|
|
1675 for (i = 0; i < size_a; ++i) {
|
|
1676 accum |= (twodigits)a->ob_digit[i] << accumbits;
|
|
1677 accumbits += PyLong_SHIFT;
|
|
1678 assert(accumbits >= bits);
|
|
1679 do {
|
|
1680 char cdigit;
|
|
1681 cdigit = (char)(accum & (base - 1));
|
|
1682 cdigit += (cdigit < 10) ? '0' : 'a'-10;
|
|
1683 assert(p > buffer);
|
|
1684 *--p = cdigit;
|
|
1685 accumbits -= bits;
|
|
1686 accum >>= bits;
|
|
1687 } while (i < size_a-1 ? accumbits >= bits : accum > 0);
|
|
1688 }
|
|
1689 }
|
|
1690
|
|
1691 if (base == 16)
|
|
1692 *--p = 'x';
|
|
1693 else if (base == 8)
|
|
1694 *--p = 'o';
|
|
1695 else /* (base == 2) */
|
|
1696 *--p = 'b';
|
|
1697 *--p = '0';
|
|
1698 if (sign)
|
|
1699 *--p = sign;
|
|
1700 v = PyUnicode_DecodeASCII(p, &buffer[sz] - p, NULL);
|
|
1701 PyMem_Free(buffer);
|
|
1702 return v;
|
|
1703 }
|
|
1704
|
|
1705 /* Table of digit values for 8-bit string -> integer conversion.
|
|
1706 * '0' maps to 0, ..., '9' maps to 9.
|
|
1707 * 'a' and 'A' map to 10, ..., 'z' and 'Z' map to 35.
|
|
1708 * All other indices map to 37.
|
|
1709 * Note that when converting a base B string, a char c is a legitimate
|
|
1710 * base B digit iff _PyLong_DigitValue[Py_CHARPyLong_MASK(c)] < B.
|
|
1711 */
|
|
1712 unsigned char _PyLong_DigitValue[256] = {
|
|
1713 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37,
|
|
1714 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37,
|
|
1715 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37,
|
|
1716 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 37, 37, 37, 37, 37, 37,
|
|
1717 37, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24,
|
|
1718 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 37, 37, 37, 37, 37,
|
|
1719 37, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24,
|
|
1720 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 37, 37, 37, 37, 37,
|
|
1721 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37,
|
|
1722 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37,
|
|
1723 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37,
|
|
1724 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37,
|
|
1725 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37,
|
|
1726 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37,
|
|
1727 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37,
|
|
1728 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37,
|
|
1729 };
|
|
1730
|
|
1731 /* *str points to the first digit in a string of base `base` digits. base
|
|
1732 * is a power of 2 (2, 4, 8, 16, or 32). *str is set to point to the first
|
|
1733 * non-digit (which may be *str!). A normalized long is returned.
|
|
1734 * The point to this routine is that it takes time linear in the number of
|
|
1735 * string characters.
|
|
1736 */
|
|
1737 static PyLongObject *
|
|
1738 long_from_binary_base(char **str, int base)
|
|
1739 {
|
|
1740 char *p = *str;
|
|
1741 char *start = p;
|
|
1742 int bits_per_char;
|
|
1743 Py_ssize_t n;
|
|
1744 PyLongObject *z;
|
|
1745 twodigits accum;
|
|
1746 int bits_in_accum;
|
|
1747 digit *pdigit;
|
|
1748
|
|
1749 assert(base >= 2 && base <= 32 && (base & (base - 1)) == 0);
|
|
1750 n = base;
|
|
1751 for (bits_per_char = -1; n; ++bits_per_char)
|
|
1752 n >>= 1;
|
|
1753 /* n <- total # of bits needed, while setting p to end-of-string */
|
|
1754 while (_PyLong_DigitValue[Py_CHARMASK(*p)] < base)
|
|
1755 ++p;
|
|
1756 *str = p;
|
|
1757 /* n <- # of Python digits needed, = ceiling(n/PyLong_SHIFT). */
|
|
1758 n = (p - start) * bits_per_char + PyLong_SHIFT - 1;
|
|
1759 if (n / bits_per_char < p - start) {
|
|
1760 PyErr_SetString(PyExc_ValueError,
|
|
1761 "int string too large to convert");
|
|
1762 return NULL;
|
|
1763 }
|
|
1764 n = n / PyLong_SHIFT;
|
|
1765 z = _PyLong_New(n);
|
|
1766 if (z == NULL)
|
|
1767 return NULL;
|
|
1768 /* Read string from right, and fill in long from left; i.e.,
|
|
1769 * from least to most significant in both.
|
|
1770 */
|
|
1771 accum = 0;
|
|
1772 bits_in_accum = 0;
|
|
1773 pdigit = z->ob_digit;
|
|
1774 while (--p >= start) {
|
|
1775 int k = (int)_PyLong_DigitValue[Py_CHARMASK(*p)];
|
|
1776 assert(k >= 0 && k < base);
|
|
1777 accum |= (twodigits)k << bits_in_accum;
|
|
1778 bits_in_accum += bits_per_char;
|
|
1779 if (bits_in_accum >= PyLong_SHIFT) {
|
|
1780 *pdigit++ = (digit)(accum & PyLong_MASK);
|
|
1781 assert(pdigit - z->ob_digit <= n);
|
|
1782 accum >>= PyLong_SHIFT;
|
|
1783 bits_in_accum -= PyLong_SHIFT;
|
|
1784 assert(bits_in_accum < PyLong_SHIFT);
|
|
1785 }
|
|
1786 }
|
|
1787 if (bits_in_accum) {
|
|
1788 assert(bits_in_accum <= PyLong_SHIFT);
|
|
1789 *pdigit++ = (digit)accum;
|
|
1790 assert(pdigit - z->ob_digit <= n);
|
|
1791 }
|
|
1792 while (pdigit - z->ob_digit < n)
|
|
1793 *pdigit++ = 0;
|
|
1794 return long_normalize(z);
|
|
1795 }
|
|
1796
|
|
1797 PyObject *
|
|
1798 PyLong_FromString(char *str, char **pend, int base)
|
|
1799 {
|
|
1800 int sign = 1, error_if_nonzero = 0;
|
|
1801 char *start, *orig_str = str;
|
|
1802 PyLongObject *z = NULL;
|
|
1803 PyObject *strobj;
|
|
1804 Py_ssize_t slen;
|
|
1805
|
|
1806 if ((base != 0 && base < 2) || base > 36) {
|
|
1807 PyErr_SetString(PyExc_ValueError,
|
|
1808 "int() arg 2 must be >= 2 and <= 36");
|
|
1809 return NULL;
|
|
1810 }
|
|
1811 while (*str != '\0' && isspace(Py_CHARMASK(*str)))
|
|
1812 str++;
|
|
1813 if (*str == '+')
|
|
1814 ++str;
|
|
1815 else if (*str == '-') {
|
|
1816 ++str;
|
|
1817 sign = -1;
|
|
1818 }
|
|
1819 if (base == 0) {
|
|
1820 if (str[0] != '0')
|
|
1821 base = 10;
|
|
1822 else if (str[1] == 'x' || str[1] == 'X')
|
|
1823 base = 16;
|
|
1824 else if (str[1] == 'o' || str[1] == 'O')
|
|
1825 base = 8;
|
|
1826 else if (str[1] == 'b' || str[1] == 'B')
|
|
1827 base = 2;
|
|
1828 else {
|
|
1829 /* "old" (C-style) octal literal, now invalid.
|
|
1830 it might still be zero though */
|
|
1831 error_if_nonzero = 1;
|
|
1832 base = 10;
|
|
1833 }
|
|
1834 }
|
|
1835 if (str[0] == '0' &&
|
|
1836 ((base == 16 && (str[1] == 'x' || str[1] == 'X')) ||
|
|
1837 (base == 8 && (str[1] == 'o' || str[1] == 'O')) ||
|
|
1838 (base == 2 && (str[1] == 'b' || str[1] == 'B'))))
|
|
1839 str += 2;
|
|
1840
|
|
1841 start = str;
|
|
1842 if ((base & (base - 1)) == 0)
|
|
1843 z = long_from_binary_base(&str, base);
|
|
1844 else {
|
|
1845 /***
|
|
1846 Binary bases can be converted in time linear in the number of digits, because
|
|
1847 Python's representation base is binary. Other bases (including decimal!) use
|
|
1848 the simple quadratic-time algorithm below, complicated by some speed tricks.
|
|
1849
|
|
1850 First some math: the largest integer that can be expressed in N base-B digits
|
|
1851 is B**N-1. Consequently, if we have an N-digit input in base B, the worst-
|
|
1852 case number of Python digits needed to hold it is the smallest integer n s.t.
|
|
1853
|
|
1854 BASE**n-1 >= B**N-1 [or, adding 1 to both sides]
|
|
1855 BASE**n >= B**N [taking logs to base BASE]
|
|
1856 n >= log(B**N)/log(BASE) = N * log(B)/log(BASE)
|
|
1857
|
|
1858 The static array log_base_BASE[base] == log(base)/log(BASE) so we can compute
|
|
1859 this quickly. A Python long with that much space is reserved near the start,
|
|
1860 and the result is computed into it.
|
|
1861
|
|
1862 The input string is actually treated as being in base base**i (i.e., i digits
|
|
1863 are processed at a time), where two more static arrays hold:
|
|
1864
|
|
1865 convwidth_base[base] = the largest integer i such that base**i <= BASE
|
|
1866 convmultmax_base[base] = base ** convwidth_base[base]
|
|
1867
|
|
1868 The first of these is the largest i such that i consecutive input digits
|
|
1869 must fit in a single Python digit. The second is effectively the input
|
|
1870 base we're really using.
|
|
1871
|
|
1872 Viewing the input as a sequence <c0, c1, ..., c_n-1> of digits in base
|
|
1873 convmultmax_base[base], the result is "simply"
|
|
1874
|
|
1875 (((c0*B + c1)*B + c2)*B + c3)*B + ... ))) + c_n-1
|
|
1876
|
|
1877 where B = convmultmax_base[base].
|
|
1878
|
|
1879 Error analysis: as above, the number of Python digits `n` needed is worst-
|
|
1880 case
|
|
1881
|
|
1882 n >= N * log(B)/log(BASE)
|
|
1883
|
|
1884 where `N` is the number of input digits in base `B`. This is computed via
|
|
1885
|
|
1886 size_z = (Py_ssize_t)((scan - str) * log_base_BASE[base]) + 1;
|
|
1887
|
|
1888 below. Two numeric concerns are how much space this can waste, and whether
|
|
1889 the computed result can be too small. To be concrete, assume BASE = 2**15,
|
|
1890 which is the default (and it's unlikely anyone changes that).
|
|
1891
|
|
1892 Waste isn't a problem: provided the first input digit isn't 0, the difference
|
|
1893 between the worst-case input with N digits and the smallest input with N
|
|
1894 digits is about a factor of B, but B is small compared to BASE so at most
|
|
1895 one allocated Python digit can remain unused on that count. If
|
|
1896 N*log(B)/log(BASE) is mathematically an exact integer, then truncating that
|
|
1897 and adding 1 returns a result 1 larger than necessary. However, that can't
|
|
1898 happen: whenever B is a power of 2, long_from_binary_base() is called
|
|
1899 instead, and it's impossible for B**i to be an integer power of 2**15 when
|
|
1900 B is not a power of 2 (i.e., it's impossible for N*log(B)/log(BASE) to be
|
|
1901 an exact integer when B is not a power of 2, since B**i has a prime factor
|
|
1902 other than 2 in that case, but (2**15)**j's only prime factor is 2).
|
|
1903
|
|
1904 The computed result can be too small if the true value of N*log(B)/log(BASE)
|
|
1905 is a little bit larger than an exact integer, but due to roundoff errors (in
|
|
1906 computing log(B), log(BASE), their quotient, and/or multiplying that by N)
|
|
1907 yields a numeric result a little less than that integer. Unfortunately, "how
|
|
1908 close can a transcendental function get to an integer over some range?"
|
|
1909 questions are generally theoretically intractable. Computer analysis via
|
|
1910 continued fractions is practical: expand log(B)/log(BASE) via continued
|
|
1911 fractions, giving a sequence i/j of "the best" rational approximations. Then
|
|
1912 j*log(B)/log(BASE) is approximately equal to (the integer) i. This shows that
|
|
1913 we can get very close to being in trouble, but very rarely. For example,
|
|
1914 76573 is a denominator in one of the continued-fraction approximations to
|
|
1915 log(10)/log(2**15), and indeed:
|
|
1916
|
|
1917 >>> log(10)/log(2**15)*76573
|
|
1918 16958.000000654003
|
|
1919
|
|
1920 is very close to an integer. If we were working with IEEE single-precision,
|
|
1921 rounding errors could kill us. Finding worst cases in IEEE double-precision
|
|
1922 requires better-than-double-precision log() functions, and Tim didn't bother.
|
|
1923 Instead the code checks to see whether the allocated space is enough as each
|
|
1924 new Python digit is added, and copies the whole thing to a larger long if not.
|
|
1925 This should happen extremely rarely, and in fact I don't have a test case
|
|
1926 that triggers it(!). Instead the code was tested by artificially allocating
|
|
1927 just 1 digit at the start, so that the copying code was exercised for every
|
|
1928 digit beyond the first.
|
|
1929 ***/
|
|
1930 register twodigits c; /* current input character */
|
|
1931 Py_ssize_t size_z;
|
|
1932 int i;
|
|
1933 int convwidth;
|
|
1934 twodigits convmultmax, convmult;
|
|
1935 digit *pz, *pzstop;
|
|
1936 char* scan;
|
|
1937
|
|
1938 static double log_base_BASE[37] = {0.0e0,};
|
|
1939 static int convwidth_base[37] = {0,};
|
|
1940 static twodigits convmultmax_base[37] = {0,};
|
|
1941
|
|
1942 if (log_base_BASE[base] == 0.0) {
|
|
1943 twodigits convmax = base;
|
|
1944 int i = 1;
|
|
1945
|
|
1946 log_base_BASE[base] = (log((double)base) /
|
|
1947 log((double)PyLong_BASE));
|
|
1948 for (;;) {
|
|
1949 twodigits next = convmax * base;
|
|
1950 if (next > PyLong_BASE)
|
|
1951 break;
|
|
1952 convmax = next;
|
|
1953 ++i;
|
|
1954 }
|
|
1955 convmultmax_base[base] = convmax;
|
|
1956 assert(i > 0);
|
|
1957 convwidth_base[base] = i;
|
|
1958 }
|
|
1959
|
|
1960 /* Find length of the string of numeric characters. */
|
|
1961 scan = str;
|
|
1962 while (_PyLong_DigitValue[Py_CHARMASK(*scan)] < base)
|
|
1963 ++scan;
|
|
1964
|
|
1965 /* Create a long object that can contain the largest possible
|
|
1966 * integer with this base and length. Note that there's no
|
|
1967 * need to initialize z->ob_digit -- no slot is read up before
|
|
1968 * being stored into.
|
|
1969 */
|
|
1970 size_z = (Py_ssize_t)((scan - str) * log_base_BASE[base]) + 1;
|
|
1971 /* Uncomment next line to test exceedingly rare copy code */
|
|
1972 /* size_z = 1; */
|
|
1973 assert(size_z > 0);
|
|
1974 z = _PyLong_New(size_z);
|
|
1975 if (z == NULL)
|
|
1976 return NULL;
|
|
1977 Py_SIZE(z) = 0;
|
|
1978
|
|
1979 /* `convwidth` consecutive input digits are treated as a single
|
|
1980 * digit in base `convmultmax`.
|
|
1981 */
|
|
1982 convwidth = convwidth_base[base];
|
|
1983 convmultmax = convmultmax_base[base];
|
|
1984
|
|
1985 /* Work ;-) */
|
|
1986 while (str < scan) {
|
|
1987 /* grab up to convwidth digits from the input string */
|
|
1988 c = (digit)_PyLong_DigitValue[Py_CHARMASK(*str++)];
|
|
1989 for (i = 1; i < convwidth && str != scan; ++i, ++str) {
|
|
1990 c = (twodigits)(c * base +
|
|
1991 (int)_PyLong_DigitValue[Py_CHARMASK(*str)]);
|
|
1992 assert(c < PyLong_BASE);
|
|
1993 }
|
|
1994
|
|
1995 convmult = convmultmax;
|
|
1996 /* Calculate the shift only if we couldn't get
|
|
1997 * convwidth digits.
|
|
1998 */
|
|
1999 if (i != convwidth) {
|
|
2000 convmult = base;
|
|
2001 for ( ; i > 1; --i)
|
|
2002 convmult *= base;
|
|
2003 }
|
|
2004
|
|
2005 /* Multiply z by convmult, and add c. */
|
|
2006 pz = z->ob_digit;
|
|
2007 pzstop = pz + Py_SIZE(z);
|
|
2008 for (; pz < pzstop; ++pz) {
|
|
2009 c += (twodigits)*pz * convmult;
|
|
2010 *pz = (digit)(c & PyLong_MASK);
|
|
2011 c >>= PyLong_SHIFT;
|
|
2012 }
|
|
2013 /* carry off the current end? */
|
|
2014 if (c) {
|
|
2015 assert(c < PyLong_BASE);
|
|
2016 if (Py_SIZE(z) < size_z) {
|
|
2017 *pz = (digit)c;
|
|
2018 ++Py_SIZE(z);
|
|
2019 }
|
|
2020 else {
|
|
2021 PyLongObject *tmp;
|
|
2022 /* Extremely rare. Get more space. */
|
|
2023 assert(Py_SIZE(z) == size_z);
|
|
2024 tmp = _PyLong_New(size_z + 1);
|
|
2025 if (tmp == NULL) {
|
|
2026 Py_DECREF(z);
|
|
2027 return NULL;
|
|
2028 }
|
|
2029 memcpy(tmp->ob_digit,
|
|
2030 z->ob_digit,
|
|
2031 sizeof(digit) * size_z);
|
|
2032 Py_DECREF(z);
|
|
2033 z = tmp;
|
|
2034 z->ob_digit[size_z] = (digit)c;
|
|
2035 ++size_z;
|
|
2036 }
|
|
2037 }
|
|
2038 }
|
|
2039 }
|
|
2040 if (z == NULL)
|
|
2041 return NULL;
|
|
2042 if (error_if_nonzero) {
|
|
2043 /* reset the base to 0, else the exception message
|
|
2044 doesn't make too much sense */
|
|
2045 base = 0;
|
|
2046 if (Py_SIZE(z) != 0)
|
|
2047 goto onError;
|
|
2048 /* there might still be other problems, therefore base
|
|
2049 remains zero here for the same reason */
|
|
2050 }
|
|
2051 if (str == start)
|
|
2052 goto onError;
|
|
2053 if (sign < 0)
|
|
2054 Py_SIZE(z) = -(Py_SIZE(z));
|
|
2055 while (*str && isspace(Py_CHARMASK(*str)))
|
|
2056 str++;
|
|
2057 if (*str != '\0')
|
|
2058 goto onError;
|
|
2059 if (pend)
|
|
2060 *pend = str;
|
|
2061 long_normalize(z);
|
|
2062 return (PyObject *) maybe_small_long(z);
|
|
2063
|
|
2064 onError:
|
|
2065 Py_XDECREF(z);
|
|
2066 slen = strlen(orig_str) < 200 ? strlen(orig_str) : 200;
|
|
2067 strobj = PyUnicode_FromStringAndSize(orig_str, slen);
|
|
2068 if (strobj == NULL)
|
|
2069 return NULL;
|
|
2070 PyErr_Format(PyExc_ValueError,
|
|
2071 "invalid literal for int() with base %d: %R",
|
|
2072 base, strobj);
|
|
2073 Py_DECREF(strobj);
|
|
2074 return NULL;
|
|
2075 }
|
|
2076
|
|
2077 PyObject *
|
|
2078 PyLong_FromUnicode(Py_UNICODE *u, Py_ssize_t length, int base)
|
|
2079 {
|
|
2080 PyObject *v, *unicode = PyUnicode_FromUnicode(u, length);
|
|
2081 if (unicode == NULL)
|
|
2082 return NULL;
|
|
2083 v = PyLong_FromUnicodeObject(unicode, base);
|
|
2084 Py_DECREF(unicode);
|
|
2085 return v;
|
|
2086 }
|
|
2087
|
|
2088 PyObject *
|
|
2089 PyLong_FromUnicodeObject(PyObject *u, int base)
|
|
2090 {
|
|
2091 PyObject *result;
|
|
2092 PyObject *asciidig;
|
|
2093 char *buffer, *end;
|
|
2094 Py_ssize_t buflen;
|
|
2095
|
|
2096 asciidig = _PyUnicode_TransformDecimalAndSpaceToASCII(u);
|
|
2097 if (asciidig == NULL)
|
|
2098 return NULL;
|
|
2099 buffer = PyUnicode_AsUTF8AndSize(asciidig, &buflen);
|
|
2100 if (buffer == NULL) {
|
|
2101 Py_DECREF(asciidig);
|
|
2102 return NULL;
|
|
2103 }
|
|
2104 result = PyLong_FromString(buffer, &end, base);
|
|
2105 if (result != NULL && end != buffer + buflen) {
|
|
2106 PyErr_SetString(PyExc_ValueError,
|
|
2107 "null byte in argument for int()");
|
|
2108 Py_DECREF(result);
|
|
2109 result = NULL;
|
|
2110 }
|
|
2111 Py_DECREF(asciidig);
|
|
2112 return result;
|
|
2113 }
|
|
2114
|
|
2115 /* forward */
|
|
2116 static PyLongObject *x_divrem
|
|
2117 (PyLongObject *, PyLongObject *, PyLongObject **);
|
|
2118 static PyObject *long_long(PyObject *v);
|
|
2119
|
|
2120 /* Long division with remainder, top-level routine */
|
|
2121
|
|
2122 static int
|
|
2123 long_divrem(PyLongObject *a, PyLongObject *b,
|
|
2124 PyLongObject **pdiv, PyLongObject **prem)
|
|
2125 {
|
|
2126 Py_ssize_t size_a = ABS(Py_SIZE(a)), size_b = ABS(Py_SIZE(b));
|
|
2127 PyLongObject *z;
|
|
2128
|
|
2129 if (size_b == 0) {
|
|
2130 PyErr_SetString(PyExc_ZeroDivisionError,
|
|
2131 "integer division or modulo by zero");
|
|
2132 return -1;
|
|
2133 }
|
|
2134 if (size_a < size_b ||
|
|
2135 (size_a == size_b &&
|
|
2136 a->ob_digit[size_a-1] < b->ob_digit[size_b-1])) {
|
|
2137 /* |a| < |b|. */
|
|
2138 *pdiv = (PyLongObject*)PyLong_FromLong(0);
|
|
2139 if (*pdiv == NULL)
|
|
2140 return -1;
|
|
2141 Py_INCREF(a);
|
|
2142 *prem = (PyLongObject *) a;
|
|
2143 return 0;
|
|
2144 }
|
|
2145 if (size_b == 1) {
|
|
2146 digit rem = 0;
|
|
2147 z = divrem1(a, b->ob_digit[0], &rem);
|
|
2148 if (z == NULL)
|
|
2149 return -1;
|
|
2150 *prem = (PyLongObject *) PyLong_FromLong((long)rem);
|
|
2151 if (*prem == NULL) {
|
|
2152 Py_DECREF(z);
|
|
2153 return -1;
|
|
2154 }
|
|
2155 }
|
|
2156 else {
|
|
2157 z = x_divrem(a, b, prem);
|
|
2158 if (z == NULL)
|
|
2159 return -1;
|
|
2160 }
|
|
2161 /* Set the signs.
|
|
2162 The quotient z has the sign of a*b;
|
|
2163 the remainder r has the sign of a,
|
|
2164 so a = b*z + r. */
|
|
2165 if ((Py_SIZE(a) < 0) != (Py_SIZE(b) < 0))
|
|
2166 NEGATE(z);
|
|
2167 if (Py_SIZE(a) < 0 && Py_SIZE(*prem) != 0)
|
|
2168 NEGATE(*prem);
|
|
2169 *pdiv = maybe_small_long(z);
|
|
2170 return 0;
|
|
2171 }
|
|
2172
|
|
2173 /* Unsigned long division with remainder -- the algorithm. The arguments v1
|
|
2174 and w1 should satisfy 2 <= ABS(Py_SIZE(w1)) <= ABS(Py_SIZE(v1)). */
|
|
2175
|
|
2176 static PyLongObject *
|
|
2177 x_divrem(PyLongObject *v1, PyLongObject *w1, PyLongObject **prem)
|
|
2178 {
|
|
2179 PyLongObject *v, *w, *a;
|
|
2180 Py_ssize_t i, k, size_v, size_w;
|
|
2181 int d;
|
|
2182 digit wm1, wm2, carry, q, r, vtop, *v0, *vk, *w0, *ak;
|
|
2183 twodigits vv;
|
|
2184 sdigit zhi;
|
|
2185 stwodigits z;
|
|
2186
|
|
2187 /* We follow Knuth [The Art of Computer Programming, Vol. 2 (3rd
|
|
2188 edn.), section 4.3.1, Algorithm D], except that we don't explicitly
|
|
2189 handle the special case when the initial estimate q for a quotient
|
|
2190 digit is >= PyLong_BASE: the max value for q is PyLong_BASE+1, and
|
|
2191 that won't overflow a digit. */
|
|
2192
|
|
2193 /* allocate space; w will also be used to hold the final remainder */
|
|
2194 size_v = ABS(Py_SIZE(v1));
|
|
2195 size_w = ABS(Py_SIZE(w1));
|
|
2196 assert(size_v >= size_w && size_w >= 2); /* Assert checks by div() */
|
|
2197 v = _PyLong_New(size_v+1);
|
|
2198 if (v == NULL) {
|
|
2199 *prem = NULL;
|
|
2200 return NULL;
|
|
2201 }
|
|
2202 w = _PyLong_New(size_w);
|
|
2203 if (w == NULL) {
|
|
2204 Py_DECREF(v);
|
|
2205 *prem = NULL;
|
|
2206 return NULL;
|
|
2207 }
|
|
2208
|
|
2209 /* normalize: shift w1 left so that its top digit is >= PyLong_BASE/2.
|
|
2210 shift v1 left by the same amount. Results go into w and v. */
|
|
2211 d = PyLong_SHIFT - bits_in_digit(w1->ob_digit[size_w-1]);
|
|
2212 carry = v_lshift(w->ob_digit, w1->ob_digit, size_w, d);
|
|
2213 assert(carry == 0);
|
|
2214 carry = v_lshift(v->ob_digit, v1->ob_digit, size_v, d);
|
|
2215 if (carry != 0 || v->ob_digit[size_v-1] >= w->ob_digit[size_w-1]) {
|
|
2216 v->ob_digit[size_v] = carry;
|
|
2217 size_v++;
|
|
2218 }
|
|
2219
|
|
2220 /* Now v->ob_digit[size_v-1] < w->ob_digit[size_w-1], so quotient has
|
|
2221 at most (and usually exactly) k = size_v - size_w digits. */
|
|
2222 k = size_v - size_w;
|
|
2223 assert(k >= 0);
|
|
2224 a = _PyLong_New(k);
|
|
2225 if (a == NULL) {
|
|
2226 Py_DECREF(w);
|
|
2227 Py_DECREF(v);
|
|
2228 *prem = NULL;
|
|
2229 return NULL;
|
|
2230 }
|
|
2231 v0 = v->ob_digit;
|
|
2232 w0 = w->ob_digit;
|
|
2233 wm1 = w0[size_w-1];
|
|
2234 wm2 = w0[size_w-2];
|
|
2235 for (vk = v0+k, ak = a->ob_digit + k; vk-- > v0;) {
|
|
2236 /* inner loop: divide vk[0:size_w+1] by w0[0:size_w], giving
|
|
2237 single-digit quotient q, remainder in vk[0:size_w]. */
|
|
2238
|
|
2239 SIGCHECK({
|
|
2240 Py_DECREF(a);
|
|
2241 Py_DECREF(w);
|
|
2242 Py_DECREF(v);
|
|
2243 *prem = NULL;
|
|
2244 return NULL;
|
|
2245 });
|
|
2246
|
|
2247 /* estimate quotient digit q; may overestimate by 1 (rare) */
|
|
2248 vtop = vk[size_w];
|
|
2249 assert(vtop <= wm1);
|
|
2250 vv = ((twodigits)vtop << PyLong_SHIFT) | vk[size_w-1];
|
|
2251 q = (digit)(vv / wm1);
|
|
2252 r = (digit)(vv - (twodigits)wm1 * q); /* r = vv % wm1 */
|
|
2253 while ((twodigits)wm2 * q > (((twodigits)r << PyLong_SHIFT)
|
|
2254 | vk[size_w-2])) {
|
|
2255 --q;
|
|
2256 r += wm1;
|
|
2257 if (r >= PyLong_BASE)
|
|
2258 break;
|
|
2259 }
|
|
2260 assert(q <= PyLong_BASE);
|
|
2261
|
|
2262 /* subtract q*w0[0:size_w] from vk[0:size_w+1] */
|
|
2263 zhi = 0;
|
|
2264 for (i = 0; i < size_w; ++i) {
|
|
2265 /* invariants: -PyLong_BASE <= -q <= zhi <= 0;
|
|
2266 -PyLong_BASE * q <= z < PyLong_BASE */
|
|
2267 z = (sdigit)vk[i] + zhi -
|
|
2268 (stwodigits)q * (stwodigits)w0[i];
|
|
2269 vk[i] = (digit)z & PyLong_MASK;
|
|
2270 zhi = (sdigit)Py_ARITHMETIC_RIGHT_SHIFT(stwodigits,
|
|
2271 z, PyLong_SHIFT);
|
|
2272 }
|
|
2273
|
|
2274 /* add w back if q was too large (this branch taken rarely) */
|
|
2275 assert((sdigit)vtop + zhi == -1 || (sdigit)vtop + zhi == 0);
|
|
2276 if ((sdigit)vtop + zhi < 0) {
|
|
2277 carry = 0;
|
|
2278 for (i = 0; i < size_w; ++i) {
|
|
2279 carry += vk[i] + w0[i];
|
|
2280 vk[i] = carry & PyLong_MASK;
|
|
2281 carry >>= PyLong_SHIFT;
|
|
2282 }
|
|
2283 --q;
|
|
2284 }
|
|
2285
|
|
2286 /* store quotient digit */
|
|
2287 assert(q < PyLong_BASE);
|
|
2288 *--ak = q;
|
|
2289 }
|
|
2290
|
|
2291 /* unshift remainder; we reuse w to store the result */
|
|
2292 carry = v_rshift(w0, v0, size_w, d);
|
|
2293 assert(carry==0);
|
|
2294 Py_DECREF(v);
|
|
2295
|
|
2296 *prem = long_normalize(w);
|
|
2297 return long_normalize(a);
|
|
2298 }
|
|
2299
|
|
2300 /* For a nonzero PyLong a, express a in the form x * 2**e, with 0.5 <=
|
|
2301 abs(x) < 1.0 and e >= 0; return x and put e in *e. Here x is
|
|
2302 rounded to DBL_MANT_DIG significant bits using round-half-to-even.
|
|
2303 If a == 0, return 0.0 and set *e = 0. If the resulting exponent
|
|
2304 e is larger than PY_SSIZE_T_MAX, raise OverflowError and return
|
|
2305 -1.0. */
|
|
2306
|
|
2307 /* attempt to define 2.0**DBL_MANT_DIG as a compile-time constant */
|
|
2308 #if DBL_MANT_DIG == 53
|
|
2309 #define EXP2_DBL_MANT_DIG 9007199254740992.0
|
|
2310 #else
|
|
2311 #define EXP2_DBL_MANT_DIG (ldexp(1.0, DBL_MANT_DIG))
|
|
2312 #endif
|
|
2313
|
|
2314 double
|
|
2315 _PyLong_Frexp(PyLongObject *a, Py_ssize_t *e)
|
|
2316 {
|
|
2317 Py_ssize_t a_size, a_bits, shift_digits, shift_bits, x_size;
|
|
2318 /* See below for why x_digits is always large enough. */
|
|
2319 digit rem, x_digits[2 + (DBL_MANT_DIG + 1) / PyLong_SHIFT];
|
|
2320 double dx;
|
|
2321 /* Correction term for round-half-to-even rounding. For a digit x,
|
|
2322 "x + half_even_correction[x & 7]" gives x rounded to the nearest
|
|
2323 multiple of 4, rounding ties to a multiple of 8. */
|
|
2324 static const int half_even_correction[8] = {0, -1, -2, 1, 0, -1, 2, 1};
|
|
2325
|
|
2326 a_size = ABS(Py_SIZE(a));
|
|
2327 if (a_size == 0) {
|
|
2328 /* Special case for 0: significand 0.0, exponent 0. */
|
|
2329 *e = 0;
|
|
2330 return 0.0;
|
|
2331 }
|
|
2332 a_bits = bits_in_digit(a->ob_digit[a_size-1]);
|
|
2333 /* The following is an overflow-free version of the check
|
|
2334 "if ((a_size - 1) * PyLong_SHIFT + a_bits > PY_SSIZE_T_MAX) ..." */
|
|
2335 if (a_size >= (PY_SSIZE_T_MAX - 1) / PyLong_SHIFT + 1 &&
|
|
2336 (a_size > (PY_SSIZE_T_MAX - 1) / PyLong_SHIFT + 1 ||
|
|
2337 a_bits > (PY_SSIZE_T_MAX - 1) % PyLong_SHIFT + 1))
|
|
2338 goto overflow;
|
|
2339 a_bits = (a_size - 1) * PyLong_SHIFT + a_bits;
|
|
2340
|
|
2341 /* Shift the first DBL_MANT_DIG + 2 bits of a into x_digits[0:x_size]
|
|
2342 (shifting left if a_bits <= DBL_MANT_DIG + 2).
|
|
2343
|
|
2344 Number of digits needed for result: write // for floor division.
|
|
2345 Then if shifting left, we end up using
|
|
2346
|
|
2347 1 + a_size + (DBL_MANT_DIG + 2 - a_bits) // PyLong_SHIFT
|
|
2348
|
|
2349 digits. If shifting right, we use
|
|
2350
|
|
2351 a_size - (a_bits - DBL_MANT_DIG - 2) // PyLong_SHIFT
|
|
2352
|
|
2353 digits. Using a_size = 1 + (a_bits - 1) // PyLong_SHIFT along with
|
|
2354 the inequalities
|
|
2355
|
|
2356 m // PyLong_SHIFT + n // PyLong_SHIFT <= (m + n) // PyLong_SHIFT
|
|
2357 m // PyLong_SHIFT - n // PyLong_SHIFT <=
|
|
2358 1 + (m - n - 1) // PyLong_SHIFT,
|
|
2359
|
|
2360 valid for any integers m and n, we find that x_size satisfies
|
|
2361
|
|
2362 x_size <= 2 + (DBL_MANT_DIG + 1) // PyLong_SHIFT
|
|
2363
|
|
2364 in both cases.
|
|
2365 */
|
|
2366 if (a_bits <= DBL_MANT_DIG + 2) {
|
|
2367 shift_digits = (DBL_MANT_DIG + 2 - a_bits) / PyLong_SHIFT;
|
|
2368 shift_bits = (DBL_MANT_DIG + 2 - a_bits) % PyLong_SHIFT;
|
|
2369 x_size = 0;
|
|
2370 while (x_size < shift_digits)
|
|
2371 x_digits[x_size++] = 0;
|
|
2372 rem = v_lshift(x_digits + x_size, a->ob_digit, a_size,
|
|
2373 (int)shift_bits);
|
|
2374 x_size += a_size;
|
|
2375 x_digits[x_size++] = rem;
|
|
2376 }
|
|
2377 else {
|
|
2378 shift_digits = (a_bits - DBL_MANT_DIG - 2) / PyLong_SHIFT;
|
|
2379 shift_bits = (a_bits - DBL_MANT_DIG - 2) % PyLong_SHIFT;
|
|
2380 rem = v_rshift(x_digits, a->ob_digit + shift_digits,
|
|
2381 a_size - shift_digits, (int)shift_bits);
|
|
2382 x_size = a_size - shift_digits;
|
|
2383 /* For correct rounding below, we need the least significant
|
|
2384 bit of x to be 'sticky' for this shift: if any of the bits
|
|
2385 shifted out was nonzero, we set the least significant bit
|
|
2386 of x. */
|
|
2387 if (rem)
|
|
2388 x_digits[0] |= 1;
|
|
2389 else
|
|
2390 while (shift_digits > 0)
|
|
2391 if (a->ob_digit[--shift_digits]) {
|
|
2392 x_digits[0] |= 1;
|
|
2393 break;
|
|
2394 }
|
|
2395 }
|
|
2396 assert(1 <= x_size && x_size <= (Py_ssize_t)Py_ARRAY_LENGTH(x_digits));
|
|
2397
|
|
2398 /* Round, and convert to double. */
|
|
2399 x_digits[0] += half_even_correction[x_digits[0] & 7];
|
|
2400 dx = x_digits[--x_size];
|
|
2401 while (x_size > 0)
|
|
2402 dx = dx * PyLong_BASE + x_digits[--x_size];
|
|
2403
|
|
2404 /* Rescale; make correction if result is 1.0. */
|
|
2405 dx /= 4.0 * EXP2_DBL_MANT_DIG;
|
|
2406 if (dx == 1.0) {
|
|
2407 if (a_bits == PY_SSIZE_T_MAX)
|
|
2408 goto overflow;
|
|
2409 dx = 0.5;
|
|
2410 a_bits += 1;
|
|
2411 }
|
|
2412
|
|
2413 *e = a_bits;
|
|
2414 return Py_SIZE(a) < 0 ? -dx : dx;
|
|
2415
|
|
2416 overflow:
|
|
2417 /* exponent > PY_SSIZE_T_MAX */
|
|
2418 PyErr_SetString(PyExc_OverflowError,
|
|
2419 "huge integer: number of bits overflows a Py_ssize_t");
|
|
2420 *e = 0;
|
|
2421 return -1.0;
|
|
2422 }
|
|
2423
|
|
2424 /* Get a C double from a long int object. Rounds to the nearest double,
|
|
2425 using the round-half-to-even rule in the case of a tie. */
|
|
2426
|
|
2427 double
|
|
2428 PyLong_AsDouble(PyObject *v)
|
|
2429 {
|
|
2430 Py_ssize_t exponent;
|
|
2431 double x;
|
|
2432
|
|
2433 if (v == NULL) {
|
|
2434 PyErr_BadInternalCall();
|
|
2435 return -1.0;
|
|
2436 }
|
|
2437 if (!PyLong_Check(v)) {
|
|
2438 PyErr_SetString(PyExc_TypeError, "an integer is required");
|
|
2439 return -1.0;
|
|
2440 }
|
|
2441 x = _PyLong_Frexp((PyLongObject *)v, &exponent);
|
|
2442 if ((x == -1.0 && PyErr_Occurred()) || exponent > DBL_MAX_EXP) {
|
|
2443 PyErr_SetString(PyExc_OverflowError,
|
|
2444 "long int too large to convert to float");
|
|
2445 return -1.0;
|
|
2446 }
|
|
2447 return ldexp(x, (int)exponent);
|
|
2448 }
|
|
2449
|
|
2450 /* Methods */
|
|
2451
|
|
2452 static void
|
|
2453 long_dealloc(PyObject *v)
|
|
2454 {
|
|
2455 Py_TYPE(v)->tp_free(v);
|
|
2456 }
|
|
2457
|
|
2458 static int
|
|
2459 long_compare(PyLongObject *a, PyLongObject *b)
|
|
2460 {
|
|
2461 Py_ssize_t sign;
|
|
2462
|
|
2463 if (Py_SIZE(a) != Py_SIZE(b)) {
|
|
2464 sign = Py_SIZE(a) - Py_SIZE(b);
|
|
2465 }
|
|
2466 else {
|
|
2467 Py_ssize_t i = ABS(Py_SIZE(a));
|
|
2468 while (--i >= 0 && a->ob_digit[i] == b->ob_digit[i])
|
|
2469 ;
|
|
2470 if (i < 0)
|
|
2471 sign = 0;
|
|
2472 else {
|
|
2473 sign = (sdigit)a->ob_digit[i] - (sdigit)b->ob_digit[i];
|
|
2474 if (Py_SIZE(a) < 0)
|
|
2475 sign = -sign;
|
|
2476 }
|
|
2477 }
|
|
2478 return sign < 0 ? -1 : sign > 0 ? 1 : 0;
|
|
2479 }
|
|
2480
|
|
2481 #define TEST_COND(cond) \
|
|
2482 ((cond) ? Py_True : Py_False)
|
|
2483
|
|
2484 static PyObject *
|
|
2485 long_richcompare(PyObject *self, PyObject *other, int op)
|
|
2486 {
|
|
2487 int result;
|
|
2488 PyObject *v;
|
|
2489 CHECK_BINOP(self, other);
|
|
2490 if (self == other)
|
|
2491 result = 0;
|
|
2492 else
|
|
2493 result = long_compare((PyLongObject*)self, (PyLongObject*)other);
|
|
2494 /* Convert the return value to a Boolean */
|
|
2495 switch (op) {
|
|
2496 case Py_EQ:
|
|
2497 v = TEST_COND(result == 0);
|
|
2498 break;
|
|
2499 case Py_NE:
|
|
2500 v = TEST_COND(result != 0);
|
|
2501 break;
|
|
2502 case Py_LE:
|
|
2503 v = TEST_COND(result <= 0);
|
|
2504 break;
|
|
2505 case Py_GE:
|
|
2506 v = TEST_COND(result >= 0);
|
|
2507 break;
|
|
2508 case Py_LT:
|
|
2509 v = TEST_COND(result == -1);
|
|
2510 break;
|
|
2511 case Py_GT:
|
|
2512 v = TEST_COND(result == 1);
|
|
2513 break;
|
|
2514 default:
|
|
2515 PyErr_BadArgument();
|
|
2516 return NULL;
|
|
2517 }
|
|
2518 Py_INCREF(v);
|
|
2519 return v;
|
|
2520 }
|
|
2521
|
|
2522 static Py_hash_t
|
|
2523 long_hash(PyLongObject *v)
|
|
2524 {
|
|
2525 Py_uhash_t x;
|
|
2526 Py_ssize_t i;
|
|
2527 int sign;
|
|
2528
|
|
2529 i = Py_SIZE(v);
|
|
2530 switch(i) {
|
|
2531 case -1: return v->ob_digit[0]==1 ? -2 : -(sdigit)v->ob_digit[0];
|
|
2532 case 0: return 0;
|
|
2533 case 1: return v->ob_digit[0];
|
|
2534 }
|
|
2535 sign = 1;
|
|
2536 x = 0;
|
|
2537 if (i < 0) {
|
|
2538 sign = -1;
|
|
2539 i = -(i);
|
|
2540 }
|
|
2541 while (--i >= 0) {
|
|
2542 /* Here x is a quantity in the range [0, _PyHASH_MODULUS); we
|
|
2543 want to compute x * 2**PyLong_SHIFT + v->ob_digit[i] modulo
|
|
2544 _PyHASH_MODULUS.
|
|
2545
|
|
2546 The computation of x * 2**PyLong_SHIFT % _PyHASH_MODULUS
|
|
2547 amounts to a rotation of the bits of x. To see this, write
|
|
2548
|
|
2549 x * 2**PyLong_SHIFT = y * 2**_PyHASH_BITS + z
|
|
2550
|
|
2551 where y = x >> (_PyHASH_BITS - PyLong_SHIFT) gives the top
|
|
2552 PyLong_SHIFT bits of x (those that are shifted out of the
|
|
2553 original _PyHASH_BITS bits, and z = (x << PyLong_SHIFT) &
|
|
2554 _PyHASH_MODULUS gives the bottom _PyHASH_BITS - PyLong_SHIFT
|
|
2555 bits of x, shifted up. Then since 2**_PyHASH_BITS is
|
|
2556 congruent to 1 modulo _PyHASH_MODULUS, y*2**_PyHASH_BITS is
|
|
2557 congruent to y modulo _PyHASH_MODULUS. So
|
|
2558
|
|
2559 x * 2**PyLong_SHIFT = y + z (mod _PyHASH_MODULUS).
|
|
2560
|
|
2561 The right-hand side is just the result of rotating the
|
|
2562 _PyHASH_BITS bits of x left by PyLong_SHIFT places; since
|
|
2563 not all _PyHASH_BITS bits of x are 1s, the same is true
|
|
2564 after rotation, so 0 <= y+z < _PyHASH_MODULUS and y + z is
|
|
2565 the reduction of x*2**PyLong_SHIFT modulo
|
|
2566 _PyHASH_MODULUS. */
|
|
2567 x = ((x << PyLong_SHIFT) & _PyHASH_MODULUS) |
|
|
2568 (x >> (_PyHASH_BITS - PyLong_SHIFT));
|
|
2569 x += v->ob_digit[i];
|
|
2570 if (x >= _PyHASH_MODULUS)
|
|
2571 x -= _PyHASH_MODULUS;
|
|
2572 }
|
|
2573 x = x * sign;
|
|
2574 if (x == (Py_uhash_t)-1)
|
|
2575 x = (Py_uhash_t)-2;
|
|
2576 return (Py_hash_t)x;
|
|
2577 }
|
|
2578
|
|
2579
|
|
2580 /* Add the absolute values of two long integers. */
|
|
2581
|
|
2582 static PyLongObject *
|
|
2583 x_add(PyLongObject *a, PyLongObject *b)
|
|
2584 {
|
|
2585 Py_ssize_t size_a = ABS(Py_SIZE(a)), size_b = ABS(Py_SIZE(b));
|
|
2586 PyLongObject *z;
|
|
2587 Py_ssize_t i;
|
|
2588 digit carry = 0;
|
|
2589
|
|
2590 /* Ensure a is the larger of the two: */
|
|
2591 if (size_a < size_b) {
|
|
2592 { PyLongObject *temp = a; a = b; b = temp; }
|
|
2593 { Py_ssize_t size_temp = size_a;
|
|
2594 size_a = size_b;
|
|
2595 size_b = size_temp; }
|
|
2596 }
|
|
2597 z = _PyLong_New(size_a+1);
|
|
2598 if (z == NULL)
|
|
2599 return NULL;
|
|
2600 for (i = 0; i < size_b; ++i) {
|
|
2601 carry += a->ob_digit[i] + b->ob_digit[i];
|
|
2602 z->ob_digit[i] = carry & PyLong_MASK;
|
|
2603 carry >>= PyLong_SHIFT;
|
|
2604 }
|
|
2605 for (; i < size_a; ++i) {
|
|
2606 carry += a->ob_digit[i];
|
|
2607 z->ob_digit[i] = carry & PyLong_MASK;
|
|
2608 carry >>= PyLong_SHIFT;
|
|
2609 }
|
|
2610 z->ob_digit[i] = carry;
|
|
2611 return long_normalize(z);
|
|
2612 }
|
|
2613
|
|
2614 /* Subtract the absolute values of two integers. */
|
|
2615
|
|
2616 static PyLongObject *
|
|
2617 x_sub(PyLongObject *a, PyLongObject *b)
|
|
2618 {
|
|
2619 Py_ssize_t size_a = ABS(Py_SIZE(a)), size_b = ABS(Py_SIZE(b));
|
|
2620 PyLongObject *z;
|
|
2621 Py_ssize_t i;
|
|
2622 int sign = 1;
|
|
2623 digit borrow = 0;
|
|
2624
|
|
2625 /* Ensure a is the larger of the two: */
|
|
2626 if (size_a < size_b) {
|
|
2627 sign = -1;
|
|
2628 { PyLongObject *temp = a; a = b; b = temp; }
|
|
2629 { Py_ssize_t size_temp = size_a;
|
|
2630 size_a = size_b;
|
|
2631 size_b = size_temp; }
|
|
2632 }
|
|
2633 else if (size_a == size_b) {
|
|
2634 /* Find highest digit where a and b differ: */
|
|
2635 i = size_a;
|
|
2636 while (--i >= 0 && a->ob_digit[i] == b->ob_digit[i])
|
|
2637 ;
|
|
2638 if (i < 0)
|
|
2639 return (PyLongObject *)PyLong_FromLong(0);
|
|
2640 if (a->ob_digit[i] < b->ob_digit[i]) {
|
|
2641 sign = -1;
|
|
2642 { PyLongObject *temp = a; a = b; b = temp; }
|
|
2643 }
|
|
2644 size_a = size_b = i+1;
|
|
2645 }
|
|
2646 z = _PyLong_New(size_a);
|
|
2647 if (z == NULL)
|
|
2648 return NULL;
|
|
2649 for (i = 0; i < size_b; ++i) {
|
|
2650 /* The following assumes unsigned arithmetic
|
|
2651 works module 2**N for some N>PyLong_SHIFT. */
|
|
2652 borrow = a->ob_digit[i] - b->ob_digit[i] - borrow;
|
|
2653 z->ob_digit[i] = borrow & PyLong_MASK;
|
|
2654 borrow >>= PyLong_SHIFT;
|
|
2655 borrow &= 1; /* Keep only one sign bit */
|
|
2656 }
|
|
2657 for (; i < size_a; ++i) {
|
|
2658 borrow = a->ob_digit[i] - borrow;
|
|
2659 z->ob_digit[i] = borrow & PyLong_MASK;
|
|
2660 borrow >>= PyLong_SHIFT;
|
|
2661 borrow &= 1; /* Keep only one sign bit */
|
|
2662 }
|
|
2663 assert(borrow == 0);
|
|
2664 if (sign < 0)
|
|
2665 NEGATE(z);
|
|
2666 return long_normalize(z);
|
|
2667 }
|
|
2668
|
|
2669 static PyObject *
|
|
2670 long_add(PyLongObject *a, PyLongObject *b)
|
|
2671 {
|
|
2672 PyLongObject *z;
|
|
2673
|
|
2674 CHECK_BINOP(a, b);
|
|
2675
|
|
2676 if (ABS(Py_SIZE(a)) <= 1 && ABS(Py_SIZE(b)) <= 1) {
|
|
2677 PyObject *result = PyLong_FromLong(MEDIUM_VALUE(a) +
|
|
2678 MEDIUM_VALUE(b));
|
|
2679 return result;
|
|
2680 }
|
|
2681 if (Py_SIZE(a) < 0) {
|
|
2682 if (Py_SIZE(b) < 0) {
|
|
2683 z = x_add(a, b);
|
|
2684 if (z != NULL && Py_SIZE(z) != 0)
|
|
2685 Py_SIZE(z) = -(Py_SIZE(z));
|
|
2686 }
|
|
2687 else
|
|
2688 z = x_sub(b, a);
|
|
2689 }
|
|
2690 else {
|
|
2691 if (Py_SIZE(b) < 0)
|
|
2692 z = x_sub(a, b);
|
|
2693 else
|
|
2694 z = x_add(a, b);
|
|
2695 }
|
|
2696 return (PyObject *)z;
|
|
2697 }
|
|
2698
|
|
2699 static PyObject *
|
|
2700 long_sub(PyLongObject *a, PyLongObject *b)
|
|
2701 {
|
|
2702 PyLongObject *z;
|
|
2703
|
|
2704 CHECK_BINOP(a, b);
|
|
2705
|
|
2706 if (ABS(Py_SIZE(a)) <= 1 && ABS(Py_SIZE(b)) <= 1) {
|
|
2707 PyObject* r;
|
|
2708 r = PyLong_FromLong(MEDIUM_VALUE(a)-MEDIUM_VALUE(b));
|
|
2709 return r;
|
|
2710 }
|
|
2711 if (Py_SIZE(a) < 0) {
|
|
2712 if (Py_SIZE(b) < 0)
|
|
2713 z = x_sub(a, b);
|
|
2714 else
|
|
2715 z = x_add(a, b);
|
|
2716 if (z != NULL && Py_SIZE(z) != 0)
|
|
2717 Py_SIZE(z) = -(Py_SIZE(z));
|
|
2718 }
|
|
2719 else {
|
|
2720 if (Py_SIZE(b) < 0)
|
|
2721 z = x_add(a, b);
|
|
2722 else
|
|
2723 z = x_sub(a, b);
|
|
2724 }
|
|
2725 return (PyObject *)z;
|
|
2726 }
|
|
2727
|
|
2728 /* Grade school multiplication, ignoring the signs.
|
|
2729 * Returns the absolute value of the product, or NULL if error.
|
|
2730 */
|
|
2731 static PyLongObject *
|
|
2732 x_mul(PyLongObject *a, PyLongObject *b)
|
|
2733 {
|
|
2734 PyLongObject *z;
|
|
2735 Py_ssize_t size_a = ABS(Py_SIZE(a));
|
|
2736 Py_ssize_t size_b = ABS(Py_SIZE(b));
|
|
2737 Py_ssize_t i;
|
|
2738
|
|
2739 z = _PyLong_New(size_a + size_b);
|
|
2740 if (z == NULL)
|
|
2741 return NULL;
|
|
2742
|
|
2743 memset(z->ob_digit, 0, Py_SIZE(z) * sizeof(digit));
|
|
2744 if (a == b) {
|
|
2745 /* Efficient squaring per HAC, Algorithm 14.16:
|
|
2746 * http://www.cacr.math.uwaterloo.ca/hac/about/chap14.pdf
|
|
2747 * Gives slightly less than a 2x speedup when a == b,
|
|
2748 * via exploiting that each entry in the multiplication
|
|
2749 * pyramid appears twice (except for the size_a squares).
|
|
2750 */
|
|
2751 for (i = 0; i < size_a; ++i) {
|
|
2752 twodigits carry;
|
|
2753 twodigits f = a->ob_digit[i];
|
|
2754 digit *pz = z->ob_digit + (i << 1);
|
|
2755 digit *pa = a->ob_digit + i + 1;
|
|
2756 digit *paend = a->ob_digit + size_a;
|
|
2757
|
|
2758 SIGCHECK({
|
|
2759 Py_DECREF(z);
|
|
2760 return NULL;
|
|
2761 });
|
|
2762
|
|
2763 carry = *pz + f * f;
|
|
2764 *pz++ = (digit)(carry & PyLong_MASK);
|
|
2765 carry >>= PyLong_SHIFT;
|
|
2766 assert(carry <= PyLong_MASK);
|
|
2767
|
|
2768 /* Now f is added in twice in each column of the
|
|
2769 * pyramid it appears. Same as adding f<<1 once.
|
|
2770 */
|
|
2771 f <<= 1;
|
|
2772 while (pa < paend) {
|
|
2773 carry += *pz + *pa++ * f;
|
|
2774 *pz++ = (digit)(carry & PyLong_MASK);
|
|
2775 carry >>= PyLong_SHIFT;
|
|
2776 assert(carry <= (PyLong_MASK << 1));
|
|
2777 }
|
|
2778 if (carry) {
|
|
2779 carry += *pz;
|
|
2780 *pz++ = (digit)(carry & PyLong_MASK);
|
|
2781 carry >>= PyLong_SHIFT;
|
|
2782 }
|
|
2783 if (carry)
|
|
2784 *pz += (digit)(carry & PyLong_MASK);
|
|
2785 assert((carry >> PyLong_SHIFT) == 0);
|
|
2786 }
|
|
2787 }
|
|
2788 else { /* a is not the same as b -- gradeschool long mult */
|
|
2789 for (i = 0; i < size_a; ++i) {
|
|
2790 twodigits carry = 0;
|
|
2791 twodigits f = a->ob_digit[i];
|
|
2792 digit *pz = z->ob_digit + i;
|
|
2793 digit *pb = b->ob_digit;
|
|
2794 digit *pbend = b->ob_digit + size_b;
|
|
2795
|
|
2796 SIGCHECK({
|
|
2797 Py_DECREF(z);
|
|
2798 return NULL;
|
|
2799 });
|
|
2800
|
|
2801 while (pb < pbend) {
|
|
2802 carry += *pz + *pb++ * f;
|
|
2803 *pz++ = (digit)(carry & PyLong_MASK);
|
|
2804 carry >>= PyLong_SHIFT;
|
|
2805 assert(carry <= PyLong_MASK);
|
|
2806 }
|
|
2807 if (carry)
|
|
2808 *pz += (digit)(carry & PyLong_MASK);
|
|
2809 assert((carry >> PyLong_SHIFT) == 0);
|
|
2810 }
|
|
2811 }
|
|
2812 return long_normalize(z);
|
|
2813 }
|
|
2814
|
|
2815 /* A helper for Karatsuba multiplication (k_mul).
|
|
2816 Takes a long "n" and an integer "size" representing the place to
|
|
2817 split, and sets low and high such that abs(n) == (high << size) + low,
|
|
2818 viewing the shift as being by digits. The sign bit is ignored, and
|
|
2819 the return values are >= 0.
|
|
2820 Returns 0 on success, -1 on failure.
|
|
2821 */
|
|
2822 static int
|
|
2823 kmul_split(PyLongObject *n,
|
|
2824 Py_ssize_t size,
|
|
2825 PyLongObject **high,
|
|
2826 PyLongObject **low)
|
|
2827 {
|
|
2828 PyLongObject *hi, *lo;
|
|
2829 Py_ssize_t size_lo, size_hi;
|
|
2830 const Py_ssize_t size_n = ABS(Py_SIZE(n));
|
|
2831
|
|
2832 size_lo = MIN(size_n, size);
|
|
2833 size_hi = size_n - size_lo;
|
|
2834
|
|
2835 if ((hi = _PyLong_New(size_hi)) == NULL)
|
|
2836 return -1;
|
|
2837 if ((lo = _PyLong_New(size_lo)) == NULL) {
|
|
2838 Py_DECREF(hi);
|
|
2839 return -1;
|
|
2840 }
|
|
2841
|
|
2842 memcpy(lo->ob_digit, n->ob_digit, size_lo * sizeof(digit));
|
|
2843 memcpy(hi->ob_digit, n->ob_digit + size_lo, size_hi * sizeof(digit));
|
|
2844
|
|
2845 *high = long_normalize(hi);
|
|
2846 *low = long_normalize(lo);
|
|
2847 return 0;
|
|
2848 }
|
|
2849
|
|
2850 static PyLongObject *k_lopsided_mul(PyLongObject *a, PyLongObject *b);
|
|
2851
|
|
2852 /* Karatsuba multiplication. Ignores the input signs, and returns the
|
|
2853 * absolute value of the product (or NULL if error).
|
|
2854 * See Knuth Vol. 2 Chapter 4.3.3 (Pp. 294-295).
|
|
2855 */
|
|
2856 static PyLongObject *
|
|
2857 k_mul(PyLongObject *a, PyLongObject *b)
|
|
2858 {
|
|
2859 Py_ssize_t asize = ABS(Py_SIZE(a));
|
|
2860 Py_ssize_t bsize = ABS(Py_SIZE(b));
|
|
2861 PyLongObject *ah = NULL;
|
|
2862 PyLongObject *al = NULL;
|
|
2863 PyLongObject *bh = NULL;
|
|
2864 PyLongObject *bl = NULL;
|
|
2865 PyLongObject *ret = NULL;
|
|
2866 PyLongObject *t1, *t2, *t3;
|
|
2867 Py_ssize_t shift; /* the number of digits we split off */
|
|
2868 Py_ssize_t i;
|
|
2869
|
|
2870 /* (ah*X+al)(bh*X+bl) = ah*bh*X*X + (ah*bl + al*bh)*X + al*bl
|
|
2871 * Let k = (ah+al)*(bh+bl) = ah*bl + al*bh + ah*bh + al*bl
|
|
2872 * Then the original product is
|
|
2873 * ah*bh*X*X + (k - ah*bh - al*bl)*X + al*bl
|
|
2874 * By picking X to be a power of 2, "*X" is just shifting, and it's
|
|
2875 * been reduced to 3 multiplies on numbers half the size.
|
|
2876 */
|
|
2877
|
|
2878 /* We want to split based on the larger number; fiddle so that b
|
|
2879 * is largest.
|
|
2880 */
|
|
2881 if (asize > bsize) {
|
|
2882 t1 = a;
|
|
2883 a = b;
|
|
2884 b = t1;
|
|
2885
|
|
2886 i = asize;
|
|
2887 asize = bsize;
|
|
2888 bsize = i;
|
|
2889 }
|
|
2890
|
|
2891 /* Use gradeschool math when either number is too small. */
|
|
2892 i = a == b ? KARATSUBA_SQUARE_CUTOFF : KARATSUBA_CUTOFF;
|
|
2893 if (asize <= i) {
|
|
2894 if (asize == 0)
|
|
2895 return (PyLongObject *)PyLong_FromLong(0);
|
|
2896 else
|
|
2897 return x_mul(a, b);
|
|
2898 }
|
|
2899
|
|
2900 /* If a is small compared to b, splitting on b gives a degenerate
|
|
2901 * case with ah==0, and Karatsuba may be (even much) less efficient
|
|
2902 * than "grade school" then. However, we can still win, by viewing
|
|
2903 * b as a string of "big digits", each of width a->ob_size. That
|
|
2904 * leads to a sequence of balanced calls to k_mul.
|
|
2905 */
|
|
2906 if (2 * asize <= bsize)
|
|
2907 return k_lopsided_mul(a, b);
|
|
2908
|
|
2909 /* Split a & b into hi & lo pieces. */
|
|
2910 shift = bsize >> 1;
|
|
2911 if (kmul_split(a, shift, &ah, &al) < 0) goto fail;
|
|
2912 assert(Py_SIZE(ah) > 0); /* the split isn't degenerate */
|
|
2913
|
|
2914 if (a == b) {
|
|
2915 bh = ah;
|
|
2916 bl = al;
|
|
2917 Py_INCREF(bh);
|
|
2918 Py_INCREF(bl);
|
|
2919 }
|
|
2920 else if (kmul_split(b, shift, &bh, &bl) < 0) goto fail;
|
|
2921
|
|
2922 /* The plan:
|
|
2923 * 1. Allocate result space (asize + bsize digits: that's always
|
|
2924 * enough).
|
|
2925 * 2. Compute ah*bh, and copy into result at 2*shift.
|
|
2926 * 3. Compute al*bl, and copy into result at 0. Note that this
|
|
2927 * can't overlap with #2.
|
|
2928 * 4. Subtract al*bl from the result, starting at shift. This may
|
|
2929 * underflow (borrow out of the high digit), but we don't care:
|
|
2930 * we're effectively doing unsigned arithmetic mod
|
|
2931 * BASE**(sizea + sizeb), and so long as the *final* result fits,
|
|
2932 * borrows and carries out of the high digit can be ignored.
|
|
2933 * 5. Subtract ah*bh from the result, starting at shift.
|
|
2934 * 6. Compute (ah+al)*(bh+bl), and add it into the result starting
|
|
2935 * at shift.
|
|
2936 */
|
|
2937
|
|
2938 /* 1. Allocate result space. */
|
|
2939 ret = _PyLong_New(asize + bsize);
|
|
2940 if (ret == NULL) goto fail;
|
|
2941 #ifdef Py_DEBUG
|
|
2942 /* Fill with trash, to catch reference to uninitialized digits. */
|
|
2943 memset(ret->ob_digit, 0xDF, Py_SIZE(ret) * sizeof(digit));
|
|
2944 #endif
|
|
2945
|
|
2946 /* 2. t1 <- ah*bh, and copy into high digits of result. */
|
|
2947 if ((t1 = k_mul(ah, bh)) == NULL) goto fail;
|
|
2948 assert(Py_SIZE(t1) >= 0);
|
|
2949 assert(2*shift + Py_SIZE(t1) <= Py_SIZE(ret));
|
|
2950 memcpy(ret->ob_digit + 2*shift, t1->ob_digit,
|
|
2951 Py_SIZE(t1) * sizeof(digit));
|
|
2952
|
|
2953 /* Zero-out the digits higher than the ah*bh copy. */
|
|
2954 i = Py_SIZE(ret) - 2*shift - Py_SIZE(t1);
|
|
2955 if (i)
|
|
2956 memset(ret->ob_digit + 2*shift + Py_SIZE(t1), 0,
|
|
2957 i * sizeof(digit));
|
|
2958
|
|
2959 /* 3. t2 <- al*bl, and copy into the low digits. */
|
|
2960 if ((t2 = k_mul(al, bl)) == NULL) {
|
|
2961 Py_DECREF(t1);
|
|
2962 goto fail;
|
|
2963 }
|
|
2964 assert(Py_SIZE(t2) >= 0);
|
|
2965 assert(Py_SIZE(t2) <= 2*shift); /* no overlap with high digits */
|
|
2966 memcpy(ret->ob_digit, t2->ob_digit, Py_SIZE(t2) * sizeof(digit));
|
|
2967
|
|
2968 /* Zero out remaining digits. */
|
|
2969 i = 2*shift - Py_SIZE(t2); /* number of uninitialized digits */
|
|
2970 if (i)
|
|
2971 memset(ret->ob_digit + Py_SIZE(t2), 0, i * sizeof(digit));
|
|
2972
|
|
2973 /* 4 & 5. Subtract ah*bh (t1) and al*bl (t2). We do al*bl first
|
|
2974 * because it's fresher in cache.
|
|
2975 */
|
|
2976 i = Py_SIZE(ret) - shift; /* # digits after shift */
|
|
2977 (void)v_isub(ret->ob_digit + shift, i, t2->ob_digit, Py_SIZE(t2));
|
|
2978 Py_DECREF(t2);
|
|
2979
|
|
2980 (void)v_isub(ret->ob_digit + shift, i, t1->ob_digit, Py_SIZE(t1));
|
|
2981 Py_DECREF(t1);
|
|
2982
|
|
2983 /* 6. t3 <- (ah+al)(bh+bl), and add into result. */
|
|
2984 if ((t1 = x_add(ah, al)) == NULL) goto fail;
|
|
2985 Py_DECREF(ah);
|
|
2986 Py_DECREF(al);
|
|
2987 ah = al = NULL;
|
|
2988
|
|
2989 if (a == b) {
|
|
2990 t2 = t1;
|
|
2991 Py_INCREF(t2);
|
|
2992 }
|
|
2993 else if ((t2 = x_add(bh, bl)) == NULL) {
|
|
2994 Py_DECREF(t1);
|
|
2995 goto fail;
|
|
2996 }
|
|
2997 Py_DECREF(bh);
|
|
2998 Py_DECREF(bl);
|
|
2999 bh = bl = NULL;
|
|
3000
|
|
3001 t3 = k_mul(t1, t2);
|
|
3002 Py_DECREF(t1);
|
|
3003 Py_DECREF(t2);
|
|
3004 if (t3 == NULL) goto fail;
|
|
3005 assert(Py_SIZE(t3) >= 0);
|
|
3006
|
|
3007 /* Add t3. It's not obvious why we can't run out of room here.
|
|
3008 * See the (*) comment after this function.
|
|
3009 */
|
|
3010 (void)v_iadd(ret->ob_digit + shift, i, t3->ob_digit, Py_SIZE(t3));
|
|
3011 Py_DECREF(t3);
|
|
3012
|
|
3013 return long_normalize(ret);
|
|
3014
|
|
3015 fail:
|
|
3016 Py_XDECREF(ret);
|
|
3017 Py_XDECREF(ah);
|
|
3018 Py_XDECREF(al);
|
|
3019 Py_XDECREF(bh);
|
|
3020 Py_XDECREF(bl);
|
|
3021 return NULL;
|
|
3022 }
|
|
3023
|
|
3024 /* (*) Why adding t3 can't "run out of room" above.
|
|
3025
|
|
3026 Let f(x) mean the floor of x and c(x) mean the ceiling of x. Some facts
|
|
3027 to start with:
|
|
3028
|
|
3029 1. For any integer i, i = c(i/2) + f(i/2). In particular,
|
|
3030 bsize = c(bsize/2) + f(bsize/2).
|
|
3031 2. shift = f(bsize/2)
|
|
3032 3. asize <= bsize
|
|
3033 4. Since we call k_lopsided_mul if asize*2 <= bsize, asize*2 > bsize in this
|
|
3034 routine, so asize > bsize/2 >= f(bsize/2) in this routine.
|
|
3035
|
|
3036 We allocated asize + bsize result digits, and add t3 into them at an offset
|
|
3037 of shift. This leaves asize+bsize-shift allocated digit positions for t3
|
|
3038 to fit into, = (by #1 and #2) asize + f(bsize/2) + c(bsize/2) - f(bsize/2) =
|
|
3039 asize + c(bsize/2) available digit positions.
|
|
3040
|
|
3041 bh has c(bsize/2) digits, and bl at most f(size/2) digits. So bh+hl has
|
|
3042 at most c(bsize/2) digits + 1 bit.
|
|
3043
|
|
3044 If asize == bsize, ah has c(bsize/2) digits, else ah has at most f(bsize/2)
|
|
3045 digits, and al has at most f(bsize/2) digits in any case. So ah+al has at
|
|
3046 most (asize == bsize ? c(bsize/2) : f(bsize/2)) digits + 1 bit.
|
|
3047
|
|
3048 The product (ah+al)*(bh+bl) therefore has at most
|
|
3049
|
|
3050 c(bsize/2) + (asize == bsize ? c(bsize/2) : f(bsize/2)) digits + 2 bits
|
|
3051
|
|
3052 and we have asize + c(bsize/2) available digit positions. We need to show
|
|
3053 this is always enough. An instance of c(bsize/2) cancels out in both, so
|
|
3054 the question reduces to whether asize digits is enough to hold
|
|
3055 (asize == bsize ? c(bsize/2) : f(bsize/2)) digits + 2 bits. If asize < bsize,
|
|
3056 then we're asking whether asize digits >= f(bsize/2) digits + 2 bits. By #4,
|
|
3057 asize is at least f(bsize/2)+1 digits, so this in turn reduces to whether 1
|
|
3058 digit is enough to hold 2 bits. This is so since PyLong_SHIFT=15 >= 2. If
|
|
3059 asize == bsize, then we're asking whether bsize digits is enough to hold
|
|
3060 c(bsize/2) digits + 2 bits, or equivalently (by #1) whether f(bsize/2) digits
|
|
3061 is enough to hold 2 bits. This is so if bsize >= 2, which holds because
|
|
3062 bsize >= KARATSUBA_CUTOFF >= 2.
|
|
3063
|
|
3064 Note that since there's always enough room for (ah+al)*(bh+bl), and that's
|
|
3065 clearly >= each of ah*bh and al*bl, there's always enough room to subtract
|
|
3066 ah*bh and al*bl too.
|
|
3067 */
|
|
3068
|
|
3069 /* b has at least twice the digits of a, and a is big enough that Karatsuba
|
|
3070 * would pay off *if* the inputs had balanced sizes. View b as a sequence
|
|
3071 * of slices, each with a->ob_size digits, and multiply the slices by a,
|
|
3072 * one at a time. This gives k_mul balanced inputs to work with, and is
|
|
3073 * also cache-friendly (we compute one double-width slice of the result
|
|
3074 * at a time, then move on, never backtracking except for the helpful
|
|
3075 * single-width slice overlap between successive partial sums).
|
|
3076 */
|
|
3077 static PyLongObject *
|
|
3078 k_lopsided_mul(PyLongObject *a, PyLongObject *b)
|
|
3079 {
|
|
3080 const Py_ssize_t asize = ABS(Py_SIZE(a));
|
|
3081 Py_ssize_t bsize = ABS(Py_SIZE(b));
|
|
3082 Py_ssize_t nbdone; /* # of b digits already multiplied */
|
|
3083 PyLongObject *ret;
|
|
3084 PyLongObject *bslice = NULL;
|
|
3085
|
|
3086 assert(asize > KARATSUBA_CUTOFF);
|
|
3087 assert(2 * asize <= bsize);
|
|
3088
|
|
3089 /* Allocate result space, and zero it out. */
|
|
3090 ret = _PyLong_New(asize + bsize);
|
|
3091 if (ret == NULL)
|
|
3092 return NULL;
|
|
3093 memset(ret->ob_digit, 0, Py_SIZE(ret) * sizeof(digit));
|
|
3094
|
|
3095 /* Successive slices of b are copied into bslice. */
|
|
3096 bslice = _PyLong_New(asize);
|
|
3097 if (bslice == NULL)
|
|
3098 goto fail;
|
|
3099
|
|
3100 nbdone = 0;
|
|
3101 while (bsize > 0) {
|
|
3102 PyLongObject *product;
|
|
3103 const Py_ssize_t nbtouse = MIN(bsize, asize);
|
|
3104
|
|
3105 /* Multiply the next slice of b by a. */
|
|
3106 memcpy(bslice->ob_digit, b->ob_digit + nbdone,
|
|
3107 nbtouse * sizeof(digit));
|
|
3108 Py_SIZE(bslice) = nbtouse;
|
|
3109 product = k_mul(a, bslice);
|
|
3110 if (product == NULL)
|
|
3111 goto fail;
|
|
3112
|
|
3113 /* Add into result. */
|
|
3114 (void)v_iadd(ret->ob_digit + nbdone, Py_SIZE(ret) - nbdone,
|
|
3115 product->ob_digit, Py_SIZE(product));
|
|
3116 Py_DECREF(product);
|
|
3117
|
|
3118 bsize -= nbtouse;
|
|
3119 nbdone += nbtouse;
|
|
3120 }
|
|
3121
|
|
3122 Py_DECREF(bslice);
|
|
3123 return long_normalize(ret);
|
|
3124
|
|
3125 fail:
|
|
3126 Py_DECREF(ret);
|
|
3127 Py_XDECREF(bslice);
|
|
3128 return NULL;
|
|
3129 }
|
|
3130
|
|
3131 static PyObject *
|
|
3132 long_mul(PyLongObject *a, PyLongObject *b)
|
|
3133 {
|
|
3134 PyLongObject *z;
|
|
3135
|
|
3136 CHECK_BINOP(a, b);
|
|
3137
|
|
3138 /* fast path for single-digit multiplication */
|
|
3139 if (ABS(Py_SIZE(a)) <= 1 && ABS(Py_SIZE(b)) <= 1) {
|
|
3140 stwodigits v = (stwodigits)(MEDIUM_VALUE(a)) * MEDIUM_VALUE(b);
|
|
3141 #ifdef HAVE_LONG_LONG
|
|
3142 return PyLong_FromLongLong((PY_LONG_LONG)v);
|
|
3143 #else
|
|
3144 /* if we don't have long long then we're almost certainly
|
|
3145 using 15-bit digits, so v will fit in a long. In the
|
|
3146 unlikely event that we're using 30-bit digits on a platform
|
|
3147 without long long, a large v will just cause us to fall
|
|
3148 through to the general multiplication code below. */
|
|
3149 if (v >= LONG_MIN && v <= LONG_MAX)
|
|
3150 return PyLong_FromLong((long)v);
|
|
3151 #endif
|
|
3152 }
|
|
3153
|
|
3154 z = k_mul(a, b);
|
|
3155 /* Negate if exactly one of the inputs is negative. */
|
|
3156 if (((Py_SIZE(a) ^ Py_SIZE(b)) < 0) && z)
|
|
3157 NEGATE(z);
|
|
3158 return (PyObject *)z;
|
|
3159 }
|
|
3160
|
|
3161 /* The / and % operators are now defined in terms of divmod().
|
|
3162 The expression a mod b has the value a - b*floor(a/b).
|
|
3163 The long_divrem function gives the remainder after division of
|
|
3164 |a| by |b|, with the sign of a. This is also expressed
|
|
3165 as a - b*trunc(a/b), if trunc truncates towards zero.
|
|
3166 Some examples:
|
|
3167 a b a rem b a mod b
|
|
3168 13 10 3 3
|
|
3169 -13 10 -3 7
|
|
3170 13 -10 3 -7
|
|
3171 -13 -10 -3 -3
|
|
3172 So, to get from rem to mod, we have to add b if a and b
|
|
3173 have different signs. We then subtract one from the 'div'
|
|
3174 part of the outcome to keep the invariant intact. */
|
|
3175
|
|
3176 /* Compute
|
|
3177 * *pdiv, *pmod = divmod(v, w)
|
|
3178 * NULL can be passed for pdiv or pmod, in which case that part of
|
|
3179 * the result is simply thrown away. The caller owns a reference to
|
|
3180 * each of these it requests (does not pass NULL for).
|
|
3181 */
|
|
3182 static int
|
|
3183 l_divmod(PyLongObject *v, PyLongObject *w,
|
|
3184 PyLongObject **pdiv, PyLongObject **pmod)
|
|
3185 {
|
|
3186 PyLongObject *div, *mod;
|
|
3187
|
|
3188 if (long_divrem(v, w, &div, &mod) < 0)
|
|
3189 return -1;
|
|
3190 if ((Py_SIZE(mod) < 0 && Py_SIZE(w) > 0) ||
|
|
3191 (Py_SIZE(mod) > 0 && Py_SIZE(w) < 0)) {
|
|
3192 PyLongObject *temp;
|
|
3193 PyLongObject *one;
|
|
3194 temp = (PyLongObject *) long_add(mod, w);
|
|
3195 Py_DECREF(mod);
|
|
3196 mod = temp;
|
|
3197 if (mod == NULL) {
|
|
3198 Py_DECREF(div);
|
|
3199 return -1;
|
|
3200 }
|
|
3201 one = (PyLongObject *) PyLong_FromLong(1L);
|
|
3202 if (one == NULL ||
|
|
3203 (temp = (PyLongObject *) long_sub(div, one)) == NULL) {
|
|
3204 Py_DECREF(mod);
|
|
3205 Py_DECREF(div);
|
|
3206 Py_XDECREF(one);
|
|
3207 return -1;
|
|
3208 }
|
|
3209 Py_DECREF(one);
|
|
3210 Py_DECREF(div);
|
|
3211 div = temp;
|
|
3212 }
|
|
3213 if (pdiv != NULL)
|
|
3214 *pdiv = div;
|
|
3215 else
|
|
3216 Py_DECREF(div);
|
|
3217
|
|
3218 if (pmod != NULL)
|
|
3219 *pmod = mod;
|
|
3220 else
|
|
3221 Py_DECREF(mod);
|
|
3222
|
|
3223 return 0;
|
|
3224 }
|
|
3225
|
|
3226 static PyObject *
|
|
3227 long_div(PyObject *a, PyObject *b)
|
|
3228 {
|
|
3229 PyLongObject *div;
|
|
3230
|
|
3231 CHECK_BINOP(a, b);
|
|
3232 if (l_divmod((PyLongObject*)a, (PyLongObject*)b, &div, NULL) < 0)
|
|
3233 div = NULL;
|
|
3234 return (PyObject *)div;
|
|
3235 }
|
|
3236
|
|
3237 /* PyLong/PyLong -> float, with correctly rounded result. */
|
|
3238
|
|
3239 #define MANT_DIG_DIGITS (DBL_MANT_DIG / PyLong_SHIFT)
|
|
3240 #define MANT_DIG_BITS (DBL_MANT_DIG % PyLong_SHIFT)
|
|
3241
|
|
3242 static PyObject *
|
|
3243 long_true_divide(PyObject *v, PyObject *w)
|
|
3244 {
|
|
3245 PyLongObject *a, *b, *x;
|
|
3246 Py_ssize_t a_size, b_size, shift, extra_bits, diff, x_size, x_bits;
|
|
3247 digit mask, low;
|
|
3248 int inexact, negate, a_is_small, b_is_small;
|
|
3249 double dx, result;
|
|
3250
|
|
3251 CHECK_BINOP(v, w);
|
|
3252 a = (PyLongObject *)v;
|
|
3253 b = (PyLongObject *)w;
|
|
3254
|
|
3255 /*
|
|
3256 Method in a nutshell:
|
|
3257
|
|
3258 0. reduce to case a, b > 0; filter out obvious underflow/overflow
|
|
3259 1. choose a suitable integer 'shift'
|
|
3260 2. use integer arithmetic to compute x = floor(2**-shift*a/b)
|
|
3261 3. adjust x for correct rounding
|
|
3262 4. convert x to a double dx with the same value
|
|
3263 5. return ldexp(dx, shift).
|
|
3264
|
|
3265 In more detail:
|
|
3266
|
|
3267 0. For any a, a/0 raises ZeroDivisionError; for nonzero b, 0/b
|
|
3268 returns either 0.0 or -0.0, depending on the sign of b. For a and
|
|
3269 b both nonzero, ignore signs of a and b, and add the sign back in
|
|
3270 at the end. Now write a_bits and b_bits for the bit lengths of a
|
|
3271 and b respectively (that is, a_bits = 1 + floor(log_2(a)); likewise
|
|
3272 for b). Then
|
|
3273
|
|
3274 2**(a_bits - b_bits - 1) < a/b < 2**(a_bits - b_bits + 1).
|
|
3275
|
|
3276 So if a_bits - b_bits > DBL_MAX_EXP then a/b > 2**DBL_MAX_EXP and
|
|
3277 so overflows. Similarly, if a_bits - b_bits < DBL_MIN_EXP -
|
|
3278 DBL_MANT_DIG - 1 then a/b underflows to 0. With these cases out of
|
|
3279 the way, we can assume that
|
|
3280
|
|
3281 DBL_MIN_EXP - DBL_MANT_DIG - 1 <= a_bits - b_bits <= DBL_MAX_EXP.
|
|
3282
|
|
3283 1. The integer 'shift' is chosen so that x has the right number of
|
|
3284 bits for a double, plus two or three extra bits that will be used
|
|
3285 in the rounding decisions. Writing a_bits and b_bits for the
|
|
3286 number of significant bits in a and b respectively, a
|
|
3287 straightforward formula for shift is:
|
|
3288
|
|
3289 shift = a_bits - b_bits - DBL_MANT_DIG - 2
|
|
3290
|
|
3291 This is fine in the usual case, but if a/b is smaller than the
|
|
3292 smallest normal float then it can lead to double rounding on an
|
|
3293 IEEE 754 platform, giving incorrectly rounded results. So we
|
|
3294 adjust the formula slightly. The actual formula used is:
|
|
3295
|
|
3296 shift = MAX(a_bits - b_bits, DBL_MIN_EXP) - DBL_MANT_DIG - 2
|
|
3297
|
|
3298 2. The quantity x is computed by first shifting a (left -shift bits
|
|
3299 if shift <= 0, right shift bits if shift > 0) and then dividing by
|
|
3300 b. For both the shift and the division, we keep track of whether
|
|
3301 the result is inexact, in a flag 'inexact'; this information is
|
|
3302 needed at the rounding stage.
|
|
3303
|
|
3304 With the choice of shift above, together with our assumption that
|
|
3305 a_bits - b_bits >= DBL_MIN_EXP - DBL_MANT_DIG - 1, it follows
|
|
3306 that x >= 1.
|
|
3307
|
|
3308 3. Now x * 2**shift <= a/b < (x+1) * 2**shift. We want to replace
|
|
3309 this with an exactly representable float of the form
|
|
3310
|
|
3311 round(x/2**extra_bits) * 2**(extra_bits+shift).
|
|
3312
|
|
3313 For float representability, we need x/2**extra_bits <
|
|
3314 2**DBL_MANT_DIG and extra_bits + shift >= DBL_MIN_EXP -
|
|
3315 DBL_MANT_DIG. This translates to the condition:
|
|
3316
|
|
3317 extra_bits >= MAX(x_bits, DBL_MIN_EXP - shift) - DBL_MANT_DIG
|
|
3318
|
|
3319 To round, we just modify the bottom digit of x in-place; this can
|
|
3320 end up giving a digit with value > PyLONG_MASK, but that's not a
|
|
3321 problem since digits can hold values up to 2*PyLONG_MASK+1.
|
|
3322
|
|
3323 With the original choices for shift above, extra_bits will always
|
|
3324 be 2 or 3. Then rounding under the round-half-to-even rule, we
|
|
3325 round up iff the most significant of the extra bits is 1, and
|
|
3326 either: (a) the computation of x in step 2 had an inexact result,
|
|
3327 or (b) at least one other of the extra bits is 1, or (c) the least
|
|
3328 significant bit of x (above those to be rounded) is 1.
|
|
3329
|
|
3330 4. Conversion to a double is straightforward; all floating-point
|
|
3331 operations involved in the conversion are exact, so there's no
|
|
3332 danger of rounding errors.
|
|
3333
|
|
3334 5. Use ldexp(x, shift) to compute x*2**shift, the final result.
|
|
3335 The result will always be exactly representable as a double, except
|
|
3336 in the case that it overflows. To avoid dependence on the exact
|
|
3337 behaviour of ldexp on overflow, we check for overflow before
|
|
3338 applying ldexp. The result of ldexp is adjusted for sign before
|
|
3339 returning.
|
|
3340 */
|
|
3341
|
|
3342 /* Reduce to case where a and b are both positive. */
|
|
3343 a_size = ABS(Py_SIZE(a));
|
|
3344 b_size = ABS(Py_SIZE(b));
|
|
3345 negate = (Py_SIZE(a) < 0) ^ (Py_SIZE(b) < 0);
|
|
3346 if (b_size == 0) {
|
|
3347 PyErr_SetString(PyExc_ZeroDivisionError,
|
|
3348 "division by zero");
|
|
3349 goto error;
|
|
3350 }
|
|
3351 if (a_size == 0)
|
|
3352 goto underflow_or_zero;
|
|
3353
|
|
3354 /* Fast path for a and b small (exactly representable in a double).
|
|
3355 Relies on floating-point division being correctly rounded; results
|
|
3356 may be subject to double rounding on x86 machines that operate with
|
|
3357 the x87 FPU set to 64-bit precision. */
|
|
3358 a_is_small = a_size <= MANT_DIG_DIGITS ||
|
|
3359 (a_size == MANT_DIG_DIGITS+1 &&
|
|
3360 a->ob_digit[MANT_DIG_DIGITS] >> MANT_DIG_BITS == 0);
|
|
3361 b_is_small = b_size <= MANT_DIG_DIGITS ||
|
|
3362 (b_size == MANT_DIG_DIGITS+1 &&
|
|
3363 b->ob_digit[MANT_DIG_DIGITS] >> MANT_DIG_BITS == 0);
|
|
3364 if (a_is_small && b_is_small) {
|
|
3365 double da, db;
|
|
3366 da = a->ob_digit[--a_size];
|
|
3367 while (a_size > 0)
|
|
3368 da = da * PyLong_BASE + a->ob_digit[--a_size];
|
|
3369 db = b->ob_digit[--b_size];
|
|
3370 while (b_size > 0)
|
|
3371 db = db * PyLong_BASE + b->ob_digit[--b_size];
|
|
3372 result = da / db;
|
|
3373 goto success;
|
|
3374 }
|
|
3375
|
|
3376 /* Catch obvious cases of underflow and overflow */
|
|
3377 diff = a_size - b_size;
|
|
3378 if (diff > PY_SSIZE_T_MAX/PyLong_SHIFT - 1)
|
|
3379 /* Extreme overflow */
|
|
3380 goto overflow;
|
|
3381 else if (diff < 1 - PY_SSIZE_T_MAX/PyLong_SHIFT)
|
|
3382 /* Extreme underflow */
|
|
3383 goto underflow_or_zero;
|
|
3384 /* Next line is now safe from overflowing a Py_ssize_t */
|
|
3385 diff = diff * PyLong_SHIFT + bits_in_digit(a->ob_digit[a_size - 1]) -
|
|
3386 bits_in_digit(b->ob_digit[b_size - 1]);
|
|
3387 /* Now diff = a_bits - b_bits. */
|
|
3388 if (diff > DBL_MAX_EXP)
|
|
3389 goto overflow;
|
|
3390 else if (diff < DBL_MIN_EXP - DBL_MANT_DIG - 1)
|
|
3391 goto underflow_or_zero;
|
|
3392
|
|
3393 /* Choose value for shift; see comments for step 1 above. */
|
|
3394 shift = MAX(diff, DBL_MIN_EXP) - DBL_MANT_DIG - 2;
|
|
3395
|
|
3396 inexact = 0;
|
|
3397
|
|
3398 /* x = abs(a * 2**-shift) */
|
|
3399 if (shift <= 0) {
|
|
3400 Py_ssize_t i, shift_digits = -shift / PyLong_SHIFT;
|
|
3401 digit rem;
|
|
3402 /* x = a << -shift */
|
|
3403 if (a_size >= PY_SSIZE_T_MAX - 1 - shift_digits) {
|
|
3404 /* In practice, it's probably impossible to end up
|
|
3405 here. Both a and b would have to be enormous,
|
|
3406 using close to SIZE_T_MAX bytes of memory each. */
|
|
3407 PyErr_SetString(PyExc_OverflowError,
|
|
3408 "intermediate overflow during division");
|
|
3409 goto error;
|
|
3410 }
|
|
3411 x = _PyLong_New(a_size + shift_digits + 1);
|
|
3412 if (x == NULL)
|
|
3413 goto error;
|
|
3414 for (i = 0; i < shift_digits; i++)
|
|
3415 x->ob_digit[i] = 0;
|
|
3416 rem = v_lshift(x->ob_digit + shift_digits, a->ob_digit,
|
|
3417 a_size, -shift % PyLong_SHIFT);
|
|
3418 x->ob_digit[a_size + shift_digits] = rem;
|
|
3419 }
|
|
3420 else {
|
|
3421 Py_ssize_t shift_digits = shift / PyLong_SHIFT;
|
|
3422 digit rem;
|
|
3423 /* x = a >> shift */
|
|
3424 assert(a_size >= shift_digits);
|
|
3425 x = _PyLong_New(a_size - shift_digits);
|
|
3426 if (x == NULL)
|
|
3427 goto error;
|
|
3428 rem = v_rshift(x->ob_digit, a->ob_digit + shift_digits,
|
|
3429 a_size - shift_digits, shift % PyLong_SHIFT);
|
|
3430 /* set inexact if any of the bits shifted out is nonzero */
|
|
3431 if (rem)
|
|
3432 inexact = 1;
|
|
3433 while (!inexact && shift_digits > 0)
|
|
3434 if (a->ob_digit[--shift_digits])
|
|
3435 inexact = 1;
|
|
3436 }
|
|
3437 long_normalize(x);
|
|
3438 x_size = Py_SIZE(x);
|
|
3439
|
|
3440 /* x //= b. If the remainder is nonzero, set inexact. We own the only
|
|
3441 reference to x, so it's safe to modify it in-place. */
|
|
3442 if (b_size == 1) {
|
|
3443 digit rem = inplace_divrem1(x->ob_digit, x->ob_digit, x_size,
|
|
3444 b->ob_digit[0]);
|
|
3445 long_normalize(x);
|
|
3446 if (rem)
|
|
3447 inexact = 1;
|
|
3448 }
|
|
3449 else {
|
|
3450 PyLongObject *div, *rem;
|
|
3451 div = x_divrem(x, b, &rem);
|
|
3452 Py_DECREF(x);
|
|
3453 x = div;
|
|
3454 if (x == NULL)
|
|
3455 goto error;
|
|
3456 if (Py_SIZE(rem))
|
|
3457 inexact = 1;
|
|
3458 Py_DECREF(rem);
|
|
3459 }
|
|
3460 x_size = ABS(Py_SIZE(x));
|
|
3461 assert(x_size > 0); /* result of division is never zero */
|
|
3462 x_bits = (x_size-1)*PyLong_SHIFT+bits_in_digit(x->ob_digit[x_size-1]);
|
|
3463
|
|
3464 /* The number of extra bits that have to be rounded away. */
|
|
3465 extra_bits = MAX(x_bits, DBL_MIN_EXP - shift) - DBL_MANT_DIG;
|
|
3466 assert(extra_bits == 2 || extra_bits == 3);
|
|
3467
|
|
3468 /* Round by directly modifying the low digit of x. */
|
|
3469 mask = (digit)1 << (extra_bits - 1);
|
|
3470 low = x->ob_digit[0] | inexact;
|
|
3471 if (low & mask && low & (3*mask-1))
|
|
3472 low += mask;
|
|
3473 x->ob_digit[0] = low & ~(mask-1U);
|
|
3474
|
|
3475 /* Convert x to a double dx; the conversion is exact. */
|
|
3476 dx = x->ob_digit[--x_size];
|
|
3477 while (x_size > 0)
|
|
3478 dx = dx * PyLong_BASE + x->ob_digit[--x_size];
|
|
3479 Py_DECREF(x);
|
|
3480
|
|
3481 /* Check whether ldexp result will overflow a double. */
|
|
3482 if (shift + x_bits >= DBL_MAX_EXP &&
|
|
3483 (shift + x_bits > DBL_MAX_EXP || dx == ldexp(1.0, (int)x_bits)))
|
|
3484 goto overflow;
|
|
3485 result = ldexp(dx, (int)shift);
|
|
3486
|
|
3487 success:
|
|
3488 return PyFloat_FromDouble(negate ? -result : result);
|
|
3489
|
|
3490 underflow_or_zero:
|
|
3491 return PyFloat_FromDouble(negate ? -0.0 : 0.0);
|
|
3492
|
|
3493 overflow:
|
|
3494 PyErr_SetString(PyExc_OverflowError,
|
|
3495 "integer division result too large for a float");
|
|
3496 error:
|
|
3497 return NULL;
|
|
3498 }
|
|
3499
|
|
3500 static PyObject *
|
|
3501 long_mod(PyObject *a, PyObject *b)
|
|
3502 {
|
|
3503 PyLongObject *mod;
|
|
3504
|
|
3505 CHECK_BINOP(a, b);
|
|
3506
|
|
3507 if (l_divmod((PyLongObject*)a, (PyLongObject*)b, NULL, &mod) < 0)
|
|
3508 mod = NULL;
|
|
3509 return (PyObject *)mod;
|
|
3510 }
|
|
3511
|
|
3512 static PyObject *
|
|
3513 long_divmod(PyObject *a, PyObject *b)
|
|
3514 {
|
|
3515 PyLongObject *div, *mod;
|
|
3516 PyObject *z;
|
|
3517
|
|
3518 CHECK_BINOP(a, b);
|
|
3519
|
|
3520 if (l_divmod((PyLongObject*)a, (PyLongObject*)b, &div, &mod) < 0) {
|
|
3521 return NULL;
|
|
3522 }
|
|
3523 z = PyTuple_New(2);
|
|
3524 if (z != NULL) {
|
|
3525 PyTuple_SetItem(z, 0, (PyObject *) div);
|
|
3526 PyTuple_SetItem(z, 1, (PyObject *) mod);
|
|
3527 }
|
|
3528 else {
|
|
3529 Py_DECREF(div);
|
|
3530 Py_DECREF(mod);
|
|
3531 }
|
|
3532 return z;
|
|
3533 }
|
|
3534
|
|
3535 /* pow(v, w, x) */
|
|
3536 static PyObject *
|
|
3537 long_pow(PyObject *v, PyObject *w, PyObject *x)
|
|
3538 {
|
|
3539 PyLongObject *a, *b, *c; /* a,b,c = v,w,x */
|
|
3540 int negativeOutput = 0; /* if x<0 return negative output */
|
|
3541
|
|
3542 PyLongObject *z = NULL; /* accumulated result */
|
|
3543 Py_ssize_t i, j, k; /* counters */
|
|
3544 PyLongObject *temp = NULL;
|
|
3545
|
|
3546 /* 5-ary values. If the exponent is large enough, table is
|
|
3547 * precomputed so that table[i] == a**i % c for i in range(32).
|
|
3548 */
|
|
3549 PyLongObject *table[32] = {0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
|
|
3550 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0};
|
|
3551
|
|
3552 /* a, b, c = v, w, x */
|
|
3553 CHECK_BINOP(v, w);
|
|
3554 a = (PyLongObject*)v; Py_INCREF(a);
|
|
3555 b = (PyLongObject*)w; Py_INCREF(b);
|
|
3556 if (PyLong_Check(x)) {
|
|
3557 c = (PyLongObject *)x;
|
|
3558 Py_INCREF(x);
|
|
3559 }
|
|
3560 else if (x == Py_None)
|
|
3561 c = NULL;
|
|
3562 else {
|
|
3563 Py_DECREF(a);
|
|
3564 Py_DECREF(b);
|
|
3565 Py_RETURN_NOTIMPLEMENTED;
|
|
3566 }
|
|
3567
|
|
3568 if (Py_SIZE(b) < 0) { /* if exponent is negative */
|
|
3569 if (c) {
|
|
3570 PyErr_SetString(PyExc_TypeError, "pow() 2nd argument "
|
|
3571 "cannot be negative when 3rd argument specified");
|
|
3572 goto Error;
|
|
3573 }
|
|
3574 else {
|
|
3575 /* else return a float. This works because we know
|
|
3576 that this calls float_pow() which converts its
|
|
3577 arguments to double. */
|
|
3578 Py_DECREF(a);
|
|
3579 Py_DECREF(b);
|
|
3580 return PyFloat_Type.tp_as_number->nb_power(v, w, x);
|
|
3581 }
|
|
3582 }
|
|
3583
|
|
3584 if (c) {
|
|
3585 /* if modulus == 0:
|
|
3586 raise ValueError() */
|
|
3587 if (Py_SIZE(c) == 0) {
|
|
3588 PyErr_SetString(PyExc_ValueError,
|
|
3589 "pow() 3rd argument cannot be 0");
|
|
3590 goto Error;
|
|
3591 }
|
|
3592
|
|
3593 /* if modulus < 0:
|
|
3594 negativeOutput = True
|
|
3595 modulus = -modulus */
|
|
3596 if (Py_SIZE(c) < 0) {
|
|
3597 negativeOutput = 1;
|
|
3598 temp = (PyLongObject *)_PyLong_Copy(c);
|
|
3599 if (temp == NULL)
|
|
3600 goto Error;
|
|
3601 Py_DECREF(c);
|
|
3602 c = temp;
|
|
3603 temp = NULL;
|
|
3604 NEGATE(c);
|
|
3605 }
|
|
3606
|
|
3607 /* if modulus == 1:
|
|
3608 return 0 */
|
|
3609 if ((Py_SIZE(c) == 1) && (c->ob_digit[0] == 1)) {
|
|
3610 z = (PyLongObject *)PyLong_FromLong(0L);
|
|
3611 goto Done;
|
|
3612 }
|
|
3613
|
|
3614 /* if base < 0:
|
|
3615 base = base % modulus
|
|
3616 Having the base positive just makes things easier. */
|
|
3617 if (Py_SIZE(a) < 0) {
|
|
3618 if (l_divmod(a, c, NULL, &temp) < 0)
|
|
3619 goto Error;
|
|
3620 Py_DECREF(a);
|
|
3621 a = temp;
|
|
3622 temp = NULL;
|
|
3623 }
|
|
3624 }
|
|
3625
|
|
3626 /* At this point a, b, and c are guaranteed non-negative UNLESS
|
|
3627 c is NULL, in which case a may be negative. */
|
|
3628
|
|
3629 z = (PyLongObject *)PyLong_FromLong(1L);
|
|
3630 if (z == NULL)
|
|
3631 goto Error;
|
|
3632
|
|
3633 /* Perform a modular reduction, X = X % c, but leave X alone if c
|
|
3634 * is NULL.
|
|
3635 */
|
|
3636 #define REDUCE(X) \
|
|
3637 do { \
|
|
3638 if (c != NULL) { \
|
|
3639 if (l_divmod(X, c, NULL, &temp) < 0) \
|
|
3640 goto Error; \
|
|
3641 Py_XDECREF(X); \
|
|
3642 X = temp; \
|
|
3643 temp = NULL; \
|
|
3644 } \
|
|
3645 } while(0)
|
|
3646
|
|
3647 /* Multiply two values, then reduce the result:
|
|
3648 result = X*Y % c. If c is NULL, skip the mod. */
|
|
3649 #define MULT(X, Y, result) \
|
|
3650 do { \
|
|
3651 temp = (PyLongObject *)long_mul(X, Y); \
|
|
3652 if (temp == NULL) \
|
|
3653 goto Error; \
|
|
3654 Py_XDECREF(result); \
|
|
3655 result = temp; \
|
|
3656 temp = NULL; \
|
|
3657 REDUCE(result); \
|
|
3658 } while(0)
|
|
3659
|
|
3660 if (Py_SIZE(b) <= FIVEARY_CUTOFF) {
|
|
3661 /* Left-to-right binary exponentiation (HAC Algorithm 14.79) */
|
|
3662 /* http://www.cacr.math.uwaterloo.ca/hac/about/chap14.pdf */
|
|
3663 for (i = Py_SIZE(b) - 1; i >= 0; --i) {
|
|
3664 digit bi = b->ob_digit[i];
|
|
3665
|
|
3666 for (j = (digit)1 << (PyLong_SHIFT-1); j != 0; j >>= 1) {
|
|
3667 MULT(z, z, z);
|
|
3668 if (bi & j)
|
|
3669 MULT(z, a, z);
|
|
3670 }
|
|
3671 }
|
|
3672 }
|
|
3673 else {
|
|
3674 /* Left-to-right 5-ary exponentiation (HAC Algorithm 14.82) */
|
|
3675 Py_INCREF(z); /* still holds 1L */
|
|
3676 table[0] = z;
|
|
3677 for (i = 1; i < 32; ++i)
|
|
3678 MULT(table[i-1], a, table[i]);
|
|
3679
|
|
3680 for (i = Py_SIZE(b) - 1; i >= 0; --i) {
|
|
3681 const digit bi = b->ob_digit[i];
|
|
3682
|
|
3683 for (j = PyLong_SHIFT - 5; j >= 0; j -= 5) {
|
|
3684 const int index = (bi >> j) & 0x1f;
|
|
3685 for (k = 0; k < 5; ++k)
|
|
3686 MULT(z, z, z);
|
|
3687 if (index)
|
|
3688 MULT(z, table[index], z);
|
|
3689 }
|
|
3690 }
|
|
3691 }
|
|
3692
|
|
3693 if (negativeOutput && (Py_SIZE(z) != 0)) {
|
|
3694 temp = (PyLongObject *)long_sub(z, c);
|
|
3695 if (temp == NULL)
|
|
3696 goto Error;
|
|
3697 Py_DECREF(z);
|
|
3698 z = temp;
|
|
3699 temp = NULL;
|
|
3700 }
|
|
3701 goto Done;
|
|
3702
|
|
3703 Error:
|
|
3704 if (z != NULL) {
|
|
3705 Py_DECREF(z);
|
|
3706 z = NULL;
|
|
3707 }
|
|
3708 /* fall through */
|
|
3709 Done:
|
|
3710 if (Py_SIZE(b) > FIVEARY_CUTOFF) {
|
|
3711 for (i = 0; i < 32; ++i)
|
|
3712 Py_XDECREF(table[i]);
|
|
3713 }
|
|
3714 Py_DECREF(a);
|
|
3715 Py_DECREF(b);
|
|
3716 Py_XDECREF(c);
|
|
3717 Py_XDECREF(temp);
|
|
3718 return (PyObject *)z;
|
|
3719 }
|
|
3720
|
|
3721 static PyObject *
|
|
3722 long_invert(PyLongObject *v)
|
|
3723 {
|
|
3724 /* Implement ~x as -(x+1) */
|
|
3725 PyLongObject *x;
|
|
3726 PyLongObject *w;
|
|
3727 if (ABS(Py_SIZE(v)) <=1)
|
|
3728 return PyLong_FromLong(-(MEDIUM_VALUE(v)+1));
|
|
3729 w = (PyLongObject *)PyLong_FromLong(1L);
|
|
3730 if (w == NULL)
|
|
3731 return NULL;
|
|
3732 x = (PyLongObject *) long_add(v, w);
|
|
3733 Py_DECREF(w);
|
|
3734 if (x == NULL)
|
|
3735 return NULL;
|
|
3736 Py_SIZE(x) = -(Py_SIZE(x));
|
|
3737 return (PyObject *)maybe_small_long(x);
|
|
3738 }
|
|
3739
|
|
3740 static PyObject *
|
|
3741 long_neg(PyLongObject *v)
|
|
3742 {
|
|
3743 PyLongObject *z;
|
|
3744 if (ABS(Py_SIZE(v)) <= 1)
|
|
3745 return PyLong_FromLong(-MEDIUM_VALUE(v));
|
|
3746 z = (PyLongObject *)_PyLong_Copy(v);
|
|
3747 if (z != NULL)
|
|
3748 Py_SIZE(z) = -(Py_SIZE(v));
|
|
3749 return (PyObject *)z;
|
|
3750 }
|
|
3751
|
|
3752 static PyObject *
|
|
3753 long_abs(PyLongObject *v)
|
|
3754 {
|
|
3755 if (Py_SIZE(v) < 0)
|
|
3756 return long_neg(v);
|
|
3757 else
|
|
3758 return long_long((PyObject *)v);
|
|
3759 }
|
|
3760
|
|
3761 static int
|
|
3762 long_bool(PyLongObject *v)
|
|
3763 {
|
|
3764 return Py_SIZE(v) != 0;
|
|
3765 }
|
|
3766
|
|
3767 static PyObject *
|
|
3768 long_rshift(PyLongObject *a, PyLongObject *b)
|
|
3769 {
|
|
3770 PyLongObject *z = NULL;
|
|
3771 Py_ssize_t shiftby, newsize, wordshift, loshift, hishift, i, j;
|
|
3772 digit lomask, himask;
|
|
3773
|
|
3774 CHECK_BINOP(a, b);
|
|
3775
|
|
3776 if (Py_SIZE(a) < 0) {
|
|
3777 /* Right shifting negative numbers is harder */
|
|
3778 PyLongObject *a1, *a2;
|
|
3779 a1 = (PyLongObject *) long_invert(a);
|
|
3780 if (a1 == NULL)
|
|
3781 goto rshift_error;
|
|
3782 a2 = (PyLongObject *) long_rshift(a1, b);
|
|
3783 Py_DECREF(a1);
|
|
3784 if (a2 == NULL)
|
|
3785 goto rshift_error;
|
|
3786 z = (PyLongObject *) long_invert(a2);
|
|
3787 Py_DECREF(a2);
|
|
3788 }
|
|
3789 else {
|
|
3790 shiftby = PyLong_AsSsize_t((PyObject *)b);
|
|
3791 if (shiftby == -1L && PyErr_Occurred())
|
|
3792 goto rshift_error;
|
|
3793 if (shiftby < 0) {
|
|
3794 PyErr_SetString(PyExc_ValueError,
|
|
3795 "negative shift count");
|
|
3796 goto rshift_error;
|
|
3797 }
|
|
3798 wordshift = shiftby / PyLong_SHIFT;
|
|
3799 newsize = ABS(Py_SIZE(a)) - wordshift;
|
|
3800 if (newsize <= 0)
|
|
3801 return PyLong_FromLong(0);
|
|
3802 loshift = shiftby % PyLong_SHIFT;
|
|
3803 hishift = PyLong_SHIFT - loshift;
|
|
3804 lomask = ((digit)1 << hishift) - 1;
|
|
3805 himask = PyLong_MASK ^ lomask;
|
|
3806 z = _PyLong_New(newsize);
|
|
3807 if (z == NULL)
|
|
3808 goto rshift_error;
|
|
3809 if (Py_SIZE(a) < 0)
|
|
3810 Py_SIZE(z) = -(Py_SIZE(z));
|
|
3811 for (i = 0, j = wordshift; i < newsize; i++, j++) {
|
|
3812 z->ob_digit[i] = (a->ob_digit[j] >> loshift) & lomask;
|
|
3813 if (i+1 < newsize)
|
|
3814 z->ob_digit[i] |= (a->ob_digit[j+1] << hishift) & himask;
|
|
3815 }
|
|
3816 z = long_normalize(z);
|
|
3817 }
|
|
3818 rshift_error:
|
|
3819 return (PyObject *) maybe_small_long(z);
|
|
3820
|
|
3821 }
|
|
3822
|
|
3823 static PyObject *
|
|
3824 long_lshift(PyObject *v, PyObject *w)
|
|
3825 {
|
|
3826 /* This version due to Tim Peters */
|
|
3827 PyLongObject *a = (PyLongObject*)v;
|
|
3828 PyLongObject *b = (PyLongObject*)w;
|
|
3829 PyLongObject *z = NULL;
|
|
3830 Py_ssize_t shiftby, oldsize, newsize, wordshift, remshift, i, j;
|
|
3831 twodigits accum;
|
|
3832
|
|
3833 CHECK_BINOP(a, b);
|
|
3834
|
|
3835 shiftby = PyLong_AsSsize_t((PyObject *)b);
|
|
3836 if (shiftby == -1L && PyErr_Occurred())
|
|
3837 goto lshift_error;
|
|
3838 if (shiftby < 0) {
|
|
3839 PyErr_SetString(PyExc_ValueError, "negative shift count");
|
|
3840 goto lshift_error;
|
|
3841 }
|
|
3842 /* wordshift, remshift = divmod(shiftby, PyLong_SHIFT) */
|
|
3843 wordshift = shiftby / PyLong_SHIFT;
|
|
3844 remshift = shiftby - wordshift * PyLong_SHIFT;
|
|
3845
|
|
3846 oldsize = ABS(Py_SIZE(a));
|
|
3847 newsize = oldsize + wordshift;
|
|
3848 if (remshift)
|
|
3849 ++newsize;
|
|
3850 z = _PyLong_New(newsize);
|
|
3851 if (z == NULL)
|
|
3852 goto lshift_error;
|
|
3853 if (Py_SIZE(a) < 0)
|
|
3854 NEGATE(z);
|
|
3855 for (i = 0; i < wordshift; i++)
|
|
3856 z->ob_digit[i] = 0;
|
|
3857 accum = 0;
|
|
3858 for (i = wordshift, j = 0; j < oldsize; i++, j++) {
|
|
3859 accum |= (twodigits)a->ob_digit[j] << remshift;
|
|
3860 z->ob_digit[i] = (digit)(accum & PyLong_MASK);
|
|
3861 accum >>= PyLong_SHIFT;
|
|
3862 }
|
|
3863 if (remshift)
|
|
3864 z->ob_digit[newsize-1] = (digit)accum;
|
|
3865 else
|
|
3866 assert(!accum);
|
|
3867 z = long_normalize(z);
|
|
3868 lshift_error:
|
|
3869 return (PyObject *) maybe_small_long(z);
|
|
3870 }
|
|
3871
|
|
3872 /* Compute two's complement of digit vector a[0:m], writing result to
|
|
3873 z[0:m]. The digit vector a need not be normalized, but should not
|
|
3874 be entirely zero. a and z may point to the same digit vector. */
|
|
3875
|
|
3876 static void
|
|
3877 v_complement(digit *z, digit *a, Py_ssize_t m)
|
|
3878 {
|
|
3879 Py_ssize_t i;
|
|
3880 digit carry = 1;
|
|
3881 for (i = 0; i < m; ++i) {
|
|
3882 carry += a[i] ^ PyLong_MASK;
|
|
3883 z[i] = carry & PyLong_MASK;
|
|
3884 carry >>= PyLong_SHIFT;
|
|
3885 }
|
|
3886 assert(carry == 0);
|
|
3887 }
|
|
3888
|
|
3889 /* Bitwise and/xor/or operations */
|
|
3890
|
|
3891 static PyObject *
|
|
3892 long_bitwise(PyLongObject *a,
|
|
3893 int op, /* '&', '|', '^' */
|
|
3894 PyLongObject *b)
|
|
3895 {
|
|
3896 int nega, negb, negz;
|
|
3897 Py_ssize_t size_a, size_b, size_z, i;
|
|
3898 PyLongObject *z;
|
|
3899
|
|
3900 /* Bitwise operations for negative numbers operate as though
|
|
3901 on a two's complement representation. So convert arguments
|
|
3902 from sign-magnitude to two's complement, and convert the
|
|
3903 result back to sign-magnitude at the end. */
|
|
3904
|
|
3905 /* If a is negative, replace it by its two's complement. */
|
|
3906 size_a = ABS(Py_SIZE(a));
|
|
3907 nega = Py_SIZE(a) < 0;
|
|
3908 if (nega) {
|
|
3909 z = _PyLong_New(size_a);
|
|
3910 if (z == NULL)
|
|
3911 return NULL;
|
|
3912 v_complement(z->ob_digit, a->ob_digit, size_a);
|
|
3913 a = z;
|
|
3914 }
|
|
3915 else
|
|
3916 /* Keep reference count consistent. */
|
|
3917 Py_INCREF(a);
|
|
3918
|
|
3919 /* Same for b. */
|
|
3920 size_b = ABS(Py_SIZE(b));
|
|
3921 negb = Py_SIZE(b) < 0;
|
|
3922 if (negb) {
|
|
3923 z = _PyLong_New(size_b);
|
|
3924 if (z == NULL) {
|
|
3925 Py_DECREF(a);
|
|
3926 return NULL;
|
|
3927 }
|
|
3928 v_complement(z->ob_digit, b->ob_digit, size_b);
|
|
3929 b = z;
|
|
3930 }
|
|
3931 else
|
|
3932 Py_INCREF(b);
|
|
3933
|
|
3934 /* Swap a and b if necessary to ensure size_a >= size_b. */
|
|
3935 if (size_a < size_b) {
|
|
3936 z = a; a = b; b = z;
|
|
3937 size_z = size_a; size_a = size_b; size_b = size_z;
|
|
3938 negz = nega; nega = negb; negb = negz;
|
|
3939 }
|
|
3940
|
|
3941 /* JRH: The original logic here was to allocate the result value (z)
|
|
3942 as the longer of the two operands. However, there are some cases
|
|
3943 where the result is guaranteed to be shorter than that: AND of two
|
|
3944 positives, OR of two negatives: use the shorter number. AND with
|
|
3945 mixed signs: use the positive number. OR with mixed signs: use the
|
|
3946 negative number.
|
|
3947 */
|
|
3948 switch (op) {
|
|
3949 case '^':
|
|
3950 negz = nega ^ negb;
|
|
3951 size_z = size_a;
|
|
3952 break;
|
|
3953 case '&':
|
|
3954 negz = nega & negb;
|
|
3955 size_z = negb ? size_a : size_b;
|
|
3956 break;
|
|
3957 case '|':
|
|
3958 negz = nega | negb;
|
|
3959 size_z = negb ? size_b : size_a;
|
|
3960 break;
|
|
3961 default:
|
|
3962 PyErr_BadArgument();
|
|
3963 return NULL;
|
|
3964 }
|
|
3965
|
|
3966 /* We allow an extra digit if z is negative, to make sure that
|
|
3967 the final two's complement of z doesn't overflow. */
|
|
3968 z = _PyLong_New(size_z + negz);
|
|
3969 if (z == NULL) {
|
|
3970 Py_DECREF(a);
|
|
3971 Py_DECREF(b);
|
|
3972 return NULL;
|
|
3973 }
|
|
3974
|
|
3975 /* Compute digits for overlap of a and b. */
|
|
3976 switch(op) {
|
|
3977 case '&':
|
|
3978 for (i = 0; i < size_b; ++i)
|
|
3979 z->ob_digit[i] = a->ob_digit[i] & b->ob_digit[i];
|
|
3980 break;
|
|
3981 case '|':
|
|
3982 for (i = 0; i < size_b; ++i)
|
|
3983 z->ob_digit[i] = a->ob_digit[i] | b->ob_digit[i];
|
|
3984 break;
|
|
3985 case '^':
|
|
3986 for (i = 0; i < size_b; ++i)
|
|
3987 z->ob_digit[i] = a->ob_digit[i] ^ b->ob_digit[i];
|
|
3988 break;
|
|
3989 default:
|
|
3990 PyErr_BadArgument();
|
|
3991 return NULL;
|
|
3992 }
|
|
3993
|
|
3994 /* Copy any remaining digits of a, inverting if necessary. */
|
|
3995 if (op == '^' && negb)
|
|
3996 for (; i < size_z; ++i)
|
|
3997 z->ob_digit[i] = a->ob_digit[i] ^ PyLong_MASK;
|
|
3998 else if (i < size_z)
|
|
3999 memcpy(&z->ob_digit[i], &a->ob_digit[i],
|
|
4000 (size_z-i)*sizeof(digit));
|
|
4001
|
|
4002 /* Complement result if negative. */
|
|
4003 if (negz) {
|
|
4004 Py_SIZE(z) = -(Py_SIZE(z));
|
|
4005 z->ob_digit[size_z] = PyLong_MASK;
|
|
4006 v_complement(z->ob_digit, z->ob_digit, size_z+1);
|
|
4007 }
|
|
4008
|
|
4009 Py_DECREF(a);
|
|
4010 Py_DECREF(b);
|
|
4011 return (PyObject *)maybe_small_long(long_normalize(z));
|
|
4012 }
|
|
4013
|
|
4014 static PyObject *
|
|
4015 long_and(PyObject *a, PyObject *b)
|
|
4016 {
|
|
4017 PyObject *c;
|
|
4018 CHECK_BINOP(a, b);
|
|
4019 c = long_bitwise((PyLongObject*)a, '&', (PyLongObject*)b);
|
|
4020 return c;
|
|
4021 }
|
|
4022
|
|
4023 static PyObject *
|
|
4024 long_xor(PyObject *a, PyObject *b)
|
|
4025 {
|
|
4026 PyObject *c;
|
|
4027 CHECK_BINOP(a, b);
|
|
4028 c = long_bitwise((PyLongObject*)a, '^', (PyLongObject*)b);
|
|
4029 return c;
|
|
4030 }
|
|
4031
|
|
4032 static PyObject *
|
|
4033 long_or(PyObject *a, PyObject *b)
|
|
4034 {
|
|
4035 PyObject *c;
|
|
4036 CHECK_BINOP(a, b);
|
|
4037 c = long_bitwise((PyLongObject*)a, '|', (PyLongObject*)b);
|
|
4038 return c;
|
|
4039 }
|
|
4040
|
|
4041 static PyObject *
|
|
4042 long_long(PyObject *v)
|
|
4043 {
|
|
4044 if (PyLong_CheckExact(v))
|
|
4045 Py_INCREF(v);
|
|
4046 else
|
|
4047 v = _PyLong_Copy((PyLongObject *)v);
|
|
4048 return v;
|
|
4049 }
|
|
4050
|
|
4051 static PyObject *
|
|
4052 long_float(PyObject *v)
|
|
4053 {
|
|
4054 double result;
|
|
4055 result = PyLong_AsDouble(v);
|
|
4056 if (result == -1.0 && PyErr_Occurred())
|
|
4057 return NULL;
|
|
4058 return PyFloat_FromDouble(result);
|
|
4059 }
|
|
4060
|
|
4061 static PyObject *
|
|
4062 long_subtype_new(PyTypeObject *type, PyObject *args, PyObject *kwds);
|
|
4063
|
|
4064 static PyObject *
|
|
4065 long_new(PyTypeObject *type, PyObject *args, PyObject *kwds)
|
|
4066 {
|
|
4067 PyObject *obase = NULL, *x = NULL;
|
|
4068 long base;
|
|
4069 int overflow;
|
|
4070 static char *kwlist[] = {"x", "base", 0};
|
|
4071
|
|
4072 if (type != &PyLong_Type)
|
|
4073 return long_subtype_new(type, args, kwds); /* Wimp out */
|
|
4074 if (!PyArg_ParseTupleAndKeywords(args, kwds, "|OO:int", kwlist,
|
|
4075 &x, &obase))
|
|
4076 return NULL;
|
|
4077 if (x == NULL)
|
|
4078 return PyLong_FromLong(0L);
|
|
4079 if (obase == NULL)
|
|
4080 return PyNumber_Long(x);
|
|
4081
|
|
4082 base = PyLong_AsLongAndOverflow(obase, &overflow);
|
|
4083 if (base == -1 && PyErr_Occurred())
|
|
4084 return NULL;
|
|
4085 if (overflow || (base != 0 && base < 2) || base > 36) {
|
|
4086 PyErr_SetString(PyExc_ValueError,
|
|
4087 "int() arg 2 must be >= 2 and <= 36");
|
|
4088 return NULL;
|
|
4089 }
|
|
4090
|
|
4091 if (PyUnicode_Check(x))
|
|
4092 return PyLong_FromUnicodeObject(x, (int)base);
|
|
4093 else if (PyByteArray_Check(x) || PyBytes_Check(x)) {
|
|
4094 /* Since PyLong_FromString doesn't have a length parameter,
|
|
4095 * check here for possible NULs in the string. */
|
|
4096 char *string;
|
|
4097 Py_ssize_t size = Py_SIZE(x);
|
|
4098 if (PyByteArray_Check(x))
|
|
4099 string = PyByteArray_AS_STRING(x);
|
|
4100 else
|
|
4101 string = PyBytes_AS_STRING(x);
|
|
4102 if (strlen(string) != (size_t)size) {
|
|
4103 /* We only see this if there's a null byte in x,
|
|
4104 x is a bytes or buffer, *and* a base is given. */
|
|
4105 PyErr_Format(PyExc_ValueError,
|
|
4106 "invalid literal for int() with base %d: %R",
|
|
4107 (int)base, x);
|
|
4108 return NULL;
|
|
4109 }
|
|
4110 return PyLong_FromString(string, NULL, (int)base);
|
|
4111 }
|
|
4112 else {
|
|
4113 PyErr_SetString(PyExc_TypeError,
|
|
4114 "int() can't convert non-string with explicit base");
|
|
4115 return NULL;
|
|
4116 }
|
|
4117 }
|
|
4118
|
|
4119 /* Wimpy, slow approach to tp_new calls for subtypes of long:
|
|
4120 first create a regular long from whatever arguments we got,
|
|
4121 then allocate a subtype instance and initialize it from
|
|
4122 the regular long. The regular long is then thrown away.
|
|
4123 */
|
|
4124 static PyObject *
|
|
4125 long_subtype_new(PyTypeObject *type, PyObject *args, PyObject *kwds)
|
|
4126 {
|
|
4127 PyLongObject *tmp, *newobj;
|
|
4128 Py_ssize_t i, n;
|
|
4129
|
|
4130 assert(PyType_IsSubtype(type, &PyLong_Type));
|
|
4131 tmp = (PyLongObject *)long_new(&PyLong_Type, args, kwds);
|
|
4132 if (tmp == NULL)
|
|
4133 return NULL;
|
|
4134 assert(PyLong_CheckExact(tmp));
|
|
4135 n = Py_SIZE(tmp);
|
|
4136 if (n < 0)
|
|
4137 n = -n;
|
|
4138 newobj = (PyLongObject *)type->tp_alloc(type, n);
|
|
4139 if (newobj == NULL) {
|
|
4140 Py_DECREF(tmp);
|
|
4141 return NULL;
|
|
4142 }
|
|
4143 assert(PyLong_Check(newobj));
|
|
4144 Py_SIZE(newobj) = Py_SIZE(tmp);
|
|
4145 for (i = 0; i < n; i++)
|
|
4146 newobj->ob_digit[i] = tmp->ob_digit[i];
|
|
4147 Py_DECREF(tmp);
|
|
4148 return (PyObject *)newobj;
|
|
4149 }
|
|
4150
|
|
4151 static PyObject *
|
|
4152 long_getnewargs(PyLongObject *v)
|
|
4153 {
|
|
4154 return Py_BuildValue("(N)", _PyLong_Copy(v));
|
|
4155 }
|
|
4156
|
|
4157 static PyObject *
|
|
4158 long_get0(PyLongObject *v, void *context) {
|
|
4159 return PyLong_FromLong(0L);
|
|
4160 }
|
|
4161
|
|
4162 static PyObject *
|
|
4163 long_get1(PyLongObject *v, void *context) {
|
|
4164 return PyLong_FromLong(1L);
|
|
4165 }
|
|
4166
|
|
4167 static PyObject *
|
|
4168 long__format__(PyObject *self, PyObject *args)
|
|
4169 {
|
|
4170 PyObject *format_spec;
|
|
4171
|
|
4172 if (!PyArg_ParseTuple(args, "U:__format__", &format_spec))
|
|
4173 return NULL;
|
|
4174 return _PyLong_FormatAdvanced(self, format_spec, 0,
|
|
4175 PyUnicode_GET_LENGTH(format_spec));
|
|
4176 }
|
|
4177
|
|
4178 /* Return a pair (q, r) such that a = b * q + r, and
|
|
4179 abs(r) <= abs(b)/2, with equality possible only if q is even.
|
|
4180 In other words, q == a / b, rounded to the nearest integer using
|
|
4181 round-half-to-even. */
|
|
4182
|
|
4183 PyObject *
|
|
4184 _PyLong_DivmodNear(PyObject *a, PyObject *b)
|
|
4185 {
|
|
4186 PyLongObject *quo = NULL, *rem = NULL;
|
|
4187 PyObject *one = NULL, *twice_rem, *result, *temp;
|
|
4188 int cmp, quo_is_odd, quo_is_neg;
|
|
4189
|
|
4190 /* Equivalent Python code:
|
|
4191
|
|
4192 def divmod_near(a, b):
|
|
4193 q, r = divmod(a, b)
|
|
4194 # round up if either r / b > 0.5, or r / b == 0.5 and q is odd.
|
|
4195 # The expression r / b > 0.5 is equivalent to 2 * r > b if b is
|
|
4196 # positive, 2 * r < b if b negative.
|
|
4197 greater_than_half = 2*r > b if b > 0 else 2*r < b
|
|
4198 exactly_half = 2*r == b
|
|
4199 if greater_than_half or exactly_half and q % 2 == 1:
|
|
4200 q += 1
|
|
4201 r -= b
|
|
4202 return q, r
|
|
4203
|
|
4204 */
|
|
4205 if (!PyLong_Check(a) || !PyLong_Check(b)) {
|
|
4206 PyErr_SetString(PyExc_TypeError,
|
|
4207 "non-integer arguments in division");
|
|
4208 return NULL;
|
|
4209 }
|
|
4210
|
|
4211 /* Do a and b have different signs? If so, quotient is negative. */
|
|
4212 quo_is_neg = (Py_SIZE(a) < 0) != (Py_SIZE(b) < 0);
|
|
4213
|
|
4214 one = PyLong_FromLong(1L);
|
|
4215 if (one == NULL)
|
|
4216 return NULL;
|
|
4217
|
|
4218 if (long_divrem((PyLongObject*)a, (PyLongObject*)b, &quo, &rem) < 0)
|
|
4219 goto error;
|
|
4220
|
|
4221 /* compare twice the remainder with the divisor, to see
|
|
4222 if we need to adjust the quotient and remainder */
|
|
4223 twice_rem = long_lshift((PyObject *)rem, one);
|
|
4224 if (twice_rem == NULL)
|
|
4225 goto error;
|
|
4226 if (quo_is_neg) {
|
|
4227 temp = long_neg((PyLongObject*)twice_rem);
|
|
4228 Py_DECREF(twice_rem);
|
|
4229 twice_rem = temp;
|
|
4230 if (twice_rem == NULL)
|
|
4231 goto error;
|
|
4232 }
|
|
4233 cmp = long_compare((PyLongObject *)twice_rem, (PyLongObject *)b);
|
|
4234 Py_DECREF(twice_rem);
|
|
4235
|
|
4236 quo_is_odd = Py_SIZE(quo) != 0 && ((quo->ob_digit[0] & 1) != 0);
|
|
4237 if ((Py_SIZE(b) < 0 ? cmp < 0 : cmp > 0) || (cmp == 0 && quo_is_odd)) {
|
|
4238 /* fix up quotient */
|
|
4239 if (quo_is_neg)
|
|
4240 temp = long_sub(quo, (PyLongObject *)one);
|
|
4241 else
|
|
4242 temp = long_add(quo, (PyLongObject *)one);
|
|
4243 Py_DECREF(quo);
|
|
4244 quo = (PyLongObject *)temp;
|
|
4245 if (quo == NULL)
|
|
4246 goto error;
|
|
4247 /* and remainder */
|
|
4248 if (quo_is_neg)
|
|
4249 temp = long_add(rem, (PyLongObject *)b);
|
|
4250 else
|
|
4251 temp = long_sub(rem, (PyLongObject *)b);
|
|
4252 Py_DECREF(rem);
|
|
4253 rem = (PyLongObject *)temp;
|
|
4254 if (rem == NULL)
|
|
4255 goto error;
|
|
4256 }
|
|
4257
|
|
4258 result = PyTuple_New(2);
|
|
4259 if (result == NULL)
|
|
4260 goto error;
|
|
4261
|
|
4262 /* PyTuple_SET_ITEM steals references */
|
|
4263 PyTuple_SET_ITEM(result, 0, (PyObject *)quo);
|
|
4264 PyTuple_SET_ITEM(result, 1, (PyObject *)rem);
|
|
4265 Py_DECREF(one);
|
|
4266 return result;
|
|
4267
|
|
4268 error:
|
|
4269 Py_XDECREF(quo);
|
|
4270 Py_XDECREF(rem);
|
|
4271 Py_XDECREF(one);
|
|
4272 return NULL;
|
|
4273 }
|
|
4274
|
|
4275 static PyObject *
|
|
4276 long_round(PyObject *self, PyObject *args)
|
|
4277 {
|
|
4278 PyObject *o_ndigits=NULL, *temp, *result, *ndigits;
|
|
4279
|
|
4280 /* To round an integer m to the nearest 10**n (n positive), we make use of
|
|
4281 * the divmod_near operation, defined by:
|
|
4282 *
|
|
4283 * divmod_near(a, b) = (q, r)
|
|
4284 *
|
|
4285 * where q is the nearest integer to the quotient a / b (the
|
|
4286 * nearest even integer in the case of a tie) and r == a - q * b.
|
|
4287 * Hence q * b = a - r is the nearest multiple of b to a,
|
|
4288 * preferring even multiples in the case of a tie.
|
|
4289 *
|
|
4290 * So the nearest multiple of 10**n to m is:
|
|
4291 *
|
|
4292 * m - divmod_near(m, 10**n)[1].
|
|
4293 */
|
|
4294 if (!PyArg_ParseTuple(args, "|O", &o_ndigits))
|
|
4295 return NULL;
|
|
4296 if (o_ndigits == NULL)
|
|
4297 return long_long(self);
|
|
4298
|
|
4299 ndigits = PyNumber_Index(o_ndigits);
|
|
4300 if (ndigits == NULL)
|
|
4301 return NULL;
|
|
4302
|
|
4303 /* if ndigits >= 0 then no rounding is necessary; return self unchanged */
|
|
4304 if (Py_SIZE(ndigits) >= 0) {
|
|
4305 Py_DECREF(ndigits);
|
|
4306 return long_long(self);
|
|
4307 }
|
|
4308
|
|
4309 /* result = self - divmod_near(self, 10 ** -ndigits)[1] */
|
|
4310 temp = long_neg((PyLongObject*)ndigits);
|
|
4311 Py_DECREF(ndigits);
|
|
4312 ndigits = temp;
|
|
4313 if (ndigits == NULL)
|
|
4314 return NULL;
|
|
4315
|
|
4316 result = PyLong_FromLong(10L);
|
|
4317 if (result == NULL) {
|
|
4318 Py_DECREF(ndigits);
|
|
4319 return NULL;
|
|
4320 }
|
|
4321
|
|
4322 temp = long_pow(result, ndigits, Py_None);
|
|
4323 Py_DECREF(ndigits);
|
|
4324 Py_DECREF(result);
|
|
4325 result = temp;
|
|
4326 if (result == NULL)
|
|
4327 return NULL;
|
|
4328
|
|
4329 temp = _PyLong_DivmodNear(self, result);
|
|
4330 Py_DECREF(result);
|
|
4331 result = temp;
|
|
4332 if (result == NULL)
|
|
4333 return NULL;
|
|
4334
|
|
4335 temp = long_sub((PyLongObject *)self,
|
|
4336 (PyLongObject *)PyTuple_GET_ITEM(result, 1));
|
|
4337 Py_DECREF(result);
|
|
4338 result = temp;
|
|
4339
|
|
4340 return result;
|
|
4341 }
|
|
4342
|
|
4343 static PyObject *
|
|
4344 long_sizeof(PyLongObject *v)
|
|
4345 {
|
|
4346 Py_ssize_t res;
|
|
4347
|
|
4348 res = offsetof(PyLongObject, ob_digit) + ABS(Py_SIZE(v))*sizeof(digit);
|
|
4349 return PyLong_FromSsize_t(res);
|
|
4350 }
|
|
4351
|
|
4352 static PyObject *
|
|
4353 long_bit_length(PyLongObject *v)
|
|
4354 {
|
|
4355 PyLongObject *result, *x, *y;
|
|
4356 Py_ssize_t ndigits, msd_bits = 0;
|
|
4357 digit msd;
|
|
4358
|
|
4359 assert(v != NULL);
|
|
4360 assert(PyLong_Check(v));
|
|
4361
|
|
4362 ndigits = ABS(Py_SIZE(v));
|
|
4363 if (ndigits == 0)
|
|
4364 return PyLong_FromLong(0);
|
|
4365
|
|
4366 msd = v->ob_digit[ndigits-1];
|
|
4367 while (msd >= 32) {
|
|
4368 msd_bits += 6;
|
|
4369 msd >>= 6;
|
|
4370 }
|
|
4371 msd_bits += (long)(BitLengthTable[msd]);
|
|
4372
|
|
4373 if (ndigits <= PY_SSIZE_T_MAX/PyLong_SHIFT)
|
|
4374 return PyLong_FromSsize_t((ndigits-1)*PyLong_SHIFT + msd_bits);
|
|
4375
|
|
4376 /* expression above may overflow; use Python integers instead */
|
|
4377 result = (PyLongObject *)PyLong_FromSsize_t(ndigits - 1);
|
|
4378 if (result == NULL)
|
|
4379 return NULL;
|
|
4380 x = (PyLongObject *)PyLong_FromLong(PyLong_SHIFT);
|
|
4381 if (x == NULL)
|
|
4382 goto error;
|
|
4383 y = (PyLongObject *)long_mul(result, x);
|
|
4384 Py_DECREF(x);
|
|
4385 if (y == NULL)
|
|
4386 goto error;
|
|
4387 Py_DECREF(result);
|
|
4388 result = y;
|
|
4389
|
|
4390 x = (PyLongObject *)PyLong_FromLong((long)msd_bits);
|
|
4391 if (x == NULL)
|
|
4392 goto error;
|
|
4393 y = (PyLongObject *)long_add(result, x);
|
|
4394 Py_DECREF(x);
|
|
4395 if (y == NULL)
|
|
4396 goto error;
|
|
4397 Py_DECREF(result);
|
|
4398 result = y;
|
|
4399
|
|
4400 return (PyObject *)result;
|
|
4401
|
|
4402 error:
|
|
4403 Py_DECREF(result);
|
|
4404 return NULL;
|
|
4405 }
|
|
4406
|
|
4407 PyDoc_STRVAR(long_bit_length_doc,
|
|
4408 "int.bit_length() -> int\n\
|
|
4409 \n\
|
|
4410 Number of bits necessary to represent self in binary.\n\
|
|
4411 >>> bin(37)\n\
|
|
4412 '0b100101'\n\
|
|
4413 >>> (37).bit_length()\n\
|
|
4414 6");
|
|
4415
|
|
4416 #if 0
|
|
4417 static PyObject *
|
|
4418 long_is_finite(PyObject *v)
|
|
4419 {
|
|
4420 Py_RETURN_TRUE;
|
|
4421 }
|
|
4422 #endif
|
|
4423
|
|
4424
|
|
4425 static PyObject *
|
|
4426 long_to_bytes(PyLongObject *v, PyObject *args, PyObject *kwds)
|
|
4427 {
|
|
4428 PyObject *byteorder_str;
|
|
4429 PyObject *is_signed_obj = NULL;
|
|
4430 Py_ssize_t length;
|
|
4431 int little_endian;
|
|
4432 int is_signed;
|
|
4433 PyObject *bytes;
|
|
4434 static char *kwlist[] = {"length", "byteorder", "signed", NULL};
|
|
4435
|
|
4436 if (!PyArg_ParseTupleAndKeywords(args, kwds, "nU|O:to_bytes", kwlist,
|
|
4437 &length, &byteorder_str,
|
|
4438 &is_signed_obj))
|
|
4439 return NULL;
|
|
4440
|
|
4441 if (args != NULL && Py_SIZE(args) > 2) {
|
|
4442 PyErr_SetString(PyExc_TypeError,
|
|
4443 "'signed' is a keyword-only argument");
|
|
4444 return NULL;
|
|
4445 }
|
|
4446
|
|
4447 if (!PyUnicode_CompareWithASCIIString(byteorder_str, "little"))
|
|
4448 little_endian = 1;
|
|
4449 else if (!PyUnicode_CompareWithASCIIString(byteorder_str, "big"))
|
|
4450 little_endian = 0;
|
|
4451 else {
|
|
4452 PyErr_SetString(PyExc_ValueError,
|
|
4453 "byteorder must be either 'little' or 'big'");
|
|
4454 return NULL;
|
|
4455 }
|
|
4456
|
|
4457 if (is_signed_obj != NULL) {
|
|
4458 int cmp = PyObject_IsTrue(is_signed_obj);
|
|
4459 if (cmp < 0)
|
|
4460 return NULL;
|
|
4461 is_signed = cmp ? 1 : 0;
|
|
4462 }
|
|
4463 else {
|
|
4464 /* If the signed argument was omitted, use False as the
|
|
4465 default. */
|
|
4466 is_signed = 0;
|
|
4467 }
|
|
4468
|
|
4469 if (length < 0) {
|
|
4470 PyErr_SetString(PyExc_ValueError,
|
|
4471 "length argument must be non-negative");
|
|
4472 return NULL;
|
|
4473 }
|
|
4474
|
|
4475 bytes = PyBytes_FromStringAndSize(NULL, length);
|
|
4476 if (bytes == NULL)
|
|
4477 return NULL;
|
|
4478
|
|
4479 if (_PyLong_AsByteArray(v, (unsigned char *)PyBytes_AS_STRING(bytes),
|
|
4480 length, little_endian, is_signed) < 0) {
|
|
4481 Py_DECREF(bytes);
|
|
4482 return NULL;
|
|
4483 }
|
|
4484
|
|
4485 return bytes;
|
|
4486 }
|
|
4487
|
|
4488 PyDoc_STRVAR(long_to_bytes_doc,
|
|
4489 "int.to_bytes(length, byteorder, *, signed=False) -> bytes\n\
|
|
4490 \n\
|
|
4491 Return an array of bytes representing an integer.\n\
|
|
4492 \n\
|
|
4493 The integer is represented using length bytes. An OverflowError is\n\
|
|
4494 raised if the integer is not representable with the given number of\n\
|
|
4495 bytes.\n\
|
|
4496 \n\
|
|
4497 The byteorder argument determines the byte order used to represent the\n\
|
|
4498 integer. If byteorder is 'big', the most significant byte is at the\n\
|
|
4499 beginning of the byte array. If byteorder is 'little', the most\n\
|
|
4500 significant byte is at the end of the byte array. To request the native\n\
|
|
4501 byte order of the host system, use `sys.byteorder' as the byte order value.\n\
|
|
4502 \n\
|
|
4503 The signed keyword-only argument determines whether two's complement is\n\
|
|
4504 used to represent the integer. If signed is False and a negative integer\n\
|
|
4505 is given, an OverflowError is raised.");
|
|
4506
|
|
4507 static PyObject *
|
|
4508 long_from_bytes(PyTypeObject *type, PyObject *args, PyObject *kwds)
|
|
4509 {
|
|
4510 PyObject *byteorder_str;
|
|
4511 PyObject *is_signed_obj = NULL;
|
|
4512 int little_endian;
|
|
4513 int is_signed;
|
|
4514 PyObject *obj;
|
|
4515 PyObject *bytes;
|
|
4516 PyObject *long_obj;
|
|
4517 static char *kwlist[] = {"bytes", "byteorder", "signed", NULL};
|
|
4518
|
|
4519 if (!PyArg_ParseTupleAndKeywords(args, kwds, "OU|O:from_bytes", kwlist,
|
|
4520 &obj, &byteorder_str,
|
|
4521 &is_signed_obj))
|
|
4522 return NULL;
|
|
4523
|
|
4524 if (args != NULL && Py_SIZE(args) > 2) {
|
|
4525 PyErr_SetString(PyExc_TypeError,
|
|
4526 "'signed' is a keyword-only argument");
|
|
4527 return NULL;
|
|
4528 }
|
|
4529
|
|
4530 if (!PyUnicode_CompareWithASCIIString(byteorder_str, "little"))
|
|
4531 little_endian = 1;
|
|
4532 else if (!PyUnicode_CompareWithASCIIString(byteorder_str, "big"))
|
|
4533 little_endian = 0;
|
|
4534 else {
|
|
4535 PyErr_SetString(PyExc_ValueError,
|
|
4536 "byteorder must be either 'little' or 'big'");
|
|
4537 return NULL;
|
|
4538 }
|
|
4539
|
|
4540 if (is_signed_obj != NULL) {
|
|
4541 int cmp = PyObject_IsTrue(is_signed_obj);
|
|
4542 if (cmp < 0)
|
|
4543 return NULL;
|
|
4544 is_signed = cmp ? 1 : 0;
|
|
4545 }
|
|
4546 else {
|
|
4547 /* If the signed argument was omitted, use False as the
|
|
4548 default. */
|
|
4549 is_signed = 0;
|
|
4550 }
|
|
4551
|
|
4552 bytes = PyObject_Bytes(obj);
|
|
4553 if (bytes == NULL)
|
|
4554 return NULL;
|
|
4555
|
|
4556 long_obj = _PyLong_FromByteArray(
|
|
4557 (unsigned char *)PyBytes_AS_STRING(bytes), Py_SIZE(bytes),
|
|
4558 little_endian, is_signed);
|
|
4559 Py_DECREF(bytes);
|
|
4560
|
|
4561 /* If from_bytes() was used on subclass, allocate new subclass
|
|
4562 * instance, initialize it with decoded long value and return it.
|
|
4563 */
|
|
4564 if (type != &PyLong_Type && PyType_IsSubtype(type, &PyLong_Type)) {
|
|
4565 PyLongObject *newobj;
|
|
4566 int i;
|
|
4567 Py_ssize_t n = ABS(Py_SIZE(long_obj));
|
|
4568
|
|
4569 newobj = (PyLongObject *)type->tp_alloc(type, n);
|
|
4570 if (newobj == NULL) {
|
|
4571 Py_DECREF(long_obj);
|
|
4572 return NULL;
|
|
4573 }
|
|
4574 assert(PyLong_Check(newobj));
|
|
4575 Py_SIZE(newobj) = Py_SIZE(long_obj);
|
|
4576 for (i = 0; i < n; i++) {
|
|
4577 newobj->ob_digit[i] =
|
|
4578 ((PyLongObject *)long_obj)->ob_digit[i];
|
|
4579 }
|
|
4580 Py_DECREF(long_obj);
|
|
4581 return (PyObject *)newobj;
|
|
4582 }
|
|
4583
|
|
4584 return long_obj;
|
|
4585 }
|
|
4586
|
|
4587 PyDoc_STRVAR(long_from_bytes_doc,
|
|
4588 "int.from_bytes(bytes, byteorder, *, signed=False) -> int\n\
|
|
4589 \n\
|
|
4590 Return the integer represented by the given array of bytes.\n\
|
|
4591 \n\
|
|
4592 The bytes argument must either support the buffer protocol or be an\n\
|
|
4593 iterable object producing bytes. Bytes and bytearray are examples of\n\
|
|
4594 built-in objects that support the buffer protocol.\n\
|
|
4595 \n\
|
|
4596 The byteorder argument determines the byte order used to represent the\n\
|
|
4597 integer. If byteorder is 'big', the most significant byte is at the\n\
|
|
4598 beginning of the byte array. If byteorder is 'little', the most\n\
|
|
4599 significant byte is at the end of the byte array. To request the native\n\
|
|
4600 byte order of the host system, use `sys.byteorder' as the byte order value.\n\
|
|
4601 \n\
|
|
4602 The signed keyword-only argument indicates whether two's complement is\n\
|
|
4603 used to represent the integer.");
|
|
4604
|
|
4605 static PyMethodDef long_methods[] = {
|
|
4606 {"conjugate", (PyCFunction)long_long, METH_NOARGS,
|
|
4607 "Returns self, the complex conjugate of any int."},
|
|
4608 {"bit_length", (PyCFunction)long_bit_length, METH_NOARGS,
|
|
4609 long_bit_length_doc},
|
|
4610 #if 0
|
|
4611 {"is_finite", (PyCFunction)long_is_finite, METH_NOARGS,
|
|
4612 "Returns always True."},
|
|
4613 #endif
|
|
4614 {"to_bytes", (PyCFunction)long_to_bytes,
|
|
4615 METH_VARARGS|METH_KEYWORDS, long_to_bytes_doc},
|
|
4616 {"from_bytes", (PyCFunction)long_from_bytes,
|
|
4617 METH_VARARGS|METH_KEYWORDS|METH_CLASS, long_from_bytes_doc},
|
|
4618 {"__trunc__", (PyCFunction)long_long, METH_NOARGS,
|
|
4619 "Truncating an Integral returns itself."},
|
|
4620 {"__floor__", (PyCFunction)long_long, METH_NOARGS,
|
|
4621 "Flooring an Integral returns itself."},
|
|
4622 {"__ceil__", (PyCFunction)long_long, METH_NOARGS,
|
|
4623 "Ceiling of an Integral returns itself."},
|
|
4624 {"__round__", (PyCFunction)long_round, METH_VARARGS,
|
|
4625 "Rounding an Integral returns itself.\n"
|
|
4626 "Rounding with an ndigits argument also returns an integer."},
|
|
4627 {"__getnewargs__", (PyCFunction)long_getnewargs, METH_NOARGS},
|
|
4628 {"__format__", (PyCFunction)long__format__, METH_VARARGS},
|
|
4629 {"__sizeof__", (PyCFunction)long_sizeof, METH_NOARGS,
|
|
4630 "Returns size in memory, in bytes"},
|
|
4631 {NULL, NULL} /* sentinel */
|
|
4632 };
|
|
4633
|
|
4634 static PyGetSetDef long_getset[] = {
|
|
4635 {"real",
|
|
4636 (getter)long_long, (setter)NULL,
|
|
4637 "the real part of a complex number",
|
|
4638 NULL},
|
|
4639 {"imag",
|
|
4640 (getter)long_get0, (setter)NULL,
|
|
4641 "the imaginary part of a complex number",
|
|
4642 NULL},
|
|
4643 {"numerator",
|
|
4644 (getter)long_long, (setter)NULL,
|
|
4645 "the numerator of a rational number in lowest terms",
|
|
4646 NULL},
|
|
4647 {"denominator",
|
|
4648 (getter)long_get1, (setter)NULL,
|
|
4649 "the denominator of a rational number in lowest terms",
|
|
4650 NULL},
|
|
4651 {NULL} /* Sentinel */
|
|
4652 };
|
|
4653
|
|
4654 PyDoc_STRVAR(long_doc,
|
|
4655 "int(x[, base]) -> integer\n\
|
|
4656 \n\
|
|
4657 Convert a string or number to an integer, if possible. A floating\n\
|
|
4658 point argument will be truncated towards zero (this does not include a\n\
|
|
4659 string representation of a floating point number!) When converting a\n\
|
|
4660 string, use the optional base. It is an error to supply a base when\n\
|
|
4661 converting a non-string.");
|
|
4662
|
|
4663 static PyNumberMethods long_as_number = {
|
|
4664 (binaryfunc)long_add, /*nb_add*/
|
|
4665 (binaryfunc)long_sub, /*nb_subtract*/
|
|
4666 (binaryfunc)long_mul, /*nb_multiply*/
|
|
4667 long_mod, /*nb_remainder*/
|
|
4668 long_divmod, /*nb_divmod*/
|
|
4669 long_pow, /*nb_power*/
|
|
4670 (unaryfunc)long_neg, /*nb_negative*/
|
|
4671 (unaryfunc)long_long, /*tp_positive*/
|
|
4672 (unaryfunc)long_abs, /*tp_absolute*/
|
|
4673 (inquiry)long_bool, /*tp_bool*/
|
|
4674 (unaryfunc)long_invert, /*nb_invert*/
|
|
4675 long_lshift, /*nb_lshift*/
|
|
4676 (binaryfunc)long_rshift, /*nb_rshift*/
|
|
4677 long_and, /*nb_and*/
|
|
4678 long_xor, /*nb_xor*/
|
|
4679 long_or, /*nb_or*/
|
|
4680 long_long, /*nb_int*/
|
|
4681 0, /*nb_reserved*/
|
|
4682 long_float, /*nb_float*/
|
|
4683 0, /* nb_inplace_add */
|
|
4684 0, /* nb_inplace_subtract */
|
|
4685 0, /* nb_inplace_multiply */
|
|
4686 0, /* nb_inplace_remainder */
|
|
4687 0, /* nb_inplace_power */
|
|
4688 0, /* nb_inplace_lshift */
|
|
4689 0, /* nb_inplace_rshift */
|
|
4690 0, /* nb_inplace_and */
|
|
4691 0, /* nb_inplace_xor */
|
|
4692 0, /* nb_inplace_or */
|
|
4693 long_div, /* nb_floor_divide */
|
|
4694 long_true_divide, /* nb_true_divide */
|
|
4695 0, /* nb_inplace_floor_divide */
|
|
4696 0, /* nb_inplace_true_divide */
|
|
4697 long_long, /* nb_index */
|
|
4698 };
|
|
4699
|
|
4700 PyTypeObject PyLong_Type = {
|
|
4701 PyVarObject_HEAD_INIT(&PyType_Type, 0)
|
|
4702 "int", /* tp_name */
|
|
4703 offsetof(PyLongObject, ob_digit), /* tp_basicsize */
|
|
4704 sizeof(digit), /* tp_itemsize */
|
|
4705 long_dealloc, /* tp_dealloc */
|
|
4706 0, /* tp_print */
|
|
4707 0, /* tp_getattr */
|
|
4708 0, /* tp_setattr */
|
|
4709 0, /* tp_reserved */
|
|
4710 long_to_decimal_string, /* tp_repr */
|
|
4711 &long_as_number, /* tp_as_number */
|
|
4712 0, /* tp_as_sequence */
|
|
4713 0, /* tp_as_mapping */
|
|
4714 (hashfunc)long_hash, /* tp_hash */
|
|
4715 0, /* tp_call */
|
|
4716 long_to_decimal_string, /* tp_str */
|
|
4717 PyObject_GenericGetAttr, /* tp_getattro */
|
|
4718 0, /* tp_setattro */
|
|
4719 0, /* tp_as_buffer */
|
|
4720 Py_TPFLAGS_DEFAULT | Py_TPFLAGS_BASETYPE |
|
|
4721 Py_TPFLAGS_LONG_SUBCLASS, /* tp_flags */
|
|
4722 long_doc, /* tp_doc */
|
|
4723 0, /* tp_traverse */
|
|
4724 0, /* tp_clear */
|
|
4725 long_richcompare, /* tp_richcompare */
|
|
4726 0, /* tp_weaklistoffset */
|
|
4727 0, /* tp_iter */
|
|
4728 0, /* tp_iternext */
|
|
4729 long_methods, /* tp_methods */
|
|
4730 0, /* tp_members */
|
|
4731 long_getset, /* tp_getset */
|
|
4732 0, /* tp_base */
|
|
4733 0, /* tp_dict */
|
|
4734 0, /* tp_descr_get */
|
|
4735 0, /* tp_descr_set */
|
|
4736 0, /* tp_dictoffset */
|
|
4737 0, /* tp_init */
|
|
4738 0, /* tp_alloc */
|
|
4739 long_new, /* tp_new */
|
|
4740 PyObject_Del, /* tp_free */
|
|
4741 };
|
|
4742
|
|
4743 static PyTypeObject Int_InfoType;
|
|
4744
|
|
4745 PyDoc_STRVAR(int_info__doc__,
|
|
4746 "sys.int_info\n\
|
|
4747 \n\
|
|
4748 A struct sequence that holds information about Python's\n\
|
|
4749 internal representation of integers. The attributes are read only.");
|
|
4750
|
|
4751 static PyStructSequence_Field int_info_fields[] = {
|
|
4752 {"bits_per_digit", "size of a digit in bits"},
|
|
4753 {"sizeof_digit", "size in bytes of the C type used to represent a digit"},
|
|
4754 {NULL, NULL}
|
|
4755 };
|
|
4756
|
|
4757 static PyStructSequence_Desc int_info_desc = {
|
|
4758 "sys.int_info", /* name */
|
|
4759 int_info__doc__, /* doc */
|
|
4760 int_info_fields, /* fields */
|
|
4761 2 /* number of fields */
|
|
4762 };
|
|
4763
|
|
4764 PyObject *
|
|
4765 PyLong_GetInfo(void)
|
|
4766 {
|
|
4767 PyObject* int_info;
|
|
4768 int field = 0;
|
|
4769 int_info = PyStructSequence_New(&Int_InfoType);
|
|
4770 if (int_info == NULL)
|
|
4771 return NULL;
|
|
4772 PyStructSequence_SET_ITEM(int_info, field++,
|
|
4773 PyLong_FromLong(PyLong_SHIFT));
|
|
4774 PyStructSequence_SET_ITEM(int_info, field++,
|
|
4775 PyLong_FromLong(sizeof(digit)));
|
|
4776 if (PyErr_Occurred()) {
|
|
4777 Py_CLEAR(int_info);
|
|
4778 return NULL;
|
|
4779 }
|
|
4780 return int_info;
|
|
4781 }
|
|
4782
|
|
4783 int
|
|
4784 _PyLong_Init(void)
|
|
4785 {
|
|
4786 #if NSMALLNEGINTS + NSMALLPOSINTS > 0
|
|
4787 int ival, size;
|
|
4788 PyLongObject *v = small_ints;
|
|
4789
|
|
4790 for (ival = -NSMALLNEGINTS; ival < NSMALLPOSINTS; ival++, v++) {
|
|
4791 size = (ival < 0) ? -1 : ((ival == 0) ? 0 : 1);
|
|
4792 if (Py_TYPE(v) == &PyLong_Type) {
|
|
4793 /* The element is already initialized, most likely
|
|
4794 * the Python interpreter was initialized before.
|
|
4795 */
|
|
4796 Py_ssize_t refcnt;
|
|
4797 PyObject* op = (PyObject*)v;
|
|
4798
|
|
4799 refcnt = Py_REFCNT(op) < 0 ? 0 : Py_REFCNT(op);
|
|
4800 _Py_NewReference(op);
|
|
4801 /* _Py_NewReference sets the ref count to 1 but
|
|
4802 * the ref count might be larger. Set the refcnt
|
|
4803 * to the original refcnt + 1 */
|
|
4804 Py_REFCNT(op) = refcnt + 1;
|
|
4805 assert(Py_SIZE(op) == size);
|
|
4806 assert(v->ob_digit[0] == abs(ival));
|
|
4807 }
|
|
4808 else {
|
|
4809 PyObject_INIT(v, &PyLong_Type);
|
|
4810 }
|
|
4811 Py_SIZE(v) = size;
|
|
4812 v->ob_digit[0] = abs(ival);
|
|
4813 }
|
|
4814 #endif
|
|
4815 /* initialize int_info */
|
|
4816 if (Int_InfoType.tp_name == 0)
|
|
4817 PyStructSequence_InitType(&Int_InfoType, &int_info_desc);
|
|
4818
|
|
4819 return 1;
|
|
4820 }
|
|
4821
|
|
4822 void
|
|
4823 PyLong_Fini(void)
|
|
4824 {
|
|
4825 /* Integers are currently statically allocated. Py_DECREF is not
|
|
4826 needed, but Python must forget about the reference or multiple
|
|
4827 reinitializations will fail. */
|
|
4828 #if NSMALLNEGINTS + NSMALLPOSINTS > 0
|
|
4829 int i;
|
|
4830 PyLongObject *v = small_ints;
|
|
4831 for (i = 0; i < NSMALLNEGINTS + NSMALLPOSINTS; i++, v++) {
|
|
4832 _Py_DEC_REFTOTAL;
|
|
4833 _Py_ForgetReference((PyObject*)v);
|
|
4834 }
|
|
4835 #endif
|
|
4836 }
|