Rename the actual method definitions to the official assertFoo names.
[python.git] / Objects / longobject.c
blobc172b0f9c3e837f207c881b8326e000f5fb2d963
3 /* Long (arbitrary precision) integer object implementation */
5 /* XXX The functional organization of this file is terrible */
7 #include "Python.h"
8 #include "longintrepr.h"
9 #include "structseq.h"
11 #include <ctype.h>
12 #include <stddef.h>
14 /* For long multiplication, use the O(N**2) school algorithm unless
15 * both operands contain more than KARATSUBA_CUTOFF digits (this
16 * being an internal Python long digit, in base PyLong_BASE).
18 #define KARATSUBA_CUTOFF 70
19 #define KARATSUBA_SQUARE_CUTOFF (2 * KARATSUBA_CUTOFF)
21 /* For exponentiation, use the binary left-to-right algorithm
22 * unless the exponent contains more than FIVEARY_CUTOFF digits.
23 * In that case, do 5 bits at a time. The potential drawback is that
24 * a table of 2**5 intermediate results is computed.
26 #define FIVEARY_CUTOFF 8
28 #define ABS(x) ((x) < 0 ? -(x) : (x))
30 #undef MIN
31 #undef MAX
32 #define MAX(x, y) ((x) < (y) ? (y) : (x))
33 #define MIN(x, y) ((x) > (y) ? (y) : (x))
35 #define SIGCHECK(PyTryBlock) \
36 if (--_Py_Ticker < 0) { \
37 _Py_Ticker = _Py_CheckInterval; \
38 if (PyErr_CheckSignals()) PyTryBlock \
41 /* Normalize (remove leading zeros from) a long int object.
42 Doesn't attempt to free the storage--in most cases, due to the nature
43 of the algorithms used, this could save at most be one word anyway. */
45 static PyLongObject *
46 long_normalize(register PyLongObject *v)
48 Py_ssize_t j = ABS(Py_SIZE(v));
49 Py_ssize_t i = j;
51 while (i > 0 && v->ob_digit[i-1] == 0)
52 --i;
53 if (i != j)
54 Py_SIZE(v) = (Py_SIZE(v) < 0) ? -(i) : i;
55 return v;
58 /* Allocate a new long int object with size digits.
59 Return NULL and set exception if we run out of memory. */
61 #define MAX_LONG_DIGITS \
62 ((PY_SSIZE_T_MAX - offsetof(PyLongObject, ob_digit))/sizeof(digit))
64 PyLongObject *
65 _PyLong_New(Py_ssize_t size)
67 if (size > (Py_ssize_t)MAX_LONG_DIGITS) {
68 PyErr_SetString(PyExc_OverflowError,
69 "too many digits in integer");
70 return NULL;
72 /* coverity[ampersand_in_size] */
73 /* XXX(nnorwitz): PyObject_NEW_VAR / _PyObject_VAR_SIZE need to detect
74 overflow */
75 return PyObject_NEW_VAR(PyLongObject, &PyLong_Type, size);
78 PyObject *
79 _PyLong_Copy(PyLongObject *src)
81 PyLongObject *result;
82 Py_ssize_t i;
84 assert(src != NULL);
85 i = src->ob_size;
86 if (i < 0)
87 i = -(i);
88 result = _PyLong_New(i);
89 if (result != NULL) {
90 result->ob_size = src->ob_size;
91 while (--i >= 0)
92 result->ob_digit[i] = src->ob_digit[i];
94 return (PyObject *)result;
97 /* Create a new long int object from a C long int */
99 PyObject *
100 PyLong_FromLong(long ival)
102 PyLongObject *v;
103 unsigned long abs_ival;
104 unsigned long t; /* unsigned so >> doesn't propagate sign bit */
105 int ndigits = 0;
106 int negative = 0;
108 if (ival < 0) {
109 /* if LONG_MIN == -LONG_MAX-1 (true on most platforms) then
110 ANSI C says that the result of -ival is undefined when ival
111 == LONG_MIN. Hence the following workaround. */
112 abs_ival = (unsigned long)(-1-ival) + 1;
113 negative = 1;
115 else {
116 abs_ival = (unsigned long)ival;
119 /* Count the number of Python digits.
120 We used to pick 5 ("big enough for anything"), but that's a
121 waste of time and space given that 5*15 = 75 bits are rarely
122 needed. */
123 t = abs_ival;
124 while (t) {
125 ++ndigits;
126 t >>= PyLong_SHIFT;
128 v = _PyLong_New(ndigits);
129 if (v != NULL) {
130 digit *p = v->ob_digit;
131 v->ob_size = negative ? -ndigits : ndigits;
132 t = abs_ival;
133 while (t) {
134 *p++ = (digit)(t & PyLong_MASK);
135 t >>= PyLong_SHIFT;
138 return (PyObject *)v;
141 /* Create a new long int object from a C unsigned long int */
143 PyObject *
144 PyLong_FromUnsignedLong(unsigned long ival)
146 PyLongObject *v;
147 unsigned long t;
148 int ndigits = 0;
150 /* Count the number of Python digits. */
151 t = (unsigned long)ival;
152 while (t) {
153 ++ndigits;
154 t >>= PyLong_SHIFT;
156 v = _PyLong_New(ndigits);
157 if (v != NULL) {
158 digit *p = v->ob_digit;
159 Py_SIZE(v) = ndigits;
160 while (ival) {
161 *p++ = (digit)(ival & PyLong_MASK);
162 ival >>= PyLong_SHIFT;
165 return (PyObject *)v;
168 /* Create a new long int object from a C double */
170 PyObject *
171 PyLong_FromDouble(double dval)
173 PyLongObject *v;
174 double frac;
175 int i, ndig, expo, neg;
176 neg = 0;
177 if (Py_IS_INFINITY(dval)) {
178 PyErr_SetString(PyExc_OverflowError,
179 "cannot convert float infinity to integer");
180 return NULL;
182 if (Py_IS_NAN(dval)) {
183 PyErr_SetString(PyExc_ValueError,
184 "cannot convert float NaN to integer");
185 return NULL;
187 if (dval < 0.0) {
188 neg = 1;
189 dval = -dval;
191 frac = frexp(dval, &expo); /* dval = frac*2**expo; 0.0 <= frac < 1.0 */
192 if (expo <= 0)
193 return PyLong_FromLong(0L);
194 ndig = (expo-1) / PyLong_SHIFT + 1; /* Number of 'digits' in result */
195 v = _PyLong_New(ndig);
196 if (v == NULL)
197 return NULL;
198 frac = ldexp(frac, (expo-1) % PyLong_SHIFT + 1);
199 for (i = ndig; --i >= 0; ) {
200 digit bits = (digit)frac;
201 v->ob_digit[i] = bits;
202 frac = frac - (double)bits;
203 frac = ldexp(frac, PyLong_SHIFT);
205 if (neg)
206 Py_SIZE(v) = -(Py_SIZE(v));
207 return (PyObject *)v;
210 /* Checking for overflow in PyLong_AsLong is a PITA since C doesn't define
211 * anything about what happens when a signed integer operation overflows,
212 * and some compilers think they're doing you a favor by being "clever"
213 * then. The bit pattern for the largest postive signed long is
214 * (unsigned long)LONG_MAX, and for the smallest negative signed long
215 * it is abs(LONG_MIN), which we could write -(unsigned long)LONG_MIN.
216 * However, some other compilers warn about applying unary minus to an
217 * unsigned operand. Hence the weird "0-".
219 #define PY_ABS_LONG_MIN (0-(unsigned long)LONG_MIN)
220 #define PY_ABS_SSIZE_T_MIN (0-(size_t)PY_SSIZE_T_MIN)
222 /* Get a C long int from a long int object.
223 Returns -1 and sets an error condition if overflow occurs. */
225 long
226 PyLong_AsLong(PyObject *vv)
228 /* This version by Tim Peters */
229 register PyLongObject *v;
230 unsigned long x, prev;
231 Py_ssize_t i;
232 int sign;
234 if (vv == NULL || !PyLong_Check(vv)) {
235 if (vv != NULL && PyInt_Check(vv))
236 return PyInt_AsLong(vv);
237 PyErr_BadInternalCall();
238 return -1;
240 v = (PyLongObject *)vv;
241 i = v->ob_size;
242 sign = 1;
243 x = 0;
244 if (i < 0) {
245 sign = -1;
246 i = -(i);
248 while (--i >= 0) {
249 prev = x;
250 x = (x << PyLong_SHIFT) + v->ob_digit[i];
251 if ((x >> PyLong_SHIFT) != prev)
252 goto overflow;
254 /* Haven't lost any bits, but casting to long requires extra care
255 * (see comment above).
257 if (x <= (unsigned long)LONG_MAX) {
258 return (long)x * sign;
260 else if (sign < 0 && x == PY_ABS_LONG_MIN) {
261 return LONG_MIN;
263 /* else overflow */
265 overflow:
266 PyErr_SetString(PyExc_OverflowError,
267 "long int too large to convert to int");
268 return -1;
271 /* Get a Py_ssize_t from a long int object.
272 Returns -1 and sets an error condition if overflow occurs. */
274 Py_ssize_t
275 PyLong_AsSsize_t(PyObject *vv) {
276 register PyLongObject *v;
277 size_t x, prev;
278 Py_ssize_t i;
279 int sign;
281 if (vv == NULL || !PyLong_Check(vv)) {
282 PyErr_BadInternalCall();
283 return -1;
285 v = (PyLongObject *)vv;
286 i = v->ob_size;
287 sign = 1;
288 x = 0;
289 if (i < 0) {
290 sign = -1;
291 i = -(i);
293 while (--i >= 0) {
294 prev = x;
295 x = (x << PyLong_SHIFT) + v->ob_digit[i];
296 if ((x >> PyLong_SHIFT) != prev)
297 goto overflow;
299 /* Haven't lost any bits, but casting to a signed type requires
300 * extra care (see comment above).
302 if (x <= (size_t)PY_SSIZE_T_MAX) {
303 return (Py_ssize_t)x * sign;
305 else if (sign < 0 && x == PY_ABS_SSIZE_T_MIN) {
306 return PY_SSIZE_T_MIN;
308 /* else overflow */
310 overflow:
311 PyErr_SetString(PyExc_OverflowError,
312 "long int too large to convert to int");
313 return -1;
316 /* Get a C unsigned long int from a long int object.
317 Returns -1 and sets an error condition if overflow occurs. */
319 unsigned long
320 PyLong_AsUnsignedLong(PyObject *vv)
322 register PyLongObject *v;
323 unsigned long x, prev;
324 Py_ssize_t i;
326 if (vv == NULL || !PyLong_Check(vv)) {
327 if (vv != NULL && PyInt_Check(vv)) {
328 long val = PyInt_AsLong(vv);
329 if (val < 0) {
330 PyErr_SetString(PyExc_OverflowError,
331 "can't convert negative value to unsigned long");
332 return (unsigned long) -1;
334 return val;
336 PyErr_BadInternalCall();
337 return (unsigned long) -1;
339 v = (PyLongObject *)vv;
340 i = Py_SIZE(v);
341 x = 0;
342 if (i < 0) {
343 PyErr_SetString(PyExc_OverflowError,
344 "can't convert negative value to unsigned long");
345 return (unsigned long) -1;
347 while (--i >= 0) {
348 prev = x;
349 x = (x << PyLong_SHIFT) + v->ob_digit[i];
350 if ((x >> PyLong_SHIFT) != prev) {
351 PyErr_SetString(PyExc_OverflowError,
352 "long int too large to convert");
353 return (unsigned long) -1;
356 return x;
359 /* Get a C unsigned long int from a long int object, ignoring the high bits.
360 Returns -1 and sets an error condition if an error occurs. */
362 unsigned long
363 PyLong_AsUnsignedLongMask(PyObject *vv)
365 register PyLongObject *v;
366 unsigned long x;
367 Py_ssize_t i;
368 int sign;
370 if (vv == NULL || !PyLong_Check(vv)) {
371 if (vv != NULL && PyInt_Check(vv))
372 return PyInt_AsUnsignedLongMask(vv);
373 PyErr_BadInternalCall();
374 return (unsigned long) -1;
376 v = (PyLongObject *)vv;
377 i = v->ob_size;
378 sign = 1;
379 x = 0;
380 if (i < 0) {
381 sign = -1;
382 i = -i;
384 while (--i >= 0) {
385 x = (x << PyLong_SHIFT) + v->ob_digit[i];
387 return x * sign;
391 _PyLong_Sign(PyObject *vv)
393 PyLongObject *v = (PyLongObject *)vv;
395 assert(v != NULL);
396 assert(PyLong_Check(v));
398 return Py_SIZE(v) == 0 ? 0 : (Py_SIZE(v) < 0 ? -1 : 1);
401 size_t
402 _PyLong_NumBits(PyObject *vv)
404 PyLongObject *v = (PyLongObject *)vv;
405 size_t result = 0;
406 Py_ssize_t ndigits;
408 assert(v != NULL);
409 assert(PyLong_Check(v));
410 ndigits = ABS(Py_SIZE(v));
411 assert(ndigits == 0 || v->ob_digit[ndigits - 1] != 0);
412 if (ndigits > 0) {
413 digit msd = v->ob_digit[ndigits - 1];
415 result = (ndigits - 1) * PyLong_SHIFT;
416 if (result / PyLong_SHIFT != (size_t)(ndigits - 1))
417 goto Overflow;
418 do {
419 ++result;
420 if (result == 0)
421 goto Overflow;
422 msd >>= 1;
423 } while (msd);
425 return result;
427 Overflow:
428 PyErr_SetString(PyExc_OverflowError, "long has too many bits "
429 "to express in a platform size_t");
430 return (size_t)-1;
433 PyObject *
434 _PyLong_FromByteArray(const unsigned char* bytes, size_t n,
435 int little_endian, int is_signed)
437 const unsigned char* pstartbyte;/* LSB of bytes */
438 int incr; /* direction to move pstartbyte */
439 const unsigned char* pendbyte; /* MSB of bytes */
440 size_t numsignificantbytes; /* number of bytes that matter */
441 Py_ssize_t ndigits; /* number of Python long digits */
442 PyLongObject* v; /* result */
443 Py_ssize_t idigit = 0; /* next free index in v->ob_digit */
445 if (n == 0)
446 return PyLong_FromLong(0L);
448 if (little_endian) {
449 pstartbyte = bytes;
450 pendbyte = bytes + n - 1;
451 incr = 1;
453 else {
454 pstartbyte = bytes + n - 1;
455 pendbyte = bytes;
456 incr = -1;
459 if (is_signed)
460 is_signed = *pendbyte >= 0x80;
462 /* Compute numsignificantbytes. This consists of finding the most
463 significant byte. Leading 0 bytes are insignficant if the number
464 is positive, and leading 0xff bytes if negative. */
466 size_t i;
467 const unsigned char* p = pendbyte;
468 const int pincr = -incr; /* search MSB to LSB */
469 const unsigned char insignficant = is_signed ? 0xff : 0x00;
471 for (i = 0; i < n; ++i, p += pincr) {
472 if (*p != insignficant)
473 break;
475 numsignificantbytes = n - i;
476 /* 2's-comp is a bit tricky here, e.g. 0xff00 == -0x0100, so
477 actually has 2 significant bytes. OTOH, 0xff0001 ==
478 -0x00ffff, so we wouldn't *need* to bump it there; but we
479 do for 0xffff = -0x0001. To be safe without bothering to
480 check every case, bump it regardless. */
481 if (is_signed && numsignificantbytes < n)
482 ++numsignificantbytes;
485 /* How many Python long digits do we need? We have
486 8*numsignificantbytes bits, and each Python long digit has
487 PyLong_SHIFT bits, so it's the ceiling of the quotient. */
488 /* catch overflow before it happens */
489 if (numsignificantbytes > (PY_SSIZE_T_MAX - PyLong_SHIFT) / 8) {
490 PyErr_SetString(PyExc_OverflowError,
491 "byte array too long to convert to int");
492 return NULL;
494 ndigits = (numsignificantbytes * 8 + PyLong_SHIFT - 1) / PyLong_SHIFT;
495 v = _PyLong_New(ndigits);
496 if (v == NULL)
497 return NULL;
499 /* Copy the bits over. The tricky parts are computing 2's-comp on
500 the fly for signed numbers, and dealing with the mismatch between
501 8-bit bytes and (probably) 15-bit Python digits.*/
503 size_t i;
504 twodigits carry = 1; /* for 2's-comp calculation */
505 twodigits accum = 0; /* sliding register */
506 unsigned int accumbits = 0; /* number of bits in accum */
507 const unsigned char* p = pstartbyte;
509 for (i = 0; i < numsignificantbytes; ++i, p += incr) {
510 twodigits thisbyte = *p;
511 /* Compute correction for 2's comp, if needed. */
512 if (is_signed) {
513 thisbyte = (0xff ^ thisbyte) + carry;
514 carry = thisbyte >> 8;
515 thisbyte &= 0xff;
517 /* Because we're going LSB to MSB, thisbyte is
518 more significant than what's already in accum,
519 so needs to be prepended to accum. */
520 accum |= (twodigits)thisbyte << accumbits;
521 accumbits += 8;
522 if (accumbits >= PyLong_SHIFT) {
523 /* There's enough to fill a Python digit. */
524 assert(idigit < ndigits);
525 v->ob_digit[idigit] = (digit)(accum &
526 PyLong_MASK);
527 ++idigit;
528 accum >>= PyLong_SHIFT;
529 accumbits -= PyLong_SHIFT;
530 assert(accumbits < PyLong_SHIFT);
533 assert(accumbits < PyLong_SHIFT);
534 if (accumbits) {
535 assert(idigit < ndigits);
536 v->ob_digit[idigit] = (digit)accum;
537 ++idigit;
541 Py_SIZE(v) = is_signed ? -idigit : idigit;
542 return (PyObject *)long_normalize(v);
546 _PyLong_AsByteArray(PyLongObject* v,
547 unsigned char* bytes, size_t n,
548 int little_endian, int is_signed)
550 Py_ssize_t i; /* index into v->ob_digit */
551 Py_ssize_t ndigits; /* |v->ob_size| */
552 twodigits accum; /* sliding register */
553 unsigned int accumbits; /* # bits in accum */
554 int do_twos_comp; /* store 2's-comp? is_signed and v < 0 */
555 digit carry; /* for computing 2's-comp */
556 size_t j; /* # bytes filled */
557 unsigned char* p; /* pointer to next byte in bytes */
558 int pincr; /* direction to move p */
560 assert(v != NULL && PyLong_Check(v));
562 if (Py_SIZE(v) < 0) {
563 ndigits = -(Py_SIZE(v));
564 if (!is_signed) {
565 PyErr_SetString(PyExc_OverflowError,
566 "can't convert negative long to unsigned");
567 return -1;
569 do_twos_comp = 1;
571 else {
572 ndigits = Py_SIZE(v);
573 do_twos_comp = 0;
576 if (little_endian) {
577 p = bytes;
578 pincr = 1;
580 else {
581 p = bytes + n - 1;
582 pincr = -1;
585 /* Copy over all the Python digits.
586 It's crucial that every Python digit except for the MSD contribute
587 exactly PyLong_SHIFT bits to the total, so first assert that the long is
588 normalized. */
589 assert(ndigits == 0 || v->ob_digit[ndigits - 1] != 0);
590 j = 0;
591 accum = 0;
592 accumbits = 0;
593 carry = do_twos_comp ? 1 : 0;
594 for (i = 0; i < ndigits; ++i) {
595 digit thisdigit = v->ob_digit[i];
596 if (do_twos_comp) {
597 thisdigit = (thisdigit ^ PyLong_MASK) + carry;
598 carry = thisdigit >> PyLong_SHIFT;
599 thisdigit &= PyLong_MASK;
601 /* Because we're going LSB to MSB, thisdigit is more
602 significant than what's already in accum, so needs to be
603 prepended to accum. */
604 accum |= (twodigits)thisdigit << accumbits;
606 /* The most-significant digit may be (probably is) at least
607 partly empty. */
608 if (i == ndigits - 1) {
609 /* Count # of sign bits -- they needn't be stored,
610 * although for signed conversion we need later to
611 * make sure at least one sign bit gets stored. */
612 digit s = do_twos_comp ? thisdigit ^ PyLong_MASK :
613 thisdigit;
614 while (s != 0) {
615 s >>= 1;
616 accumbits++;
619 else
620 accumbits += PyLong_SHIFT;
622 /* Store as many bytes as possible. */
623 while (accumbits >= 8) {
624 if (j >= n)
625 goto Overflow;
626 ++j;
627 *p = (unsigned char)(accum & 0xff);
628 p += pincr;
629 accumbits -= 8;
630 accum >>= 8;
634 /* Store the straggler (if any). */
635 assert(accumbits < 8);
636 assert(carry == 0); /* else do_twos_comp and *every* digit was 0 */
637 if (accumbits > 0) {
638 if (j >= n)
639 goto Overflow;
640 ++j;
641 if (do_twos_comp) {
642 /* Fill leading bits of the byte with sign bits
643 (appropriately pretending that the long had an
644 infinite supply of sign bits). */
645 accum |= (~(twodigits)0) << accumbits;
647 *p = (unsigned char)(accum & 0xff);
648 p += pincr;
650 else if (j == n && n > 0 && is_signed) {
651 /* The main loop filled the byte array exactly, so the code
652 just above didn't get to ensure there's a sign bit, and the
653 loop below wouldn't add one either. Make sure a sign bit
654 exists. */
655 unsigned char msb = *(p - pincr);
656 int sign_bit_set = msb >= 0x80;
657 assert(accumbits == 0);
658 if (sign_bit_set == do_twos_comp)
659 return 0;
660 else
661 goto Overflow;
664 /* Fill remaining bytes with copies of the sign bit. */
666 unsigned char signbyte = do_twos_comp ? 0xffU : 0U;
667 for ( ; j < n; ++j, p += pincr)
668 *p = signbyte;
671 return 0;
673 Overflow:
674 PyErr_SetString(PyExc_OverflowError, "long too big to convert");
675 return -1;
679 double
680 _PyLong_AsScaledDouble(PyObject *vv, int *exponent)
682 /* NBITS_WANTED should be > the number of bits in a double's precision,
683 but small enough so that 2**NBITS_WANTED is within the normal double
684 range. nbitsneeded is set to 1 less than that because the most-significant
685 Python digit contains at least 1 significant bit, but we don't want to
686 bother counting them (catering to the worst case cheaply).
688 57 is one more than VAX-D double precision; I (Tim) don't know of a double
689 format with more precision than that; it's 1 larger so that we add in at
690 least one round bit to stand in for the ignored least-significant bits.
692 #define NBITS_WANTED 57
693 PyLongObject *v;
694 double x;
695 const double multiplier = (double)(1L << PyLong_SHIFT);
696 Py_ssize_t i;
697 int sign;
698 int nbitsneeded;
700 if (vv == NULL || !PyLong_Check(vv)) {
701 PyErr_BadInternalCall();
702 return -1;
704 v = (PyLongObject *)vv;
705 i = Py_SIZE(v);
706 sign = 1;
707 if (i < 0) {
708 sign = -1;
709 i = -(i);
711 else if (i == 0) {
712 *exponent = 0;
713 return 0.0;
715 --i;
716 x = (double)v->ob_digit[i];
717 nbitsneeded = NBITS_WANTED - 1;
718 /* Invariant: i Python digits remain unaccounted for. */
719 while (i > 0 && nbitsneeded > 0) {
720 --i;
721 x = x * multiplier + (double)v->ob_digit[i];
722 nbitsneeded -= PyLong_SHIFT;
724 /* There are i digits we didn't shift in. Pretending they're all
725 zeroes, the true value is x * 2**(i*PyLong_SHIFT). */
726 *exponent = i;
727 assert(x > 0.0);
728 return x * sign;
729 #undef NBITS_WANTED
732 /* Get a C double from a long int object. */
734 double
735 PyLong_AsDouble(PyObject *vv)
737 int e = -1;
738 double x;
740 if (vv == NULL || !PyLong_Check(vv)) {
741 PyErr_BadInternalCall();
742 return -1;
744 x = _PyLong_AsScaledDouble(vv, &e);
745 if (x == -1.0 && PyErr_Occurred())
746 return -1.0;
747 /* 'e' initialized to -1 to silence gcc-4.0.x, but it should be
748 set correctly after a successful _PyLong_AsScaledDouble() call */
749 assert(e >= 0);
750 if (e > INT_MAX / PyLong_SHIFT)
751 goto overflow;
752 errno = 0;
753 x = ldexp(x, e * PyLong_SHIFT);
754 if (Py_OVERFLOWED(x))
755 goto overflow;
756 return x;
758 overflow:
759 PyErr_SetString(PyExc_OverflowError,
760 "long int too large to convert to float");
761 return -1.0;
764 /* Create a new long (or int) object from a C pointer */
766 PyObject *
767 PyLong_FromVoidPtr(void *p)
769 #if SIZEOF_VOID_P <= SIZEOF_LONG
770 if ((long)p < 0)
771 return PyLong_FromUnsignedLong((unsigned long)p);
772 return PyInt_FromLong((long)p);
773 #else
775 #ifndef HAVE_LONG_LONG
776 # error "PyLong_FromVoidPtr: sizeof(void*) > sizeof(long), but no long long"
777 #endif
778 #if SIZEOF_LONG_LONG < SIZEOF_VOID_P
779 # error "PyLong_FromVoidPtr: sizeof(PY_LONG_LONG) < sizeof(void*)"
780 #endif
781 /* optimize null pointers */
782 if (p == NULL)
783 return PyInt_FromLong(0);
784 return PyLong_FromUnsignedLongLong((unsigned PY_LONG_LONG)p);
786 #endif /* SIZEOF_VOID_P <= SIZEOF_LONG */
789 /* Get a C pointer from a long object (or an int object in some cases) */
791 void *
792 PyLong_AsVoidPtr(PyObject *vv)
794 /* This function will allow int or long objects. If vv is neither,
795 then the PyLong_AsLong*() functions will raise the exception:
796 PyExc_SystemError, "bad argument to internal function"
798 #if SIZEOF_VOID_P <= SIZEOF_LONG
799 long x;
801 if (PyInt_Check(vv))
802 x = PyInt_AS_LONG(vv);
803 else if (PyLong_Check(vv) && _PyLong_Sign(vv) < 0)
804 x = PyLong_AsLong(vv);
805 else
806 x = PyLong_AsUnsignedLong(vv);
807 #else
809 #ifndef HAVE_LONG_LONG
810 # error "PyLong_AsVoidPtr: sizeof(void*) > sizeof(long), but no long long"
811 #endif
812 #if SIZEOF_LONG_LONG < SIZEOF_VOID_P
813 # error "PyLong_AsVoidPtr: sizeof(PY_LONG_LONG) < sizeof(void*)"
814 #endif
815 PY_LONG_LONG x;
817 if (PyInt_Check(vv))
818 x = PyInt_AS_LONG(vv);
819 else if (PyLong_Check(vv) && _PyLong_Sign(vv) < 0)
820 x = PyLong_AsLongLong(vv);
821 else
822 x = PyLong_AsUnsignedLongLong(vv);
824 #endif /* SIZEOF_VOID_P <= SIZEOF_LONG */
826 if (x == -1 && PyErr_Occurred())
827 return NULL;
828 return (void *)x;
831 #ifdef HAVE_LONG_LONG
833 /* Initial PY_LONG_LONG support by Chris Herborth (chrish@qnx.com), later
834 * rewritten to use the newer PyLong_{As,From}ByteArray API.
837 #define IS_LITTLE_ENDIAN (int)*(unsigned char*)&one
839 /* Create a new long int object from a C PY_LONG_LONG int. */
841 PyObject *
842 PyLong_FromLongLong(PY_LONG_LONG ival)
844 PyLongObject *v;
845 unsigned PY_LONG_LONG abs_ival;
846 unsigned PY_LONG_LONG t; /* unsigned so >> doesn't propagate sign bit */
847 int ndigits = 0;
848 int negative = 0;
850 if (ival < 0) {
851 /* avoid signed overflow on negation; see comments
852 in PyLong_FromLong above. */
853 abs_ival = (unsigned PY_LONG_LONG)(-1-ival) + 1;
854 negative = 1;
856 else {
857 abs_ival = (unsigned PY_LONG_LONG)ival;
860 /* Count the number of Python digits.
861 We used to pick 5 ("big enough for anything"), but that's a
862 waste of time and space given that 5*15 = 75 bits are rarely
863 needed. */
864 t = abs_ival;
865 while (t) {
866 ++ndigits;
867 t >>= PyLong_SHIFT;
869 v = _PyLong_New(ndigits);
870 if (v != NULL) {
871 digit *p = v->ob_digit;
872 Py_SIZE(v) = negative ? -ndigits : ndigits;
873 t = abs_ival;
874 while (t) {
875 *p++ = (digit)(t & PyLong_MASK);
876 t >>= PyLong_SHIFT;
879 return (PyObject *)v;
882 /* Create a new long int object from a C unsigned PY_LONG_LONG int. */
884 PyObject *
885 PyLong_FromUnsignedLongLong(unsigned PY_LONG_LONG ival)
887 PyLongObject *v;
888 unsigned PY_LONG_LONG t;
889 int ndigits = 0;
891 /* Count the number of Python digits. */
892 t = (unsigned PY_LONG_LONG)ival;
893 while (t) {
894 ++ndigits;
895 t >>= PyLong_SHIFT;
897 v = _PyLong_New(ndigits);
898 if (v != NULL) {
899 digit *p = v->ob_digit;
900 Py_SIZE(v) = ndigits;
901 while (ival) {
902 *p++ = (digit)(ival & PyLong_MASK);
903 ival >>= PyLong_SHIFT;
906 return (PyObject *)v;
909 /* Create a new long int object from a C Py_ssize_t. */
911 PyObject *
912 PyLong_FromSsize_t(Py_ssize_t ival)
914 Py_ssize_t bytes = ival;
915 int one = 1;
916 return _PyLong_FromByteArray(
917 (unsigned char *)&bytes,
918 SIZEOF_SIZE_T, IS_LITTLE_ENDIAN, 1);
921 /* Create a new long int object from a C size_t. */
923 PyObject *
924 PyLong_FromSize_t(size_t ival)
926 size_t bytes = ival;
927 int one = 1;
928 return _PyLong_FromByteArray(
929 (unsigned char *)&bytes,
930 SIZEOF_SIZE_T, IS_LITTLE_ENDIAN, 0);
933 /* Get a C PY_LONG_LONG int from a long int object.
934 Return -1 and set an error if overflow occurs. */
936 PY_LONG_LONG
937 PyLong_AsLongLong(PyObject *vv)
939 PY_LONG_LONG bytes;
940 int one = 1;
941 int res;
943 if (vv == NULL) {
944 PyErr_BadInternalCall();
945 return -1;
947 if (!PyLong_Check(vv)) {
948 PyNumberMethods *nb;
949 PyObject *io;
950 if (PyInt_Check(vv))
951 return (PY_LONG_LONG)PyInt_AsLong(vv);
952 if ((nb = vv->ob_type->tp_as_number) == NULL ||
953 nb->nb_int == NULL) {
954 PyErr_SetString(PyExc_TypeError, "an integer is required");
955 return -1;
957 io = (*nb->nb_int) (vv);
958 if (io == NULL)
959 return -1;
960 if (PyInt_Check(io)) {
961 bytes = PyInt_AsLong(io);
962 Py_DECREF(io);
963 return bytes;
965 if (PyLong_Check(io)) {
966 bytes = PyLong_AsLongLong(io);
967 Py_DECREF(io);
968 return bytes;
970 Py_DECREF(io);
971 PyErr_SetString(PyExc_TypeError, "integer conversion failed");
972 return -1;
975 res = _PyLong_AsByteArray(
976 (PyLongObject *)vv, (unsigned char *)&bytes,
977 SIZEOF_LONG_LONG, IS_LITTLE_ENDIAN, 1);
979 /* Plan 9 can't handle PY_LONG_LONG in ? : expressions */
980 if (res < 0)
981 return (PY_LONG_LONG)-1;
982 else
983 return bytes;
986 /* Get a C unsigned PY_LONG_LONG int from a long int object.
987 Return -1 and set an error if overflow occurs. */
989 unsigned PY_LONG_LONG
990 PyLong_AsUnsignedLongLong(PyObject *vv)
992 unsigned PY_LONG_LONG bytes;
993 int one = 1;
994 int res;
996 if (vv == NULL || !PyLong_Check(vv)) {
997 PyErr_BadInternalCall();
998 return (unsigned PY_LONG_LONG)-1;
1001 res = _PyLong_AsByteArray(
1002 (PyLongObject *)vv, (unsigned char *)&bytes,
1003 SIZEOF_LONG_LONG, IS_LITTLE_ENDIAN, 0);
1005 /* Plan 9 can't handle PY_LONG_LONG in ? : expressions */
1006 if (res < 0)
1007 return (unsigned PY_LONG_LONG)res;
1008 else
1009 return bytes;
1012 /* Get a C unsigned long int from a long int object, ignoring the high bits.
1013 Returns -1 and sets an error condition if an error occurs. */
1015 unsigned PY_LONG_LONG
1016 PyLong_AsUnsignedLongLongMask(PyObject *vv)
1018 register PyLongObject *v;
1019 unsigned PY_LONG_LONG x;
1020 Py_ssize_t i;
1021 int sign;
1023 if (vv == NULL || !PyLong_Check(vv)) {
1024 PyErr_BadInternalCall();
1025 return (unsigned long) -1;
1027 v = (PyLongObject *)vv;
1028 i = v->ob_size;
1029 sign = 1;
1030 x = 0;
1031 if (i < 0) {
1032 sign = -1;
1033 i = -i;
1035 while (--i >= 0) {
1036 x = (x << PyLong_SHIFT) + v->ob_digit[i];
1038 return x * sign;
1040 #undef IS_LITTLE_ENDIAN
1042 #endif /* HAVE_LONG_LONG */
1045 static int
1046 convert_binop(PyObject *v, PyObject *w, PyLongObject **a, PyLongObject **b) {
1047 if (PyLong_Check(v)) {
1048 *a = (PyLongObject *) v;
1049 Py_INCREF(v);
1051 else if (PyInt_Check(v)) {
1052 *a = (PyLongObject *) PyLong_FromLong(PyInt_AS_LONG(v));
1054 else {
1055 return 0;
1057 if (PyLong_Check(w)) {
1058 *b = (PyLongObject *) w;
1059 Py_INCREF(w);
1061 else if (PyInt_Check(w)) {
1062 *b = (PyLongObject *) PyLong_FromLong(PyInt_AS_LONG(w));
1064 else {
1065 Py_DECREF(*a);
1066 return 0;
1068 return 1;
1071 #define CONVERT_BINOP(v, w, a, b) \
1072 if (!convert_binop(v, w, a, b)) { \
1073 Py_INCREF(Py_NotImplemented); \
1074 return Py_NotImplemented; \
1077 /* bits_in_digit(d) returns the unique integer k such that 2**(k-1) <= d <
1078 2**k if d is nonzero, else 0. */
1080 static const unsigned char BitLengthTable[32] = {
1081 0, 1, 2, 2, 3, 3, 3, 3, 4, 4, 4, 4, 4, 4, 4, 4,
1082 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5
1085 static int
1086 bits_in_digit(digit d)
1088 int d_bits = 0;
1089 while (d >= 32) {
1090 d_bits += 6;
1091 d >>= 6;
1093 d_bits += (int)BitLengthTable[d];
1094 return d_bits;
1097 /* x[0:m] and y[0:n] are digit vectors, LSD first, m >= n required. x[0:n]
1098 * is modified in place, by adding y to it. Carries are propagated as far as
1099 * x[m-1], and the remaining carry (0 or 1) is returned.
1101 static digit
1102 v_iadd(digit *x, Py_ssize_t m, digit *y, Py_ssize_t n)
1104 Py_ssize_t i;
1105 digit carry = 0;
1107 assert(m >= n);
1108 for (i = 0; i < n; ++i) {
1109 carry += x[i] + y[i];
1110 x[i] = carry & PyLong_MASK;
1111 carry >>= PyLong_SHIFT;
1112 assert((carry & 1) == carry);
1114 for (; carry && i < m; ++i) {
1115 carry += x[i];
1116 x[i] = carry & PyLong_MASK;
1117 carry >>= PyLong_SHIFT;
1118 assert((carry & 1) == carry);
1120 return carry;
1123 /* x[0:m] and y[0:n] are digit vectors, LSD first, m >= n required. x[0:n]
1124 * is modified in place, by subtracting y from it. Borrows are propagated as
1125 * far as x[m-1], and the remaining borrow (0 or 1) is returned.
1127 static digit
1128 v_isub(digit *x, Py_ssize_t m, digit *y, Py_ssize_t n)
1130 Py_ssize_t i;
1131 digit borrow = 0;
1133 assert(m >= n);
1134 for (i = 0; i < n; ++i) {
1135 borrow = x[i] - y[i] - borrow;
1136 x[i] = borrow & PyLong_MASK;
1137 borrow >>= PyLong_SHIFT;
1138 borrow &= 1; /* keep only 1 sign bit */
1140 for (; borrow && i < m; ++i) {
1141 borrow = x[i] - borrow;
1142 x[i] = borrow & PyLong_MASK;
1143 borrow >>= PyLong_SHIFT;
1144 borrow &= 1;
1146 return borrow;
1149 /* Shift digit vector a[0:m] d bits left, with 0 <= d < PyLong_SHIFT. Put
1150 * result in z[0:m], and return the d bits shifted out of the top.
1152 static digit
1153 v_lshift(digit *z, digit *a, Py_ssize_t m, int d)
1155 Py_ssize_t i;
1156 digit carry = 0;
1158 assert(0 <= d && d < PyLong_SHIFT);
1159 for (i=0; i < m; i++) {
1160 twodigits acc = (twodigits)a[i] << d | carry;
1161 z[i] = (digit)acc & PyLong_MASK;
1162 carry = (digit)(acc >> PyLong_SHIFT);
1164 return carry;
1167 /* Shift digit vector a[0:m] d bits right, with 0 <= d < PyLong_SHIFT. Put
1168 * result in z[0:m], and return the d bits shifted out of the bottom.
1170 static digit
1171 v_rshift(digit *z, digit *a, Py_ssize_t m, int d)
1173 Py_ssize_t i;
1174 digit carry = 0;
1175 digit mask = ((digit)1 << d) - 1U;
1177 assert(0 <= d && d < PyLong_SHIFT);
1178 for (i=m; i-- > 0;) {
1179 twodigits acc = (twodigits)carry << PyLong_SHIFT | a[i];
1180 carry = (digit)acc & mask;
1181 z[i] = (digit)(acc >> d);
1183 return carry;
1186 /* Divide long pin, w/ size digits, by non-zero digit n, storing quotient
1187 in pout, and returning the remainder. pin and pout point at the LSD.
1188 It's OK for pin == pout on entry, which saves oodles of mallocs/frees in
1189 _PyLong_Format, but that should be done with great care since longs are
1190 immutable. */
1192 static digit
1193 inplace_divrem1(digit *pout, digit *pin, Py_ssize_t size, digit n)
1195 twodigits rem = 0;
1197 assert(n > 0 && n <= PyLong_MASK);
1198 pin += size;
1199 pout += size;
1200 while (--size >= 0) {
1201 digit hi;
1202 rem = (rem << PyLong_SHIFT) + *--pin;
1203 *--pout = hi = (digit)(rem / n);
1204 rem -= (twodigits)hi * n;
1206 return (digit)rem;
1209 /* Divide a long integer by a digit, returning both the quotient
1210 (as function result) and the remainder (through *prem).
1211 The sign of a is ignored; n should not be zero. */
1213 static PyLongObject *
1214 divrem1(PyLongObject *a, digit n, digit *prem)
1216 const Py_ssize_t size = ABS(Py_SIZE(a));
1217 PyLongObject *z;
1219 assert(n > 0 && n <= PyLong_MASK);
1220 z = _PyLong_New(size);
1221 if (z == NULL)
1222 return NULL;
1223 *prem = inplace_divrem1(z->ob_digit, a->ob_digit, size, n);
1224 return long_normalize(z);
1227 /* Convert the long to a string object with given base,
1228 appending a base prefix of 0[box] if base is 2, 8 or 16.
1229 Add a trailing "L" if addL is non-zero.
1230 If newstyle is zero, then use the pre-2.6 behavior of octal having
1231 a leading "0", instead of the prefix "0o" */
1232 PyAPI_FUNC(PyObject *)
1233 _PyLong_Format(PyObject *aa, int base, int addL, int newstyle)
1235 register PyLongObject *a = (PyLongObject *)aa;
1236 PyStringObject *str;
1237 Py_ssize_t i, j, sz;
1238 Py_ssize_t size_a;
1239 char *p;
1240 int bits;
1241 char sign = '\0';
1243 if (a == NULL || !PyLong_Check(a)) {
1244 PyErr_BadInternalCall();
1245 return NULL;
1247 assert(base >= 2 && base <= 36);
1248 size_a = ABS(Py_SIZE(a));
1250 /* Compute a rough upper bound for the length of the string */
1251 i = base;
1252 bits = 0;
1253 while (i > 1) {
1254 ++bits;
1255 i >>= 1;
1257 i = 5 + (addL ? 1 : 0);
1258 j = size_a*PyLong_SHIFT + bits-1;
1259 sz = i + j / bits;
1260 if (j / PyLong_SHIFT < size_a || sz < i) {
1261 PyErr_SetString(PyExc_OverflowError,
1262 "long is too large to format");
1263 return NULL;
1265 str = (PyStringObject *) PyString_FromStringAndSize((char *)0, sz);
1266 if (str == NULL)
1267 return NULL;
1268 p = PyString_AS_STRING(str) + sz;
1269 *p = '\0';
1270 if (addL)
1271 *--p = 'L';
1272 if (a->ob_size < 0)
1273 sign = '-';
1275 if (a->ob_size == 0) {
1276 *--p = '0';
1278 else if ((base & (base - 1)) == 0) {
1279 /* JRH: special case for power-of-2 bases */
1280 twodigits accum = 0;
1281 int accumbits = 0; /* # of bits in accum */
1282 int basebits = 1; /* # of bits in base-1 */
1283 i = base;
1284 while ((i >>= 1) > 1)
1285 ++basebits;
1287 for (i = 0; i < size_a; ++i) {
1288 accum |= (twodigits)a->ob_digit[i] << accumbits;
1289 accumbits += PyLong_SHIFT;
1290 assert(accumbits >= basebits);
1291 do {
1292 char cdigit = (char)(accum & (base - 1));
1293 cdigit += (cdigit < 10) ? '0' : 'a'-10;
1294 assert(p > PyString_AS_STRING(str));
1295 *--p = cdigit;
1296 accumbits -= basebits;
1297 accum >>= basebits;
1298 } while (i < size_a-1 ? accumbits >= basebits :
1299 accum > 0);
1302 else {
1303 /* Not 0, and base not a power of 2. Divide repeatedly by
1304 base, but for speed use the highest power of base that
1305 fits in a digit. */
1306 Py_ssize_t size = size_a;
1307 digit *pin = a->ob_digit;
1308 PyLongObject *scratch;
1309 /* powbasw <- largest power of base that fits in a digit. */
1310 digit powbase = base; /* powbase == base ** power */
1311 int power = 1;
1312 for (;;) {
1313 twodigits newpow = powbase * (twodigits)base;
1314 if (newpow >> PyLong_SHIFT) /* doesn't fit in a digit */
1315 break;
1316 powbase = (digit)newpow;
1317 ++power;
1320 /* Get a scratch area for repeated division. */
1321 scratch = _PyLong_New(size);
1322 if (scratch == NULL) {
1323 Py_DECREF(str);
1324 return NULL;
1327 /* Repeatedly divide by powbase. */
1328 do {
1329 int ntostore = power;
1330 digit rem = inplace_divrem1(scratch->ob_digit,
1331 pin, size, powbase);
1332 pin = scratch->ob_digit; /* no need to use a again */
1333 if (pin[size - 1] == 0)
1334 --size;
1335 SIGCHECK({
1336 Py_DECREF(scratch);
1337 Py_DECREF(str);
1338 return NULL;
1341 /* Break rem into digits. */
1342 assert(ntostore > 0);
1343 do {
1344 digit nextrem = (digit)(rem / base);
1345 char c = (char)(rem - nextrem * base);
1346 assert(p > PyString_AS_STRING(str));
1347 c += (c < 10) ? '0' : 'a'-10;
1348 *--p = c;
1349 rem = nextrem;
1350 --ntostore;
1351 /* Termination is a bit delicate: must not
1352 store leading zeroes, so must get out if
1353 remaining quotient and rem are both 0. */
1354 } while (ntostore && (size || rem));
1355 } while (size != 0);
1356 Py_DECREF(scratch);
1359 if (base == 2) {
1360 *--p = 'b';
1361 *--p = '0';
1363 else if (base == 8) {
1364 if (newstyle) {
1365 *--p = 'o';
1366 *--p = '0';
1368 else
1369 if (size_a != 0)
1370 *--p = '0';
1372 else if (base == 16) {
1373 *--p = 'x';
1374 *--p = '0';
1376 else if (base != 10) {
1377 *--p = '#';
1378 *--p = '0' + base%10;
1379 if (base > 10)
1380 *--p = '0' + base/10;
1382 if (sign)
1383 *--p = sign;
1384 if (p != PyString_AS_STRING(str)) {
1385 char *q = PyString_AS_STRING(str);
1386 assert(p > q);
1387 do {
1388 } while ((*q++ = *p++) != '\0');
1389 q--;
1390 _PyString_Resize((PyObject **)&str,
1391 (Py_ssize_t) (q - PyString_AS_STRING(str)));
1393 return (PyObject *)str;
1396 /* Table of digit values for 8-bit string -> integer conversion.
1397 * '0' maps to 0, ..., '9' maps to 9.
1398 * 'a' and 'A' map to 10, ..., 'z' and 'Z' map to 35.
1399 * All other indices map to 37.
1400 * Note that when converting a base B string, a char c is a legitimate
1401 * base B digit iff _PyLong_DigitValue[Py_CHARMASK(c)] < B.
1403 int _PyLong_DigitValue[256] = {
1404 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37,
1405 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37,
1406 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37,
1407 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 37, 37, 37, 37, 37, 37,
1408 37, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24,
1409 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 37, 37, 37, 37, 37,
1410 37, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24,
1411 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 37, 37, 37, 37, 37,
1412 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37,
1413 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37,
1414 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37,
1415 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37,
1416 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37,
1417 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37,
1418 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37,
1419 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37,
1422 /* *str points to the first digit in a string of base `base` digits. base
1423 * is a power of 2 (2, 4, 8, 16, or 32). *str is set to point to the first
1424 * non-digit (which may be *str!). A normalized long is returned.
1425 * The point to this routine is that it takes time linear in the number of
1426 * string characters.
1428 static PyLongObject *
1429 long_from_binary_base(char **str, int base)
1431 char *p = *str;
1432 char *start = p;
1433 int bits_per_char;
1434 Py_ssize_t n;
1435 PyLongObject *z;
1436 twodigits accum;
1437 int bits_in_accum;
1438 digit *pdigit;
1440 assert(base >= 2 && base <= 32 && (base & (base - 1)) == 0);
1441 n = base;
1442 for (bits_per_char = -1; n; ++bits_per_char)
1443 n >>= 1;
1444 /* n <- total # of bits needed, while setting p to end-of-string */
1445 n = 0;
1446 while (_PyLong_DigitValue[Py_CHARMASK(*p)] < base)
1447 ++p;
1448 *str = p;
1449 /* n <- # of Python digits needed, = ceiling(n/PyLong_SHIFT). */
1450 n = (p - start) * bits_per_char + PyLong_SHIFT - 1;
1451 if (n / bits_per_char < p - start) {
1452 PyErr_SetString(PyExc_ValueError,
1453 "long string too large to convert");
1454 return NULL;
1456 n = n / PyLong_SHIFT;
1457 z = _PyLong_New(n);
1458 if (z == NULL)
1459 return NULL;
1460 /* Read string from right, and fill in long from left; i.e.,
1461 * from least to most significant in both.
1463 accum = 0;
1464 bits_in_accum = 0;
1465 pdigit = z->ob_digit;
1466 while (--p >= start) {
1467 int k = _PyLong_DigitValue[Py_CHARMASK(*p)];
1468 assert(k >= 0 && k < base);
1469 accum |= (twodigits)k << bits_in_accum;
1470 bits_in_accum += bits_per_char;
1471 if (bits_in_accum >= PyLong_SHIFT) {
1472 *pdigit++ = (digit)(accum & PyLong_MASK);
1473 assert(pdigit - z->ob_digit <= n);
1474 accum >>= PyLong_SHIFT;
1475 bits_in_accum -= PyLong_SHIFT;
1476 assert(bits_in_accum < PyLong_SHIFT);
1479 if (bits_in_accum) {
1480 assert(bits_in_accum <= PyLong_SHIFT);
1481 *pdigit++ = (digit)accum;
1482 assert(pdigit - z->ob_digit <= n);
1484 while (pdigit - z->ob_digit < n)
1485 *pdigit++ = 0;
1486 return long_normalize(z);
1489 PyObject *
1490 PyLong_FromString(char *str, char **pend, int base)
1492 int sign = 1;
1493 char *start, *orig_str = str;
1494 PyLongObject *z;
1495 PyObject *strobj, *strrepr;
1496 Py_ssize_t slen;
1498 if ((base != 0 && base < 2) || base > 36) {
1499 PyErr_SetString(PyExc_ValueError,
1500 "long() arg 2 must be >= 2 and <= 36");
1501 return NULL;
1503 while (*str != '\0' && isspace(Py_CHARMASK(*str)))
1504 str++;
1505 if (*str == '+')
1506 ++str;
1507 else if (*str == '-') {
1508 ++str;
1509 sign = -1;
1511 while (*str != '\0' && isspace(Py_CHARMASK(*str)))
1512 str++;
1513 if (base == 0) {
1514 /* No base given. Deduce the base from the contents
1515 of the string */
1516 if (str[0] != '0')
1517 base = 10;
1518 else if (str[1] == 'x' || str[1] == 'X')
1519 base = 16;
1520 else if (str[1] == 'o' || str[1] == 'O')
1521 base = 8;
1522 else if (str[1] == 'b' || str[1] == 'B')
1523 base = 2;
1524 else
1525 /* "old" (C-style) octal literal, still valid in
1526 2.x, although illegal in 3.x */
1527 base = 8;
1529 /* Whether or not we were deducing the base, skip leading chars
1530 as needed */
1531 if (str[0] == '0' &&
1532 ((base == 16 && (str[1] == 'x' || str[1] == 'X')) ||
1533 (base == 8 && (str[1] == 'o' || str[1] == 'O')) ||
1534 (base == 2 && (str[1] == 'b' || str[1] == 'B'))))
1535 str += 2;
1537 start = str;
1538 if ((base & (base - 1)) == 0)
1539 z = long_from_binary_base(&str, base);
1540 else {
1541 /***
1542 Binary bases can be converted in time linear in the number of digits, because
1543 Python's representation base is binary. Other bases (including decimal!) use
1544 the simple quadratic-time algorithm below, complicated by some speed tricks.
1546 First some math: the largest integer that can be expressed in N base-B digits
1547 is B**N-1. Consequently, if we have an N-digit input in base B, the worst-
1548 case number of Python digits needed to hold it is the smallest integer n s.t.
1550 PyLong_BASE**n-1 >= B**N-1 [or, adding 1 to both sides]
1551 PyLong_BASE**n >= B**N [taking logs to base PyLong_BASE]
1552 n >= log(B**N)/log(PyLong_BASE) = N * log(B)/log(PyLong_BASE)
1554 The static array log_base_PyLong_BASE[base] == log(base)/log(PyLong_BASE) so we can compute
1555 this quickly. A Python long with that much space is reserved near the start,
1556 and the result is computed into it.
1558 The input string is actually treated as being in base base**i (i.e., i digits
1559 are processed at a time), where two more static arrays hold:
1561 convwidth_base[base] = the largest integer i such that base**i <= PyLong_BASE
1562 convmultmax_base[base] = base ** convwidth_base[base]
1564 The first of these is the largest i such that i consecutive input digits
1565 must fit in a single Python digit. The second is effectively the input
1566 base we're really using.
1568 Viewing the input as a sequence <c0, c1, ..., c_n-1> of digits in base
1569 convmultmax_base[base], the result is "simply"
1571 (((c0*B + c1)*B + c2)*B + c3)*B + ... ))) + c_n-1
1573 where B = convmultmax_base[base].
1575 Error analysis: as above, the number of Python digits `n` needed is worst-
1576 case
1578 n >= N * log(B)/log(PyLong_BASE)
1580 where `N` is the number of input digits in base `B`. This is computed via
1582 size_z = (Py_ssize_t)((scan - str) * log_base_PyLong_BASE[base]) + 1;
1584 below. Two numeric concerns are how much space this can waste, and whether
1585 the computed result can be too small. To be concrete, assume PyLong_BASE = 2**15,
1586 which is the default (and it's unlikely anyone changes that).
1588 Waste isn't a problem: provided the first input digit isn't 0, the difference
1589 between the worst-case input with N digits and the smallest input with N
1590 digits is about a factor of B, but B is small compared to PyLong_BASE so at most
1591 one allocated Python digit can remain unused on that count. If
1592 N*log(B)/log(PyLong_BASE) is mathematically an exact integer, then truncating that
1593 and adding 1 returns a result 1 larger than necessary. However, that can't
1594 happen: whenever B is a power of 2, long_from_binary_base() is called
1595 instead, and it's impossible for B**i to be an integer power of 2**15 when
1596 B is not a power of 2 (i.e., it's impossible for N*log(B)/log(PyLong_BASE) to be
1597 an exact integer when B is not a power of 2, since B**i has a prime factor
1598 other than 2 in that case, but (2**15)**j's only prime factor is 2).
1600 The computed result can be too small if the true value of N*log(B)/log(PyLong_BASE)
1601 is a little bit larger than an exact integer, but due to roundoff errors (in
1602 computing log(B), log(PyLong_BASE), their quotient, and/or multiplying that by N)
1603 yields a numeric result a little less than that integer. Unfortunately, "how
1604 close can a transcendental function get to an integer over some range?"
1605 questions are generally theoretically intractable. Computer analysis via
1606 continued fractions is practical: expand log(B)/log(PyLong_BASE) via continued
1607 fractions, giving a sequence i/j of "the best" rational approximations. Then
1608 j*log(B)/log(PyLong_BASE) is approximately equal to (the integer) i. This shows that
1609 we can get very close to being in trouble, but very rarely. For example,
1610 76573 is a denominator in one of the continued-fraction approximations to
1611 log(10)/log(2**15), and indeed:
1613 >>> log(10)/log(2**15)*76573
1614 16958.000000654003
1616 is very close to an integer. If we were working with IEEE single-precision,
1617 rounding errors could kill us. Finding worst cases in IEEE double-precision
1618 requires better-than-double-precision log() functions, and Tim didn't bother.
1619 Instead the code checks to see whether the allocated space is enough as each
1620 new Python digit is added, and copies the whole thing to a larger long if not.
1621 This should happen extremely rarely, and in fact I don't have a test case
1622 that triggers it(!). Instead the code was tested by artificially allocating
1623 just 1 digit at the start, so that the copying code was exercised for every
1624 digit beyond the first.
1625 ***/
1626 register twodigits c; /* current input character */
1627 Py_ssize_t size_z;
1628 int i;
1629 int convwidth;
1630 twodigits convmultmax, convmult;
1631 digit *pz, *pzstop;
1632 char* scan;
1634 static double log_base_PyLong_BASE[37] = {0.0e0,};
1635 static int convwidth_base[37] = {0,};
1636 static twodigits convmultmax_base[37] = {0,};
1638 if (log_base_PyLong_BASE[base] == 0.0) {
1639 twodigits convmax = base;
1640 int i = 1;
1642 log_base_PyLong_BASE[base] = log((double)base) /
1643 log((double)PyLong_BASE);
1644 for (;;) {
1645 twodigits next = convmax * base;
1646 if (next > PyLong_BASE)
1647 break;
1648 convmax = next;
1649 ++i;
1651 convmultmax_base[base] = convmax;
1652 assert(i > 0);
1653 convwidth_base[base] = i;
1656 /* Find length of the string of numeric characters. */
1657 scan = str;
1658 while (_PyLong_DigitValue[Py_CHARMASK(*scan)] < base)
1659 ++scan;
1661 /* Create a long object that can contain the largest possible
1662 * integer with this base and length. Note that there's no
1663 * need to initialize z->ob_digit -- no slot is read up before
1664 * being stored into.
1666 size_z = (Py_ssize_t)((scan - str) * log_base_PyLong_BASE[base]) + 1;
1667 /* Uncomment next line to test exceedingly rare copy code */
1668 /* size_z = 1; */
1669 assert(size_z > 0);
1670 z = _PyLong_New(size_z);
1671 if (z == NULL)
1672 return NULL;
1673 Py_SIZE(z) = 0;
1675 /* `convwidth` consecutive input digits are treated as a single
1676 * digit in base `convmultmax`.
1678 convwidth = convwidth_base[base];
1679 convmultmax = convmultmax_base[base];
1681 /* Work ;-) */
1682 while (str < scan) {
1683 /* grab up to convwidth digits from the input string */
1684 c = (digit)_PyLong_DigitValue[Py_CHARMASK(*str++)];
1685 for (i = 1; i < convwidth && str != scan; ++i, ++str) {
1686 c = (twodigits)(c * base +
1687 _PyLong_DigitValue[Py_CHARMASK(*str)]);
1688 assert(c < PyLong_BASE);
1691 convmult = convmultmax;
1692 /* Calculate the shift only if we couldn't get
1693 * convwidth digits.
1695 if (i != convwidth) {
1696 convmult = base;
1697 for ( ; i > 1; --i)
1698 convmult *= base;
1701 /* Multiply z by convmult, and add c. */
1702 pz = z->ob_digit;
1703 pzstop = pz + Py_SIZE(z);
1704 for (; pz < pzstop; ++pz) {
1705 c += (twodigits)*pz * convmult;
1706 *pz = (digit)(c & PyLong_MASK);
1707 c >>= PyLong_SHIFT;
1709 /* carry off the current end? */
1710 if (c) {
1711 assert(c < PyLong_BASE);
1712 if (Py_SIZE(z) < size_z) {
1713 *pz = (digit)c;
1714 ++Py_SIZE(z);
1716 else {
1717 PyLongObject *tmp;
1718 /* Extremely rare. Get more space. */
1719 assert(Py_SIZE(z) == size_z);
1720 tmp = _PyLong_New(size_z + 1);
1721 if (tmp == NULL) {
1722 Py_DECREF(z);
1723 return NULL;
1725 memcpy(tmp->ob_digit,
1726 z->ob_digit,
1727 sizeof(digit) * size_z);
1728 Py_DECREF(z);
1729 z = tmp;
1730 z->ob_digit[size_z] = (digit)c;
1731 ++size_z;
1736 if (z == NULL)
1737 return NULL;
1738 if (str == start)
1739 goto onError;
1740 if (sign < 0)
1741 Py_SIZE(z) = -(Py_SIZE(z));
1742 if (*str == 'L' || *str == 'l')
1743 str++;
1744 while (*str && isspace(Py_CHARMASK(*str)))
1745 str++;
1746 if (*str != '\0')
1747 goto onError;
1748 if (pend)
1749 *pend = str;
1750 return (PyObject *) z;
1752 onError:
1753 Py_XDECREF(z);
1754 slen = strlen(orig_str) < 200 ? strlen(orig_str) : 200;
1755 strobj = PyString_FromStringAndSize(orig_str, slen);
1756 if (strobj == NULL)
1757 return NULL;
1758 strrepr = PyObject_Repr(strobj);
1759 Py_DECREF(strobj);
1760 if (strrepr == NULL)
1761 return NULL;
1762 PyErr_Format(PyExc_ValueError,
1763 "invalid literal for long() with base %d: %s",
1764 base, PyString_AS_STRING(strrepr));
1765 Py_DECREF(strrepr);
1766 return NULL;
1769 #ifdef Py_USING_UNICODE
1770 PyObject *
1771 PyLong_FromUnicode(Py_UNICODE *u, Py_ssize_t length, int base)
1773 PyObject *result;
1774 char *buffer = (char *)PyMem_MALLOC(length+1);
1776 if (buffer == NULL)
1777 return NULL;
1779 if (PyUnicode_EncodeDecimal(u, length, buffer, NULL)) {
1780 PyMem_FREE(buffer);
1781 return NULL;
1783 result = PyLong_FromString(buffer, NULL, base);
1784 PyMem_FREE(buffer);
1785 return result;
1787 #endif
1789 /* forward */
1790 static PyLongObject *x_divrem
1791 (PyLongObject *, PyLongObject *, PyLongObject **);
1792 static PyObject *long_long(PyObject *v);
1794 /* Long division with remainder, top-level routine */
1796 static int
1797 long_divrem(PyLongObject *a, PyLongObject *b,
1798 PyLongObject **pdiv, PyLongObject **prem)
1800 Py_ssize_t size_a = ABS(Py_SIZE(a)), size_b = ABS(Py_SIZE(b));
1801 PyLongObject *z;
1803 if (size_b == 0) {
1804 PyErr_SetString(PyExc_ZeroDivisionError,
1805 "long division or modulo by zero");
1806 return -1;
1808 if (size_a < size_b ||
1809 (size_a == size_b &&
1810 a->ob_digit[size_a-1] < b->ob_digit[size_b-1])) {
1811 /* |a| < |b|. */
1812 *pdiv = _PyLong_New(0);
1813 if (*pdiv == NULL)
1814 return -1;
1815 Py_INCREF(a);
1816 *prem = (PyLongObject *) a;
1817 return 0;
1819 if (size_b == 1) {
1820 digit rem = 0;
1821 z = divrem1(a, b->ob_digit[0], &rem);
1822 if (z == NULL)
1823 return -1;
1824 *prem = (PyLongObject *) PyLong_FromLong((long)rem);
1825 if (*prem == NULL) {
1826 Py_DECREF(z);
1827 return -1;
1830 else {
1831 z = x_divrem(a, b, prem);
1832 if (z == NULL)
1833 return -1;
1835 /* Set the signs.
1836 The quotient z has the sign of a*b;
1837 the remainder r has the sign of a,
1838 so a = b*z + r. */
1839 if ((a->ob_size < 0) != (b->ob_size < 0))
1840 z->ob_size = -(z->ob_size);
1841 if (a->ob_size < 0 && (*prem)->ob_size != 0)
1842 (*prem)->ob_size = -((*prem)->ob_size);
1843 *pdiv = z;
1844 return 0;
1847 /* Unsigned long division with remainder -- the algorithm. The arguments v1
1848 and w1 should satisfy 2 <= ABS(Py_SIZE(w1)) <= ABS(Py_SIZE(v1)). */
1850 static PyLongObject *
1851 x_divrem(PyLongObject *v1, PyLongObject *w1, PyLongObject **prem)
1853 PyLongObject *v, *w, *a;
1854 Py_ssize_t i, k, size_v, size_w;
1855 int d;
1856 digit wm1, wm2, carry, q, r, vtop, *v0, *vk, *w0, *ak;
1857 twodigits vv;
1858 sdigit zhi;
1859 stwodigits z;
1861 /* We follow Knuth [The Art of Computer Programming, Vol. 2 (3rd
1862 edn.), section 4.3.1, Algorithm D], except that we don't explicitly
1863 handle the special case when the initial estimate q for a quotient
1864 digit is >= PyLong_BASE: the max value for q is PyLong_BASE+1, and
1865 that won't overflow a digit. */
1867 /* allocate space; w will also be used to hold the final remainder */
1868 size_v = ABS(Py_SIZE(v1));
1869 size_w = ABS(Py_SIZE(w1));
1870 assert(size_v >= size_w && size_w >= 2); /* Assert checks by div() */
1871 v = _PyLong_New(size_v+1);
1872 if (v == NULL) {
1873 *prem = NULL;
1874 return NULL;
1876 w = _PyLong_New(size_w);
1877 if (w == NULL) {
1878 Py_DECREF(v);
1879 *prem = NULL;
1880 return NULL;
1883 /* normalize: shift w1 left so that its top digit is >= PyLong_BASE/2.
1884 shift v1 left by the same amount. Results go into w and v. */
1885 d = PyLong_SHIFT - bits_in_digit(w1->ob_digit[size_w-1]);
1886 carry = v_lshift(w->ob_digit, w1->ob_digit, size_w, d);
1887 assert(carry == 0);
1888 carry = v_lshift(v->ob_digit, v1->ob_digit, size_v, d);
1889 if (carry != 0 || v->ob_digit[size_v-1] >= w->ob_digit[size_w-1]) {
1890 v->ob_digit[size_v] = carry;
1891 size_v++;
1894 /* Now v->ob_digit[size_v-1] < w->ob_digit[size_w-1], so quotient has
1895 at most (and usually exactly) k = size_v - size_w digits. */
1896 k = size_v - size_w;
1897 assert(k >= 0);
1898 a = _PyLong_New(k);
1899 if (a == NULL) {
1900 Py_DECREF(w);
1901 Py_DECREF(v);
1902 *prem = NULL;
1903 return NULL;
1905 v0 = v->ob_digit;
1906 w0 = w->ob_digit;
1907 wm1 = w0[size_w-1];
1908 wm2 = w0[size_w-2];
1909 for (vk = v0+k, ak = a->ob_digit + k; vk-- > v0;) {
1910 /* inner loop: divide vk[0:size_w+1] by w0[0:size_w], giving
1911 single-digit quotient q, remainder in vk[0:size_w]. */
1913 SIGCHECK({
1914 Py_DECREF(a);
1915 Py_DECREF(w);
1916 Py_DECREF(v);
1917 *prem = NULL;
1918 return NULL;
1921 /* estimate quotient digit q; may overestimate by 1 (rare) */
1922 vtop = vk[size_w];
1923 assert(vtop <= wm1);
1924 vv = ((twodigits)vtop << PyLong_SHIFT) | vk[size_w-1];
1925 q = (digit)(vv / wm1);
1926 r = (digit)(vv - (twodigits)wm1 * q); /* r = vv % wm1 */
1927 while ((twodigits)wm2 * q > (((twodigits)r << PyLong_SHIFT)
1928 | vk[size_w-2])) {
1929 --q;
1930 r += wm1;
1931 if (r >= PyLong_BASE)
1932 break;
1934 assert(q <= PyLong_BASE);
1936 /* subtract q*w0[0:size_w] from vk[0:size_w+1] */
1937 zhi = 0;
1938 for (i = 0; i < size_w; ++i) {
1939 /* invariants: -PyLong_BASE <= -q <= zhi <= 0;
1940 -PyLong_BASE * q <= z < PyLong_BASE */
1941 z = (sdigit)vk[i] + zhi -
1942 (stwodigits)q * (stwodigits)w0[i];
1943 vk[i] = (digit)z & PyLong_MASK;
1944 zhi = (sdigit)Py_ARITHMETIC_RIGHT_SHIFT(stwodigits,
1945 z, PyLong_SHIFT);
1948 /* add w back if q was too large (this branch taken rarely) */
1949 assert((sdigit)vtop + zhi == -1 || (sdigit)vtop + zhi == 0);
1950 if ((sdigit)vtop + zhi < 0) {
1951 carry = 0;
1952 for (i = 0; i < size_w; ++i) {
1953 carry += vk[i] + w0[i];
1954 vk[i] = carry & PyLong_MASK;
1955 carry >>= PyLong_SHIFT;
1957 --q;
1960 /* store quotient digit */
1961 assert(q < PyLong_BASE);
1962 *--ak = q;
1965 /* unshift remainder; we reuse w to store the result */
1966 carry = v_rshift(w0, v0, size_w, d);
1967 assert(carry==0);
1968 Py_DECREF(v);
1970 *prem = long_normalize(w);
1971 return long_normalize(a);
1974 /* Methods */
1976 static void
1977 long_dealloc(PyObject *v)
1979 Py_TYPE(v)->tp_free(v);
1982 static PyObject *
1983 long_repr(PyObject *v)
1985 return _PyLong_Format(v, 10, 1, 0);
1988 static PyObject *
1989 long_str(PyObject *v)
1991 return _PyLong_Format(v, 10, 0, 0);
1994 static int
1995 long_compare(PyLongObject *a, PyLongObject *b)
1997 Py_ssize_t sign;
1999 if (Py_SIZE(a) != Py_SIZE(b)) {
2000 if (ABS(Py_SIZE(a)) == 0 && ABS(Py_SIZE(b)) == 0)
2001 sign = 0;
2002 else
2003 sign = Py_SIZE(a) - Py_SIZE(b);
2005 else {
2006 Py_ssize_t i = ABS(Py_SIZE(a));
2007 while (--i >= 0 && a->ob_digit[i] == b->ob_digit[i])
2009 if (i < 0)
2010 sign = 0;
2011 else {
2012 sign = (sdigit)a->ob_digit[i] - (sdigit)b->ob_digit[i];
2013 if (Py_SIZE(a) < 0)
2014 sign = -sign;
2017 return sign < 0 ? -1 : sign > 0 ? 1 : 0;
2020 static long
2021 long_hash(PyLongObject *v)
2023 unsigned long x;
2024 Py_ssize_t i;
2025 int sign;
2027 /* This is designed so that Python ints and longs with the
2028 same value hash to the same value, otherwise comparisons
2029 of mapping keys will turn out weird */
2030 i = v->ob_size;
2031 sign = 1;
2032 x = 0;
2033 if (i < 0) {
2034 sign = -1;
2035 i = -(i);
2037 /* The following loop produces a C unsigned long x such that x is
2038 congruent to the absolute value of v modulo ULONG_MAX. The
2039 resulting x is nonzero if and only if v is. */
2040 while (--i >= 0) {
2041 /* Force a native long #-bits (32 or 64) circular shift */
2042 x = (x >> (8*SIZEOF_LONG-PyLong_SHIFT)) | (x << PyLong_SHIFT);
2043 x += v->ob_digit[i];
2044 /* If the addition above overflowed we compensate by
2045 incrementing. This preserves the value modulo
2046 ULONG_MAX. */
2047 if (x < v->ob_digit[i])
2048 x++;
2050 x = x * sign;
2051 if (x == (unsigned long)-1)
2052 x = (unsigned long)-2;
2053 return (long)x;
2057 /* Add the absolute values of two long integers. */
2059 static PyLongObject *
2060 x_add(PyLongObject *a, PyLongObject *b)
2062 Py_ssize_t size_a = ABS(Py_SIZE(a)), size_b = ABS(Py_SIZE(b));
2063 PyLongObject *z;
2064 Py_ssize_t i;
2065 digit carry = 0;
2067 /* Ensure a is the larger of the two: */
2068 if (size_a < size_b) {
2069 { PyLongObject *temp = a; a = b; b = temp; }
2070 { Py_ssize_t size_temp = size_a;
2071 size_a = size_b;
2072 size_b = size_temp; }
2074 z = _PyLong_New(size_a+1);
2075 if (z == NULL)
2076 return NULL;
2077 for (i = 0; i < size_b; ++i) {
2078 carry += a->ob_digit[i] + b->ob_digit[i];
2079 z->ob_digit[i] = carry & PyLong_MASK;
2080 carry >>= PyLong_SHIFT;
2082 for (; i < size_a; ++i) {
2083 carry += a->ob_digit[i];
2084 z->ob_digit[i] = carry & PyLong_MASK;
2085 carry >>= PyLong_SHIFT;
2087 z->ob_digit[i] = carry;
2088 return long_normalize(z);
2091 /* Subtract the absolute values of two integers. */
2093 static PyLongObject *
2094 x_sub(PyLongObject *a, PyLongObject *b)
2096 Py_ssize_t size_a = ABS(Py_SIZE(a)), size_b = ABS(Py_SIZE(b));
2097 PyLongObject *z;
2098 Py_ssize_t i;
2099 int sign = 1;
2100 digit borrow = 0;
2102 /* Ensure a is the larger of the two: */
2103 if (size_a < size_b) {
2104 sign = -1;
2105 { PyLongObject *temp = a; a = b; b = temp; }
2106 { Py_ssize_t size_temp = size_a;
2107 size_a = size_b;
2108 size_b = size_temp; }
2110 else if (size_a == size_b) {
2111 /* Find highest digit where a and b differ: */
2112 i = size_a;
2113 while (--i >= 0 && a->ob_digit[i] == b->ob_digit[i])
2115 if (i < 0)
2116 return _PyLong_New(0);
2117 if (a->ob_digit[i] < b->ob_digit[i]) {
2118 sign = -1;
2119 { PyLongObject *temp = a; a = b; b = temp; }
2121 size_a = size_b = i+1;
2123 z = _PyLong_New(size_a);
2124 if (z == NULL)
2125 return NULL;
2126 for (i = 0; i < size_b; ++i) {
2127 /* The following assumes unsigned arithmetic
2128 works module 2**N for some N>PyLong_SHIFT. */
2129 borrow = a->ob_digit[i] - b->ob_digit[i] - borrow;
2130 z->ob_digit[i] = borrow & PyLong_MASK;
2131 borrow >>= PyLong_SHIFT;
2132 borrow &= 1; /* Keep only one sign bit */
2134 for (; i < size_a; ++i) {
2135 borrow = a->ob_digit[i] - borrow;
2136 z->ob_digit[i] = borrow & PyLong_MASK;
2137 borrow >>= PyLong_SHIFT;
2138 borrow &= 1; /* Keep only one sign bit */
2140 assert(borrow == 0);
2141 if (sign < 0)
2142 z->ob_size = -(z->ob_size);
2143 return long_normalize(z);
2146 static PyObject *
2147 long_add(PyLongObject *v, PyLongObject *w)
2149 PyLongObject *a, *b, *z;
2151 CONVERT_BINOP((PyObject *)v, (PyObject *)w, &a, &b);
2153 if (a->ob_size < 0) {
2154 if (b->ob_size < 0) {
2155 z = x_add(a, b);
2156 if (z != NULL && z->ob_size != 0)
2157 z->ob_size = -(z->ob_size);
2159 else
2160 z = x_sub(b, a);
2162 else {
2163 if (b->ob_size < 0)
2164 z = x_sub(a, b);
2165 else
2166 z = x_add(a, b);
2168 Py_DECREF(a);
2169 Py_DECREF(b);
2170 return (PyObject *)z;
2173 static PyObject *
2174 long_sub(PyLongObject *v, PyLongObject *w)
2176 PyLongObject *a, *b, *z;
2178 CONVERT_BINOP((PyObject *)v, (PyObject *)w, &a, &b);
2180 if (a->ob_size < 0) {
2181 if (b->ob_size < 0)
2182 z = x_sub(a, b);
2183 else
2184 z = x_add(a, b);
2185 if (z != NULL && z->ob_size != 0)
2186 z->ob_size = -(z->ob_size);
2188 else {
2189 if (b->ob_size < 0)
2190 z = x_add(a, b);
2191 else
2192 z = x_sub(a, b);
2194 Py_DECREF(a);
2195 Py_DECREF(b);
2196 return (PyObject *)z;
2199 /* Grade school multiplication, ignoring the signs.
2200 * Returns the absolute value of the product, or NULL if error.
2202 static PyLongObject *
2203 x_mul(PyLongObject *a, PyLongObject *b)
2205 PyLongObject *z;
2206 Py_ssize_t size_a = ABS(Py_SIZE(a));
2207 Py_ssize_t size_b = ABS(Py_SIZE(b));
2208 Py_ssize_t i;
2210 z = _PyLong_New(size_a + size_b);
2211 if (z == NULL)
2212 return NULL;
2214 memset(z->ob_digit, 0, Py_SIZE(z) * sizeof(digit));
2215 if (a == b) {
2216 /* Efficient squaring per HAC, Algorithm 14.16:
2217 * http://www.cacr.math.uwaterloo.ca/hac/about/chap14.pdf
2218 * Gives slightly less than a 2x speedup when a == b,
2219 * via exploiting that each entry in the multiplication
2220 * pyramid appears twice (except for the size_a squares).
2222 for (i = 0; i < size_a; ++i) {
2223 twodigits carry;
2224 twodigits f = a->ob_digit[i];
2225 digit *pz = z->ob_digit + (i << 1);
2226 digit *pa = a->ob_digit + i + 1;
2227 digit *paend = a->ob_digit + size_a;
2229 SIGCHECK({
2230 Py_DECREF(z);
2231 return NULL;
2234 carry = *pz + f * f;
2235 *pz++ = (digit)(carry & PyLong_MASK);
2236 carry >>= PyLong_SHIFT;
2237 assert(carry <= PyLong_MASK);
2239 /* Now f is added in twice in each column of the
2240 * pyramid it appears. Same as adding f<<1 once.
2242 f <<= 1;
2243 while (pa < paend) {
2244 carry += *pz + *pa++ * f;
2245 *pz++ = (digit)(carry & PyLong_MASK);
2246 carry >>= PyLong_SHIFT;
2247 assert(carry <= (PyLong_MASK << 1));
2249 if (carry) {
2250 carry += *pz;
2251 *pz++ = (digit)(carry & PyLong_MASK);
2252 carry >>= PyLong_SHIFT;
2254 if (carry)
2255 *pz += (digit)(carry & PyLong_MASK);
2256 assert((carry >> PyLong_SHIFT) == 0);
2259 else { /* a is not the same as b -- gradeschool long mult */
2260 for (i = 0; i < size_a; ++i) {
2261 twodigits carry = 0;
2262 twodigits f = a->ob_digit[i];
2263 digit *pz = z->ob_digit + i;
2264 digit *pb = b->ob_digit;
2265 digit *pbend = b->ob_digit + size_b;
2267 SIGCHECK({
2268 Py_DECREF(z);
2269 return NULL;
2272 while (pb < pbend) {
2273 carry += *pz + *pb++ * f;
2274 *pz++ = (digit)(carry & PyLong_MASK);
2275 carry >>= PyLong_SHIFT;
2276 assert(carry <= PyLong_MASK);
2278 if (carry)
2279 *pz += (digit)(carry & PyLong_MASK);
2280 assert((carry >> PyLong_SHIFT) == 0);
2283 return long_normalize(z);
2286 /* A helper for Karatsuba multiplication (k_mul).
2287 Takes a long "n" and an integer "size" representing the place to
2288 split, and sets low and high such that abs(n) == (high << size) + low,
2289 viewing the shift as being by digits. The sign bit is ignored, and
2290 the return values are >= 0.
2291 Returns 0 on success, -1 on failure.
2293 static int
2294 kmul_split(PyLongObject *n, Py_ssize_t size, PyLongObject **high, PyLongObject **low)
2296 PyLongObject *hi, *lo;
2297 Py_ssize_t size_lo, size_hi;
2298 const Py_ssize_t size_n = ABS(Py_SIZE(n));
2300 size_lo = MIN(size_n, size);
2301 size_hi = size_n - size_lo;
2303 if ((hi = _PyLong_New(size_hi)) == NULL)
2304 return -1;
2305 if ((lo = _PyLong_New(size_lo)) == NULL) {
2306 Py_DECREF(hi);
2307 return -1;
2310 memcpy(lo->ob_digit, n->ob_digit, size_lo * sizeof(digit));
2311 memcpy(hi->ob_digit, n->ob_digit + size_lo, size_hi * sizeof(digit));
2313 *high = long_normalize(hi);
2314 *low = long_normalize(lo);
2315 return 0;
2318 static PyLongObject *k_lopsided_mul(PyLongObject *a, PyLongObject *b);
2320 /* Karatsuba multiplication. Ignores the input signs, and returns the
2321 * absolute value of the product (or NULL if error).
2322 * See Knuth Vol. 2 Chapter 4.3.3 (Pp. 294-295).
2324 static PyLongObject *
2325 k_mul(PyLongObject *a, PyLongObject *b)
2327 Py_ssize_t asize = ABS(Py_SIZE(a));
2328 Py_ssize_t bsize = ABS(Py_SIZE(b));
2329 PyLongObject *ah = NULL;
2330 PyLongObject *al = NULL;
2331 PyLongObject *bh = NULL;
2332 PyLongObject *bl = NULL;
2333 PyLongObject *ret = NULL;
2334 PyLongObject *t1, *t2, *t3;
2335 Py_ssize_t shift; /* the number of digits we split off */
2336 Py_ssize_t i;
2338 /* (ah*X+al)(bh*X+bl) = ah*bh*X*X + (ah*bl + al*bh)*X + al*bl
2339 * Let k = (ah+al)*(bh+bl) = ah*bl + al*bh + ah*bh + al*bl
2340 * Then the original product is
2341 * ah*bh*X*X + (k - ah*bh - al*bl)*X + al*bl
2342 * By picking X to be a power of 2, "*X" is just shifting, and it's
2343 * been reduced to 3 multiplies on numbers half the size.
2346 /* We want to split based on the larger number; fiddle so that b
2347 * is largest.
2349 if (asize > bsize) {
2350 t1 = a;
2351 a = b;
2352 b = t1;
2354 i = asize;
2355 asize = bsize;
2356 bsize = i;
2359 /* Use gradeschool math when either number is too small. */
2360 i = a == b ? KARATSUBA_SQUARE_CUTOFF : KARATSUBA_CUTOFF;
2361 if (asize <= i) {
2362 if (asize == 0)
2363 return _PyLong_New(0);
2364 else
2365 return x_mul(a, b);
2368 /* If a is small compared to b, splitting on b gives a degenerate
2369 * case with ah==0, and Karatsuba may be (even much) less efficient
2370 * than "grade school" then. However, we can still win, by viewing
2371 * b as a string of "big digits", each of width a->ob_size. That
2372 * leads to a sequence of balanced calls to k_mul.
2374 if (2 * asize <= bsize)
2375 return k_lopsided_mul(a, b);
2377 /* Split a & b into hi & lo pieces. */
2378 shift = bsize >> 1;
2379 if (kmul_split(a, shift, &ah, &al) < 0) goto fail;
2380 assert(Py_SIZE(ah) > 0); /* the split isn't degenerate */
2382 if (a == b) {
2383 bh = ah;
2384 bl = al;
2385 Py_INCREF(bh);
2386 Py_INCREF(bl);
2388 else if (kmul_split(b, shift, &bh, &bl) < 0) goto fail;
2390 /* The plan:
2391 * 1. Allocate result space (asize + bsize digits: that's always
2392 * enough).
2393 * 2. Compute ah*bh, and copy into result at 2*shift.
2394 * 3. Compute al*bl, and copy into result at 0. Note that this
2395 * can't overlap with #2.
2396 * 4. Subtract al*bl from the result, starting at shift. This may
2397 * underflow (borrow out of the high digit), but we don't care:
2398 * we're effectively doing unsigned arithmetic mod
2399 * PyLong_BASE**(sizea + sizeb), and so long as the *final* result fits,
2400 * borrows and carries out of the high digit can be ignored.
2401 * 5. Subtract ah*bh from the result, starting at shift.
2402 * 6. Compute (ah+al)*(bh+bl), and add it into the result starting
2403 * at shift.
2406 /* 1. Allocate result space. */
2407 ret = _PyLong_New(asize + bsize);
2408 if (ret == NULL) goto fail;
2409 #ifdef Py_DEBUG
2410 /* Fill with trash, to catch reference to uninitialized digits. */
2411 memset(ret->ob_digit, 0xDF, Py_SIZE(ret) * sizeof(digit));
2412 #endif
2414 /* 2. t1 <- ah*bh, and copy into high digits of result. */
2415 if ((t1 = k_mul(ah, bh)) == NULL) goto fail;
2416 assert(Py_SIZE(t1) >= 0);
2417 assert(2*shift + Py_SIZE(t1) <= Py_SIZE(ret));
2418 memcpy(ret->ob_digit + 2*shift, t1->ob_digit,
2419 Py_SIZE(t1) * sizeof(digit));
2421 /* Zero-out the digits higher than the ah*bh copy. */
2422 i = Py_SIZE(ret) - 2*shift - Py_SIZE(t1);
2423 if (i)
2424 memset(ret->ob_digit + 2*shift + Py_SIZE(t1), 0,
2425 i * sizeof(digit));
2427 /* 3. t2 <- al*bl, and copy into the low digits. */
2428 if ((t2 = k_mul(al, bl)) == NULL) {
2429 Py_DECREF(t1);
2430 goto fail;
2432 assert(Py_SIZE(t2) >= 0);
2433 assert(Py_SIZE(t2) <= 2*shift); /* no overlap with high digits */
2434 memcpy(ret->ob_digit, t2->ob_digit, Py_SIZE(t2) * sizeof(digit));
2436 /* Zero out remaining digits. */
2437 i = 2*shift - Py_SIZE(t2); /* number of uninitialized digits */
2438 if (i)
2439 memset(ret->ob_digit + Py_SIZE(t2), 0, i * sizeof(digit));
2441 /* 4 & 5. Subtract ah*bh (t1) and al*bl (t2). We do al*bl first
2442 * because it's fresher in cache.
2444 i = Py_SIZE(ret) - shift; /* # digits after shift */
2445 (void)v_isub(ret->ob_digit + shift, i, t2->ob_digit, Py_SIZE(t2));
2446 Py_DECREF(t2);
2448 (void)v_isub(ret->ob_digit + shift, i, t1->ob_digit, Py_SIZE(t1));
2449 Py_DECREF(t1);
2451 /* 6. t3 <- (ah+al)(bh+bl), and add into result. */
2452 if ((t1 = x_add(ah, al)) == NULL) goto fail;
2453 Py_DECREF(ah);
2454 Py_DECREF(al);
2455 ah = al = NULL;
2457 if (a == b) {
2458 t2 = t1;
2459 Py_INCREF(t2);
2461 else if ((t2 = x_add(bh, bl)) == NULL) {
2462 Py_DECREF(t1);
2463 goto fail;
2465 Py_DECREF(bh);
2466 Py_DECREF(bl);
2467 bh = bl = NULL;
2469 t3 = k_mul(t1, t2);
2470 Py_DECREF(t1);
2471 Py_DECREF(t2);
2472 if (t3 == NULL) goto fail;
2473 assert(Py_SIZE(t3) >= 0);
2475 /* Add t3. It's not obvious why we can't run out of room here.
2476 * See the (*) comment after this function.
2478 (void)v_iadd(ret->ob_digit + shift, i, t3->ob_digit, Py_SIZE(t3));
2479 Py_DECREF(t3);
2481 return long_normalize(ret);
2483 fail:
2484 Py_XDECREF(ret);
2485 Py_XDECREF(ah);
2486 Py_XDECREF(al);
2487 Py_XDECREF(bh);
2488 Py_XDECREF(bl);
2489 return NULL;
2492 /* (*) Why adding t3 can't "run out of room" above.
2494 Let f(x) mean the floor of x and c(x) mean the ceiling of x. Some facts
2495 to start with:
2497 1. For any integer i, i = c(i/2) + f(i/2). In particular,
2498 bsize = c(bsize/2) + f(bsize/2).
2499 2. shift = f(bsize/2)
2500 3. asize <= bsize
2501 4. Since we call k_lopsided_mul if asize*2 <= bsize, asize*2 > bsize in this
2502 routine, so asize > bsize/2 >= f(bsize/2) in this routine.
2504 We allocated asize + bsize result digits, and add t3 into them at an offset
2505 of shift. This leaves asize+bsize-shift allocated digit positions for t3
2506 to fit into, = (by #1 and #2) asize + f(bsize/2) + c(bsize/2) - f(bsize/2) =
2507 asize + c(bsize/2) available digit positions.
2509 bh has c(bsize/2) digits, and bl at most f(size/2) digits. So bh+hl has
2510 at most c(bsize/2) digits + 1 bit.
2512 If asize == bsize, ah has c(bsize/2) digits, else ah has at most f(bsize/2)
2513 digits, and al has at most f(bsize/2) digits in any case. So ah+al has at
2514 most (asize == bsize ? c(bsize/2) : f(bsize/2)) digits + 1 bit.
2516 The product (ah+al)*(bh+bl) therefore has at most
2518 c(bsize/2) + (asize == bsize ? c(bsize/2) : f(bsize/2)) digits + 2 bits
2520 and we have asize + c(bsize/2) available digit positions. We need to show
2521 this is always enough. An instance of c(bsize/2) cancels out in both, so
2522 the question reduces to whether asize digits is enough to hold
2523 (asize == bsize ? c(bsize/2) : f(bsize/2)) digits + 2 bits. If asize < bsize,
2524 then we're asking whether asize digits >= f(bsize/2) digits + 2 bits. By #4,
2525 asize is at least f(bsize/2)+1 digits, so this in turn reduces to whether 1
2526 digit is enough to hold 2 bits. This is so since PyLong_SHIFT=15 >= 2. If
2527 asize == bsize, then we're asking whether bsize digits is enough to hold
2528 c(bsize/2) digits + 2 bits, or equivalently (by #1) whether f(bsize/2) digits
2529 is enough to hold 2 bits. This is so if bsize >= 2, which holds because
2530 bsize >= KARATSUBA_CUTOFF >= 2.
2532 Note that since there's always enough room for (ah+al)*(bh+bl), and that's
2533 clearly >= each of ah*bh and al*bl, there's always enough room to subtract
2534 ah*bh and al*bl too.
2537 /* b has at least twice the digits of a, and a is big enough that Karatsuba
2538 * would pay off *if* the inputs had balanced sizes. View b as a sequence
2539 * of slices, each with a->ob_size digits, and multiply the slices by a,
2540 * one at a time. This gives k_mul balanced inputs to work with, and is
2541 * also cache-friendly (we compute one double-width slice of the result
2542 * at a time, then move on, never bactracking except for the helpful
2543 * single-width slice overlap between successive partial sums).
2545 static PyLongObject *
2546 k_lopsided_mul(PyLongObject *a, PyLongObject *b)
2548 const Py_ssize_t asize = ABS(Py_SIZE(a));
2549 Py_ssize_t bsize = ABS(Py_SIZE(b));
2550 Py_ssize_t nbdone; /* # of b digits already multiplied */
2551 PyLongObject *ret;
2552 PyLongObject *bslice = NULL;
2554 assert(asize > KARATSUBA_CUTOFF);
2555 assert(2 * asize <= bsize);
2557 /* Allocate result space, and zero it out. */
2558 ret = _PyLong_New(asize + bsize);
2559 if (ret == NULL)
2560 return NULL;
2561 memset(ret->ob_digit, 0, Py_SIZE(ret) * sizeof(digit));
2563 /* Successive slices of b are copied into bslice. */
2564 bslice = _PyLong_New(asize);
2565 if (bslice == NULL)
2566 goto fail;
2568 nbdone = 0;
2569 while (bsize > 0) {
2570 PyLongObject *product;
2571 const Py_ssize_t nbtouse = MIN(bsize, asize);
2573 /* Multiply the next slice of b by a. */
2574 memcpy(bslice->ob_digit, b->ob_digit + nbdone,
2575 nbtouse * sizeof(digit));
2576 Py_SIZE(bslice) = nbtouse;
2577 product = k_mul(a, bslice);
2578 if (product == NULL)
2579 goto fail;
2581 /* Add into result. */
2582 (void)v_iadd(ret->ob_digit + nbdone, Py_SIZE(ret) - nbdone,
2583 product->ob_digit, Py_SIZE(product));
2584 Py_DECREF(product);
2586 bsize -= nbtouse;
2587 nbdone += nbtouse;
2590 Py_DECREF(bslice);
2591 return long_normalize(ret);
2593 fail:
2594 Py_DECREF(ret);
2595 Py_XDECREF(bslice);
2596 return NULL;
2599 static PyObject *
2600 long_mul(PyLongObject *v, PyLongObject *w)
2602 PyLongObject *a, *b, *z;
2604 if (!convert_binop((PyObject *)v, (PyObject *)w, &a, &b)) {
2605 Py_INCREF(Py_NotImplemented);
2606 return Py_NotImplemented;
2609 z = k_mul(a, b);
2610 /* Negate if exactly one of the inputs is negative. */
2611 if (((a->ob_size ^ b->ob_size) < 0) && z)
2612 z->ob_size = -(z->ob_size);
2613 Py_DECREF(a);
2614 Py_DECREF(b);
2615 return (PyObject *)z;
2618 /* The / and % operators are now defined in terms of divmod().
2619 The expression a mod b has the value a - b*floor(a/b).
2620 The long_divrem function gives the remainder after division of
2621 |a| by |b|, with the sign of a. This is also expressed
2622 as a - b*trunc(a/b), if trunc truncates towards zero.
2623 Some examples:
2624 a b a rem b a mod b
2625 13 10 3 3
2626 -13 10 -3 7
2627 13 -10 3 -7
2628 -13 -10 -3 -3
2629 So, to get from rem to mod, we have to add b if a and b
2630 have different signs. We then subtract one from the 'div'
2631 part of the outcome to keep the invariant intact. */
2633 /* Compute
2634 * *pdiv, *pmod = divmod(v, w)
2635 * NULL can be passed for pdiv or pmod, in which case that part of
2636 * the result is simply thrown away. The caller owns a reference to
2637 * each of these it requests (does not pass NULL for).
2639 static int
2640 l_divmod(PyLongObject *v, PyLongObject *w,
2641 PyLongObject **pdiv, PyLongObject **pmod)
2643 PyLongObject *div, *mod;
2645 if (long_divrem(v, w, &div, &mod) < 0)
2646 return -1;
2647 if ((Py_SIZE(mod) < 0 && Py_SIZE(w) > 0) ||
2648 (Py_SIZE(mod) > 0 && Py_SIZE(w) < 0)) {
2649 PyLongObject *temp;
2650 PyLongObject *one;
2651 temp = (PyLongObject *) long_add(mod, w);
2652 Py_DECREF(mod);
2653 mod = temp;
2654 if (mod == NULL) {
2655 Py_DECREF(div);
2656 return -1;
2658 one = (PyLongObject *) PyLong_FromLong(1L);
2659 if (one == NULL ||
2660 (temp = (PyLongObject *) long_sub(div, one)) == NULL) {
2661 Py_DECREF(mod);
2662 Py_DECREF(div);
2663 Py_XDECREF(one);
2664 return -1;
2666 Py_DECREF(one);
2667 Py_DECREF(div);
2668 div = temp;
2670 if (pdiv != NULL)
2671 *pdiv = div;
2672 else
2673 Py_DECREF(div);
2675 if (pmod != NULL)
2676 *pmod = mod;
2677 else
2678 Py_DECREF(mod);
2680 return 0;
2683 static PyObject *
2684 long_div(PyObject *v, PyObject *w)
2686 PyLongObject *a, *b, *div;
2688 CONVERT_BINOP(v, w, &a, &b);
2689 if (l_divmod(a, b, &div, NULL) < 0)
2690 div = NULL;
2691 Py_DECREF(a);
2692 Py_DECREF(b);
2693 return (PyObject *)div;
2696 static PyObject *
2697 long_classic_div(PyObject *v, PyObject *w)
2699 PyLongObject *a, *b, *div;
2701 CONVERT_BINOP(v, w, &a, &b);
2702 if (Py_DivisionWarningFlag &&
2703 PyErr_Warn(PyExc_DeprecationWarning, "classic long division") < 0)
2704 div = NULL;
2705 else if (l_divmod(a, b, &div, NULL) < 0)
2706 div = NULL;
2707 Py_DECREF(a);
2708 Py_DECREF(b);
2709 return (PyObject *)div;
2712 static PyObject *
2713 long_true_divide(PyObject *v, PyObject *w)
2715 PyLongObject *a, *b;
2716 double ad, bd;
2717 int failed, aexp = -1, bexp = -1;
2719 CONVERT_BINOP(v, w, &a, &b);
2720 ad = _PyLong_AsScaledDouble((PyObject *)a, &aexp);
2721 bd = _PyLong_AsScaledDouble((PyObject *)b, &bexp);
2722 failed = (ad == -1.0 || bd == -1.0) && PyErr_Occurred();
2723 Py_DECREF(a);
2724 Py_DECREF(b);
2725 if (failed)
2726 return NULL;
2727 /* 'aexp' and 'bexp' were initialized to -1 to silence gcc-4.0.x,
2728 but should really be set correctly after sucessful calls to
2729 _PyLong_AsScaledDouble() */
2730 assert(aexp >= 0 && bexp >= 0);
2732 if (bd == 0.0) {
2733 PyErr_SetString(PyExc_ZeroDivisionError,
2734 "long division or modulo by zero");
2735 return NULL;
2738 /* True value is very close to ad/bd * 2**(PyLong_SHIFT*(aexp-bexp)) */
2739 ad /= bd; /* overflow/underflow impossible here */
2740 aexp -= bexp;
2741 if (aexp > INT_MAX / PyLong_SHIFT)
2742 goto overflow;
2743 else if (aexp < -(INT_MAX / PyLong_SHIFT))
2744 return PyFloat_FromDouble(0.0); /* underflow to 0 */
2745 errno = 0;
2746 ad = ldexp(ad, aexp * PyLong_SHIFT);
2747 if (Py_OVERFLOWED(ad)) /* ignore underflow to 0.0 */
2748 goto overflow;
2749 return PyFloat_FromDouble(ad);
2751 overflow:
2752 PyErr_SetString(PyExc_OverflowError,
2753 "long/long too large for a float");
2754 return NULL;
2758 static PyObject *
2759 long_mod(PyObject *v, PyObject *w)
2761 PyLongObject *a, *b, *mod;
2763 CONVERT_BINOP(v, w, &a, &b);
2765 if (l_divmod(a, b, NULL, &mod) < 0)
2766 mod = NULL;
2767 Py_DECREF(a);
2768 Py_DECREF(b);
2769 return (PyObject *)mod;
2772 static PyObject *
2773 long_divmod(PyObject *v, PyObject *w)
2775 PyLongObject *a, *b, *div, *mod;
2776 PyObject *z;
2778 CONVERT_BINOP(v, w, &a, &b);
2780 if (l_divmod(a, b, &div, &mod) < 0) {
2781 Py_DECREF(a);
2782 Py_DECREF(b);
2783 return NULL;
2785 z = PyTuple_New(2);
2786 if (z != NULL) {
2787 PyTuple_SetItem(z, 0, (PyObject *) div);
2788 PyTuple_SetItem(z, 1, (PyObject *) mod);
2790 else {
2791 Py_DECREF(div);
2792 Py_DECREF(mod);
2794 Py_DECREF(a);
2795 Py_DECREF(b);
2796 return z;
2799 /* pow(v, w, x) */
2800 static PyObject *
2801 long_pow(PyObject *v, PyObject *w, PyObject *x)
2803 PyLongObject *a, *b, *c; /* a,b,c = v,w,x */
2804 int negativeOutput = 0; /* if x<0 return negative output */
2806 PyLongObject *z = NULL; /* accumulated result */
2807 Py_ssize_t i, j, k; /* counters */
2808 PyLongObject *temp = NULL;
2810 /* 5-ary values. If the exponent is large enough, table is
2811 * precomputed so that table[i] == a**i % c for i in range(32).
2813 PyLongObject *table[32] = {0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
2814 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0};
2816 /* a, b, c = v, w, x */
2817 CONVERT_BINOP(v, w, &a, &b);
2818 if (PyLong_Check(x)) {
2819 c = (PyLongObject *)x;
2820 Py_INCREF(x);
2822 else if (PyInt_Check(x)) {
2823 c = (PyLongObject *)PyLong_FromLong(PyInt_AS_LONG(x));
2824 if (c == NULL)
2825 goto Error;
2827 else if (x == Py_None)
2828 c = NULL;
2829 else {
2830 Py_DECREF(a);
2831 Py_DECREF(b);
2832 Py_INCREF(Py_NotImplemented);
2833 return Py_NotImplemented;
2836 if (Py_SIZE(b) < 0) { /* if exponent is negative */
2837 if (c) {
2838 PyErr_SetString(PyExc_TypeError, "pow() 2nd argument "
2839 "cannot be negative when 3rd argument specified");
2840 goto Error;
2842 else {
2843 /* else return a float. This works because we know
2844 that this calls float_pow() which converts its
2845 arguments to double. */
2846 Py_DECREF(a);
2847 Py_DECREF(b);
2848 return PyFloat_Type.tp_as_number->nb_power(v, w, x);
2852 if (c) {
2853 /* if modulus == 0:
2854 raise ValueError() */
2855 if (Py_SIZE(c) == 0) {
2856 PyErr_SetString(PyExc_ValueError,
2857 "pow() 3rd argument cannot be 0");
2858 goto Error;
2861 /* if modulus < 0:
2862 negativeOutput = True
2863 modulus = -modulus */
2864 if (Py_SIZE(c) < 0) {
2865 negativeOutput = 1;
2866 temp = (PyLongObject *)_PyLong_Copy(c);
2867 if (temp == NULL)
2868 goto Error;
2869 Py_DECREF(c);
2870 c = temp;
2871 temp = NULL;
2872 c->ob_size = - c->ob_size;
2875 /* if modulus == 1:
2876 return 0 */
2877 if ((Py_SIZE(c) == 1) && (c->ob_digit[0] == 1)) {
2878 z = (PyLongObject *)PyLong_FromLong(0L);
2879 goto Done;
2882 /* if base < 0:
2883 base = base % modulus
2884 Having the base positive just makes things easier. */
2885 if (Py_SIZE(a) < 0) {
2886 if (l_divmod(a, c, NULL, &temp) < 0)
2887 goto Error;
2888 Py_DECREF(a);
2889 a = temp;
2890 temp = NULL;
2894 /* At this point a, b, and c are guaranteed non-negative UNLESS
2895 c is NULL, in which case a may be negative. */
2897 z = (PyLongObject *)PyLong_FromLong(1L);
2898 if (z == NULL)
2899 goto Error;
2901 /* Perform a modular reduction, X = X % c, but leave X alone if c
2902 * is NULL.
2904 #define REDUCE(X) \
2905 if (c != NULL) { \
2906 if (l_divmod(X, c, NULL, &temp) < 0) \
2907 goto Error; \
2908 Py_XDECREF(X); \
2909 X = temp; \
2910 temp = NULL; \
2913 /* Multiply two values, then reduce the result:
2914 result = X*Y % c. If c is NULL, skip the mod. */
2915 #define MULT(X, Y, result) \
2917 temp = (PyLongObject *)long_mul(X, Y); \
2918 if (temp == NULL) \
2919 goto Error; \
2920 Py_XDECREF(result); \
2921 result = temp; \
2922 temp = NULL; \
2923 REDUCE(result) \
2926 if (Py_SIZE(b) <= FIVEARY_CUTOFF) {
2927 /* Left-to-right binary exponentiation (HAC Algorithm 14.79) */
2928 /* http://www.cacr.math.uwaterloo.ca/hac/about/chap14.pdf */
2929 for (i = Py_SIZE(b) - 1; i >= 0; --i) {
2930 digit bi = b->ob_digit[i];
2932 for (j = (digit)1 << (PyLong_SHIFT-1); j != 0; j >>= 1) {
2933 MULT(z, z, z)
2934 if (bi & j)
2935 MULT(z, a, z)
2939 else {
2940 /* Left-to-right 5-ary exponentiation (HAC Algorithm 14.82) */
2941 Py_INCREF(z); /* still holds 1L */
2942 table[0] = z;
2943 for (i = 1; i < 32; ++i)
2944 MULT(table[i-1], a, table[i])
2946 for (i = Py_SIZE(b) - 1; i >= 0; --i) {
2947 const digit bi = b->ob_digit[i];
2949 for (j = PyLong_SHIFT - 5; j >= 0; j -= 5) {
2950 const int index = (bi >> j) & 0x1f;
2951 for (k = 0; k < 5; ++k)
2952 MULT(z, z, z)
2953 if (index)
2954 MULT(z, table[index], z)
2959 if (negativeOutput && (Py_SIZE(z) != 0)) {
2960 temp = (PyLongObject *)long_sub(z, c);
2961 if (temp == NULL)
2962 goto Error;
2963 Py_DECREF(z);
2964 z = temp;
2965 temp = NULL;
2967 goto Done;
2969 Error:
2970 if (z != NULL) {
2971 Py_DECREF(z);
2972 z = NULL;
2974 /* fall through */
2975 Done:
2976 if (Py_SIZE(b) > FIVEARY_CUTOFF) {
2977 for (i = 0; i < 32; ++i)
2978 Py_XDECREF(table[i]);
2980 Py_DECREF(a);
2981 Py_DECREF(b);
2982 Py_XDECREF(c);
2983 Py_XDECREF(temp);
2984 return (PyObject *)z;
2987 static PyObject *
2988 long_invert(PyLongObject *v)
2990 /* Implement ~x as -(x+1) */
2991 PyLongObject *x;
2992 PyLongObject *w;
2993 w = (PyLongObject *)PyLong_FromLong(1L);
2994 if (w == NULL)
2995 return NULL;
2996 x = (PyLongObject *) long_add(v, w);
2997 Py_DECREF(w);
2998 if (x == NULL)
2999 return NULL;
3000 Py_SIZE(x) = -(Py_SIZE(x));
3001 return (PyObject *)x;
3004 static PyObject *
3005 long_neg(PyLongObject *v)
3007 PyLongObject *z;
3008 if (v->ob_size == 0 && PyLong_CheckExact(v)) {
3009 /* -0 == 0 */
3010 Py_INCREF(v);
3011 return (PyObject *) v;
3013 z = (PyLongObject *)_PyLong_Copy(v);
3014 if (z != NULL)
3015 z->ob_size = -(v->ob_size);
3016 return (PyObject *)z;
3019 static PyObject *
3020 long_abs(PyLongObject *v)
3022 if (v->ob_size < 0)
3023 return long_neg(v);
3024 else
3025 return long_long((PyObject *)v);
3028 static int
3029 long_nonzero(PyLongObject *v)
3031 return ABS(Py_SIZE(v)) != 0;
3034 static PyObject *
3035 long_rshift(PyLongObject *v, PyLongObject *w)
3037 PyLongObject *a, *b;
3038 PyLongObject *z = NULL;
3039 long shiftby;
3040 Py_ssize_t newsize, wordshift, loshift, hishift, i, j;
3041 digit lomask, himask;
3043 CONVERT_BINOP((PyObject *)v, (PyObject *)w, &a, &b);
3045 if (Py_SIZE(a) < 0) {
3046 /* Right shifting negative numbers is harder */
3047 PyLongObject *a1, *a2;
3048 a1 = (PyLongObject *) long_invert(a);
3049 if (a1 == NULL)
3050 goto rshift_error;
3051 a2 = (PyLongObject *) long_rshift(a1, b);
3052 Py_DECREF(a1);
3053 if (a2 == NULL)
3054 goto rshift_error;
3055 z = (PyLongObject *) long_invert(a2);
3056 Py_DECREF(a2);
3058 else {
3060 shiftby = PyLong_AsLong((PyObject *)b);
3061 if (shiftby == -1L && PyErr_Occurred())
3062 goto rshift_error;
3063 if (shiftby < 0) {
3064 PyErr_SetString(PyExc_ValueError,
3065 "negative shift count");
3066 goto rshift_error;
3068 wordshift = shiftby / PyLong_SHIFT;
3069 newsize = ABS(Py_SIZE(a)) - wordshift;
3070 if (newsize <= 0) {
3071 z = _PyLong_New(0);
3072 Py_DECREF(a);
3073 Py_DECREF(b);
3074 return (PyObject *)z;
3076 loshift = shiftby % PyLong_SHIFT;
3077 hishift = PyLong_SHIFT - loshift;
3078 lomask = ((digit)1 << hishift) - 1;
3079 himask = PyLong_MASK ^ lomask;
3080 z = _PyLong_New(newsize);
3081 if (z == NULL)
3082 goto rshift_error;
3083 if (Py_SIZE(a) < 0)
3084 Py_SIZE(z) = -(Py_SIZE(z));
3085 for (i = 0, j = wordshift; i < newsize; i++, j++) {
3086 z->ob_digit[i] = (a->ob_digit[j] >> loshift) & lomask;
3087 if (i+1 < newsize)
3088 z->ob_digit[i] |=
3089 (a->ob_digit[j+1] << hishift) & himask;
3091 z = long_normalize(z);
3093 rshift_error:
3094 Py_DECREF(a);
3095 Py_DECREF(b);
3096 return (PyObject *) z;
3100 static PyObject *
3101 long_lshift(PyObject *v, PyObject *w)
3103 /* This version due to Tim Peters */
3104 PyLongObject *a, *b;
3105 PyLongObject *z = NULL;
3106 long shiftby;
3107 Py_ssize_t oldsize, newsize, wordshift, remshift, i, j;
3108 twodigits accum;
3110 CONVERT_BINOP(v, w, &a, &b);
3112 shiftby = PyLong_AsLong((PyObject *)b);
3113 if (shiftby == -1L && PyErr_Occurred())
3114 goto lshift_error;
3115 if (shiftby < 0) {
3116 PyErr_SetString(PyExc_ValueError, "negative shift count");
3117 goto lshift_error;
3119 if ((long)(int)shiftby != shiftby) {
3120 PyErr_SetString(PyExc_ValueError,
3121 "outrageous left shift count");
3122 goto lshift_error;
3124 /* wordshift, remshift = divmod(shiftby, PyLong_SHIFT) */
3125 wordshift = (int)shiftby / PyLong_SHIFT;
3126 remshift = (int)shiftby - wordshift * PyLong_SHIFT;
3128 oldsize = ABS(a->ob_size);
3129 newsize = oldsize + wordshift;
3130 if (remshift)
3131 ++newsize;
3132 z = _PyLong_New(newsize);
3133 if (z == NULL)
3134 goto lshift_error;
3135 if (a->ob_size < 0)
3136 z->ob_size = -(z->ob_size);
3137 for (i = 0; i < wordshift; i++)
3138 z->ob_digit[i] = 0;
3139 accum = 0;
3140 for (i = wordshift, j = 0; j < oldsize; i++, j++) {
3141 accum |= (twodigits)a->ob_digit[j] << remshift;
3142 z->ob_digit[i] = (digit)(accum & PyLong_MASK);
3143 accum >>= PyLong_SHIFT;
3145 if (remshift)
3146 z->ob_digit[newsize-1] = (digit)accum;
3147 else
3148 assert(!accum);
3149 z = long_normalize(z);
3150 lshift_error:
3151 Py_DECREF(a);
3152 Py_DECREF(b);
3153 return (PyObject *) z;
3157 /* Bitwise and/xor/or operations */
3159 static PyObject *
3160 long_bitwise(PyLongObject *a,
3161 int op, /* '&', '|', '^' */
3162 PyLongObject *b)
3164 digit maska, maskb; /* 0 or PyLong_MASK */
3165 int negz;
3166 Py_ssize_t size_a, size_b, size_z, i;
3167 PyLongObject *z;
3168 digit diga, digb;
3169 PyObject *v;
3171 if (Py_SIZE(a) < 0) {
3172 a = (PyLongObject *) long_invert(a);
3173 if (a == NULL)
3174 return NULL;
3175 maska = PyLong_MASK;
3177 else {
3178 Py_INCREF(a);
3179 maska = 0;
3181 if (Py_SIZE(b) < 0) {
3182 b = (PyLongObject *) long_invert(b);
3183 if (b == NULL) {
3184 Py_DECREF(a);
3185 return NULL;
3187 maskb = PyLong_MASK;
3189 else {
3190 Py_INCREF(b);
3191 maskb = 0;
3194 negz = 0;
3195 switch (op) {
3196 case '^':
3197 if (maska != maskb) {
3198 maska ^= PyLong_MASK;
3199 negz = -1;
3201 break;
3202 case '&':
3203 if (maska && maskb) {
3204 op = '|';
3205 maska ^= PyLong_MASK;
3206 maskb ^= PyLong_MASK;
3207 negz = -1;
3209 break;
3210 case '|':
3211 if (maska || maskb) {
3212 op = '&';
3213 maska ^= PyLong_MASK;
3214 maskb ^= PyLong_MASK;
3215 negz = -1;
3217 break;
3220 /* JRH: The original logic here was to allocate the result value (z)
3221 as the longer of the two operands. However, there are some cases
3222 where the result is guaranteed to be shorter than that: AND of two
3223 positives, OR of two negatives: use the shorter number. AND with
3224 mixed signs: use the positive number. OR with mixed signs: use the
3225 negative number. After the transformations above, op will be '&'
3226 iff one of these cases applies, and mask will be non-0 for operands
3227 whose length should be ignored.
3230 size_a = Py_SIZE(a);
3231 size_b = Py_SIZE(b);
3232 size_z = op == '&'
3233 ? (maska
3234 ? size_b
3235 : (maskb ? size_a : MIN(size_a, size_b)))
3236 : MAX(size_a, size_b);
3237 z = _PyLong_New(size_z);
3238 if (z == NULL) {
3239 Py_DECREF(a);
3240 Py_DECREF(b);
3241 return NULL;
3244 for (i = 0; i < size_z; ++i) {
3245 diga = (i < size_a ? a->ob_digit[i] : 0) ^ maska;
3246 digb = (i < size_b ? b->ob_digit[i] : 0) ^ maskb;
3247 switch (op) {
3248 case '&': z->ob_digit[i] = diga & digb; break;
3249 case '|': z->ob_digit[i] = diga | digb; break;
3250 case '^': z->ob_digit[i] = diga ^ digb; break;
3254 Py_DECREF(a);
3255 Py_DECREF(b);
3256 z = long_normalize(z);
3257 if (negz == 0)
3258 return (PyObject *) z;
3259 v = long_invert(z);
3260 Py_DECREF(z);
3261 return v;
3264 static PyObject *
3265 long_and(PyObject *v, PyObject *w)
3267 PyLongObject *a, *b;
3268 PyObject *c;
3269 CONVERT_BINOP(v, w, &a, &b);
3270 c = long_bitwise(a, '&', b);
3271 Py_DECREF(a);
3272 Py_DECREF(b);
3273 return c;
3276 static PyObject *
3277 long_xor(PyObject *v, PyObject *w)
3279 PyLongObject *a, *b;
3280 PyObject *c;
3281 CONVERT_BINOP(v, w, &a, &b);
3282 c = long_bitwise(a, '^', b);
3283 Py_DECREF(a);
3284 Py_DECREF(b);
3285 return c;
3288 static PyObject *
3289 long_or(PyObject *v, PyObject *w)
3291 PyLongObject *a, *b;
3292 PyObject *c;
3293 CONVERT_BINOP(v, w, &a, &b);
3294 c = long_bitwise(a, '|', b);
3295 Py_DECREF(a);
3296 Py_DECREF(b);
3297 return c;
3300 static int
3301 long_coerce(PyObject **pv, PyObject **pw)
3303 if (PyInt_Check(*pw)) {
3304 *pw = PyLong_FromLong(PyInt_AS_LONG(*pw));
3305 if (*pw == NULL)
3306 return -1;
3307 Py_INCREF(*pv);
3308 return 0;
3310 else if (PyLong_Check(*pw)) {
3311 Py_INCREF(*pv);
3312 Py_INCREF(*pw);
3313 return 0;
3315 return 1; /* Can't do it */
3318 static PyObject *
3319 long_long(PyObject *v)
3321 if (PyLong_CheckExact(v))
3322 Py_INCREF(v);
3323 else
3324 v = _PyLong_Copy((PyLongObject *)v);
3325 return v;
3328 static PyObject *
3329 long_int(PyObject *v)
3331 long x;
3332 x = PyLong_AsLong(v);
3333 if (PyErr_Occurred()) {
3334 if (PyErr_ExceptionMatches(PyExc_OverflowError)) {
3335 PyErr_Clear();
3336 if (PyLong_CheckExact(v)) {
3337 Py_INCREF(v);
3338 return v;
3340 else
3341 return _PyLong_Copy((PyLongObject *)v);
3343 else
3344 return NULL;
3346 return PyInt_FromLong(x);
3349 static PyObject *
3350 long_float(PyObject *v)
3352 double result;
3353 result = PyLong_AsDouble(v);
3354 if (result == -1.0 && PyErr_Occurred())
3355 return NULL;
3356 return PyFloat_FromDouble(result);
3359 static PyObject *
3360 long_oct(PyObject *v)
3362 return _PyLong_Format(v, 8, 1, 0);
3365 static PyObject *
3366 long_hex(PyObject *v)
3368 return _PyLong_Format(v, 16, 1, 0);
3371 static PyObject *
3372 long_subtype_new(PyTypeObject *type, PyObject *args, PyObject *kwds);
3374 static PyObject *
3375 long_new(PyTypeObject *type, PyObject *args, PyObject *kwds)
3377 PyObject *x = NULL;
3378 int base = -909; /* unlikely! */
3379 static char *kwlist[] = {"x", "base", 0};
3381 if (type != &PyLong_Type)
3382 return long_subtype_new(type, args, kwds); /* Wimp out */
3383 if (!PyArg_ParseTupleAndKeywords(args, kwds, "|Oi:long", kwlist,
3384 &x, &base))
3385 return NULL;
3386 if (x == NULL)
3387 return PyLong_FromLong(0L);
3388 if (base == -909)
3389 return PyNumber_Long(x);
3390 else if (PyString_Check(x)) {
3391 /* Since PyLong_FromString doesn't have a length parameter,
3392 * check here for possible NULs in the string. */
3393 char *string = PyString_AS_STRING(x);
3394 if (strlen(string) != (size_t)PyString_Size(x)) {
3395 /* create a repr() of the input string,
3396 * just like PyLong_FromString does. */
3397 PyObject *srepr;
3398 srepr = PyObject_Repr(x);
3399 if (srepr == NULL)
3400 return NULL;
3401 PyErr_Format(PyExc_ValueError,
3402 "invalid literal for long() with base %d: %s",
3403 base, PyString_AS_STRING(srepr));
3404 Py_DECREF(srepr);
3405 return NULL;
3407 return PyLong_FromString(PyString_AS_STRING(x), NULL, base);
3409 #ifdef Py_USING_UNICODE
3410 else if (PyUnicode_Check(x))
3411 return PyLong_FromUnicode(PyUnicode_AS_UNICODE(x),
3412 PyUnicode_GET_SIZE(x),
3413 base);
3414 #endif
3415 else {
3416 PyErr_SetString(PyExc_TypeError,
3417 "long() can't convert non-string with explicit base");
3418 return NULL;
3422 /* Wimpy, slow approach to tp_new calls for subtypes of long:
3423 first create a regular long from whatever arguments we got,
3424 then allocate a subtype instance and initialize it from
3425 the regular long. The regular long is then thrown away.
3427 static PyObject *
3428 long_subtype_new(PyTypeObject *type, PyObject *args, PyObject *kwds)
3430 PyLongObject *tmp, *newobj;
3431 Py_ssize_t i, n;
3433 assert(PyType_IsSubtype(type, &PyLong_Type));
3434 tmp = (PyLongObject *)long_new(&PyLong_Type, args, kwds);
3435 if (tmp == NULL)
3436 return NULL;
3437 assert(PyLong_CheckExact(tmp));
3438 n = Py_SIZE(tmp);
3439 if (n < 0)
3440 n = -n;
3441 newobj = (PyLongObject *)type->tp_alloc(type, n);
3442 if (newobj == NULL) {
3443 Py_DECREF(tmp);
3444 return NULL;
3446 assert(PyLong_Check(newobj));
3447 Py_SIZE(newobj) = Py_SIZE(tmp);
3448 for (i = 0; i < n; i++)
3449 newobj->ob_digit[i] = tmp->ob_digit[i];
3450 Py_DECREF(tmp);
3451 return (PyObject *)newobj;
3454 static PyObject *
3455 long_getnewargs(PyLongObject *v)
3457 return Py_BuildValue("(N)", _PyLong_Copy(v));
3460 static PyObject *
3461 long_getN(PyLongObject *v, void *context) {
3462 return PyLong_FromLong((Py_intptr_t)context);
3465 static PyObject *
3466 long__format__(PyObject *self, PyObject *args)
3468 PyObject *format_spec;
3470 if (!PyArg_ParseTuple(args, "O:__format__", &format_spec))
3471 return NULL;
3472 if (PyBytes_Check(format_spec))
3473 return _PyLong_FormatAdvanced(self,
3474 PyBytes_AS_STRING(format_spec),
3475 PyBytes_GET_SIZE(format_spec));
3476 if (PyUnicode_Check(format_spec)) {
3477 /* Convert format_spec to a str */
3478 PyObject *result;
3479 PyObject *str_spec = PyObject_Str(format_spec);
3481 if (str_spec == NULL)
3482 return NULL;
3484 result = _PyLong_FormatAdvanced(self,
3485 PyBytes_AS_STRING(str_spec),
3486 PyBytes_GET_SIZE(str_spec));
3488 Py_DECREF(str_spec);
3489 return result;
3491 PyErr_SetString(PyExc_TypeError, "__format__ requires str or unicode");
3492 return NULL;
3495 static PyObject *
3496 long_sizeof(PyLongObject *v)
3498 Py_ssize_t res;
3500 res = v->ob_type->tp_basicsize + ABS(Py_SIZE(v))*sizeof(digit);
3501 return PyInt_FromSsize_t(res);
3504 static PyObject *
3505 long_bit_length(PyLongObject *v)
3507 PyLongObject *result, *x, *y;
3508 Py_ssize_t ndigits, msd_bits = 0;
3509 digit msd;
3511 assert(v != NULL);
3512 assert(PyLong_Check(v));
3514 ndigits = ABS(Py_SIZE(v));
3515 if (ndigits == 0)
3516 return PyInt_FromLong(0);
3518 msd = v->ob_digit[ndigits-1];
3519 while (msd >= 32) {
3520 msd_bits += 6;
3521 msd >>= 6;
3523 msd_bits += (long)(BitLengthTable[msd]);
3525 if (ndigits <= PY_SSIZE_T_MAX/PyLong_SHIFT)
3526 return PyInt_FromSsize_t((ndigits-1)*PyLong_SHIFT + msd_bits);
3528 /* expression above may overflow; use Python integers instead */
3529 result = (PyLongObject *)PyLong_FromSsize_t(ndigits - 1);
3530 if (result == NULL)
3531 return NULL;
3532 x = (PyLongObject *)PyLong_FromLong(PyLong_SHIFT);
3533 if (x == NULL)
3534 goto error;
3535 y = (PyLongObject *)long_mul(result, x);
3536 Py_DECREF(x);
3537 if (y == NULL)
3538 goto error;
3539 Py_DECREF(result);
3540 result = y;
3542 x = (PyLongObject *)PyLong_FromLong(msd_bits);
3543 if (x == NULL)
3544 goto error;
3545 y = (PyLongObject *)long_add(result, x);
3546 Py_DECREF(x);
3547 if (y == NULL)
3548 goto error;
3549 Py_DECREF(result);
3550 result = y;
3552 return (PyObject *)result;
3554 error:
3555 Py_DECREF(result);
3556 return NULL;
3559 PyDoc_STRVAR(long_bit_length_doc,
3560 "long.bit_length() -> int or long\n\
3562 Number of bits necessary to represent self in binary.\n\
3563 >>> bin(37L)\n\
3564 '0b100101'\n\
3565 >>> (37L).bit_length()\n\
3566 6");
3568 #if 0
3569 static PyObject *
3570 long_is_finite(PyObject *v)
3572 Py_RETURN_TRUE;
3574 #endif
3576 static PyMethodDef long_methods[] = {
3577 {"conjugate", (PyCFunction)long_long, METH_NOARGS,
3578 "Returns self, the complex conjugate of any long."},
3579 {"bit_length", (PyCFunction)long_bit_length, METH_NOARGS,
3580 long_bit_length_doc},
3581 #if 0
3582 {"is_finite", (PyCFunction)long_is_finite, METH_NOARGS,
3583 "Returns always True."},
3584 #endif
3585 {"__trunc__", (PyCFunction)long_long, METH_NOARGS,
3586 "Truncating an Integral returns itself."},
3587 {"__getnewargs__", (PyCFunction)long_getnewargs, METH_NOARGS},
3588 {"__format__", (PyCFunction)long__format__, METH_VARARGS},
3589 {"__sizeof__", (PyCFunction)long_sizeof, METH_NOARGS,
3590 "Returns size in memory, in bytes"},
3591 {NULL, NULL} /* sentinel */
3594 static PyGetSetDef long_getset[] = {
3595 {"real",
3596 (getter)long_long, (setter)NULL,
3597 "the real part of a complex number",
3598 NULL},
3599 {"imag",
3600 (getter)long_getN, (setter)NULL,
3601 "the imaginary part of a complex number",
3602 (void*)0},
3603 {"numerator",
3604 (getter)long_long, (setter)NULL,
3605 "the numerator of a rational number in lowest terms",
3606 NULL},
3607 {"denominator",
3608 (getter)long_getN, (setter)NULL,
3609 "the denominator of a rational number in lowest terms",
3610 (void*)1},
3611 {NULL} /* Sentinel */
3614 PyDoc_STRVAR(long_doc,
3615 "long(x[, base]) -> integer\n\
3617 Convert a string or number to a long integer, if possible. A floating\n\
3618 point argument will be truncated towards zero (this does not include a\n\
3619 string representation of a floating point number!) When converting a\n\
3620 string, use the optional base. It is an error to supply a base when\n\
3621 converting a non-string.");
3623 static PyNumberMethods long_as_number = {
3624 (binaryfunc) long_add, /*nb_add*/
3625 (binaryfunc) long_sub, /*nb_subtract*/
3626 (binaryfunc) long_mul, /*nb_multiply*/
3627 long_classic_div, /*nb_divide*/
3628 long_mod, /*nb_remainder*/
3629 long_divmod, /*nb_divmod*/
3630 long_pow, /*nb_power*/
3631 (unaryfunc) long_neg, /*nb_negative*/
3632 (unaryfunc) long_long, /*tp_positive*/
3633 (unaryfunc) long_abs, /*tp_absolute*/
3634 (inquiry) long_nonzero, /*tp_nonzero*/
3635 (unaryfunc) long_invert, /*nb_invert*/
3636 long_lshift, /*nb_lshift*/
3637 (binaryfunc) long_rshift, /*nb_rshift*/
3638 long_and, /*nb_and*/
3639 long_xor, /*nb_xor*/
3640 long_or, /*nb_or*/
3641 long_coerce, /*nb_coerce*/
3642 long_int, /*nb_int*/
3643 long_long, /*nb_long*/
3644 long_float, /*nb_float*/
3645 long_oct, /*nb_oct*/
3646 long_hex, /*nb_hex*/
3647 0, /* nb_inplace_add */
3648 0, /* nb_inplace_subtract */
3649 0, /* nb_inplace_multiply */
3650 0, /* nb_inplace_divide */
3651 0, /* nb_inplace_remainder */
3652 0, /* nb_inplace_power */
3653 0, /* nb_inplace_lshift */
3654 0, /* nb_inplace_rshift */
3655 0, /* nb_inplace_and */
3656 0, /* nb_inplace_xor */
3657 0, /* nb_inplace_or */
3658 long_div, /* nb_floor_divide */
3659 long_true_divide, /* nb_true_divide */
3660 0, /* nb_inplace_floor_divide */
3661 0, /* nb_inplace_true_divide */
3662 long_long, /* nb_index */
3665 PyTypeObject PyLong_Type = {
3666 PyObject_HEAD_INIT(&PyType_Type)
3667 0, /* ob_size */
3668 "long", /* tp_name */
3669 offsetof(PyLongObject, ob_digit), /* tp_basicsize */
3670 sizeof(digit), /* tp_itemsize */
3671 long_dealloc, /* tp_dealloc */
3672 0, /* tp_print */
3673 0, /* tp_getattr */
3674 0, /* tp_setattr */
3675 (cmpfunc)long_compare, /* tp_compare */
3676 long_repr, /* tp_repr */
3677 &long_as_number, /* tp_as_number */
3678 0, /* tp_as_sequence */
3679 0, /* tp_as_mapping */
3680 (hashfunc)long_hash, /* tp_hash */
3681 0, /* tp_call */
3682 long_str, /* tp_str */
3683 PyObject_GenericGetAttr, /* tp_getattro */
3684 0, /* tp_setattro */
3685 0, /* tp_as_buffer */
3686 Py_TPFLAGS_DEFAULT | Py_TPFLAGS_CHECKTYPES |
3687 Py_TPFLAGS_BASETYPE | Py_TPFLAGS_LONG_SUBCLASS, /* tp_flags */
3688 long_doc, /* tp_doc */
3689 0, /* tp_traverse */
3690 0, /* tp_clear */
3691 0, /* tp_richcompare */
3692 0, /* tp_weaklistoffset */
3693 0, /* tp_iter */
3694 0, /* tp_iternext */
3695 long_methods, /* tp_methods */
3696 0, /* tp_members */
3697 long_getset, /* tp_getset */
3698 0, /* tp_base */
3699 0, /* tp_dict */
3700 0, /* tp_descr_get */
3701 0, /* tp_descr_set */
3702 0, /* tp_dictoffset */
3703 0, /* tp_init */
3704 0, /* tp_alloc */
3705 long_new, /* tp_new */
3706 PyObject_Del, /* tp_free */
3709 static PyTypeObject Long_InfoType;
3711 PyDoc_STRVAR(long_info__doc__,
3712 "sys.long_info\n\
3714 A struct sequence that holds information about Python's\n\
3715 internal representation of integers. The attributes are read only.");
3717 static PyStructSequence_Field long_info_fields[] = {
3718 {"bits_per_digit", "size of a digit in bits"},
3719 {"sizeof_digit", "size in bytes of the C type used to "
3720 "represent a digit"},
3721 {NULL, NULL}
3724 static PyStructSequence_Desc long_info_desc = {
3725 "sys.long_info", /* name */
3726 long_info__doc__, /* doc */
3727 long_info_fields, /* fields */
3728 2 /* number of fields */
3731 PyObject *
3732 PyLong_GetInfo(void)
3734 PyObject* long_info;
3735 int field = 0;
3736 long_info = PyStructSequence_New(&Long_InfoType);
3737 if (long_info == NULL)
3738 return NULL;
3739 PyStructSequence_SET_ITEM(long_info, field++, PyLong_FromLong(PyLong_SHIFT));
3740 PyStructSequence_SET_ITEM(long_info, field++, PyLong_FromLong(sizeof(digit)));
3741 if (PyErr_Occurred()) {
3742 Py_CLEAR(long_info);
3743 return NULL;
3745 return long_info;
3749 _PyLong_Init(void)
3751 /* initialize long_info */
3752 if (Long_InfoType.tp_name == 0)
3753 PyStructSequence_InitType(&Long_InfoType, &long_info_desc);
3754 return 1;