blob: 38e707220a2ccfa401f8101149f2fffc7060a76d [file] [log] [blame]
Guido van Rossumedcc38a1991-05-05 20:09:44 +00001/* Long (arbitrary precision) integer object implementation */
2
Guido van Rossum23d6f0e1991-05-14 12:06:49 +00003/* XXX The functional organization of this file is terrible */
4
Guido van Rossumc0b618a1997-05-02 03:12:38 +00005#include "Python.h"
Guido van Rossumedcc38a1991-05-05 20:09:44 +00006#include "longintrepr.h"
Guido van Rossumc0b618a1997-05-02 03:12:38 +00007
Mark Dickinsonc6300392009-04-20 21:38:00 +00008#include <float.h>
Guido van Rossumeb1fafc1994-08-29 12:47:19 +00009#include <ctype.h>
Mark Dickinson5a74bf62009-02-15 11:04:38 +000010#include <stddef.h>
Guido van Rossumedcc38a1991-05-05 20:09:44 +000011
Guido van Rossumddefaf32007-01-14 03:31:43 +000012#ifndef NSMALLPOSINTS
Antoine Pitrouf95a1b32010-05-09 15:52:27 +000013#define NSMALLPOSINTS 257
Guido van Rossumddefaf32007-01-14 03:31:43 +000014#endif
15#ifndef NSMALLNEGINTS
Antoine Pitrouf95a1b32010-05-09 15:52:27 +000016#define NSMALLNEGINTS 5
Guido van Rossumddefaf32007-01-14 03:31:43 +000017#endif
Facundo Batista6e6f59b2008-07-24 18:57:11 +000018
Mark Dickinsone4416742009-02-15 15:14:57 +000019/* convert a PyLong of size 1, 0 or -1 to an sdigit */
Victor Stinner08a80b12013-07-17 22:33:42 +020020#define MEDIUM_VALUE(x) (assert(-1 <= Py_SIZE(x) && Py_SIZE(x) <= 1), \
21 Py_SIZE(x) < 0 ? -(sdigit)(x)->ob_digit[0] : \
Antoine Pitrouf95a1b32010-05-09 15:52:27 +000022 (Py_SIZE(x) == 0 ? (sdigit)0 : \
23 (sdigit)(x)->ob_digit[0]))
Facundo Batista6e6f59b2008-07-24 18:57:11 +000024
Guido van Rossumddefaf32007-01-14 03:31:43 +000025#if NSMALLNEGINTS + NSMALLPOSINTS > 0
26/* Small integers are preallocated in this array so that they
27 can be shared.
28 The integers that are preallocated are those in the range
29 -NSMALLNEGINTS (inclusive) to NSMALLPOSINTS (not inclusive).
30*/
31static PyLongObject small_ints[NSMALLNEGINTS + NSMALLPOSINTS];
32#ifdef COUNT_ALLOCS
Mark Dickinsonc286e582012-09-20 21:29:28 +010033Py_ssize_t quick_int_allocs, quick_neg_int_allocs;
Guido van Rossumddefaf32007-01-14 03:31:43 +000034#endif
35
Guido van Rossum7eaf8222007-06-18 17:58:50 +000036static PyObject *
Mark Dickinsone4416742009-02-15 15:14:57 +000037get_small_int(sdigit ival)
Guido van Rossumddefaf32007-01-14 03:31:43 +000038{
Benjamin Peterson45c9dce2014-03-14 21:53:51 -050039 PyObject *v;
Benjamin Peterson041c38a2014-03-14 21:47:23 -050040 assert(-NSMALLNEGINTS <= ival && ival < NSMALLPOSINTS);
Benjamin Peterson45c9dce2014-03-14 21:53:51 -050041 v = (PyObject *)&small_ints[ival + NSMALLNEGINTS];
Antoine Pitrouf95a1b32010-05-09 15:52:27 +000042 Py_INCREF(v);
Guido van Rossumddefaf32007-01-14 03:31:43 +000043#ifdef COUNT_ALLOCS
Antoine Pitrouf95a1b32010-05-09 15:52:27 +000044 if (ival >= 0)
45 quick_int_allocs++;
46 else
47 quick_neg_int_allocs++;
Guido van Rossumddefaf32007-01-14 03:31:43 +000048#endif
Antoine Pitrouf95a1b32010-05-09 15:52:27 +000049 return v;
Guido van Rossumddefaf32007-01-14 03:31:43 +000050}
51#define CHECK_SMALL_INT(ival) \
Antoine Pitrouf95a1b32010-05-09 15:52:27 +000052 do if (-NSMALLNEGINTS <= ival && ival < NSMALLPOSINTS) { \
53 return get_small_int((sdigit)ival); \
54 } while(0)
Guido van Rossumddefaf32007-01-14 03:31:43 +000055
Antoine Pitrouf95a1b32010-05-09 15:52:27 +000056static PyLongObject *
Facundo Batista6e6f59b2008-07-24 18:57:11 +000057maybe_small_long(PyLongObject *v)
58{
Victor Stinner45e8e2f2014-05-14 17:24:35 +020059 if (v && Py_ABS(Py_SIZE(v)) <= 1) {
Antoine Pitrouf95a1b32010-05-09 15:52:27 +000060 sdigit ival = MEDIUM_VALUE(v);
61 if (-NSMALLNEGINTS <= ival && ival < NSMALLPOSINTS) {
62 Py_DECREF(v);
63 return (PyLongObject *)get_small_int(ival);
64 }
65 }
66 return v;
Facundo Batista6e6f59b2008-07-24 18:57:11 +000067}
Guido van Rossumddefaf32007-01-14 03:31:43 +000068#else
69#define CHECK_SMALL_INT(ival)
Facundo Batista6e6f59b2008-07-24 18:57:11 +000070#define maybe_small_long(val) (val)
Guido van Rossumddefaf32007-01-14 03:31:43 +000071#endif
72
Serhiy Storchaka95949422013-08-27 19:40:23 +030073/* If a freshly-allocated int is already shared, it must
Guido van Rossumddefaf32007-01-14 03:31:43 +000074 be a small integer, so negating it must go to PyLong_FromLong */
Victor Stinner8aed6f12013-07-17 22:31:17 +020075Py_LOCAL_INLINE(void)
76_PyLong_Negate(PyLongObject **x_p)
77{
78 PyLongObject *x;
79
80 x = (PyLongObject *)*x_p;
81 if (Py_REFCNT(x) == 1) {
82 Py_SIZE(x) = -Py_SIZE(x);
83 return;
84 }
85
86 *x_p = (PyLongObject *)PyLong_FromLong(-MEDIUM_VALUE(x));
87 Py_DECREF(x);
88}
89
Serhiy Storchaka95949422013-08-27 19:40:23 +030090/* For int multiplication, use the O(N**2) school algorithm unless
Tim Peters5af4e6c2002-08-12 02:31:19 +000091 * both operands contain more than KARATSUBA_CUTOFF digits (this
Serhiy Storchaka95949422013-08-27 19:40:23 +030092 * being an internal Python int digit, in base BASE).
Tim Peters5af4e6c2002-08-12 02:31:19 +000093 */
Tim Peters0973b992004-08-29 22:16:50 +000094#define KARATSUBA_CUTOFF 70
95#define KARATSUBA_SQUARE_CUTOFF (2 * KARATSUBA_CUTOFF)
Tim Peters5af4e6c2002-08-12 02:31:19 +000096
Tim Peters47e52ee2004-08-30 02:44:38 +000097/* For exponentiation, use the binary left-to-right algorithm
98 * unless the exponent contains more than FIVEARY_CUTOFF digits.
99 * In that case, do 5 bits at a time. The potential drawback is that
100 * a table of 2**5 intermediate results is computed.
101 */
102#define FIVEARY_CUTOFF 8
103
Mark Dickinsoncdd01d22010-05-10 21:37:34 +0000104#define SIGCHECK(PyTryBlock) \
105 do { \
106 if (PyErr_CheckSignals()) PyTryBlock \
107 } while(0)
Guido van Rossum23d6f0e1991-05-14 12:06:49 +0000108
Serhiy Storchaka95949422013-08-27 19:40:23 +0300109/* Normalize (remove leading zeros from) an int object.
Guido van Rossumedcc38a1991-05-05 20:09:44 +0000110 Doesn't attempt to free the storage--in most cases, due to the nature
111 of the algorithms used, this could save at most be one word anyway. */
112
Guido van Rossumc0b618a1997-05-02 03:12:38 +0000113static PyLongObject *
Antoine Pitrou9ed5f272013-08-13 20:18:52 +0200114long_normalize(PyLongObject *v)
Guido van Rossumedcc38a1991-05-05 20:09:44 +0000115{
Victor Stinner45e8e2f2014-05-14 17:24:35 +0200116 Py_ssize_t j = Py_ABS(Py_SIZE(v));
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000117 Py_ssize_t i = j;
Tim Peters5af4e6c2002-08-12 02:31:19 +0000118
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000119 while (i > 0 && v->ob_digit[i-1] == 0)
120 --i;
121 if (i != j)
122 Py_SIZE(v) = (Py_SIZE(v) < 0) ? -(i) : i;
123 return v;
Guido van Rossumedcc38a1991-05-05 20:09:44 +0000124}
125
Serhiy Storchaka31a65542013-12-11 21:07:54 +0200126/* _PyLong_FromNbInt: Convert the given object to a PyLongObject
127 using the nb_int slot, if available. Raise TypeError if either the
128 nb_int slot is not available or the result of the call to nb_int
129 returns something not of type int.
130*/
131PyLongObject *
132_PyLong_FromNbInt(PyObject *integral)
133{
134 PyNumberMethods *nb;
135 PyObject *result;
136
137 /* Fast path for the case that we already have an int. */
138 if (PyLong_CheckExact(integral)) {
139 Py_INCREF(integral);
140 return (PyLongObject *)integral;
141 }
142
143 nb = Py_TYPE(integral)->tp_as_number;
144 if (nb == NULL || nb->nb_int == NULL) {
145 PyErr_Format(PyExc_TypeError,
146 "an integer is required (got type %.200s)",
147 Py_TYPE(integral)->tp_name);
148 return NULL;
149 }
150
151 /* Convert using the nb_int slot, which should return something
152 of exact type int. */
153 result = nb->nb_int(integral);
154 if (!result || PyLong_CheckExact(result))
155 return (PyLongObject *)result;
156 if (!PyLong_Check(result)) {
157 PyErr_Format(PyExc_TypeError,
158 "__int__ returned non-int (type %.200s)",
159 result->ob_type->tp_name);
160 Py_DECREF(result);
161 return NULL;
162 }
163 /* Issue #17576: warn if 'result' not of exact type int. */
164 if (PyErr_WarnFormat(PyExc_DeprecationWarning, 1,
165 "__int__ returned non-int (type %.200s). "
166 "The ability to return an instance of a strict subclass of int "
167 "is deprecated, and may be removed in a future version of Python.",
168 result->ob_type->tp_name)) {
169 Py_DECREF(result);
170 return NULL;
171 }
172 return (PyLongObject *)result;
173}
174
175
Serhiy Storchaka95949422013-08-27 19:40:23 +0300176/* Allocate a new int object with size digits.
Guido van Rossumedcc38a1991-05-05 20:09:44 +0000177 Return NULL and set exception if we run out of memory. */
178
Mark Dickinson5a74bf62009-02-15 11:04:38 +0000179#define MAX_LONG_DIGITS \
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000180 ((PY_SSIZE_T_MAX - offsetof(PyLongObject, ob_digit))/sizeof(digit))
Mark Dickinson5a74bf62009-02-15 11:04:38 +0000181
Guido van Rossumc0b618a1997-05-02 03:12:38 +0000182PyLongObject *
Martin v. Löwis18e16552006-02-15 17:27:45 +0000183_PyLong_New(Py_ssize_t size)
Guido van Rossumedcc38a1991-05-05 20:09:44 +0000184{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000185 PyLongObject *result;
186 /* Number of bytes needed is: offsetof(PyLongObject, ob_digit) +
187 sizeof(digit)*size. Previous incarnations of this code used
188 sizeof(PyVarObject) instead of the offsetof, but this risks being
189 incorrect in the presence of padding between the PyVarObject header
190 and the digits. */
191 if (size > (Py_ssize_t)MAX_LONG_DIGITS) {
192 PyErr_SetString(PyExc_OverflowError,
193 "too many digits in integer");
194 return NULL;
195 }
196 result = PyObject_MALLOC(offsetof(PyLongObject, ob_digit) +
197 size*sizeof(digit));
198 if (!result) {
199 PyErr_NoMemory();
200 return NULL;
201 }
202 return (PyLongObject*)PyObject_INIT_VAR(result, &PyLong_Type, size);
Guido van Rossumedcc38a1991-05-05 20:09:44 +0000203}
204
Tim Peters64b5ce32001-09-10 20:52:51 +0000205PyObject *
206_PyLong_Copy(PyLongObject *src)
207{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000208 PyLongObject *result;
209 Py_ssize_t i;
Tim Peters64b5ce32001-09-10 20:52:51 +0000210
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000211 assert(src != NULL);
212 i = Py_SIZE(src);
213 if (i < 0)
214 i = -(i);
215 if (i < 2) {
Mark Dickinsonbcc17ee2012-04-20 21:42:49 +0100216 sdigit ival = MEDIUM_VALUE(src);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000217 CHECK_SMALL_INT(ival);
218 }
219 result = _PyLong_New(i);
220 if (result != NULL) {
221 Py_SIZE(result) = Py_SIZE(src);
222 while (--i >= 0)
223 result->ob_digit[i] = src->ob_digit[i];
224 }
225 return (PyObject *)result;
Tim Peters64b5ce32001-09-10 20:52:51 +0000226}
227
Serhiy Storchaka95949422013-08-27 19:40:23 +0300228/* Create a new int object from a C long int */
Guido van Rossumedcc38a1991-05-05 20:09:44 +0000229
Guido van Rossumc0b618a1997-05-02 03:12:38 +0000230PyObject *
Tim Peters9f688bf2000-07-07 15:53:28 +0000231PyLong_FromLong(long ival)
Guido van Rossumedcc38a1991-05-05 20:09:44 +0000232{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000233 PyLongObject *v;
234 unsigned long abs_ival;
235 unsigned long t; /* unsigned so >> doesn't propagate sign bit */
236 int ndigits = 0;
237 int sign = 1;
Guido van Rossumddefaf32007-01-14 03:31:43 +0000238
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000239 CHECK_SMALL_INT(ival);
Tim Petersce9de2f2001-06-14 04:56:19 +0000240
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000241 if (ival < 0) {
242 /* negate: can't write this as abs_ival = -ival since that
243 invokes undefined behaviour when ival is LONG_MIN */
244 abs_ival = 0U-(unsigned long)ival;
245 sign = -1;
246 }
247 else {
248 abs_ival = (unsigned long)ival;
249 }
Tim Petersce9de2f2001-06-14 04:56:19 +0000250
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000251 /* Fast path for single-digit ints */
252 if (!(abs_ival >> PyLong_SHIFT)) {
253 v = _PyLong_New(1);
254 if (v) {
255 Py_SIZE(v) = sign;
256 v->ob_digit[0] = Py_SAFE_DOWNCAST(
257 abs_ival, unsigned long, digit);
258 }
259 return (PyObject*)v;
260 }
Guido van Rossumddefaf32007-01-14 03:31:43 +0000261
Mark Dickinson249b8982009-04-27 19:41:00 +0000262#if PyLong_SHIFT==15
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000263 /* 2 digits */
264 if (!(abs_ival >> 2*PyLong_SHIFT)) {
265 v = _PyLong_New(2);
266 if (v) {
267 Py_SIZE(v) = 2*sign;
268 v->ob_digit[0] = Py_SAFE_DOWNCAST(
269 abs_ival & PyLong_MASK, unsigned long, digit);
270 v->ob_digit[1] = Py_SAFE_DOWNCAST(
271 abs_ival >> PyLong_SHIFT, unsigned long, digit);
272 }
273 return (PyObject*)v;
274 }
Mark Dickinsonbd792642009-03-18 20:06:12 +0000275#endif
Guido van Rossumddefaf32007-01-14 03:31:43 +0000276
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000277 /* Larger numbers: loop to determine number of digits */
278 t = abs_ival;
279 while (t) {
280 ++ndigits;
281 t >>= PyLong_SHIFT;
282 }
283 v = _PyLong_New(ndigits);
284 if (v != NULL) {
285 digit *p = v->ob_digit;
286 Py_SIZE(v) = ndigits*sign;
287 t = abs_ival;
288 while (t) {
289 *p++ = Py_SAFE_DOWNCAST(
290 t & PyLong_MASK, unsigned long, digit);
291 t >>= PyLong_SHIFT;
292 }
293 }
294 return (PyObject *)v;
Guido van Rossumedcc38a1991-05-05 20:09:44 +0000295}
296
Serhiy Storchaka95949422013-08-27 19:40:23 +0300297/* Create a new int object from a C unsigned long int */
Guido van Rossum53756b11997-01-03 17:14:46 +0000298
Guido van Rossumc0b618a1997-05-02 03:12:38 +0000299PyObject *
Tim Peters9f688bf2000-07-07 15:53:28 +0000300PyLong_FromUnsignedLong(unsigned long ival)
Guido van Rossum53756b11997-01-03 17:14:46 +0000301{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000302 PyLongObject *v;
303 unsigned long t;
304 int ndigits = 0;
Tim Petersce9de2f2001-06-14 04:56:19 +0000305
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000306 if (ival < PyLong_BASE)
307 return PyLong_FromLong(ival);
308 /* Count the number of Python digits. */
309 t = (unsigned long)ival;
310 while (t) {
311 ++ndigits;
312 t >>= PyLong_SHIFT;
313 }
314 v = _PyLong_New(ndigits);
315 if (v != NULL) {
316 digit *p = v->ob_digit;
317 Py_SIZE(v) = ndigits;
318 while (ival) {
319 *p++ = (digit)(ival & PyLong_MASK);
320 ival >>= PyLong_SHIFT;
321 }
322 }
323 return (PyObject *)v;
Guido van Rossum53756b11997-01-03 17:14:46 +0000324}
325
Serhiy Storchaka95949422013-08-27 19:40:23 +0300326/* Create a new int object from a C double */
Guido van Rossum149e9ea1991-06-03 10:58:24 +0000327
Guido van Rossumc0b618a1997-05-02 03:12:38 +0000328PyObject *
Guido van Rossumc0b618a1997-05-02 03:12:38 +0000329PyLong_FromDouble(double dval)
Guido van Rossum149e9ea1991-06-03 10:58:24 +0000330{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000331 PyLongObject *v;
332 double frac;
333 int i, ndig, expo, neg;
334 neg = 0;
335 if (Py_IS_INFINITY(dval)) {
336 PyErr_SetString(PyExc_OverflowError,
Mark Dickinson22b20182010-05-10 21:27:53 +0000337 "cannot convert float infinity to integer");
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000338 return NULL;
339 }
340 if (Py_IS_NAN(dval)) {
341 PyErr_SetString(PyExc_ValueError,
Mark Dickinson22b20182010-05-10 21:27:53 +0000342 "cannot convert float NaN to integer");
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000343 return NULL;
344 }
345 if (dval < 0.0) {
346 neg = 1;
347 dval = -dval;
348 }
349 frac = frexp(dval, &expo); /* dval = frac*2**expo; 0.0 <= frac < 1.0 */
350 if (expo <= 0)
351 return PyLong_FromLong(0L);
352 ndig = (expo-1) / PyLong_SHIFT + 1; /* Number of 'digits' in result */
353 v = _PyLong_New(ndig);
354 if (v == NULL)
355 return NULL;
356 frac = ldexp(frac, (expo-1) % PyLong_SHIFT + 1);
357 for (i = ndig; --i >= 0; ) {
358 digit bits = (digit)frac;
359 v->ob_digit[i] = bits;
360 frac = frac - (double)bits;
361 frac = ldexp(frac, PyLong_SHIFT);
362 }
363 if (neg)
364 Py_SIZE(v) = -(Py_SIZE(v));
365 return (PyObject *)v;
Guido van Rossum149e9ea1991-06-03 10:58:24 +0000366}
367
Thomas Wouters89f507f2006-12-13 04:49:30 +0000368/* Checking for overflow in PyLong_AsLong is a PITA since C doesn't define
369 * anything about what happens when a signed integer operation overflows,
370 * and some compilers think they're doing you a favor by being "clever"
371 * then. The bit pattern for the largest postive signed long is
372 * (unsigned long)LONG_MAX, and for the smallest negative signed long
373 * it is abs(LONG_MIN), which we could write -(unsigned long)LONG_MIN.
374 * However, some other compilers warn about applying unary minus to an
375 * unsigned operand. Hence the weird "0-".
376 */
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000377#define PY_ABS_LONG_MIN (0-(unsigned long)LONG_MIN)
378#define PY_ABS_SSIZE_T_MIN (0-(size_t)PY_SSIZE_T_MIN)
Thomas Wouters89f507f2006-12-13 04:49:30 +0000379
Serhiy Storchaka95949422013-08-27 19:40:23 +0300380/* Get a C long int from an int object or any object that has an __int__
Mark Dickinson8d48b432011-10-23 20:47:14 +0100381 method.
382
383 On overflow, return -1 and set *overflow to 1 or -1 depending on the sign of
384 the result. Otherwise *overflow is 0.
385
386 For other errors (e.g., TypeError), return -1 and set an error condition.
387 In this case *overflow will be 0.
388*/
Guido van Rossumedcc38a1991-05-05 20:09:44 +0000389
390long
Martin v. Löwisd1a1d1e2007-12-04 22:10:37 +0000391PyLong_AsLongAndOverflow(PyObject *vv, int *overflow)
Guido van Rossumedcc38a1991-05-05 20:09:44 +0000392{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000393 /* This version by Tim Peters */
Antoine Pitrou9ed5f272013-08-13 20:18:52 +0200394 PyLongObject *v;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000395 unsigned long x, prev;
396 long res;
397 Py_ssize_t i;
398 int sign;
399 int do_decref = 0; /* if nb_int was called */
Guido van Rossumf7531811998-05-26 14:33:37 +0000400
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000401 *overflow = 0;
402 if (vv == NULL) {
403 PyErr_BadInternalCall();
404 return -1;
405 }
Guido van Rossumddefaf32007-01-14 03:31:43 +0000406
Serhiy Storchaka31a65542013-12-11 21:07:54 +0200407 if (PyLong_Check(vv)) {
408 v = (PyLongObject *)vv;
409 }
410 else {
411 v = _PyLong_FromNbInt(vv);
412 if (v == NULL)
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000413 return -1;
414 do_decref = 1;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000415 }
Guido van Rossumddefaf32007-01-14 03:31:43 +0000416
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000417 res = -1;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000418 i = Py_SIZE(v);
Guido van Rossumf7531811998-05-26 14:33:37 +0000419
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000420 switch (i) {
421 case -1:
422 res = -(sdigit)v->ob_digit[0];
423 break;
424 case 0:
425 res = 0;
426 break;
427 case 1:
428 res = v->ob_digit[0];
429 break;
430 default:
431 sign = 1;
432 x = 0;
433 if (i < 0) {
434 sign = -1;
435 i = -(i);
436 }
437 while (--i >= 0) {
438 prev = x;
439 x = (x << PyLong_SHIFT) | v->ob_digit[i];
440 if ((x >> PyLong_SHIFT) != prev) {
441 *overflow = sign;
442 goto exit;
443 }
444 }
445 /* Haven't lost any bits, but casting to long requires extra
446 * care (see comment above).
447 */
448 if (x <= (unsigned long)LONG_MAX) {
449 res = (long)x * sign;
450 }
451 else if (sign < 0 && x == PY_ABS_LONG_MIN) {
452 res = LONG_MIN;
453 }
454 else {
455 *overflow = sign;
456 /* res is already set to -1 */
457 }
458 }
Mark Dickinson22b20182010-05-10 21:27:53 +0000459 exit:
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000460 if (do_decref) {
Serhiy Storchaka31a65542013-12-11 21:07:54 +0200461 Py_DECREF(v);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000462 }
463 return res;
Guido van Rossumedcc38a1991-05-05 20:09:44 +0000464}
465
Serhiy Storchaka95949422013-08-27 19:40:23 +0300466/* Get a C long int from an int object or any object that has an __int__
Mark Dickinson8d48b432011-10-23 20:47:14 +0100467 method. Return -1 and set an error if overflow occurs. */
468
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000469long
Martin v. Löwisd1a1d1e2007-12-04 22:10:37 +0000470PyLong_AsLong(PyObject *obj)
471{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000472 int overflow;
473 long result = PyLong_AsLongAndOverflow(obj, &overflow);
474 if (overflow) {
475 /* XXX: could be cute and give a different
476 message for overflow == -1 */
477 PyErr_SetString(PyExc_OverflowError,
478 "Python int too large to convert to C long");
479 }
480 return result;
Martin v. Löwisd1a1d1e2007-12-04 22:10:37 +0000481}
482
Serhiy Storchaka95949422013-08-27 19:40:23 +0300483/* Get a C int from an int object or any object that has an __int__
Serhiy Storchaka78980432013-01-15 01:12:17 +0200484 method. Return -1 and set an error if overflow occurs. */
485
486int
487_PyLong_AsInt(PyObject *obj)
488{
489 int overflow;
490 long result = PyLong_AsLongAndOverflow(obj, &overflow);
491 if (overflow || result > INT_MAX || result < INT_MIN) {
492 /* XXX: could be cute and give a different
493 message for overflow == -1 */
494 PyErr_SetString(PyExc_OverflowError,
495 "Python int too large to convert to C int");
496 return -1;
497 }
498 return (int)result;
499}
500
Serhiy Storchaka95949422013-08-27 19:40:23 +0300501/* Get a Py_ssize_t from an int object.
Thomas Wouters00ee7ba2006-08-21 19:07:27 +0000502 Returns -1 and sets an error condition if overflow occurs. */
503
504Py_ssize_t
Guido van Rossumddefaf32007-01-14 03:31:43 +0000505PyLong_AsSsize_t(PyObject *vv) {
Antoine Pitrou9ed5f272013-08-13 20:18:52 +0200506 PyLongObject *v;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000507 size_t x, prev;
508 Py_ssize_t i;
509 int sign;
Martin v. Löwis18e16552006-02-15 17:27:45 +0000510
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000511 if (vv == NULL) {
512 PyErr_BadInternalCall();
513 return -1;
514 }
515 if (!PyLong_Check(vv)) {
516 PyErr_SetString(PyExc_TypeError, "an integer is required");
517 return -1;
518 }
Mark Dickinsond59b4162010-03-13 11:34:40 +0000519
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000520 v = (PyLongObject *)vv;
521 i = Py_SIZE(v);
522 switch (i) {
523 case -1: return -(sdigit)v->ob_digit[0];
524 case 0: return 0;
525 case 1: return v->ob_digit[0];
526 }
527 sign = 1;
528 x = 0;
529 if (i < 0) {
530 sign = -1;
531 i = -(i);
532 }
533 while (--i >= 0) {
534 prev = x;
535 x = (x << PyLong_SHIFT) | v->ob_digit[i];
536 if ((x >> PyLong_SHIFT) != prev)
537 goto overflow;
538 }
539 /* Haven't lost any bits, but casting to a signed type requires
540 * extra care (see comment above).
541 */
542 if (x <= (size_t)PY_SSIZE_T_MAX) {
543 return (Py_ssize_t)x * sign;
544 }
545 else if (sign < 0 && x == PY_ABS_SSIZE_T_MIN) {
546 return PY_SSIZE_T_MIN;
547 }
548 /* else overflow */
Martin v. Löwis18e16552006-02-15 17:27:45 +0000549
Mark Dickinson22b20182010-05-10 21:27:53 +0000550 overflow:
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000551 PyErr_SetString(PyExc_OverflowError,
552 "Python int too large to convert to C ssize_t");
553 return -1;
Martin v. Löwis18e16552006-02-15 17:27:45 +0000554}
555
Serhiy Storchaka95949422013-08-27 19:40:23 +0300556/* Get a C unsigned long int from an int object.
Guido van Rossum53756b11997-01-03 17:14:46 +0000557 Returns -1 and sets an error condition if overflow occurs. */
558
559unsigned long
Tim Peters9f688bf2000-07-07 15:53:28 +0000560PyLong_AsUnsignedLong(PyObject *vv)
Guido van Rossum53756b11997-01-03 17:14:46 +0000561{
Antoine Pitrou9ed5f272013-08-13 20:18:52 +0200562 PyLongObject *v;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000563 unsigned long x, prev;
564 Py_ssize_t i;
Tim Peters5af4e6c2002-08-12 02:31:19 +0000565
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000566 if (vv == NULL) {
567 PyErr_BadInternalCall();
568 return (unsigned long)-1;
569 }
570 if (!PyLong_Check(vv)) {
571 PyErr_SetString(PyExc_TypeError, "an integer is required");
572 return (unsigned long)-1;
573 }
Mark Dickinsond59b4162010-03-13 11:34:40 +0000574
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000575 v = (PyLongObject *)vv;
576 i = Py_SIZE(v);
577 x = 0;
578 if (i < 0) {
579 PyErr_SetString(PyExc_OverflowError,
Mark Dickinson22b20182010-05-10 21:27:53 +0000580 "can't convert negative value to unsigned int");
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000581 return (unsigned long) -1;
582 }
583 switch (i) {
584 case 0: return 0;
585 case 1: return v->ob_digit[0];
586 }
587 while (--i >= 0) {
588 prev = x;
589 x = (x << PyLong_SHIFT) | v->ob_digit[i];
590 if ((x >> PyLong_SHIFT) != prev) {
591 PyErr_SetString(PyExc_OverflowError,
Mark Dickinson02515f72013-08-03 12:08:22 +0100592 "Python int too large to convert "
Mark Dickinson22b20182010-05-10 21:27:53 +0000593 "to C unsigned long");
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000594 return (unsigned long) -1;
595 }
596 }
597 return x;
Guido van Rossumddefaf32007-01-14 03:31:43 +0000598}
599
Serhiy Storchaka95949422013-08-27 19:40:23 +0300600/* Get a C size_t from an int object. Returns (size_t)-1 and sets
Stefan Krahb77c6c62011-09-12 16:22:47 +0200601 an error condition if overflow occurs. */
Guido van Rossumddefaf32007-01-14 03:31:43 +0000602
603size_t
604PyLong_AsSize_t(PyObject *vv)
605{
Antoine Pitrou9ed5f272013-08-13 20:18:52 +0200606 PyLongObject *v;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000607 size_t x, prev;
608 Py_ssize_t i;
Guido van Rossumddefaf32007-01-14 03:31:43 +0000609
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000610 if (vv == NULL) {
611 PyErr_BadInternalCall();
612 return (size_t) -1;
613 }
614 if (!PyLong_Check(vv)) {
615 PyErr_SetString(PyExc_TypeError, "an integer is required");
616 return (size_t)-1;
617 }
Mark Dickinsond59b4162010-03-13 11:34:40 +0000618
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000619 v = (PyLongObject *)vv;
620 i = Py_SIZE(v);
621 x = 0;
622 if (i < 0) {
623 PyErr_SetString(PyExc_OverflowError,
624 "can't convert negative value to size_t");
625 return (size_t) -1;
626 }
627 switch (i) {
628 case 0: return 0;
629 case 1: return v->ob_digit[0];
630 }
631 while (--i >= 0) {
632 prev = x;
633 x = (x << PyLong_SHIFT) | v->ob_digit[i];
634 if ((x >> PyLong_SHIFT) != prev) {
635 PyErr_SetString(PyExc_OverflowError,
636 "Python int too large to convert to C size_t");
Stefan Krahb77c6c62011-09-12 16:22:47 +0200637 return (size_t) -1;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000638 }
639 }
640 return x;
Guido van Rossum53756b11997-01-03 17:14:46 +0000641}
642
Serhiy Storchaka95949422013-08-27 19:40:23 +0300643/* Get a C unsigned long int from an int object, ignoring the high bits.
Thomas Hellera4ea6032003-04-17 18:55:45 +0000644 Returns -1 and sets an error condition if an error occurs. */
645
Guido van Rossumddefaf32007-01-14 03:31:43 +0000646static unsigned long
647_PyLong_AsUnsignedLongMask(PyObject *vv)
Thomas Hellera4ea6032003-04-17 18:55:45 +0000648{
Antoine Pitrou9ed5f272013-08-13 20:18:52 +0200649 PyLongObject *v;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000650 unsigned long x;
651 Py_ssize_t i;
652 int sign;
Thomas Hellera4ea6032003-04-17 18:55:45 +0000653
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000654 if (vv == NULL || !PyLong_Check(vv)) {
655 PyErr_BadInternalCall();
656 return (unsigned long) -1;
657 }
658 v = (PyLongObject *)vv;
659 i = Py_SIZE(v);
660 switch (i) {
661 case 0: return 0;
662 case 1: return v->ob_digit[0];
663 }
664 sign = 1;
665 x = 0;
666 if (i < 0) {
667 sign = -1;
668 i = -i;
669 }
670 while (--i >= 0) {
671 x = (x << PyLong_SHIFT) | v->ob_digit[i];
672 }
673 return x * sign;
Thomas Hellera4ea6032003-04-17 18:55:45 +0000674}
675
Guido van Rossumddefaf32007-01-14 03:31:43 +0000676unsigned long
Antoine Pitrou9ed5f272013-08-13 20:18:52 +0200677PyLong_AsUnsignedLongMask(PyObject *op)
Guido van Rossumddefaf32007-01-14 03:31:43 +0000678{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000679 PyLongObject *lo;
680 unsigned long val;
Guido van Rossumddefaf32007-01-14 03:31:43 +0000681
Serhiy Storchaka31a65542013-12-11 21:07:54 +0200682 if (op == NULL) {
683 PyErr_BadInternalCall();
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000684 return (unsigned long)-1;
685 }
Guido van Rossumddefaf32007-01-14 03:31:43 +0000686
Serhiy Storchaka31a65542013-12-11 21:07:54 +0200687 if (PyLong_Check(op)) {
688 return _PyLong_AsUnsignedLongMask(op);
689 }
690
691 lo = _PyLong_FromNbInt(op);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000692 if (lo == NULL)
693 return (unsigned long)-1;
Serhiy Storchaka31a65542013-12-11 21:07:54 +0200694
695 val = _PyLong_AsUnsignedLongMask((PyObject *)lo);
696 Py_DECREF(lo);
697 return val;
Guido van Rossumddefaf32007-01-14 03:31:43 +0000698}
699
Tim Peters5b8132f2003-01-31 15:52:05 +0000700int
701_PyLong_Sign(PyObject *vv)
702{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000703 PyLongObject *v = (PyLongObject *)vv;
Tim Peters5b8132f2003-01-31 15:52:05 +0000704
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000705 assert(v != NULL);
706 assert(PyLong_Check(v));
Tim Peters5b8132f2003-01-31 15:52:05 +0000707
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000708 return Py_SIZE(v) == 0 ? 0 : (Py_SIZE(v) < 0 ? -1 : 1);
Tim Peters5b8132f2003-01-31 15:52:05 +0000709}
710
Tim Petersbaefd9e2003-01-28 20:37:45 +0000711size_t
712_PyLong_NumBits(PyObject *vv)
713{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000714 PyLongObject *v = (PyLongObject *)vv;
715 size_t result = 0;
716 Py_ssize_t ndigits;
Tim Petersbaefd9e2003-01-28 20:37:45 +0000717
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000718 assert(v != NULL);
719 assert(PyLong_Check(v));
Victor Stinner45e8e2f2014-05-14 17:24:35 +0200720 ndigits = Py_ABS(Py_SIZE(v));
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000721 assert(ndigits == 0 || v->ob_digit[ndigits - 1] != 0);
722 if (ndigits > 0) {
723 digit msd = v->ob_digit[ndigits - 1];
Mark Dickinsonfc9adb62012-10-06 18:50:02 +0100724 if ((size_t)(ndigits - 1) > PY_SIZE_MAX / (size_t)PyLong_SHIFT)
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000725 goto Overflow;
Mark Dickinsonfc9adb62012-10-06 18:50:02 +0100726 result = (size_t)(ndigits - 1) * (size_t)PyLong_SHIFT;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000727 do {
728 ++result;
729 if (result == 0)
730 goto Overflow;
731 msd >>= 1;
732 } while (msd);
733 }
734 return result;
Tim Petersbaefd9e2003-01-28 20:37:45 +0000735
Mark Dickinson22b20182010-05-10 21:27:53 +0000736 Overflow:
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000737 PyErr_SetString(PyExc_OverflowError, "int has too many bits "
738 "to express in a platform size_t");
739 return (size_t)-1;
Tim Petersbaefd9e2003-01-28 20:37:45 +0000740}
741
Tim Peters2a9b3672001-06-11 21:23:58 +0000742PyObject *
743_PyLong_FromByteArray(const unsigned char* bytes, size_t n,
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000744 int little_endian, int is_signed)
Tim Peters2a9b3672001-06-11 21:23:58 +0000745{
Mark Dickinson22b20182010-05-10 21:27:53 +0000746 const unsigned char* pstartbyte; /* LSB of bytes */
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000747 int incr; /* direction to move pstartbyte */
748 const unsigned char* pendbyte; /* MSB of bytes */
749 size_t numsignificantbytes; /* number of bytes that matter */
Serhiy Storchaka95949422013-08-27 19:40:23 +0300750 Py_ssize_t ndigits; /* number of Python int digits */
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000751 PyLongObject* v; /* result */
752 Py_ssize_t idigit = 0; /* next free index in v->ob_digit */
Tim Peters2a9b3672001-06-11 21:23:58 +0000753
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000754 if (n == 0)
755 return PyLong_FromLong(0L);
Tim Peters2a9b3672001-06-11 21:23:58 +0000756
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000757 if (little_endian) {
758 pstartbyte = bytes;
759 pendbyte = bytes + n - 1;
760 incr = 1;
761 }
762 else {
763 pstartbyte = bytes + n - 1;
764 pendbyte = bytes;
765 incr = -1;
766 }
Tim Peters2a9b3672001-06-11 21:23:58 +0000767
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000768 if (is_signed)
769 is_signed = *pendbyte >= 0x80;
Tim Peters2a9b3672001-06-11 21:23:58 +0000770
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000771 /* Compute numsignificantbytes. This consists of finding the most
Ezio Melotti13925002011-03-16 11:05:33 +0200772 significant byte. Leading 0 bytes are insignificant if the number
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000773 is positive, and leading 0xff bytes if negative. */
774 {
775 size_t i;
776 const unsigned char* p = pendbyte;
777 const int pincr = -incr; /* search MSB to LSB */
Martin Pantereb995702016-07-28 01:11:04 +0000778 const unsigned char insignificant = is_signed ? 0xff : 0x00;
Tim Peters2a9b3672001-06-11 21:23:58 +0000779
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000780 for (i = 0; i < n; ++i, p += pincr) {
Martin Pantereb995702016-07-28 01:11:04 +0000781 if (*p != insignificant)
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000782 break;
783 }
784 numsignificantbytes = n - i;
785 /* 2's-comp is a bit tricky here, e.g. 0xff00 == -0x0100, so
786 actually has 2 significant bytes. OTOH, 0xff0001 ==
787 -0x00ffff, so we wouldn't *need* to bump it there; but we
788 do for 0xffff = -0x0001. To be safe without bothering to
789 check every case, bump it regardless. */
790 if (is_signed && numsignificantbytes < n)
791 ++numsignificantbytes;
792 }
Tim Peters2a9b3672001-06-11 21:23:58 +0000793
Serhiy Storchaka95949422013-08-27 19:40:23 +0300794 /* How many Python int digits do we need? We have
795 8*numsignificantbytes bits, and each Python int digit has
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000796 PyLong_SHIFT bits, so it's the ceiling of the quotient. */
797 /* catch overflow before it happens */
798 if (numsignificantbytes > (PY_SSIZE_T_MAX - PyLong_SHIFT) / 8) {
799 PyErr_SetString(PyExc_OverflowError,
800 "byte array too long to convert to int");
801 return NULL;
802 }
803 ndigits = (numsignificantbytes * 8 + PyLong_SHIFT - 1) / PyLong_SHIFT;
804 v = _PyLong_New(ndigits);
805 if (v == NULL)
806 return NULL;
Tim Peters2a9b3672001-06-11 21:23:58 +0000807
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000808 /* Copy the bits over. The tricky parts are computing 2's-comp on
809 the fly for signed numbers, and dealing with the mismatch between
810 8-bit bytes and (probably) 15-bit Python digits.*/
811 {
812 size_t i;
813 twodigits carry = 1; /* for 2's-comp calculation */
814 twodigits accum = 0; /* sliding register */
815 unsigned int accumbits = 0; /* number of bits in accum */
816 const unsigned char* p = pstartbyte;
Tim Peters2a9b3672001-06-11 21:23:58 +0000817
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000818 for (i = 0; i < numsignificantbytes; ++i, p += incr) {
819 twodigits thisbyte = *p;
820 /* Compute correction for 2's comp, if needed. */
821 if (is_signed) {
822 thisbyte = (0xff ^ thisbyte) + carry;
823 carry = thisbyte >> 8;
824 thisbyte &= 0xff;
825 }
826 /* Because we're going LSB to MSB, thisbyte is
827 more significant than what's already in accum,
828 so needs to be prepended to accum. */
829 accum |= (twodigits)thisbyte << accumbits;
830 accumbits += 8;
831 if (accumbits >= PyLong_SHIFT) {
832 /* There's enough to fill a Python digit. */
833 assert(idigit < ndigits);
Mark Dickinson22b20182010-05-10 21:27:53 +0000834 v->ob_digit[idigit] = (digit)(accum & PyLong_MASK);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000835 ++idigit;
836 accum >>= PyLong_SHIFT;
837 accumbits -= PyLong_SHIFT;
838 assert(accumbits < PyLong_SHIFT);
839 }
840 }
841 assert(accumbits < PyLong_SHIFT);
842 if (accumbits) {
843 assert(idigit < ndigits);
844 v->ob_digit[idigit] = (digit)accum;
845 ++idigit;
846 }
847 }
Tim Peters2a9b3672001-06-11 21:23:58 +0000848
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000849 Py_SIZE(v) = is_signed ? -idigit : idigit;
850 return (PyObject *)long_normalize(v);
Tim Peters2a9b3672001-06-11 21:23:58 +0000851}
852
853int
854_PyLong_AsByteArray(PyLongObject* v,
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000855 unsigned char* bytes, size_t n,
856 int little_endian, int is_signed)
Tim Peters2a9b3672001-06-11 21:23:58 +0000857{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000858 Py_ssize_t i; /* index into v->ob_digit */
Mark Dickinson22b20182010-05-10 21:27:53 +0000859 Py_ssize_t ndigits; /* |v->ob_size| */
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000860 twodigits accum; /* sliding register */
Mark Dickinson22b20182010-05-10 21:27:53 +0000861 unsigned int accumbits; /* # bits in accum */
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000862 int do_twos_comp; /* store 2's-comp? is_signed and v < 0 */
863 digit carry; /* for computing 2's-comp */
864 size_t j; /* # bytes filled */
865 unsigned char* p; /* pointer to next byte in bytes */
866 int pincr; /* direction to move p */
Tim Peters2a9b3672001-06-11 21:23:58 +0000867
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000868 assert(v != NULL && PyLong_Check(v));
Tim Peters2a9b3672001-06-11 21:23:58 +0000869
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000870 if (Py_SIZE(v) < 0) {
871 ndigits = -(Py_SIZE(v));
872 if (!is_signed) {
873 PyErr_SetString(PyExc_OverflowError,
Mark Dickinson22b20182010-05-10 21:27:53 +0000874 "can't convert negative int to unsigned");
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000875 return -1;
876 }
877 do_twos_comp = 1;
878 }
879 else {
880 ndigits = Py_SIZE(v);
881 do_twos_comp = 0;
882 }
Tim Peters2a9b3672001-06-11 21:23:58 +0000883
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000884 if (little_endian) {
885 p = bytes;
886 pincr = 1;
887 }
888 else {
889 p = bytes + n - 1;
890 pincr = -1;
891 }
Tim Peters2a9b3672001-06-11 21:23:58 +0000892
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000893 /* Copy over all the Python digits.
894 It's crucial that every Python digit except for the MSD contribute
Serhiy Storchaka95949422013-08-27 19:40:23 +0300895 exactly PyLong_SHIFT bits to the total, so first assert that the int is
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000896 normalized. */
897 assert(ndigits == 0 || v->ob_digit[ndigits - 1] != 0);
898 j = 0;
899 accum = 0;
900 accumbits = 0;
901 carry = do_twos_comp ? 1 : 0;
902 for (i = 0; i < ndigits; ++i) {
903 digit thisdigit = v->ob_digit[i];
904 if (do_twos_comp) {
905 thisdigit = (thisdigit ^ PyLong_MASK) + carry;
906 carry = thisdigit >> PyLong_SHIFT;
907 thisdigit &= PyLong_MASK;
908 }
909 /* Because we're going LSB to MSB, thisdigit is more
910 significant than what's already in accum, so needs to be
911 prepended to accum. */
912 accum |= (twodigits)thisdigit << accumbits;
Tim Peters8bc84b42001-06-12 19:17:03 +0000913
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000914 /* The most-significant digit may be (probably is) at least
915 partly empty. */
916 if (i == ndigits - 1) {
917 /* Count # of sign bits -- they needn't be stored,
918 * although for signed conversion we need later to
919 * make sure at least one sign bit gets stored. */
Mark Dickinson22b20182010-05-10 21:27:53 +0000920 digit s = do_twos_comp ? thisdigit ^ PyLong_MASK : thisdigit;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000921 while (s != 0) {
922 s >>= 1;
923 accumbits++;
924 }
925 }
926 else
927 accumbits += PyLong_SHIFT;
Tim Peters8bc84b42001-06-12 19:17:03 +0000928
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000929 /* Store as many bytes as possible. */
930 while (accumbits >= 8) {
931 if (j >= n)
932 goto Overflow;
933 ++j;
934 *p = (unsigned char)(accum & 0xff);
935 p += pincr;
936 accumbits -= 8;
937 accum >>= 8;
938 }
939 }
Tim Peters2a9b3672001-06-11 21:23:58 +0000940
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000941 /* Store the straggler (if any). */
942 assert(accumbits < 8);
943 assert(carry == 0); /* else do_twos_comp and *every* digit was 0 */
944 if (accumbits > 0) {
945 if (j >= n)
946 goto Overflow;
947 ++j;
948 if (do_twos_comp) {
949 /* Fill leading bits of the byte with sign bits
Serhiy Storchaka95949422013-08-27 19:40:23 +0300950 (appropriately pretending that the int had an
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000951 infinite supply of sign bits). */
952 accum |= (~(twodigits)0) << accumbits;
953 }
954 *p = (unsigned char)(accum & 0xff);
955 p += pincr;
956 }
957 else if (j == n && n > 0 && is_signed) {
958 /* The main loop filled the byte array exactly, so the code
959 just above didn't get to ensure there's a sign bit, and the
960 loop below wouldn't add one either. Make sure a sign bit
961 exists. */
962 unsigned char msb = *(p - pincr);
963 int sign_bit_set = msb >= 0x80;
964 assert(accumbits == 0);
965 if (sign_bit_set == do_twos_comp)
966 return 0;
967 else
968 goto Overflow;
969 }
Tim Peters05607ad2001-06-13 21:01:27 +0000970
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000971 /* Fill remaining bytes with copies of the sign bit. */
972 {
973 unsigned char signbyte = do_twos_comp ? 0xffU : 0U;
974 for ( ; j < n; ++j, p += pincr)
975 *p = signbyte;
976 }
Tim Peters05607ad2001-06-13 21:01:27 +0000977
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000978 return 0;
Tim Peters2a9b3672001-06-11 21:23:58 +0000979
Mark Dickinson22b20182010-05-10 21:27:53 +0000980 Overflow:
Antoine Pitrouf95a1b32010-05-09 15:52:27 +0000981 PyErr_SetString(PyExc_OverflowError, "int too big to convert");
982 return -1;
Tim Peters5af4e6c2002-08-12 02:31:19 +0000983
Tim Peters2a9b3672001-06-11 21:23:58 +0000984}
985
Serhiy Storchaka95949422013-08-27 19:40:23 +0300986/* Create a new int object from a C pointer */
Guido van Rossum78694d91998-09-18 14:14:13 +0000987
988PyObject *
Tim Peters9f688bf2000-07-07 15:53:28 +0000989PyLong_FromVoidPtr(void *p)
Guido van Rossum78694d91998-09-18 14:14:13 +0000990{
Mark Dickinson91044792012-10-18 19:21:43 +0100991#if SIZEOF_VOID_P <= SIZEOF_LONG
Mark Dickinson91044792012-10-18 19:21:43 +0100992 return PyLong_FromUnsignedLong((unsigned long)(Py_uintptr_t)p);
993#else
994
Tim Peters70128a12001-06-16 08:48:40 +0000995#ifndef HAVE_LONG_LONG
996# error "PyLong_FromVoidPtr: sizeof(void*) > sizeof(long), but no long long"
997#endif
998#if SIZEOF_LONG_LONG < SIZEOF_VOID_P
Martin v. Löwisb9a0f912003-03-29 10:06:18 +0000999# error "PyLong_FromVoidPtr: sizeof(PY_LONG_LONG) < sizeof(void*)"
Tim Peters70128a12001-06-16 08:48:40 +00001000#endif
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001001 return PyLong_FromUnsignedLongLong((unsigned PY_LONG_LONG)(Py_uintptr_t)p);
Mark Dickinson91044792012-10-18 19:21:43 +01001002#endif /* SIZEOF_VOID_P <= SIZEOF_LONG */
Tim Peters70128a12001-06-16 08:48:40 +00001003
Guido van Rossum78694d91998-09-18 14:14:13 +00001004}
1005
Serhiy Storchaka95949422013-08-27 19:40:23 +03001006/* Get a C pointer from an int object. */
Guido van Rossum78694d91998-09-18 14:14:13 +00001007
1008void *
Tim Peters9f688bf2000-07-07 15:53:28 +00001009PyLong_AsVoidPtr(PyObject *vv)
Guido van Rossum78694d91998-09-18 14:14:13 +00001010{
Tim Peters70128a12001-06-16 08:48:40 +00001011#if SIZEOF_VOID_P <= SIZEOF_LONG
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001012 long x;
Guido van Rossum78694d91998-09-18 14:14:13 +00001013
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001014 if (PyLong_Check(vv) && _PyLong_Sign(vv) < 0)
1015 x = PyLong_AsLong(vv);
1016 else
1017 x = PyLong_AsUnsignedLong(vv);
Guido van Rossum78694d91998-09-18 14:14:13 +00001018#else
Tim Peters70128a12001-06-16 08:48:40 +00001019
1020#ifndef HAVE_LONG_LONG
1021# error "PyLong_AsVoidPtr: sizeof(void*) > sizeof(long), but no long long"
1022#endif
1023#if SIZEOF_LONG_LONG < SIZEOF_VOID_P
Martin v. Löwisb9a0f912003-03-29 10:06:18 +00001024# error "PyLong_AsVoidPtr: sizeof(PY_LONG_LONG) < sizeof(void*)"
Tim Peters70128a12001-06-16 08:48:40 +00001025#endif
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001026 PY_LONG_LONG x;
Guido van Rossum78694d91998-09-18 14:14:13 +00001027
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001028 if (PyLong_Check(vv) && _PyLong_Sign(vv) < 0)
1029 x = PyLong_AsLongLong(vv);
1030 else
1031 x = PyLong_AsUnsignedLongLong(vv);
Tim Peters70128a12001-06-16 08:48:40 +00001032
1033#endif /* SIZEOF_VOID_P <= SIZEOF_LONG */
Guido van Rossum78694d91998-09-18 14:14:13 +00001034
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001035 if (x == -1 && PyErr_Occurred())
1036 return NULL;
1037 return (void *)x;
Guido van Rossum78694d91998-09-18 14:14:13 +00001038}
1039
Guido van Rossum1a8791e1998-08-04 22:46:29 +00001040#ifdef HAVE_LONG_LONG
Tim Petersd1a7da62001-06-13 00:35:57 +00001041
Martin v. Löwisb9a0f912003-03-29 10:06:18 +00001042/* Initial PY_LONG_LONG support by Chris Herborth (chrish@qnx.com), later
Tim Petersd1a7da62001-06-13 00:35:57 +00001043 * rewritten to use the newer PyLong_{As,From}ByteArray API.
Guido van Rossum1a8791e1998-08-04 22:46:29 +00001044 */
1045
Mark Dickinson22b20182010-05-10 21:27:53 +00001046#define PY_ABS_LLONG_MIN (0-(unsigned PY_LONG_LONG)PY_LLONG_MIN)
Tim Petersd1a7da62001-06-13 00:35:57 +00001047
Serhiy Storchaka95949422013-08-27 19:40:23 +03001048/* Create a new int object from a C PY_LONG_LONG int. */
Guido van Rossum1a8791e1998-08-04 22:46:29 +00001049
1050PyObject *
Martin v. Löwisb9a0f912003-03-29 10:06:18 +00001051PyLong_FromLongLong(PY_LONG_LONG ival)
Guido van Rossum1a8791e1998-08-04 22:46:29 +00001052{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001053 PyLongObject *v;
1054 unsigned PY_LONG_LONG abs_ival;
1055 unsigned PY_LONG_LONG t; /* unsigned so >> doesn't propagate sign bit */
1056 int ndigits = 0;
1057 int negative = 0;
Thomas Wouters477c8d52006-05-27 19:21:47 +00001058
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001059 CHECK_SMALL_INT(ival);
1060 if (ival < 0) {
1061 /* avoid signed overflow on negation; see comments
1062 in PyLong_FromLong above. */
1063 abs_ival = (unsigned PY_LONG_LONG)(-1-ival) + 1;
1064 negative = 1;
1065 }
1066 else {
1067 abs_ival = (unsigned PY_LONG_LONG)ival;
1068 }
Thomas Wouters477c8d52006-05-27 19:21:47 +00001069
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001070 /* Count the number of Python digits.
1071 We used to pick 5 ("big enough for anything"), but that's a
1072 waste of time and space given that 5*15 = 75 bits are rarely
1073 needed. */
1074 t = abs_ival;
1075 while (t) {
1076 ++ndigits;
1077 t >>= PyLong_SHIFT;
1078 }
1079 v = _PyLong_New(ndigits);
1080 if (v != NULL) {
1081 digit *p = v->ob_digit;
1082 Py_SIZE(v) = negative ? -ndigits : ndigits;
1083 t = abs_ival;
1084 while (t) {
1085 *p++ = (digit)(t & PyLong_MASK);
1086 t >>= PyLong_SHIFT;
1087 }
1088 }
1089 return (PyObject *)v;
Guido van Rossum1a8791e1998-08-04 22:46:29 +00001090}
1091
Serhiy Storchaka95949422013-08-27 19:40:23 +03001092/* Create a new int object from a C unsigned PY_LONG_LONG int. */
Tim Petersd1a7da62001-06-13 00:35:57 +00001093
Guido van Rossum1a8791e1998-08-04 22:46:29 +00001094PyObject *
Martin v. Löwisb9a0f912003-03-29 10:06:18 +00001095PyLong_FromUnsignedLongLong(unsigned PY_LONG_LONG ival)
Guido van Rossum1a8791e1998-08-04 22:46:29 +00001096{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001097 PyLongObject *v;
1098 unsigned PY_LONG_LONG t;
1099 int ndigits = 0;
Thomas Wouters477c8d52006-05-27 19:21:47 +00001100
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001101 if (ival < PyLong_BASE)
1102 return PyLong_FromLong((long)ival);
1103 /* Count the number of Python digits. */
1104 t = (unsigned PY_LONG_LONG)ival;
1105 while (t) {
1106 ++ndigits;
1107 t >>= PyLong_SHIFT;
1108 }
1109 v = _PyLong_New(ndigits);
1110 if (v != NULL) {
1111 digit *p = v->ob_digit;
1112 Py_SIZE(v) = ndigits;
1113 while (ival) {
1114 *p++ = (digit)(ival & PyLong_MASK);
1115 ival >>= PyLong_SHIFT;
1116 }
1117 }
1118 return (PyObject *)v;
Guido van Rossum1a8791e1998-08-04 22:46:29 +00001119}
1120
Serhiy Storchaka95949422013-08-27 19:40:23 +03001121/* Create a new int object from a C Py_ssize_t. */
Martin v. Löwis18e16552006-02-15 17:27:45 +00001122
1123PyObject *
Guido van Rossumddefaf32007-01-14 03:31:43 +00001124PyLong_FromSsize_t(Py_ssize_t ival)
Martin v. Löwis18e16552006-02-15 17:27:45 +00001125{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001126 PyLongObject *v;
1127 size_t abs_ival;
1128 size_t t; /* unsigned so >> doesn't propagate sign bit */
1129 int ndigits = 0;
1130 int negative = 0;
Mark Dickinson7ab6be22008-04-15 21:42:42 +00001131
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001132 CHECK_SMALL_INT(ival);
1133 if (ival < 0) {
1134 /* avoid signed overflow when ival = SIZE_T_MIN */
1135 abs_ival = (size_t)(-1-ival)+1;
1136 negative = 1;
1137 }
1138 else {
1139 abs_ival = (size_t)ival;
1140 }
Mark Dickinson7ab6be22008-04-15 21:42:42 +00001141
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001142 /* Count the number of Python digits. */
1143 t = abs_ival;
1144 while (t) {
1145 ++ndigits;
1146 t >>= PyLong_SHIFT;
1147 }
1148 v = _PyLong_New(ndigits);
1149 if (v != NULL) {
1150 digit *p = v->ob_digit;
1151 Py_SIZE(v) = negative ? -ndigits : ndigits;
1152 t = abs_ival;
1153 while (t) {
1154 *p++ = (digit)(t & PyLong_MASK);
1155 t >>= PyLong_SHIFT;
1156 }
1157 }
1158 return (PyObject *)v;
Martin v. Löwis18e16552006-02-15 17:27:45 +00001159}
1160
Serhiy Storchaka95949422013-08-27 19:40:23 +03001161/* Create a new int object from a C size_t. */
Martin v. Löwis18e16552006-02-15 17:27:45 +00001162
1163PyObject *
Guido van Rossumddefaf32007-01-14 03:31:43 +00001164PyLong_FromSize_t(size_t ival)
Martin v. Löwis18e16552006-02-15 17:27:45 +00001165{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001166 PyLongObject *v;
1167 size_t t;
1168 int ndigits = 0;
Mark Dickinson7ab6be22008-04-15 21:42:42 +00001169
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001170 if (ival < PyLong_BASE)
1171 return PyLong_FromLong((long)ival);
1172 /* Count the number of Python digits. */
1173 t = ival;
1174 while (t) {
1175 ++ndigits;
1176 t >>= PyLong_SHIFT;
1177 }
1178 v = _PyLong_New(ndigits);
1179 if (v != NULL) {
1180 digit *p = v->ob_digit;
1181 Py_SIZE(v) = ndigits;
1182 while (ival) {
1183 *p++ = (digit)(ival & PyLong_MASK);
1184 ival >>= PyLong_SHIFT;
1185 }
1186 }
1187 return (PyObject *)v;
Martin v. Löwis18e16552006-02-15 17:27:45 +00001188}
1189
Serhiy Storchaka95949422013-08-27 19:40:23 +03001190/* Get a C long long int from an int object or any object that has an
Mark Dickinson8d48b432011-10-23 20:47:14 +01001191 __int__ method. Return -1 and set an error if overflow occurs. */
Guido van Rossum1a8791e1998-08-04 22:46:29 +00001192
Martin v. Löwisb9a0f912003-03-29 10:06:18 +00001193PY_LONG_LONG
Tim Peters9f688bf2000-07-07 15:53:28 +00001194PyLong_AsLongLong(PyObject *vv)
Guido van Rossum1a8791e1998-08-04 22:46:29 +00001195{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001196 PyLongObject *v;
1197 PY_LONG_LONG bytes;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001198 int res;
Serhiy Storchaka31a65542013-12-11 21:07:54 +02001199 int do_decref = 0; /* if nb_int was called */
Tim Petersd1a7da62001-06-13 00:35:57 +00001200
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001201 if (vv == NULL) {
1202 PyErr_BadInternalCall();
1203 return -1;
1204 }
Serhiy Storchaka31a65542013-12-11 21:07:54 +02001205
1206 if (PyLong_Check(vv)) {
1207 v = (PyLongObject *)vv;
1208 }
1209 else {
1210 v = _PyLong_FromNbInt(vv);
1211 if (v == NULL)
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001212 return -1;
Serhiy Storchaka31a65542013-12-11 21:07:54 +02001213 do_decref = 1;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001214 }
Guido van Rossum1a8791e1998-08-04 22:46:29 +00001215
Serhiy Storchaka31a65542013-12-11 21:07:54 +02001216 res = 0;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001217 switch(Py_SIZE(v)) {
Serhiy Storchaka31a65542013-12-11 21:07:54 +02001218 case -1:
1219 bytes = -(sdigit)v->ob_digit[0];
1220 break;
1221 case 0:
1222 bytes = 0;
1223 break;
1224 case 1:
1225 bytes = v->ob_digit[0];
1226 break;
1227 default:
1228 res = _PyLong_AsByteArray((PyLongObject *)v, (unsigned char *)&bytes,
Serhiy Storchakac4f32122013-12-11 21:26:36 +02001229 SIZEOF_LONG_LONG, PY_LITTLE_ENDIAN, 1);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001230 }
Serhiy Storchaka31a65542013-12-11 21:07:54 +02001231 if (do_decref) {
1232 Py_DECREF(v);
1233 }
Guido van Rossum1a8791e1998-08-04 22:46:29 +00001234
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001235 /* Plan 9 can't handle PY_LONG_LONG in ? : expressions */
1236 if (res < 0)
1237 return (PY_LONG_LONG)-1;
1238 else
1239 return bytes;
Guido van Rossum1a8791e1998-08-04 22:46:29 +00001240}
1241
Serhiy Storchaka95949422013-08-27 19:40:23 +03001242/* Get a C unsigned PY_LONG_LONG int from an int object.
Tim Petersd1a7da62001-06-13 00:35:57 +00001243 Return -1 and set an error if overflow occurs. */
1244
Martin v. Löwisb9a0f912003-03-29 10:06:18 +00001245unsigned PY_LONG_LONG
Tim Peters9f688bf2000-07-07 15:53:28 +00001246PyLong_AsUnsignedLongLong(PyObject *vv)
Guido van Rossum1a8791e1998-08-04 22:46:29 +00001247{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001248 PyLongObject *v;
1249 unsigned PY_LONG_LONG bytes;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001250 int res;
Tim Petersd1a7da62001-06-13 00:35:57 +00001251
Nadeem Vawda3d5881e2011-09-07 21:40:26 +02001252 if (vv == NULL) {
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001253 PyErr_BadInternalCall();
1254 return (unsigned PY_LONG_LONG)-1;
1255 }
Nadeem Vawda3d5881e2011-09-07 21:40:26 +02001256 if (!PyLong_Check(vv)) {
1257 PyErr_SetString(PyExc_TypeError, "an integer is required");
1258 return (unsigned PY_LONG_LONG)-1;
1259 }
Guido van Rossum1a8791e1998-08-04 22:46:29 +00001260
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001261 v = (PyLongObject*)vv;
1262 switch(Py_SIZE(v)) {
1263 case 0: return 0;
1264 case 1: return v->ob_digit[0];
1265 }
Guido van Rossumddefaf32007-01-14 03:31:43 +00001266
Mark Dickinson22b20182010-05-10 21:27:53 +00001267 res = _PyLong_AsByteArray((PyLongObject *)vv, (unsigned char *)&bytes,
Christian Heimes743e0cd2012-10-17 23:52:17 +02001268 SIZEOF_LONG_LONG, PY_LITTLE_ENDIAN, 0);
Guido van Rossum1a8791e1998-08-04 22:46:29 +00001269
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001270 /* Plan 9 can't handle PY_LONG_LONG in ? : expressions */
1271 if (res < 0)
1272 return (unsigned PY_LONG_LONG)res;
1273 else
1274 return bytes;
Guido van Rossum1a8791e1998-08-04 22:46:29 +00001275}
Tim Petersd1a7da62001-06-13 00:35:57 +00001276
Serhiy Storchaka95949422013-08-27 19:40:23 +03001277/* Get a C unsigned long int from an int object, ignoring the high bits.
Thomas Hellera4ea6032003-04-17 18:55:45 +00001278 Returns -1 and sets an error condition if an error occurs. */
1279
Guido van Rossumddefaf32007-01-14 03:31:43 +00001280static unsigned PY_LONG_LONG
1281_PyLong_AsUnsignedLongLongMask(PyObject *vv)
Thomas Hellera4ea6032003-04-17 18:55:45 +00001282{
Antoine Pitrou9ed5f272013-08-13 20:18:52 +02001283 PyLongObject *v;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001284 unsigned PY_LONG_LONG x;
1285 Py_ssize_t i;
1286 int sign;
Thomas Hellera4ea6032003-04-17 18:55:45 +00001287
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001288 if (vv == NULL || !PyLong_Check(vv)) {
1289 PyErr_BadInternalCall();
1290 return (unsigned long) -1;
1291 }
1292 v = (PyLongObject *)vv;
1293 switch(Py_SIZE(v)) {
1294 case 0: return 0;
1295 case 1: return v->ob_digit[0];
1296 }
1297 i = Py_SIZE(v);
1298 sign = 1;
1299 x = 0;
1300 if (i < 0) {
1301 sign = -1;
1302 i = -i;
1303 }
1304 while (--i >= 0) {
1305 x = (x << PyLong_SHIFT) | v->ob_digit[i];
1306 }
1307 return x * sign;
Thomas Hellera4ea6032003-04-17 18:55:45 +00001308}
Guido van Rossumddefaf32007-01-14 03:31:43 +00001309
1310unsigned PY_LONG_LONG
Antoine Pitrou9ed5f272013-08-13 20:18:52 +02001311PyLong_AsUnsignedLongLongMask(PyObject *op)
Guido van Rossumddefaf32007-01-14 03:31:43 +00001312{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001313 PyLongObject *lo;
1314 unsigned PY_LONG_LONG val;
Guido van Rossumddefaf32007-01-14 03:31:43 +00001315
Serhiy Storchaka31a65542013-12-11 21:07:54 +02001316 if (op == NULL) {
1317 PyErr_BadInternalCall();
1318 return (unsigned long)-1;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001319 }
Guido van Rossumddefaf32007-01-14 03:31:43 +00001320
Serhiy Storchaka31a65542013-12-11 21:07:54 +02001321 if (PyLong_Check(op)) {
1322 return _PyLong_AsUnsignedLongLongMask(op);
1323 }
1324
1325 lo = _PyLong_FromNbInt(op);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001326 if (lo == NULL)
1327 return (unsigned PY_LONG_LONG)-1;
Serhiy Storchaka31a65542013-12-11 21:07:54 +02001328
1329 val = _PyLong_AsUnsignedLongLongMask((PyObject *)lo);
1330 Py_DECREF(lo);
1331 return val;
Guido van Rossumddefaf32007-01-14 03:31:43 +00001332}
Tim Petersd1a7da62001-06-13 00:35:57 +00001333
Serhiy Storchaka95949422013-08-27 19:40:23 +03001334/* Get a C long long int from an int object or any object that has an
Mark Dickinson8d48b432011-10-23 20:47:14 +01001335 __int__ method.
Mark Dickinson93f562c2010-01-30 10:30:15 +00001336
Mark Dickinson8d48b432011-10-23 20:47:14 +01001337 On overflow, return -1 and set *overflow to 1 or -1 depending on the sign of
1338 the result. Otherwise *overflow is 0.
1339
1340 For other errors (e.g., TypeError), return -1 and set an error condition.
1341 In this case *overflow will be 0.
Mark Dickinson93f562c2010-01-30 10:30:15 +00001342*/
1343
1344PY_LONG_LONG
1345PyLong_AsLongLongAndOverflow(PyObject *vv, int *overflow)
1346{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001347 /* This version by Tim Peters */
Antoine Pitrou9ed5f272013-08-13 20:18:52 +02001348 PyLongObject *v;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001349 unsigned PY_LONG_LONG x, prev;
1350 PY_LONG_LONG res;
1351 Py_ssize_t i;
1352 int sign;
1353 int do_decref = 0; /* if nb_int was called */
Mark Dickinson93f562c2010-01-30 10:30:15 +00001354
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001355 *overflow = 0;
1356 if (vv == NULL) {
1357 PyErr_BadInternalCall();
1358 return -1;
1359 }
Mark Dickinson93f562c2010-01-30 10:30:15 +00001360
Serhiy Storchaka31a65542013-12-11 21:07:54 +02001361 if (PyLong_Check(vv)) {
1362 v = (PyLongObject *)vv;
1363 }
1364 else {
1365 v = _PyLong_FromNbInt(vv);
1366 if (v == NULL)
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001367 return -1;
1368 do_decref = 1;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001369 }
Mark Dickinson93f562c2010-01-30 10:30:15 +00001370
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001371 res = -1;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001372 i = Py_SIZE(v);
Mark Dickinson93f562c2010-01-30 10:30:15 +00001373
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001374 switch (i) {
1375 case -1:
1376 res = -(sdigit)v->ob_digit[0];
1377 break;
1378 case 0:
1379 res = 0;
1380 break;
1381 case 1:
1382 res = v->ob_digit[0];
1383 break;
1384 default:
1385 sign = 1;
1386 x = 0;
1387 if (i < 0) {
1388 sign = -1;
1389 i = -(i);
1390 }
1391 while (--i >= 0) {
1392 prev = x;
1393 x = (x << PyLong_SHIFT) + v->ob_digit[i];
1394 if ((x >> PyLong_SHIFT) != prev) {
1395 *overflow = sign;
1396 goto exit;
1397 }
1398 }
1399 /* Haven't lost any bits, but casting to long requires extra
1400 * care (see comment above).
1401 */
1402 if (x <= (unsigned PY_LONG_LONG)PY_LLONG_MAX) {
1403 res = (PY_LONG_LONG)x * sign;
1404 }
1405 else if (sign < 0 && x == PY_ABS_LLONG_MIN) {
1406 res = PY_LLONG_MIN;
1407 }
1408 else {
1409 *overflow = sign;
1410 /* res is already set to -1 */
1411 }
1412 }
Mark Dickinson22b20182010-05-10 21:27:53 +00001413 exit:
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001414 if (do_decref) {
Serhiy Storchaka31a65542013-12-11 21:07:54 +02001415 Py_DECREF(v);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001416 }
1417 return res;
Mark Dickinson93f562c2010-01-30 10:30:15 +00001418}
1419
Guido van Rossum1a8791e1998-08-04 22:46:29 +00001420#endif /* HAVE_LONG_LONG */
1421
Mark Dickinsoncdd01d22010-05-10 21:37:34 +00001422#define CHECK_BINOP(v,w) \
1423 do { \
Brian Curtindfc80e32011-08-10 20:28:54 -05001424 if (!PyLong_Check(v) || !PyLong_Check(w)) \
1425 Py_RETURN_NOTIMPLEMENTED; \
Mark Dickinsoncdd01d22010-05-10 21:37:34 +00001426 } while(0)
Neil Schemenauerba872e22001-01-04 01:46:03 +00001427
Mark Dickinson17e4fdd2009-03-23 18:44:57 +00001428/* bits_in_digit(d) returns the unique integer k such that 2**(k-1) <= d <
1429 2**k if d is nonzero, else 0. */
1430
1431static const unsigned char BitLengthTable[32] = {
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001432 0, 1, 2, 2, 3, 3, 3, 3, 4, 4, 4, 4, 4, 4, 4, 4,
1433 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5
Mark Dickinson17e4fdd2009-03-23 18:44:57 +00001434};
1435
1436static int
1437bits_in_digit(digit d)
1438{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001439 int d_bits = 0;
1440 while (d >= 32) {
1441 d_bits += 6;
1442 d >>= 6;
1443 }
1444 d_bits += (int)BitLengthTable[d];
1445 return d_bits;
Mark Dickinson17e4fdd2009-03-23 18:44:57 +00001446}
1447
Tim Peters877a2122002-08-12 05:09:36 +00001448/* x[0:m] and y[0:n] are digit vectors, LSD first, m >= n required. x[0:n]
1449 * is modified in place, by adding y to it. Carries are propagated as far as
1450 * x[m-1], and the remaining carry (0 or 1) is returned.
1451 */
1452static digit
Martin v. Löwis18e16552006-02-15 17:27:45 +00001453v_iadd(digit *x, Py_ssize_t m, digit *y, Py_ssize_t n)
Tim Peters877a2122002-08-12 05:09:36 +00001454{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001455 Py_ssize_t i;
1456 digit carry = 0;
Tim Peters877a2122002-08-12 05:09:36 +00001457
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001458 assert(m >= n);
1459 for (i = 0; i < n; ++i) {
1460 carry += x[i] + y[i];
1461 x[i] = carry & PyLong_MASK;
1462 carry >>= PyLong_SHIFT;
1463 assert((carry & 1) == carry);
1464 }
1465 for (; carry && i < m; ++i) {
1466 carry += x[i];
1467 x[i] = carry & PyLong_MASK;
1468 carry >>= PyLong_SHIFT;
1469 assert((carry & 1) == carry);
1470 }
1471 return carry;
Tim Peters877a2122002-08-12 05:09:36 +00001472}
1473
1474/* x[0:m] and y[0:n] are digit vectors, LSD first, m >= n required. x[0:n]
1475 * is modified in place, by subtracting y from it. Borrows are propagated as
1476 * far as x[m-1], and the remaining borrow (0 or 1) is returned.
1477 */
1478static digit
Martin v. Löwis18e16552006-02-15 17:27:45 +00001479v_isub(digit *x, Py_ssize_t m, digit *y, Py_ssize_t n)
Tim Peters877a2122002-08-12 05:09:36 +00001480{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001481 Py_ssize_t i;
1482 digit borrow = 0;
Tim Peters877a2122002-08-12 05:09:36 +00001483
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001484 assert(m >= n);
1485 for (i = 0; i < n; ++i) {
1486 borrow = x[i] - y[i] - borrow;
1487 x[i] = borrow & PyLong_MASK;
1488 borrow >>= PyLong_SHIFT;
1489 borrow &= 1; /* keep only 1 sign bit */
1490 }
1491 for (; borrow && i < m; ++i) {
1492 borrow = x[i] - borrow;
1493 x[i] = borrow & PyLong_MASK;
1494 borrow >>= PyLong_SHIFT;
1495 borrow &= 1;
1496 }
1497 return borrow;
Tim Peters877a2122002-08-12 05:09:36 +00001498}
Neil Schemenauerba872e22001-01-04 01:46:03 +00001499
Mark Dickinson17e4fdd2009-03-23 18:44:57 +00001500/* Shift digit vector a[0:m] d bits left, with 0 <= d < PyLong_SHIFT. Put
1501 * result in z[0:m], and return the d bits shifted out of the top.
1502 */
1503static digit
1504v_lshift(digit *z, digit *a, Py_ssize_t m, int d)
Guido van Rossumedcc38a1991-05-05 20:09:44 +00001505{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001506 Py_ssize_t i;
1507 digit carry = 0;
Tim Peters5af4e6c2002-08-12 02:31:19 +00001508
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001509 assert(0 <= d && d < PyLong_SHIFT);
1510 for (i=0; i < m; i++) {
1511 twodigits acc = (twodigits)a[i] << d | carry;
1512 z[i] = (digit)acc & PyLong_MASK;
1513 carry = (digit)(acc >> PyLong_SHIFT);
1514 }
1515 return carry;
Mark Dickinson17e4fdd2009-03-23 18:44:57 +00001516}
1517
1518/* Shift digit vector a[0:m] d bits right, with 0 <= d < PyLong_SHIFT. Put
1519 * result in z[0:m], and return the d bits shifted out of the bottom.
1520 */
1521static digit
1522v_rshift(digit *z, digit *a, Py_ssize_t m, int d)
1523{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001524 Py_ssize_t i;
1525 digit carry = 0;
1526 digit mask = ((digit)1 << d) - 1U;
Mark Dickinson17e4fdd2009-03-23 18:44:57 +00001527
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001528 assert(0 <= d && d < PyLong_SHIFT);
1529 for (i=m; i-- > 0;) {
1530 twodigits acc = (twodigits)carry << PyLong_SHIFT | a[i];
1531 carry = (digit)acc & mask;
1532 z[i] = (digit)(acc >> d);
1533 }
1534 return carry;
Guido van Rossumedcc38a1991-05-05 20:09:44 +00001535}
1536
Tim Peters212e6142001-07-14 12:23:19 +00001537/* Divide long pin, w/ size digits, by non-zero digit n, storing quotient
1538 in pout, and returning the remainder. pin and pout point at the LSD.
1539 It's OK for pin == pout on entry, which saves oodles of mallocs/frees in
Serhiy Storchaka95949422013-08-27 19:40:23 +03001540 _PyLong_Format, but that should be done with great care since ints are
Tim Peters212e6142001-07-14 12:23:19 +00001541 immutable. */
1542
1543static digit
Martin v. Löwis18e16552006-02-15 17:27:45 +00001544inplace_divrem1(digit *pout, digit *pin, Py_ssize_t size, digit n)
Tim Peters212e6142001-07-14 12:23:19 +00001545{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001546 twodigits rem = 0;
Tim Peters212e6142001-07-14 12:23:19 +00001547
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001548 assert(n > 0 && n <= PyLong_MASK);
1549 pin += size;
1550 pout += size;
1551 while (--size >= 0) {
1552 digit hi;
1553 rem = (rem << PyLong_SHIFT) | *--pin;
1554 *--pout = hi = (digit)(rem / n);
1555 rem -= (twodigits)hi * n;
1556 }
1557 return (digit)rem;
Tim Peters212e6142001-07-14 12:23:19 +00001558}
1559
Serhiy Storchaka95949422013-08-27 19:40:23 +03001560/* Divide an integer by a digit, returning both the quotient
Guido van Rossumedcc38a1991-05-05 20:09:44 +00001561 (as function result) and the remainder (through *prem).
1562 The sign of a is ignored; n should not be zero. */
1563
Guido van Rossumc0b618a1997-05-02 03:12:38 +00001564static PyLongObject *
Tim Peters212e6142001-07-14 12:23:19 +00001565divrem1(PyLongObject *a, digit n, digit *prem)
Guido van Rossumedcc38a1991-05-05 20:09:44 +00001566{
Victor Stinner45e8e2f2014-05-14 17:24:35 +02001567 const Py_ssize_t size = Py_ABS(Py_SIZE(a));
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001568 PyLongObject *z;
Tim Peters5af4e6c2002-08-12 02:31:19 +00001569
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001570 assert(n > 0 && n <= PyLong_MASK);
1571 z = _PyLong_New(size);
1572 if (z == NULL)
1573 return NULL;
1574 *prem = inplace_divrem1(z->ob_digit, a->ob_digit, size, n);
1575 return long_normalize(z);
Guido van Rossumedcc38a1991-05-05 20:09:44 +00001576}
1577
Serhiy Storchaka95949422013-08-27 19:40:23 +03001578/* Convert an integer to a base 10 string. Returns a new non-shared
Mark Dickinson0a1efd02009-09-16 21:23:34 +00001579 string. (Return value is non-shared so that callers can modify the
1580 returned value if necessary.) */
1581
Victor Stinnerd3f08822012-05-29 12:57:52 +02001582static int
1583long_to_decimal_string_internal(PyObject *aa,
1584 PyObject **p_output,
Victor Stinnerbe75b8c2015-10-09 22:43:24 +02001585 _PyUnicodeWriter *writer,
1586 _PyBytesWriter *bytes_writer,
1587 char **bytes_str)
Mark Dickinson0a1efd02009-09-16 21:23:34 +00001588{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001589 PyLongObject *scratch, *a;
Victor Stinner1285e5c2015-10-14 12:10:20 +02001590 PyObject *str = NULL;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001591 Py_ssize_t size, strlen, size_a, i, j;
1592 digit *pout, *pin, rem, tenpow;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001593 int negative;
Victor Stinnerd3f08822012-05-29 12:57:52 +02001594 enum PyUnicode_Kind kind;
Mark Dickinson0a1efd02009-09-16 21:23:34 +00001595
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001596 a = (PyLongObject *)aa;
1597 if (a == NULL || !PyLong_Check(a)) {
1598 PyErr_BadInternalCall();
Victor Stinnerd3f08822012-05-29 12:57:52 +02001599 return -1;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001600 }
Victor Stinner45e8e2f2014-05-14 17:24:35 +02001601 size_a = Py_ABS(Py_SIZE(a));
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001602 negative = Py_SIZE(a) < 0;
Mark Dickinson0a1efd02009-09-16 21:23:34 +00001603
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001604 /* quick and dirty upper bound for the number of digits
1605 required to express a in base _PyLong_DECIMAL_BASE:
Mark Dickinson0a1efd02009-09-16 21:23:34 +00001606
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001607 #digits = 1 + floor(log2(a) / log2(_PyLong_DECIMAL_BASE))
Mark Dickinson0a1efd02009-09-16 21:23:34 +00001608
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001609 But log2(a) < size_a * PyLong_SHIFT, and
1610 log2(_PyLong_DECIMAL_BASE) = log2(10) * _PyLong_DECIMAL_SHIFT
1611 > 3 * _PyLong_DECIMAL_SHIFT
1612 */
1613 if (size_a > PY_SSIZE_T_MAX / PyLong_SHIFT) {
1614 PyErr_SetString(PyExc_OverflowError,
Mark Dickinson02515f72013-08-03 12:08:22 +01001615 "int too large to format");
Victor Stinnerd3f08822012-05-29 12:57:52 +02001616 return -1;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001617 }
1618 /* the expression size_a * PyLong_SHIFT is now safe from overflow */
1619 size = 1 + size_a * PyLong_SHIFT / (3 * _PyLong_DECIMAL_SHIFT);
1620 scratch = _PyLong_New(size);
1621 if (scratch == NULL)
Victor Stinnerd3f08822012-05-29 12:57:52 +02001622 return -1;
Mark Dickinson0a1efd02009-09-16 21:23:34 +00001623
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001624 /* convert array of base _PyLong_BASE digits in pin to an array of
1625 base _PyLong_DECIMAL_BASE digits in pout, following Knuth (TAOCP,
1626 Volume 2 (3rd edn), section 4.4, Method 1b). */
1627 pin = a->ob_digit;
1628 pout = scratch->ob_digit;
1629 size = 0;
1630 for (i = size_a; --i >= 0; ) {
1631 digit hi = pin[i];
1632 for (j = 0; j < size; j++) {
1633 twodigits z = (twodigits)pout[j] << PyLong_SHIFT | hi;
1634 hi = (digit)(z / _PyLong_DECIMAL_BASE);
1635 pout[j] = (digit)(z - (twodigits)hi *
1636 _PyLong_DECIMAL_BASE);
1637 }
1638 while (hi) {
1639 pout[size++] = hi % _PyLong_DECIMAL_BASE;
1640 hi /= _PyLong_DECIMAL_BASE;
1641 }
1642 /* check for keyboard interrupt */
1643 SIGCHECK({
Mark Dickinson22b20182010-05-10 21:27:53 +00001644 Py_DECREF(scratch);
Victor Stinnerd3f08822012-05-29 12:57:52 +02001645 return -1;
Mark Dickinsoncdd01d22010-05-10 21:37:34 +00001646 });
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001647 }
1648 /* pout should have at least one digit, so that the case when a = 0
1649 works correctly */
1650 if (size == 0)
1651 pout[size++] = 0;
Mark Dickinson0a1efd02009-09-16 21:23:34 +00001652
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001653 /* calculate exact length of output string, and allocate */
1654 strlen = negative + 1 + (size - 1) * _PyLong_DECIMAL_SHIFT;
1655 tenpow = 10;
1656 rem = pout[size-1];
1657 while (rem >= tenpow) {
1658 tenpow *= 10;
1659 strlen++;
1660 }
Victor Stinnerd3f08822012-05-29 12:57:52 +02001661 if (writer) {
Christian Heimes110ac162012-09-10 02:51:27 +02001662 if (_PyUnicodeWriter_Prepare(writer, strlen, '9') == -1) {
1663 Py_DECREF(scratch);
Victor Stinnerd3f08822012-05-29 12:57:52 +02001664 return -1;
Christian Heimes110ac162012-09-10 02:51:27 +02001665 }
Victor Stinnerd3f08822012-05-29 12:57:52 +02001666 kind = writer->kind;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001667 }
Victor Stinnerbe75b8c2015-10-09 22:43:24 +02001668 else if (bytes_writer) {
1669 *bytes_str = _PyBytesWriter_Prepare(bytes_writer, *bytes_str, strlen);
1670 if (*bytes_str == NULL) {
1671 Py_DECREF(scratch);
1672 return -1;
1673 }
1674 }
Victor Stinnerd3f08822012-05-29 12:57:52 +02001675 else {
1676 str = PyUnicode_New(strlen, '9');
1677 if (str == NULL) {
1678 Py_DECREF(scratch);
1679 return -1;
1680 }
1681 kind = PyUnicode_KIND(str);
1682 }
1683
Victor Stinnerbe75b8c2015-10-09 22:43:24 +02001684#define WRITE_DIGITS(p) \
Victor Stinnerd3f08822012-05-29 12:57:52 +02001685 do { \
Victor Stinnerd3f08822012-05-29 12:57:52 +02001686 /* pout[0] through pout[size-2] contribute exactly \
1687 _PyLong_DECIMAL_SHIFT digits each */ \
1688 for (i=0; i < size - 1; i++) { \
1689 rem = pout[i]; \
1690 for (j = 0; j < _PyLong_DECIMAL_SHIFT; j++) { \
1691 *--p = '0' + rem % 10; \
1692 rem /= 10; \
1693 } \
1694 } \
1695 /* pout[size-1]: always produce at least one decimal digit */ \
1696 rem = pout[i]; \
1697 do { \
1698 *--p = '0' + rem % 10; \
1699 rem /= 10; \
1700 } while (rem != 0); \
1701 \
1702 /* and sign */ \
1703 if (negative) \
1704 *--p = '-'; \
Victor Stinnerbe75b8c2015-10-09 22:43:24 +02001705 } while (0)
1706
1707#define WRITE_UNICODE_DIGITS(TYPE) \
1708 do { \
1709 if (writer) \
1710 p = (TYPE*)PyUnicode_DATA(writer->buffer) + writer->pos + strlen; \
1711 else \
1712 p = (TYPE*)PyUnicode_DATA(str) + strlen; \
1713 \
1714 WRITE_DIGITS(p); \
Victor Stinnerd3f08822012-05-29 12:57:52 +02001715 \
1716 /* check we've counted correctly */ \
1717 if (writer) \
1718 assert(p == ((TYPE*)PyUnicode_DATA(writer->buffer) + writer->pos)); \
1719 else \
1720 assert(p == (TYPE*)PyUnicode_DATA(str)); \
1721 } while (0)
Mark Dickinson0a1efd02009-09-16 21:23:34 +00001722
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001723 /* fill the string right-to-left */
Victor Stinnerbe75b8c2015-10-09 22:43:24 +02001724 if (bytes_writer) {
1725 char *p = *bytes_str + strlen;
1726 WRITE_DIGITS(p);
1727 assert(p == *bytes_str);
1728 }
1729 else if (kind == PyUnicode_1BYTE_KIND) {
Victor Stinnerd3f08822012-05-29 12:57:52 +02001730 Py_UCS1 *p;
Victor Stinnerbe75b8c2015-10-09 22:43:24 +02001731 WRITE_UNICODE_DIGITS(Py_UCS1);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001732 }
Victor Stinnerd3f08822012-05-29 12:57:52 +02001733 else if (kind == PyUnicode_2BYTE_KIND) {
1734 Py_UCS2 *p;
Victor Stinnerbe75b8c2015-10-09 22:43:24 +02001735 WRITE_UNICODE_DIGITS(Py_UCS2);
Victor Stinnerd3f08822012-05-29 12:57:52 +02001736 }
1737 else {
Victor Stinnerd3f08822012-05-29 12:57:52 +02001738 Py_UCS4 *p;
Victor Stinnere577ab32012-05-29 18:51:10 +02001739 assert (kind == PyUnicode_4BYTE_KIND);
Victor Stinnerbe75b8c2015-10-09 22:43:24 +02001740 WRITE_UNICODE_DIGITS(Py_UCS4);
Victor Stinnerd3f08822012-05-29 12:57:52 +02001741 }
1742#undef WRITE_DIGITS
Victor Stinnerbe75b8c2015-10-09 22:43:24 +02001743#undef WRITE_UNICODE_DIGITS
Mark Dickinson0a1efd02009-09-16 21:23:34 +00001744
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001745 Py_DECREF(scratch);
Victor Stinnerd3f08822012-05-29 12:57:52 +02001746 if (writer) {
1747 writer->pos += strlen;
1748 }
Victor Stinnerbe75b8c2015-10-09 22:43:24 +02001749 else if (bytes_writer) {
1750 (*bytes_str) += strlen;
1751 }
Victor Stinnerd3f08822012-05-29 12:57:52 +02001752 else {
1753 assert(_PyUnicode_CheckConsistency(str, 1));
1754 *p_output = (PyObject *)str;
1755 }
1756 return 0;
1757}
1758
1759static PyObject *
1760long_to_decimal_string(PyObject *aa)
1761{
1762 PyObject *v;
Victor Stinnerbe75b8c2015-10-09 22:43:24 +02001763 if (long_to_decimal_string_internal(aa, &v, NULL, NULL, NULL) == -1)
Victor Stinnerd3f08822012-05-29 12:57:52 +02001764 return NULL;
1765 return v;
Mark Dickinson0a1efd02009-09-16 21:23:34 +00001766}
1767
Serhiy Storchaka95949422013-08-27 19:40:23 +03001768/* Convert an int object to a string, using a given conversion base,
Victor Stinnerd3f08822012-05-29 12:57:52 +02001769 which should be one of 2, 8 or 16. Return a string object.
1770 If base is 2, 8 or 16, add the proper prefix '0b', '0o' or '0x'
1771 if alternate is nonzero. */
Guido van Rossumedcc38a1991-05-05 20:09:44 +00001772
Victor Stinnerd3f08822012-05-29 12:57:52 +02001773static int
1774long_format_binary(PyObject *aa, int base, int alternate,
Victor Stinnerbe75b8c2015-10-09 22:43:24 +02001775 PyObject **p_output, _PyUnicodeWriter *writer,
1776 _PyBytesWriter *bytes_writer, char **bytes_str)
Guido van Rossumedcc38a1991-05-05 20:09:44 +00001777{
Antoine Pitrou9ed5f272013-08-13 20:18:52 +02001778 PyLongObject *a = (PyLongObject *)aa;
Victor Stinner1285e5c2015-10-14 12:10:20 +02001779 PyObject *v = NULL;
Mark Dickinsone2846542012-04-20 21:21:24 +01001780 Py_ssize_t sz;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001781 Py_ssize_t size_a;
Victor Stinnerd3f08822012-05-29 12:57:52 +02001782 enum PyUnicode_Kind kind;
Mark Dickinsone2846542012-04-20 21:21:24 +01001783 int negative;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001784 int bits;
Guido van Rossume32e0141992-01-19 16:31:05 +00001785
Victor Stinnerd3f08822012-05-29 12:57:52 +02001786 assert(base == 2 || base == 8 || base == 16);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001787 if (a == NULL || !PyLong_Check(a)) {
1788 PyErr_BadInternalCall();
Victor Stinnerd3f08822012-05-29 12:57:52 +02001789 return -1;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001790 }
Victor Stinner45e8e2f2014-05-14 17:24:35 +02001791 size_a = Py_ABS(Py_SIZE(a));
Mark Dickinsone2846542012-04-20 21:21:24 +01001792 negative = Py_SIZE(a) < 0;
Tim Peters5af4e6c2002-08-12 02:31:19 +00001793
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001794 /* Compute a rough upper bound for the length of the string */
1795 switch (base) {
1796 case 16:
1797 bits = 4;
1798 break;
1799 case 8:
1800 bits = 3;
1801 break;
1802 case 2:
1803 bits = 1;
1804 break;
1805 default:
1806 assert(0); /* shouldn't ever get here */
1807 bits = 0; /* to silence gcc warning */
1808 }
Tim Peters5af4e6c2002-08-12 02:31:19 +00001809
Mark Dickinsone2846542012-04-20 21:21:24 +01001810 /* Compute exact length 'sz' of output string. */
1811 if (size_a == 0) {
Victor Stinnerd3f08822012-05-29 12:57:52 +02001812 sz = 1;
Mark Dickinsone2846542012-04-20 21:21:24 +01001813 }
1814 else {
1815 Py_ssize_t size_a_in_bits;
1816 /* Ensure overflow doesn't occur during computation of sz. */
1817 if (size_a > (PY_SSIZE_T_MAX - 3) / PyLong_SHIFT) {
1818 PyErr_SetString(PyExc_OverflowError,
Mark Dickinson02515f72013-08-03 12:08:22 +01001819 "int too large to format");
Victor Stinnerd3f08822012-05-29 12:57:52 +02001820 return -1;
Mark Dickinsone2846542012-04-20 21:21:24 +01001821 }
1822 size_a_in_bits = (size_a - 1) * PyLong_SHIFT +
1823 bits_in_digit(a->ob_digit[size_a - 1]);
Victor Stinnerd3f08822012-05-29 12:57:52 +02001824 /* Allow 1 character for a '-' sign. */
1825 sz = negative + (size_a_in_bits + (bits - 1)) / bits;
1826 }
1827 if (alternate) {
1828 /* 2 characters for prefix */
1829 sz += 2;
Mark Dickinsone2846542012-04-20 21:21:24 +01001830 }
1831
Victor Stinnerd3f08822012-05-29 12:57:52 +02001832 if (writer) {
1833 if (_PyUnicodeWriter_Prepare(writer, sz, 'x') == -1)
1834 return -1;
1835 kind = writer->kind;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001836 }
Victor Stinner199c9a62015-10-14 09:47:23 +02001837 else if (bytes_writer) {
Victor Stinnerbe75b8c2015-10-09 22:43:24 +02001838 *bytes_str = _PyBytesWriter_Prepare(bytes_writer, *bytes_str, sz);
1839 if (*bytes_str == NULL)
1840 return -1;
1841 }
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001842 else {
Victor Stinnerd3f08822012-05-29 12:57:52 +02001843 v = PyUnicode_New(sz, 'x');
1844 if (v == NULL)
1845 return -1;
1846 kind = PyUnicode_KIND(v);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001847 }
Mark Dickinson8accd6b2009-09-17 19:39:12 +00001848
Victor Stinnerbe75b8c2015-10-09 22:43:24 +02001849#define WRITE_DIGITS(p) \
Victor Stinnerd3f08822012-05-29 12:57:52 +02001850 do { \
Victor Stinnerd3f08822012-05-29 12:57:52 +02001851 if (size_a == 0) { \
1852 *--p = '0'; \
1853 } \
1854 else { \
1855 /* JRH: special case for power-of-2 bases */ \
1856 twodigits accum = 0; \
1857 int accumbits = 0; /* # of bits in accum */ \
1858 Py_ssize_t i; \
1859 for (i = 0; i < size_a; ++i) { \
1860 accum |= (twodigits)a->ob_digit[i] << accumbits; \
1861 accumbits += PyLong_SHIFT; \
1862 assert(accumbits >= bits); \
1863 do { \
1864 char cdigit; \
1865 cdigit = (char)(accum & (base - 1)); \
1866 cdigit += (cdigit < 10) ? '0' : 'a'-10; \
1867 *--p = cdigit; \
1868 accumbits -= bits; \
1869 accum >>= bits; \
1870 } while (i < size_a-1 ? accumbits >= bits : accum > 0); \
1871 } \
1872 } \
1873 \
1874 if (alternate) { \
1875 if (base == 16) \
1876 *--p = 'x'; \
1877 else if (base == 8) \
1878 *--p = 'o'; \
1879 else /* (base == 2) */ \
1880 *--p = 'b'; \
1881 *--p = '0'; \
1882 } \
1883 if (negative) \
1884 *--p = '-'; \
Victor Stinnerbe75b8c2015-10-09 22:43:24 +02001885 } while (0)
1886
1887#define WRITE_UNICODE_DIGITS(TYPE) \
1888 do { \
1889 if (writer) \
1890 p = (TYPE*)PyUnicode_DATA(writer->buffer) + writer->pos + sz; \
1891 else \
1892 p = (TYPE*)PyUnicode_DATA(v) + sz; \
1893 \
1894 WRITE_DIGITS(p); \
1895 \
Victor Stinnerd3f08822012-05-29 12:57:52 +02001896 if (writer) \
1897 assert(p == ((TYPE*)PyUnicode_DATA(writer->buffer) + writer->pos)); \
1898 else \
1899 assert(p == (TYPE*)PyUnicode_DATA(v)); \
1900 } while (0)
1901
Victor Stinnerbe75b8c2015-10-09 22:43:24 +02001902 if (bytes_writer) {
1903 char *p = *bytes_str + sz;
1904 WRITE_DIGITS(p);
1905 assert(p == *bytes_str);
1906 }
1907 else if (kind == PyUnicode_1BYTE_KIND) {
Victor Stinnerd3f08822012-05-29 12:57:52 +02001908 Py_UCS1 *p;
Victor Stinnerbe75b8c2015-10-09 22:43:24 +02001909 WRITE_UNICODE_DIGITS(Py_UCS1);
Victor Stinnerd3f08822012-05-29 12:57:52 +02001910 }
1911 else if (kind == PyUnicode_2BYTE_KIND) {
1912 Py_UCS2 *p;
Victor Stinnerbe75b8c2015-10-09 22:43:24 +02001913 WRITE_UNICODE_DIGITS(Py_UCS2);
Victor Stinnerd3f08822012-05-29 12:57:52 +02001914 }
1915 else {
Victor Stinnerd3f08822012-05-29 12:57:52 +02001916 Py_UCS4 *p;
Victor Stinnere577ab32012-05-29 18:51:10 +02001917 assert (kind == PyUnicode_4BYTE_KIND);
Victor Stinnerbe75b8c2015-10-09 22:43:24 +02001918 WRITE_UNICODE_DIGITS(Py_UCS4);
Victor Stinnerd3f08822012-05-29 12:57:52 +02001919 }
1920#undef WRITE_DIGITS
Victor Stinnerbe75b8c2015-10-09 22:43:24 +02001921#undef WRITE_UNICODE_DIGITS
Victor Stinnerd3f08822012-05-29 12:57:52 +02001922
1923 if (writer) {
1924 writer->pos += sz;
1925 }
Victor Stinnerbe75b8c2015-10-09 22:43:24 +02001926 else if (bytes_writer) {
1927 (*bytes_str) += sz;
1928 }
Victor Stinnerd3f08822012-05-29 12:57:52 +02001929 else {
1930 assert(_PyUnicode_CheckConsistency(v, 1));
1931 *p_output = v;
1932 }
1933 return 0;
1934}
1935
1936PyObject *
1937_PyLong_Format(PyObject *obj, int base)
1938{
1939 PyObject *str;
1940 int err;
1941 if (base == 10)
Victor Stinnerbe75b8c2015-10-09 22:43:24 +02001942 err = long_to_decimal_string_internal(obj, &str, NULL, NULL, NULL);
Victor Stinnerd3f08822012-05-29 12:57:52 +02001943 else
Victor Stinnerbe75b8c2015-10-09 22:43:24 +02001944 err = long_format_binary(obj, base, 1, &str, NULL, NULL, NULL);
Victor Stinnerd3f08822012-05-29 12:57:52 +02001945 if (err == -1)
1946 return NULL;
1947 return str;
1948}
1949
1950int
1951_PyLong_FormatWriter(_PyUnicodeWriter *writer,
1952 PyObject *obj,
1953 int base, int alternate)
1954{
1955 if (base == 10)
Victor Stinnerbe75b8c2015-10-09 22:43:24 +02001956 return long_to_decimal_string_internal(obj, NULL, writer,
1957 NULL, NULL);
Victor Stinnerd3f08822012-05-29 12:57:52 +02001958 else
Victor Stinnerbe75b8c2015-10-09 22:43:24 +02001959 return long_format_binary(obj, base, alternate, NULL, writer,
1960 NULL, NULL);
1961}
1962
1963char*
1964_PyLong_FormatBytesWriter(_PyBytesWriter *writer, char *str,
1965 PyObject *obj,
1966 int base, int alternate)
1967{
1968 char *str2;
1969 int res;
1970 str2 = str;
1971 if (base == 10)
1972 res = long_to_decimal_string_internal(obj, NULL, NULL,
1973 writer, &str2);
1974 else
1975 res = long_format_binary(obj, base, alternate, NULL, NULL,
1976 writer, &str2);
1977 if (res < 0)
1978 return NULL;
1979 assert(str2 != NULL);
1980 return str2;
Guido van Rossumedcc38a1991-05-05 20:09:44 +00001981}
1982
Thomas Wouters477c8d52006-05-27 19:21:47 +00001983/* Table of digit values for 8-bit string -> integer conversion.
1984 * '0' maps to 0, ..., '9' maps to 9.
1985 * 'a' and 'A' map to 10, ..., 'z' and 'Z' map to 35.
1986 * All other indices map to 37.
1987 * Note that when converting a base B string, a char c is a legitimate
Martin v. Löwis9f2e3462007-07-21 17:22:18 +00001988 * base B digit iff _PyLong_DigitValue[Py_CHARPyLong_MASK(c)] < B.
Thomas Wouters477c8d52006-05-27 19:21:47 +00001989 */
Raymond Hettinger35631532009-01-09 03:58:09 +00001990unsigned char _PyLong_DigitValue[256] = {
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00001991 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37,
1992 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37,
1993 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37,
1994 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 37, 37, 37, 37, 37, 37,
1995 37, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24,
1996 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 37, 37, 37, 37, 37,
1997 37, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24,
1998 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 37, 37, 37, 37, 37,
1999 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37,
2000 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37,
2001 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37,
2002 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37,
2003 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37,
2004 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37,
2005 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37,
2006 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37,
Thomas Wouters477c8d52006-05-27 19:21:47 +00002007};
2008
2009/* *str points to the first digit in a string of base `base` digits. base
Tim Petersbf2674b2003-02-02 07:51:32 +00002010 * is a power of 2 (2, 4, 8, 16, or 32). *str is set to point to the first
Serhiy Storchaka95949422013-08-27 19:40:23 +03002011 * non-digit (which may be *str!). A normalized int is returned.
Tim Petersbf2674b2003-02-02 07:51:32 +00002012 * The point to this routine is that it takes time linear in the number of
2013 * string characters.
2014 */
2015static PyLongObject *
Serhiy Storchakac6792272013-10-19 21:03:34 +03002016long_from_binary_base(const char **str, int base)
Tim Petersbf2674b2003-02-02 07:51:32 +00002017{
Serhiy Storchakac6792272013-10-19 21:03:34 +03002018 const char *p = *str;
2019 const char *start = p;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002020 int bits_per_char;
2021 Py_ssize_t n;
2022 PyLongObject *z;
2023 twodigits accum;
2024 int bits_in_accum;
2025 digit *pdigit;
Tim Petersbf2674b2003-02-02 07:51:32 +00002026
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002027 assert(base >= 2 && base <= 32 && (base & (base - 1)) == 0);
2028 n = base;
2029 for (bits_per_char = -1; n; ++bits_per_char)
2030 n >>= 1;
2031 /* n <- total # of bits needed, while setting p to end-of-string */
2032 while (_PyLong_DigitValue[Py_CHARMASK(*p)] < base)
2033 ++p;
2034 *str = p;
2035 /* n <- # of Python digits needed, = ceiling(n/PyLong_SHIFT). */
2036 n = (p - start) * bits_per_char + PyLong_SHIFT - 1;
2037 if (n / bits_per_char < p - start) {
2038 PyErr_SetString(PyExc_ValueError,
2039 "int string too large to convert");
2040 return NULL;
2041 }
2042 n = n / PyLong_SHIFT;
2043 z = _PyLong_New(n);
2044 if (z == NULL)
2045 return NULL;
Serhiy Storchaka95949422013-08-27 19:40:23 +03002046 /* Read string from right, and fill in int from left; i.e.,
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002047 * from least to most significant in both.
2048 */
2049 accum = 0;
2050 bits_in_accum = 0;
2051 pdigit = z->ob_digit;
2052 while (--p >= start) {
2053 int k = (int)_PyLong_DigitValue[Py_CHARMASK(*p)];
2054 assert(k >= 0 && k < base);
2055 accum |= (twodigits)k << bits_in_accum;
2056 bits_in_accum += bits_per_char;
2057 if (bits_in_accum >= PyLong_SHIFT) {
2058 *pdigit++ = (digit)(accum & PyLong_MASK);
2059 assert(pdigit - z->ob_digit <= n);
2060 accum >>= PyLong_SHIFT;
2061 bits_in_accum -= PyLong_SHIFT;
2062 assert(bits_in_accum < PyLong_SHIFT);
2063 }
2064 }
2065 if (bits_in_accum) {
2066 assert(bits_in_accum <= PyLong_SHIFT);
2067 *pdigit++ = (digit)accum;
2068 assert(pdigit - z->ob_digit <= n);
2069 }
2070 while (pdigit - z->ob_digit < n)
2071 *pdigit++ = 0;
2072 return long_normalize(z);
Tim Petersbf2674b2003-02-02 07:51:32 +00002073}
2074
Serhiy Storchaka95949422013-08-27 19:40:23 +03002075/* Parses an int from a bytestring. Leading and trailing whitespace will be
Serhiy Storchakaf6d0aee2013-08-03 20:55:06 +03002076 * ignored.
2077 *
2078 * If successful, a PyLong object will be returned and 'pend' will be pointing
2079 * to the first unused byte unless it's NULL.
2080 *
2081 * If unsuccessful, NULL will be returned.
2082 */
Guido van Rossumc0b618a1997-05-02 03:12:38 +00002083PyObject *
Serhiy Storchakac6792272013-10-19 21:03:34 +03002084PyLong_FromString(const char *str, char **pend, int base)
Guido van Rossumeb1fafc1994-08-29 12:47:19 +00002085{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002086 int sign = 1, error_if_nonzero = 0;
Serhiy Storchakac6792272013-10-19 21:03:34 +03002087 const char *start, *orig_str = str;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002088 PyLongObject *z = NULL;
2089 PyObject *strobj;
2090 Py_ssize_t slen;
Tim Peters5af4e6c2002-08-12 02:31:19 +00002091
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002092 if ((base != 0 && base < 2) || base > 36) {
2093 PyErr_SetString(PyExc_ValueError,
2094 "int() arg 2 must be >= 2 and <= 36");
2095 return NULL;
2096 }
Antoine Pitrou4de74572013-02-09 23:11:27 +01002097 while (*str != '\0' && Py_ISSPACE(Py_CHARMASK(*str)))
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002098 str++;
2099 if (*str == '+')
2100 ++str;
2101 else if (*str == '-') {
2102 ++str;
2103 sign = -1;
2104 }
2105 if (base == 0) {
2106 if (str[0] != '0')
2107 base = 10;
2108 else if (str[1] == 'x' || str[1] == 'X')
2109 base = 16;
2110 else if (str[1] == 'o' || str[1] == 'O')
2111 base = 8;
2112 else if (str[1] == 'b' || str[1] == 'B')
2113 base = 2;
2114 else {
2115 /* "old" (C-style) octal literal, now invalid.
2116 it might still be zero though */
2117 error_if_nonzero = 1;
2118 base = 10;
2119 }
2120 }
2121 if (str[0] == '0' &&
2122 ((base == 16 && (str[1] == 'x' || str[1] == 'X')) ||
2123 (base == 8 && (str[1] == 'o' || str[1] == 'O')) ||
2124 (base == 2 && (str[1] == 'b' || str[1] == 'B'))))
2125 str += 2;
Thomas Wouters477c8d52006-05-27 19:21:47 +00002126
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002127 start = str;
2128 if ((base & (base - 1)) == 0)
2129 z = long_from_binary_base(&str, base);
2130 else {
Thomas Wouters477c8d52006-05-27 19:21:47 +00002131/***
2132Binary bases can be converted in time linear in the number of digits, because
2133Python's representation base is binary. Other bases (including decimal!) use
2134the simple quadratic-time algorithm below, complicated by some speed tricks.
Tim Peters5af4e6c2002-08-12 02:31:19 +00002135
Thomas Wouters477c8d52006-05-27 19:21:47 +00002136First some math: the largest integer that can be expressed in N base-B digits
2137is B**N-1. Consequently, if we have an N-digit input in base B, the worst-
2138case number of Python digits needed to hold it is the smallest integer n s.t.
2139
2140 BASE**n-1 >= B**N-1 [or, adding 1 to both sides]
2141 BASE**n >= B**N [taking logs to base BASE]
2142 n >= log(B**N)/log(BASE) = N * log(B)/log(BASE)
2143
2144The static array log_base_BASE[base] == log(base)/log(BASE) so we can compute
Serhiy Storchaka95949422013-08-27 19:40:23 +03002145this quickly. A Python int with that much space is reserved near the start,
Thomas Wouters477c8d52006-05-27 19:21:47 +00002146and the result is computed into it.
2147
2148The input string is actually treated as being in base base**i (i.e., i digits
2149are processed at a time), where two more static arrays hold:
2150
2151 convwidth_base[base] = the largest integer i such that base**i <= BASE
2152 convmultmax_base[base] = base ** convwidth_base[base]
2153
2154The first of these is the largest i such that i consecutive input digits
2155must fit in a single Python digit. The second is effectively the input
2156base we're really using.
2157
2158Viewing the input as a sequence <c0, c1, ..., c_n-1> of digits in base
2159convmultmax_base[base], the result is "simply"
2160
2161 (((c0*B + c1)*B + c2)*B + c3)*B + ... ))) + c_n-1
2162
2163where B = convmultmax_base[base].
Thomas Wouters4d70c3d2006-06-08 14:42:34 +00002164
2165Error analysis: as above, the number of Python digits `n` needed is worst-
2166case
2167
2168 n >= N * log(B)/log(BASE)
2169
2170where `N` is the number of input digits in base `B`. This is computed via
2171
2172 size_z = (Py_ssize_t)((scan - str) * log_base_BASE[base]) + 1;
2173
2174below. Two numeric concerns are how much space this can waste, and whether
2175the computed result can be too small. To be concrete, assume BASE = 2**15,
2176which is the default (and it's unlikely anyone changes that).
2177
2178Waste isn't a problem: provided the first input digit isn't 0, the difference
2179between the worst-case input with N digits and the smallest input with N
2180digits is about a factor of B, but B is small compared to BASE so at most
2181one allocated Python digit can remain unused on that count. If
2182N*log(B)/log(BASE) is mathematically an exact integer, then truncating that
2183and adding 1 returns a result 1 larger than necessary. However, that can't
2184happen: whenever B is a power of 2, long_from_binary_base() is called
2185instead, and it's impossible for B**i to be an integer power of 2**15 when
2186B is not a power of 2 (i.e., it's impossible for N*log(B)/log(BASE) to be
2187an exact integer when B is not a power of 2, since B**i has a prime factor
2188other than 2 in that case, but (2**15)**j's only prime factor is 2).
2189
2190The computed result can be too small if the true value of N*log(B)/log(BASE)
2191is a little bit larger than an exact integer, but due to roundoff errors (in
2192computing log(B), log(BASE), their quotient, and/or multiplying that by N)
2193yields a numeric result a little less than that integer. Unfortunately, "how
2194close can a transcendental function get to an integer over some range?"
2195questions are generally theoretically intractable. Computer analysis via
2196continued fractions is practical: expand log(B)/log(BASE) via continued
2197fractions, giving a sequence i/j of "the best" rational approximations. Then
2198j*log(B)/log(BASE) is approximately equal to (the integer) i. This shows that
2199we can get very close to being in trouble, but very rarely. For example,
220076573 is a denominator in one of the continued-fraction approximations to
2201log(10)/log(2**15), and indeed:
2202
2203 >>> log(10)/log(2**15)*76573
2204 16958.000000654003
2205
2206is very close to an integer. If we were working with IEEE single-precision,
2207rounding errors could kill us. Finding worst cases in IEEE double-precision
2208requires better-than-double-precision log() functions, and Tim didn't bother.
2209Instead the code checks to see whether the allocated space is enough as each
Serhiy Storchaka95949422013-08-27 19:40:23 +03002210new Python digit is added, and copies the whole thing to a larger int if not.
Thomas Wouters4d70c3d2006-06-08 14:42:34 +00002211This should happen extremely rarely, and in fact I don't have a test case
2212that triggers it(!). Instead the code was tested by artificially allocating
2213just 1 digit at the start, so that the copying code was exercised for every
2214digit beyond the first.
Thomas Wouters477c8d52006-05-27 19:21:47 +00002215***/
Antoine Pitrou9ed5f272013-08-13 20:18:52 +02002216 twodigits c; /* current input character */
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002217 Py_ssize_t size_z;
2218 int i;
2219 int convwidth;
2220 twodigits convmultmax, convmult;
2221 digit *pz, *pzstop;
Serhiy Storchakac6792272013-10-19 21:03:34 +03002222 const char* scan;
Thomas Wouters477c8d52006-05-27 19:21:47 +00002223
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002224 static double log_base_BASE[37] = {0.0e0,};
2225 static int convwidth_base[37] = {0,};
2226 static twodigits convmultmax_base[37] = {0,};
Thomas Wouters477c8d52006-05-27 19:21:47 +00002227
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002228 if (log_base_BASE[base] == 0.0) {
2229 twodigits convmax = base;
2230 int i = 1;
Thomas Wouters477c8d52006-05-27 19:21:47 +00002231
Mark Dickinson22b20182010-05-10 21:27:53 +00002232 log_base_BASE[base] = (log((double)base) /
2233 log((double)PyLong_BASE));
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002234 for (;;) {
2235 twodigits next = convmax * base;
2236 if (next > PyLong_BASE)
2237 break;
2238 convmax = next;
2239 ++i;
2240 }
2241 convmultmax_base[base] = convmax;
2242 assert(i > 0);
2243 convwidth_base[base] = i;
2244 }
Thomas Wouters477c8d52006-05-27 19:21:47 +00002245
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002246 /* Find length of the string of numeric characters. */
2247 scan = str;
2248 while (_PyLong_DigitValue[Py_CHARMASK(*scan)] < base)
2249 ++scan;
Thomas Wouters477c8d52006-05-27 19:21:47 +00002250
Serhiy Storchaka95949422013-08-27 19:40:23 +03002251 /* Create an int object that can contain the largest possible
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002252 * integer with this base and length. Note that there's no
2253 * need to initialize z->ob_digit -- no slot is read up before
2254 * being stored into.
2255 */
2256 size_z = (Py_ssize_t)((scan - str) * log_base_BASE[base]) + 1;
2257 /* Uncomment next line to test exceedingly rare copy code */
2258 /* size_z = 1; */
2259 assert(size_z > 0);
2260 z = _PyLong_New(size_z);
2261 if (z == NULL)
2262 return NULL;
2263 Py_SIZE(z) = 0;
Thomas Wouters477c8d52006-05-27 19:21:47 +00002264
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002265 /* `convwidth` consecutive input digits are treated as a single
2266 * digit in base `convmultmax`.
2267 */
2268 convwidth = convwidth_base[base];
2269 convmultmax = convmultmax_base[base];
Thomas Wouters477c8d52006-05-27 19:21:47 +00002270
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002271 /* Work ;-) */
2272 while (str < scan) {
2273 /* grab up to convwidth digits from the input string */
2274 c = (digit)_PyLong_DigitValue[Py_CHARMASK(*str++)];
2275 for (i = 1; i < convwidth && str != scan; ++i, ++str) {
2276 c = (twodigits)(c * base +
Mark Dickinson22b20182010-05-10 21:27:53 +00002277 (int)_PyLong_DigitValue[Py_CHARMASK(*str)]);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002278 assert(c < PyLong_BASE);
2279 }
Thomas Wouters477c8d52006-05-27 19:21:47 +00002280
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002281 convmult = convmultmax;
2282 /* Calculate the shift only if we couldn't get
2283 * convwidth digits.
2284 */
2285 if (i != convwidth) {
2286 convmult = base;
2287 for ( ; i > 1; --i)
2288 convmult *= base;
2289 }
Thomas Wouters477c8d52006-05-27 19:21:47 +00002290
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002291 /* Multiply z by convmult, and add c. */
2292 pz = z->ob_digit;
2293 pzstop = pz + Py_SIZE(z);
2294 for (; pz < pzstop; ++pz) {
2295 c += (twodigits)*pz * convmult;
2296 *pz = (digit)(c & PyLong_MASK);
2297 c >>= PyLong_SHIFT;
2298 }
2299 /* carry off the current end? */
2300 if (c) {
2301 assert(c < PyLong_BASE);
2302 if (Py_SIZE(z) < size_z) {
2303 *pz = (digit)c;
2304 ++Py_SIZE(z);
2305 }
2306 else {
2307 PyLongObject *tmp;
2308 /* Extremely rare. Get more space. */
2309 assert(Py_SIZE(z) == size_z);
2310 tmp = _PyLong_New(size_z + 1);
2311 if (tmp == NULL) {
2312 Py_DECREF(z);
2313 return NULL;
2314 }
2315 memcpy(tmp->ob_digit,
2316 z->ob_digit,
2317 sizeof(digit) * size_z);
2318 Py_DECREF(z);
2319 z = tmp;
2320 z->ob_digit[size_z] = (digit)c;
2321 ++size_z;
2322 }
2323 }
2324 }
2325 }
2326 if (z == NULL)
2327 return NULL;
2328 if (error_if_nonzero) {
2329 /* reset the base to 0, else the exception message
2330 doesn't make too much sense */
2331 base = 0;
2332 if (Py_SIZE(z) != 0)
2333 goto onError;
2334 /* there might still be other problems, therefore base
2335 remains zero here for the same reason */
2336 }
2337 if (str == start)
2338 goto onError;
2339 if (sign < 0)
2340 Py_SIZE(z) = -(Py_SIZE(z));
Antoine Pitrou4de74572013-02-09 23:11:27 +01002341 while (*str && Py_ISSPACE(Py_CHARMASK(*str)))
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002342 str++;
2343 if (*str != '\0')
2344 goto onError;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002345 long_normalize(z);
Serhiy Storchakaf6d0aee2013-08-03 20:55:06 +03002346 z = maybe_small_long(z);
2347 if (z == NULL)
2348 return NULL;
2349 if (pend != NULL)
Serhiy Storchakac6792272013-10-19 21:03:34 +03002350 *pend = (char *)str;
Serhiy Storchakaf6d0aee2013-08-03 20:55:06 +03002351 return (PyObject *) z;
Guido van Rossum9e896b32000-04-05 20:11:21 +00002352
Mark Dickinson22b20182010-05-10 21:27:53 +00002353 onError:
Serhiy Storchakaf6d0aee2013-08-03 20:55:06 +03002354 if (pend != NULL)
Serhiy Storchakac6792272013-10-19 21:03:34 +03002355 *pend = (char *)str;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002356 Py_XDECREF(z);
2357 slen = strlen(orig_str) < 200 ? strlen(orig_str) : 200;
2358 strobj = PyUnicode_FromStringAndSize(orig_str, slen);
2359 if (strobj == NULL)
2360 return NULL;
2361 PyErr_Format(PyExc_ValueError,
Serhiy Storchaka579ddc22013-08-03 21:14:05 +03002362 "invalid literal for int() with base %d: %.200R",
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002363 base, strobj);
2364 Py_DECREF(strobj);
2365 return NULL;
Guido van Rossum9e896b32000-04-05 20:11:21 +00002366}
2367
Serhiy Storchakaf6d0aee2013-08-03 20:55:06 +03002368/* Since PyLong_FromString doesn't have a length parameter,
2369 * check here for possible NULs in the string.
2370 *
2371 * Reports an invalid literal as a bytes object.
2372 */
2373PyObject *
2374_PyLong_FromBytes(const char *s, Py_ssize_t len, int base)
2375{
2376 PyObject *result, *strobj;
2377 char *end = NULL;
2378
Serhiy Storchaka20b39b22014-09-28 11:27:24 +03002379 result = PyLong_FromString(s, &end, base);
Serhiy Storchakaf6d0aee2013-08-03 20:55:06 +03002380 if (end == NULL || (result != NULL && end == s + len))
2381 return result;
2382 Py_XDECREF(result);
2383 strobj = PyBytes_FromStringAndSize(s, Py_MIN(len, 200));
2384 if (strobj != NULL) {
2385 PyErr_Format(PyExc_ValueError,
Serhiy Storchaka579ddc22013-08-03 21:14:05 +03002386 "invalid literal for int() with base %d: %.200R",
Serhiy Storchakaf6d0aee2013-08-03 20:55:06 +03002387 base, strobj);
2388 Py_DECREF(strobj);
2389 }
2390 return NULL;
2391}
2392
Guido van Rossum9e896b32000-04-05 20:11:21 +00002393PyObject *
Martin v. Löwis18e16552006-02-15 17:27:45 +00002394PyLong_FromUnicode(Py_UNICODE *u, Py_ssize_t length, int base)
Guido van Rossum9e896b32000-04-05 20:11:21 +00002395{
Martin v. Löwisd63a3b82011-09-28 07:41:54 +02002396 PyObject *v, *unicode = PyUnicode_FromUnicode(u, length);
2397 if (unicode == NULL)
2398 return NULL;
2399 v = PyLong_FromUnicodeObject(unicode, base);
2400 Py_DECREF(unicode);
2401 return v;
2402}
2403
2404PyObject *
2405PyLong_FromUnicodeObject(PyObject *u, int base)
2406{
Serhiy Storchaka579ddc22013-08-03 21:14:05 +03002407 PyObject *result, *asciidig;
Serhiy Storchakaf6d0aee2013-08-03 20:55:06 +03002408 char *buffer, *end = NULL;
Martin v. Löwisd63a3b82011-09-28 07:41:54 +02002409 Py_ssize_t buflen;
Guido van Rossum9e896b32000-04-05 20:11:21 +00002410
Martin v. Löwisd63a3b82011-09-28 07:41:54 +02002411 asciidig = _PyUnicode_TransformDecimalAndSpaceToASCII(u);
Alexander Belopolsky942af5a2010-12-04 03:38:46 +00002412 if (asciidig == NULL)
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002413 return NULL;
Martin v. Löwisd63a3b82011-09-28 07:41:54 +02002414 buffer = PyUnicode_AsUTF8AndSize(asciidig, &buflen);
Alexander Belopolsky942af5a2010-12-04 03:38:46 +00002415 if (buffer == NULL) {
2416 Py_DECREF(asciidig);
Serhiy Storchakaf6d0aee2013-08-03 20:55:06 +03002417 if (!PyErr_ExceptionMatches(PyExc_UnicodeEncodeError))
2418 return NULL;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002419 }
Serhiy Storchakaf6d0aee2013-08-03 20:55:06 +03002420 else {
2421 result = PyLong_FromString(buffer, &end, base);
2422 if (end == NULL || (result != NULL && end == buffer + buflen)) {
2423 Py_DECREF(asciidig);
2424 return result;
2425 }
2426 Py_DECREF(asciidig);
2427 Py_XDECREF(result);
Alexander Belopolsky942af5a2010-12-04 03:38:46 +00002428 }
Serhiy Storchaka579ddc22013-08-03 21:14:05 +03002429 PyErr_Format(PyExc_ValueError,
2430 "invalid literal for int() with base %d: %.200R",
2431 base, u);
Serhiy Storchakaf6d0aee2013-08-03 20:55:06 +03002432 return NULL;
Guido van Rossumedcc38a1991-05-05 20:09:44 +00002433}
2434
Tim Peters9f688bf2000-07-07 15:53:28 +00002435/* forward */
Guido van Rossumc0b618a1997-05-02 03:12:38 +00002436static PyLongObject *x_divrem
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002437 (PyLongObject *, PyLongObject *, PyLongObject **);
Guido van Rossumb43daf72007-08-01 18:08:08 +00002438static PyObject *long_long(PyObject *v);
Guido van Rossumedcc38a1991-05-05 20:09:44 +00002439
Serhiy Storchaka95949422013-08-27 19:40:23 +03002440/* Int division with remainder, top-level routine */
Guido van Rossumedcc38a1991-05-05 20:09:44 +00002441
Guido van Rossume32e0141992-01-19 16:31:05 +00002442static int
Tim Peters9f688bf2000-07-07 15:53:28 +00002443long_divrem(PyLongObject *a, PyLongObject *b,
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002444 PyLongObject **pdiv, PyLongObject **prem)
Guido van Rossumedcc38a1991-05-05 20:09:44 +00002445{
Victor Stinner45e8e2f2014-05-14 17:24:35 +02002446 Py_ssize_t size_a = Py_ABS(Py_SIZE(a)), size_b = Py_ABS(Py_SIZE(b));
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002447 PyLongObject *z;
Tim Peters5af4e6c2002-08-12 02:31:19 +00002448
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002449 if (size_b == 0) {
2450 PyErr_SetString(PyExc_ZeroDivisionError,
2451 "integer division or modulo by zero");
2452 return -1;
2453 }
2454 if (size_a < size_b ||
2455 (size_a == size_b &&
2456 a->ob_digit[size_a-1] < b->ob_digit[size_b-1])) {
2457 /* |a| < |b|. */
2458 *pdiv = (PyLongObject*)PyLong_FromLong(0);
2459 if (*pdiv == NULL)
2460 return -1;
Mark Dickinsonb820d7f2016-08-22 12:24:46 +01002461 *prem = (PyLongObject *)long_long((PyObject *)a);
2462 if (*prem == NULL) {
2463 Py_CLEAR(*pdiv);
2464 return -1;
2465 }
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002466 return 0;
2467 }
2468 if (size_b == 1) {
2469 digit rem = 0;
2470 z = divrem1(a, b->ob_digit[0], &rem);
2471 if (z == NULL)
2472 return -1;
2473 *prem = (PyLongObject *) PyLong_FromLong((long)rem);
2474 if (*prem == NULL) {
2475 Py_DECREF(z);
2476 return -1;
2477 }
2478 }
2479 else {
2480 z = x_divrem(a, b, prem);
2481 if (z == NULL)
2482 return -1;
2483 }
2484 /* Set the signs.
2485 The quotient z has the sign of a*b;
2486 the remainder r has the sign of a,
2487 so a = b*z + r. */
Victor Stinner8aed6f12013-07-17 22:31:17 +02002488 if ((Py_SIZE(a) < 0) != (Py_SIZE(b) < 0)) {
2489 _PyLong_Negate(&z);
2490 if (z == NULL) {
2491 Py_CLEAR(*prem);
2492 return -1;
2493 }
2494 }
2495 if (Py_SIZE(a) < 0 && Py_SIZE(*prem) != 0) {
2496 _PyLong_Negate(prem);
2497 if (*prem == NULL) {
2498 Py_DECREF(z);
2499 Py_CLEAR(*prem);
2500 return -1;
2501 }
2502 }
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002503 *pdiv = maybe_small_long(z);
2504 return 0;
Guido van Rossumedcc38a1991-05-05 20:09:44 +00002505}
2506
Serhiy Storchaka95949422013-08-27 19:40:23 +03002507/* Unsigned int division with remainder -- the algorithm. The arguments v1
Victor Stinner45e8e2f2014-05-14 17:24:35 +02002508 and w1 should satisfy 2 <= Py_ABS(Py_SIZE(w1)) <= Py_ABS(Py_SIZE(v1)). */
Guido van Rossumedcc38a1991-05-05 20:09:44 +00002509
Guido van Rossumc0b618a1997-05-02 03:12:38 +00002510static PyLongObject *
Tim Peters9f688bf2000-07-07 15:53:28 +00002511x_divrem(PyLongObject *v1, PyLongObject *w1, PyLongObject **prem)
Guido van Rossumedcc38a1991-05-05 20:09:44 +00002512{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002513 PyLongObject *v, *w, *a;
2514 Py_ssize_t i, k, size_v, size_w;
2515 int d;
2516 digit wm1, wm2, carry, q, r, vtop, *v0, *vk, *w0, *ak;
2517 twodigits vv;
2518 sdigit zhi;
2519 stwodigits z;
Tim Peters5af4e6c2002-08-12 02:31:19 +00002520
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002521 /* We follow Knuth [The Art of Computer Programming, Vol. 2 (3rd
2522 edn.), section 4.3.1, Algorithm D], except that we don't explicitly
2523 handle the special case when the initial estimate q for a quotient
2524 digit is >= PyLong_BASE: the max value for q is PyLong_BASE+1, and
2525 that won't overflow a digit. */
Mark Dickinson17e4fdd2009-03-23 18:44:57 +00002526
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002527 /* allocate space; w will also be used to hold the final remainder */
Victor Stinner45e8e2f2014-05-14 17:24:35 +02002528 size_v = Py_ABS(Py_SIZE(v1));
2529 size_w = Py_ABS(Py_SIZE(w1));
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002530 assert(size_v >= size_w && size_w >= 2); /* Assert checks by div() */
2531 v = _PyLong_New(size_v+1);
2532 if (v == NULL) {
2533 *prem = NULL;
2534 return NULL;
2535 }
2536 w = _PyLong_New(size_w);
2537 if (w == NULL) {
2538 Py_DECREF(v);
2539 *prem = NULL;
2540 return NULL;
2541 }
Tim Peters5af4e6c2002-08-12 02:31:19 +00002542
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002543 /* normalize: shift w1 left so that its top digit is >= PyLong_BASE/2.
2544 shift v1 left by the same amount. Results go into w and v. */
2545 d = PyLong_SHIFT - bits_in_digit(w1->ob_digit[size_w-1]);
2546 carry = v_lshift(w->ob_digit, w1->ob_digit, size_w, d);
2547 assert(carry == 0);
2548 carry = v_lshift(v->ob_digit, v1->ob_digit, size_v, d);
2549 if (carry != 0 || v->ob_digit[size_v-1] >= w->ob_digit[size_w-1]) {
2550 v->ob_digit[size_v] = carry;
2551 size_v++;
2552 }
Tim Peters5af4e6c2002-08-12 02:31:19 +00002553
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002554 /* Now v->ob_digit[size_v-1] < w->ob_digit[size_w-1], so quotient has
2555 at most (and usually exactly) k = size_v - size_w digits. */
2556 k = size_v - size_w;
2557 assert(k >= 0);
2558 a = _PyLong_New(k);
2559 if (a == NULL) {
2560 Py_DECREF(w);
2561 Py_DECREF(v);
2562 *prem = NULL;
2563 return NULL;
2564 }
2565 v0 = v->ob_digit;
2566 w0 = w->ob_digit;
2567 wm1 = w0[size_w-1];
2568 wm2 = w0[size_w-2];
2569 for (vk = v0+k, ak = a->ob_digit + k; vk-- > v0;) {
2570 /* inner loop: divide vk[0:size_w+1] by w0[0:size_w], giving
2571 single-digit quotient q, remainder in vk[0:size_w]. */
Tim Peters5af4e6c2002-08-12 02:31:19 +00002572
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002573 SIGCHECK({
Mark Dickinson22b20182010-05-10 21:27:53 +00002574 Py_DECREF(a);
2575 Py_DECREF(w);
2576 Py_DECREF(v);
2577 *prem = NULL;
2578 return NULL;
Mark Dickinsoncdd01d22010-05-10 21:37:34 +00002579 });
Tim Peters5af4e6c2002-08-12 02:31:19 +00002580
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002581 /* estimate quotient digit q; may overestimate by 1 (rare) */
2582 vtop = vk[size_w];
2583 assert(vtop <= wm1);
2584 vv = ((twodigits)vtop << PyLong_SHIFT) | vk[size_w-1];
2585 q = (digit)(vv / wm1);
2586 r = (digit)(vv - (twodigits)wm1 * q); /* r = vv % wm1 */
2587 while ((twodigits)wm2 * q > (((twodigits)r << PyLong_SHIFT)
2588 | vk[size_w-2])) {
2589 --q;
2590 r += wm1;
2591 if (r >= PyLong_BASE)
2592 break;
2593 }
2594 assert(q <= PyLong_BASE);
Tim Peters5af4e6c2002-08-12 02:31:19 +00002595
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002596 /* subtract q*w0[0:size_w] from vk[0:size_w+1] */
2597 zhi = 0;
2598 for (i = 0; i < size_w; ++i) {
2599 /* invariants: -PyLong_BASE <= -q <= zhi <= 0;
2600 -PyLong_BASE * q <= z < PyLong_BASE */
2601 z = (sdigit)vk[i] + zhi -
2602 (stwodigits)q * (stwodigits)w0[i];
2603 vk[i] = (digit)z & PyLong_MASK;
2604 zhi = (sdigit)Py_ARITHMETIC_RIGHT_SHIFT(stwodigits,
Mark Dickinson22b20182010-05-10 21:27:53 +00002605 z, PyLong_SHIFT);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002606 }
Tim Peters5af4e6c2002-08-12 02:31:19 +00002607
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002608 /* add w back if q was too large (this branch taken rarely) */
2609 assert((sdigit)vtop + zhi == -1 || (sdigit)vtop + zhi == 0);
2610 if ((sdigit)vtop + zhi < 0) {
2611 carry = 0;
2612 for (i = 0; i < size_w; ++i) {
2613 carry += vk[i] + w0[i];
2614 vk[i] = carry & PyLong_MASK;
2615 carry >>= PyLong_SHIFT;
2616 }
2617 --q;
2618 }
Tim Peters5af4e6c2002-08-12 02:31:19 +00002619
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002620 /* store quotient digit */
2621 assert(q < PyLong_BASE);
2622 *--ak = q;
2623 }
Mark Dickinson17e4fdd2009-03-23 18:44:57 +00002624
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002625 /* unshift remainder; we reuse w to store the result */
2626 carry = v_rshift(w0, v0, size_w, d);
2627 assert(carry==0);
2628 Py_DECREF(v);
Mark Dickinson17e4fdd2009-03-23 18:44:57 +00002629
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002630 *prem = long_normalize(w);
2631 return long_normalize(a);
Guido van Rossumedcc38a1991-05-05 20:09:44 +00002632}
2633
Mark Dickinson6ecd9e52010-01-02 15:33:56 +00002634/* For a nonzero PyLong a, express a in the form x * 2**e, with 0.5 <=
2635 abs(x) < 1.0 and e >= 0; return x and put e in *e. Here x is
2636 rounded to DBL_MANT_DIG significant bits using round-half-to-even.
2637 If a == 0, return 0.0 and set *e = 0. If the resulting exponent
2638 e is larger than PY_SSIZE_T_MAX, raise OverflowError and return
2639 -1.0. */
2640
2641/* attempt to define 2.0**DBL_MANT_DIG as a compile-time constant */
2642#if DBL_MANT_DIG == 53
2643#define EXP2_DBL_MANT_DIG 9007199254740992.0
2644#else
2645#define EXP2_DBL_MANT_DIG (ldexp(1.0, DBL_MANT_DIG))
2646#endif
2647
2648double
2649_PyLong_Frexp(PyLongObject *a, Py_ssize_t *e)
2650{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002651 Py_ssize_t a_size, a_bits, shift_digits, shift_bits, x_size;
2652 /* See below for why x_digits is always large enough. */
2653 digit rem, x_digits[2 + (DBL_MANT_DIG + 1) / PyLong_SHIFT];
2654 double dx;
2655 /* Correction term for round-half-to-even rounding. For a digit x,
2656 "x + half_even_correction[x & 7]" gives x rounded to the nearest
2657 multiple of 4, rounding ties to a multiple of 8. */
2658 static const int half_even_correction[8] = {0, -1, -2, 1, 0, -1, 2, 1};
Mark Dickinson6ecd9e52010-01-02 15:33:56 +00002659
Victor Stinner45e8e2f2014-05-14 17:24:35 +02002660 a_size = Py_ABS(Py_SIZE(a));
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002661 if (a_size == 0) {
2662 /* Special case for 0: significand 0.0, exponent 0. */
2663 *e = 0;
2664 return 0.0;
2665 }
2666 a_bits = bits_in_digit(a->ob_digit[a_size-1]);
2667 /* The following is an overflow-free version of the check
2668 "if ((a_size - 1) * PyLong_SHIFT + a_bits > PY_SSIZE_T_MAX) ..." */
2669 if (a_size >= (PY_SSIZE_T_MAX - 1) / PyLong_SHIFT + 1 &&
2670 (a_size > (PY_SSIZE_T_MAX - 1) / PyLong_SHIFT + 1 ||
2671 a_bits > (PY_SSIZE_T_MAX - 1) % PyLong_SHIFT + 1))
Mark Dickinson22b20182010-05-10 21:27:53 +00002672 goto overflow;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002673 a_bits = (a_size - 1) * PyLong_SHIFT + a_bits;
Mark Dickinson6ecd9e52010-01-02 15:33:56 +00002674
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002675 /* Shift the first DBL_MANT_DIG + 2 bits of a into x_digits[0:x_size]
2676 (shifting left if a_bits <= DBL_MANT_DIG + 2).
Mark Dickinson6ecd9e52010-01-02 15:33:56 +00002677
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002678 Number of digits needed for result: write // for floor division.
2679 Then if shifting left, we end up using
Mark Dickinson6ecd9e52010-01-02 15:33:56 +00002680
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002681 1 + a_size + (DBL_MANT_DIG + 2 - a_bits) // PyLong_SHIFT
Mark Dickinson6ecd9e52010-01-02 15:33:56 +00002682
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002683 digits. If shifting right, we use
Mark Dickinson6ecd9e52010-01-02 15:33:56 +00002684
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002685 a_size - (a_bits - DBL_MANT_DIG - 2) // PyLong_SHIFT
Mark Dickinson6ecd9e52010-01-02 15:33:56 +00002686
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002687 digits. Using a_size = 1 + (a_bits - 1) // PyLong_SHIFT along with
2688 the inequalities
Mark Dickinson6ecd9e52010-01-02 15:33:56 +00002689
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002690 m // PyLong_SHIFT + n // PyLong_SHIFT <= (m + n) // PyLong_SHIFT
2691 m // PyLong_SHIFT - n // PyLong_SHIFT <=
2692 1 + (m - n - 1) // PyLong_SHIFT,
Mark Dickinson6ecd9e52010-01-02 15:33:56 +00002693
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002694 valid for any integers m and n, we find that x_size satisfies
Mark Dickinson6ecd9e52010-01-02 15:33:56 +00002695
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002696 x_size <= 2 + (DBL_MANT_DIG + 1) // PyLong_SHIFT
Mark Dickinson6ecd9e52010-01-02 15:33:56 +00002697
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002698 in both cases.
2699 */
2700 if (a_bits <= DBL_MANT_DIG + 2) {
2701 shift_digits = (DBL_MANT_DIG + 2 - a_bits) / PyLong_SHIFT;
2702 shift_bits = (DBL_MANT_DIG + 2 - a_bits) % PyLong_SHIFT;
2703 x_size = 0;
2704 while (x_size < shift_digits)
2705 x_digits[x_size++] = 0;
2706 rem = v_lshift(x_digits + x_size, a->ob_digit, a_size,
2707 (int)shift_bits);
2708 x_size += a_size;
2709 x_digits[x_size++] = rem;
2710 }
2711 else {
2712 shift_digits = (a_bits - DBL_MANT_DIG - 2) / PyLong_SHIFT;
2713 shift_bits = (a_bits - DBL_MANT_DIG - 2) % PyLong_SHIFT;
2714 rem = v_rshift(x_digits, a->ob_digit + shift_digits,
2715 a_size - shift_digits, (int)shift_bits);
2716 x_size = a_size - shift_digits;
2717 /* For correct rounding below, we need the least significant
2718 bit of x to be 'sticky' for this shift: if any of the bits
2719 shifted out was nonzero, we set the least significant bit
2720 of x. */
2721 if (rem)
2722 x_digits[0] |= 1;
2723 else
2724 while (shift_digits > 0)
2725 if (a->ob_digit[--shift_digits]) {
2726 x_digits[0] |= 1;
2727 break;
2728 }
2729 }
Victor Stinner63941882011-09-29 00:42:28 +02002730 assert(1 <= x_size && x_size <= (Py_ssize_t)Py_ARRAY_LENGTH(x_digits));
Mark Dickinson6ecd9e52010-01-02 15:33:56 +00002731
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002732 /* Round, and convert to double. */
2733 x_digits[0] += half_even_correction[x_digits[0] & 7];
2734 dx = x_digits[--x_size];
2735 while (x_size > 0)
2736 dx = dx * PyLong_BASE + x_digits[--x_size];
Mark Dickinson6ecd9e52010-01-02 15:33:56 +00002737
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002738 /* Rescale; make correction if result is 1.0. */
2739 dx /= 4.0 * EXP2_DBL_MANT_DIG;
2740 if (dx == 1.0) {
2741 if (a_bits == PY_SSIZE_T_MAX)
2742 goto overflow;
2743 dx = 0.5;
2744 a_bits += 1;
2745 }
Mark Dickinson6ecd9e52010-01-02 15:33:56 +00002746
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002747 *e = a_bits;
2748 return Py_SIZE(a) < 0 ? -dx : dx;
Mark Dickinson6ecd9e52010-01-02 15:33:56 +00002749
2750 overflow:
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002751 /* exponent > PY_SSIZE_T_MAX */
2752 PyErr_SetString(PyExc_OverflowError,
2753 "huge integer: number of bits overflows a Py_ssize_t");
2754 *e = 0;
2755 return -1.0;
Mark Dickinson6ecd9e52010-01-02 15:33:56 +00002756}
2757
Serhiy Storchaka95949422013-08-27 19:40:23 +03002758/* Get a C double from an int object. Rounds to the nearest double,
Mark Dickinson6ecd9e52010-01-02 15:33:56 +00002759 using the round-half-to-even rule in the case of a tie. */
2760
2761double
2762PyLong_AsDouble(PyObject *v)
2763{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002764 Py_ssize_t exponent;
2765 double x;
Mark Dickinson6ecd9e52010-01-02 15:33:56 +00002766
Nadeem Vawda3d5881e2011-09-07 21:40:26 +02002767 if (v == NULL) {
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002768 PyErr_BadInternalCall();
2769 return -1.0;
2770 }
Nadeem Vawda3d5881e2011-09-07 21:40:26 +02002771 if (!PyLong_Check(v)) {
2772 PyErr_SetString(PyExc_TypeError, "an integer is required");
2773 return -1.0;
2774 }
Yury Selivanov186c30b2016-02-05 19:40:01 -05002775 if (Py_ABS(Py_SIZE(v)) <= 1) {
Yury Selivanova0fcaca2016-02-06 12:21:33 -05002776 /* Fast path; single digit long (31 bits) will cast safely
Mark Dickinson1dc3c892016-08-21 10:33:36 +01002777 to double. This improves performance of FP/long operations
2778 by 20%.
Yury Selivanov186c30b2016-02-05 19:40:01 -05002779 */
2780 return (double)MEDIUM_VALUE((PyLongObject *)v);
2781 }
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002782 x = _PyLong_Frexp((PyLongObject *)v, &exponent);
2783 if ((x == -1.0 && PyErr_Occurred()) || exponent > DBL_MAX_EXP) {
2784 PyErr_SetString(PyExc_OverflowError,
Mark Dickinson02515f72013-08-03 12:08:22 +01002785 "int too large to convert to float");
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002786 return -1.0;
2787 }
2788 return ldexp(x, (int)exponent);
Mark Dickinson6ecd9e52010-01-02 15:33:56 +00002789}
2790
Guido van Rossumedcc38a1991-05-05 20:09:44 +00002791/* Methods */
2792
2793static void
Tim Peters9f688bf2000-07-07 15:53:28 +00002794long_dealloc(PyObject *v)
Guido van Rossumedcc38a1991-05-05 20:09:44 +00002795{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002796 Py_TYPE(v)->tp_free(v);
Guido van Rossumedcc38a1991-05-05 20:09:44 +00002797}
2798
Guido van Rossumedcc38a1991-05-05 20:09:44 +00002799static int
Tim Peters9f688bf2000-07-07 15:53:28 +00002800long_compare(PyLongObject *a, PyLongObject *b)
Guido van Rossumedcc38a1991-05-05 20:09:44 +00002801{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002802 Py_ssize_t sign;
Tim Peters5af4e6c2002-08-12 02:31:19 +00002803
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002804 if (Py_SIZE(a) != Py_SIZE(b)) {
2805 sign = Py_SIZE(a) - Py_SIZE(b);
2806 }
2807 else {
Victor Stinner45e8e2f2014-05-14 17:24:35 +02002808 Py_ssize_t i = Py_ABS(Py_SIZE(a));
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002809 while (--i >= 0 && a->ob_digit[i] == b->ob_digit[i])
2810 ;
2811 if (i < 0)
2812 sign = 0;
2813 else {
2814 sign = (sdigit)a->ob_digit[i] - (sdigit)b->ob_digit[i];
2815 if (Py_SIZE(a) < 0)
2816 sign = -sign;
2817 }
2818 }
2819 return sign < 0 ? -1 : sign > 0 ? 1 : 0;
Guido van Rossumedcc38a1991-05-05 20:09:44 +00002820}
2821
Antoine Pitrou51f3ef92008-12-20 13:14:23 +00002822#define TEST_COND(cond) \
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002823 ((cond) ? Py_True : Py_False)
Antoine Pitrou51f3ef92008-12-20 13:14:23 +00002824
Guido van Rossum47b9ff62006-08-24 00:41:19 +00002825static PyObject *
2826long_richcompare(PyObject *self, PyObject *other, int op)
2827{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002828 int result;
2829 PyObject *v;
2830 CHECK_BINOP(self, other);
2831 if (self == other)
2832 result = 0;
2833 else
2834 result = long_compare((PyLongObject*)self, (PyLongObject*)other);
2835 /* Convert the return value to a Boolean */
2836 switch (op) {
2837 case Py_EQ:
2838 v = TEST_COND(result == 0);
2839 break;
2840 case Py_NE:
2841 v = TEST_COND(result != 0);
2842 break;
2843 case Py_LE:
2844 v = TEST_COND(result <= 0);
2845 break;
2846 case Py_GE:
2847 v = TEST_COND(result >= 0);
2848 break;
2849 case Py_LT:
2850 v = TEST_COND(result == -1);
2851 break;
2852 case Py_GT:
2853 v = TEST_COND(result == 1);
2854 break;
2855 default:
2856 PyErr_BadArgument();
2857 return NULL;
2858 }
2859 Py_INCREF(v);
2860 return v;
Guido van Rossum47b9ff62006-08-24 00:41:19 +00002861}
2862
Benjamin Peterson8f67d082010-10-17 20:54:53 +00002863static Py_hash_t
Tim Peters9f688bf2000-07-07 15:53:28 +00002864long_hash(PyLongObject *v)
Guido van Rossum9bfef441993-03-29 10:43:31 +00002865{
Benjamin Peterson8035bc52010-10-23 16:20:50 +00002866 Py_uhash_t x;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002867 Py_ssize_t i;
2868 int sign;
Guido van Rossum9bfef441993-03-29 10:43:31 +00002869
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002870 i = Py_SIZE(v);
2871 switch(i) {
2872 case -1: return v->ob_digit[0]==1 ? -2 : -(sdigit)v->ob_digit[0];
2873 case 0: return 0;
2874 case 1: return v->ob_digit[0];
2875 }
2876 sign = 1;
2877 x = 0;
2878 if (i < 0) {
2879 sign = -1;
2880 i = -(i);
2881 }
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002882 while (--i >= 0) {
Mark Dickinsondc787d22010-05-23 13:33:13 +00002883 /* Here x is a quantity in the range [0, _PyHASH_MODULUS); we
2884 want to compute x * 2**PyLong_SHIFT + v->ob_digit[i] modulo
2885 _PyHASH_MODULUS.
2886
2887 The computation of x * 2**PyLong_SHIFT % _PyHASH_MODULUS
2888 amounts to a rotation of the bits of x. To see this, write
2889
2890 x * 2**PyLong_SHIFT = y * 2**_PyHASH_BITS + z
2891
2892 where y = x >> (_PyHASH_BITS - PyLong_SHIFT) gives the top
2893 PyLong_SHIFT bits of x (those that are shifted out of the
2894 original _PyHASH_BITS bits, and z = (x << PyLong_SHIFT) &
2895 _PyHASH_MODULUS gives the bottom _PyHASH_BITS - PyLong_SHIFT
2896 bits of x, shifted up. Then since 2**_PyHASH_BITS is
2897 congruent to 1 modulo _PyHASH_MODULUS, y*2**_PyHASH_BITS is
2898 congruent to y modulo _PyHASH_MODULUS. So
2899
2900 x * 2**PyLong_SHIFT = y + z (mod _PyHASH_MODULUS).
2901
2902 The right-hand side is just the result of rotating the
2903 _PyHASH_BITS bits of x left by PyLong_SHIFT places; since
2904 not all _PyHASH_BITS bits of x are 1s, the same is true
2905 after rotation, so 0 <= y+z < _PyHASH_MODULUS and y + z is
2906 the reduction of x*2**PyLong_SHIFT modulo
2907 _PyHASH_MODULUS. */
2908 x = ((x << PyLong_SHIFT) & _PyHASH_MODULUS) |
2909 (x >> (_PyHASH_BITS - PyLong_SHIFT));
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002910 x += v->ob_digit[i];
Mark Dickinsondc787d22010-05-23 13:33:13 +00002911 if (x >= _PyHASH_MODULUS)
2912 x -= _PyHASH_MODULUS;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002913 }
2914 x = x * sign;
Benjamin Peterson8035bc52010-10-23 16:20:50 +00002915 if (x == (Py_uhash_t)-1)
2916 x = (Py_uhash_t)-2;
Benjamin Peterson8f67d082010-10-17 20:54:53 +00002917 return (Py_hash_t)x;
Guido van Rossum9bfef441993-03-29 10:43:31 +00002918}
2919
2920
Serhiy Storchaka95949422013-08-27 19:40:23 +03002921/* Add the absolute values of two integers. */
Guido van Rossumedcc38a1991-05-05 20:09:44 +00002922
Guido van Rossumc0b618a1997-05-02 03:12:38 +00002923static PyLongObject *
Tim Peters9f688bf2000-07-07 15:53:28 +00002924x_add(PyLongObject *a, PyLongObject *b)
Guido van Rossumedcc38a1991-05-05 20:09:44 +00002925{
Victor Stinner45e8e2f2014-05-14 17:24:35 +02002926 Py_ssize_t size_a = Py_ABS(Py_SIZE(a)), size_b = Py_ABS(Py_SIZE(b));
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002927 PyLongObject *z;
2928 Py_ssize_t i;
2929 digit carry = 0;
Tim Peters69c2de32001-09-11 22:31:33 +00002930
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002931 /* Ensure a is the larger of the two: */
2932 if (size_a < size_b) {
2933 { PyLongObject *temp = a; a = b; b = temp; }
2934 { Py_ssize_t size_temp = size_a;
Mark Dickinson22b20182010-05-10 21:27:53 +00002935 size_a = size_b;
2936 size_b = size_temp; }
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002937 }
2938 z = _PyLong_New(size_a+1);
2939 if (z == NULL)
2940 return NULL;
2941 for (i = 0; i < size_b; ++i) {
2942 carry += a->ob_digit[i] + b->ob_digit[i];
2943 z->ob_digit[i] = carry & PyLong_MASK;
2944 carry >>= PyLong_SHIFT;
2945 }
2946 for (; i < size_a; ++i) {
2947 carry += a->ob_digit[i];
2948 z->ob_digit[i] = carry & PyLong_MASK;
2949 carry >>= PyLong_SHIFT;
2950 }
2951 z->ob_digit[i] = carry;
2952 return long_normalize(z);
Guido van Rossumedcc38a1991-05-05 20:09:44 +00002953}
2954
2955/* Subtract the absolute values of two integers. */
2956
Guido van Rossumc0b618a1997-05-02 03:12:38 +00002957static PyLongObject *
Tim Peters9f688bf2000-07-07 15:53:28 +00002958x_sub(PyLongObject *a, PyLongObject *b)
Guido van Rossumedcc38a1991-05-05 20:09:44 +00002959{
Victor Stinner45e8e2f2014-05-14 17:24:35 +02002960 Py_ssize_t size_a = Py_ABS(Py_SIZE(a)), size_b = Py_ABS(Py_SIZE(b));
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002961 PyLongObject *z;
2962 Py_ssize_t i;
2963 int sign = 1;
2964 digit borrow = 0;
Tim Peters69c2de32001-09-11 22:31:33 +00002965
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002966 /* Ensure a is the larger of the two: */
2967 if (size_a < size_b) {
2968 sign = -1;
2969 { PyLongObject *temp = a; a = b; b = temp; }
2970 { Py_ssize_t size_temp = size_a;
Mark Dickinson22b20182010-05-10 21:27:53 +00002971 size_a = size_b;
2972 size_b = size_temp; }
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00002973 }
2974 else if (size_a == size_b) {
2975 /* Find highest digit where a and b differ: */
2976 i = size_a;
2977 while (--i >= 0 && a->ob_digit[i] == b->ob_digit[i])
2978 ;
2979 if (i < 0)
2980 return (PyLongObject *)PyLong_FromLong(0);
2981 if (a->ob_digit[i] < b->ob_digit[i]) {
2982 sign = -1;
2983 { PyLongObject *temp = a; a = b; b = temp; }
2984 }
2985 size_a = size_b = i+1;
2986 }
2987 z = _PyLong_New(size_a);
2988 if (z == NULL)
2989 return NULL;
2990 for (i = 0; i < size_b; ++i) {
2991 /* The following assumes unsigned arithmetic
2992 works module 2**N for some N>PyLong_SHIFT. */
2993 borrow = a->ob_digit[i] - b->ob_digit[i] - borrow;
2994 z->ob_digit[i] = borrow & PyLong_MASK;
2995 borrow >>= PyLong_SHIFT;
2996 borrow &= 1; /* Keep only one sign bit */
2997 }
2998 for (; i < size_a; ++i) {
2999 borrow = a->ob_digit[i] - borrow;
3000 z->ob_digit[i] = borrow & PyLong_MASK;
3001 borrow >>= PyLong_SHIFT;
3002 borrow &= 1; /* Keep only one sign bit */
3003 }
3004 assert(borrow == 0);
Victor Stinner8aed6f12013-07-17 22:31:17 +02003005 if (sign < 0) {
Victor Stinner8bcf3122016-08-17 19:48:33 +02003006 Py_SIZE(z) = -Py_SIZE(z);
Victor Stinner8aed6f12013-07-17 22:31:17 +02003007 }
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003008 return long_normalize(z);
Guido van Rossumedcc38a1991-05-05 20:09:44 +00003009}
3010
Guido van Rossumc0b618a1997-05-02 03:12:38 +00003011static PyObject *
Martin v. Löwisda86fcc2007-09-10 07:59:54 +00003012long_add(PyLongObject *a, PyLongObject *b)
Guido van Rossum4c260ff1992-01-14 18:36:43 +00003013{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003014 PyLongObject *z;
Tim Peters69c2de32001-09-11 22:31:33 +00003015
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003016 CHECK_BINOP(a, b);
Neil Schemenauerba872e22001-01-04 01:46:03 +00003017
Victor Stinner45e8e2f2014-05-14 17:24:35 +02003018 if (Py_ABS(Py_SIZE(a)) <= 1 && Py_ABS(Py_SIZE(b)) <= 1) {
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003019 PyObject *result = PyLong_FromLong(MEDIUM_VALUE(a) +
3020 MEDIUM_VALUE(b));
3021 return result;
3022 }
3023 if (Py_SIZE(a) < 0) {
3024 if (Py_SIZE(b) < 0) {
3025 z = x_add(a, b);
Serhiy Storchakae63e5d62016-06-04 00:06:45 +03003026 if (z != NULL) {
3027 /* x_add received at least one multiple-digit int,
3028 and thus z must be a multiple-digit int.
3029 That also means z is not an element of
3030 small_ints, so negating it in-place is safe. */
3031 assert(Py_REFCNT(z) == 1);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003032 Py_SIZE(z) = -(Py_SIZE(z));
Serhiy Storchakae63e5d62016-06-04 00:06:45 +03003033 }
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003034 }
3035 else
3036 z = x_sub(b, a);
3037 }
3038 else {
3039 if (Py_SIZE(b) < 0)
3040 z = x_sub(a, b);
3041 else
3042 z = x_add(a, b);
3043 }
3044 return (PyObject *)z;
Guido van Rossumedcc38a1991-05-05 20:09:44 +00003045}
3046
Guido van Rossumc0b618a1997-05-02 03:12:38 +00003047static PyObject *
Martin v. Löwisda86fcc2007-09-10 07:59:54 +00003048long_sub(PyLongObject *a, PyLongObject *b)
Guido van Rossum4c260ff1992-01-14 18:36:43 +00003049{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003050 PyLongObject *z;
Tim Peters5af4e6c2002-08-12 02:31:19 +00003051
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003052 CHECK_BINOP(a, b);
Neil Schemenauerba872e22001-01-04 01:46:03 +00003053
Victor Stinner45e8e2f2014-05-14 17:24:35 +02003054 if (Py_ABS(Py_SIZE(a)) <= 1 && Py_ABS(Py_SIZE(b)) <= 1) {
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003055 PyObject* r;
3056 r = PyLong_FromLong(MEDIUM_VALUE(a)-MEDIUM_VALUE(b));
3057 return r;
3058 }
3059 if (Py_SIZE(a) < 0) {
3060 if (Py_SIZE(b) < 0)
3061 z = x_sub(a, b);
3062 else
3063 z = x_add(a, b);
Serhiy Storchakae63e5d62016-06-04 00:06:45 +03003064 if (z != NULL) {
3065 assert(Py_SIZE(z) == 0 || Py_REFCNT(z) == 1);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003066 Py_SIZE(z) = -(Py_SIZE(z));
Serhiy Storchakae63e5d62016-06-04 00:06:45 +03003067 }
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003068 }
3069 else {
3070 if (Py_SIZE(b) < 0)
3071 z = x_add(a, b);
3072 else
3073 z = x_sub(a, b);
3074 }
3075 return (PyObject *)z;
Guido van Rossumedcc38a1991-05-05 20:09:44 +00003076}
3077
Tim Peters5af4e6c2002-08-12 02:31:19 +00003078/* Grade school multiplication, ignoring the signs.
3079 * Returns the absolute value of the product, or NULL if error.
3080 */
3081static PyLongObject *
3082x_mul(PyLongObject *a, PyLongObject *b)
Neil Schemenauerba872e22001-01-04 01:46:03 +00003083{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003084 PyLongObject *z;
Victor Stinner45e8e2f2014-05-14 17:24:35 +02003085 Py_ssize_t size_a = Py_ABS(Py_SIZE(a));
3086 Py_ssize_t size_b = Py_ABS(Py_SIZE(b));
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003087 Py_ssize_t i;
Neil Schemenauerba872e22001-01-04 01:46:03 +00003088
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003089 z = _PyLong_New(size_a + size_b);
3090 if (z == NULL)
3091 return NULL;
Tim Peters5af4e6c2002-08-12 02:31:19 +00003092
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003093 memset(z->ob_digit, 0, Py_SIZE(z) * sizeof(digit));
3094 if (a == b) {
3095 /* Efficient squaring per HAC, Algorithm 14.16:
3096 * http://www.cacr.math.uwaterloo.ca/hac/about/chap14.pdf
3097 * Gives slightly less than a 2x speedup when a == b,
3098 * via exploiting that each entry in the multiplication
3099 * pyramid appears twice (except for the size_a squares).
3100 */
3101 for (i = 0; i < size_a; ++i) {
3102 twodigits carry;
3103 twodigits f = a->ob_digit[i];
3104 digit *pz = z->ob_digit + (i << 1);
3105 digit *pa = a->ob_digit + i + 1;
3106 digit *paend = a->ob_digit + size_a;
Tim Peters5af4e6c2002-08-12 02:31:19 +00003107
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003108 SIGCHECK({
Mark Dickinson22b20182010-05-10 21:27:53 +00003109 Py_DECREF(z);
3110 return NULL;
Mark Dickinsoncdd01d22010-05-10 21:37:34 +00003111 });
Tim Peters0973b992004-08-29 22:16:50 +00003112
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003113 carry = *pz + f * f;
3114 *pz++ = (digit)(carry & PyLong_MASK);
3115 carry >>= PyLong_SHIFT;
3116 assert(carry <= PyLong_MASK);
Tim Peters0973b992004-08-29 22:16:50 +00003117
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003118 /* Now f is added in twice in each column of the
3119 * pyramid it appears. Same as adding f<<1 once.
3120 */
3121 f <<= 1;
3122 while (pa < paend) {
3123 carry += *pz + *pa++ * f;
3124 *pz++ = (digit)(carry & PyLong_MASK);
3125 carry >>= PyLong_SHIFT;
3126 assert(carry <= (PyLong_MASK << 1));
3127 }
3128 if (carry) {
3129 carry += *pz;
3130 *pz++ = (digit)(carry & PyLong_MASK);
3131 carry >>= PyLong_SHIFT;
3132 }
3133 if (carry)
3134 *pz += (digit)(carry & PyLong_MASK);
3135 assert((carry >> PyLong_SHIFT) == 0);
3136 }
3137 }
Serhiy Storchaka95949422013-08-27 19:40:23 +03003138 else { /* a is not the same as b -- gradeschool int mult */
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003139 for (i = 0; i < size_a; ++i) {
3140 twodigits carry = 0;
3141 twodigits f = a->ob_digit[i];
3142 digit *pz = z->ob_digit + i;
3143 digit *pb = b->ob_digit;
3144 digit *pbend = b->ob_digit + size_b;
Tim Peters0973b992004-08-29 22:16:50 +00003145
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003146 SIGCHECK({
Mark Dickinson22b20182010-05-10 21:27:53 +00003147 Py_DECREF(z);
3148 return NULL;
Mark Dickinsoncdd01d22010-05-10 21:37:34 +00003149 });
Tim Peters0973b992004-08-29 22:16:50 +00003150
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003151 while (pb < pbend) {
3152 carry += *pz + *pb++ * f;
3153 *pz++ = (digit)(carry & PyLong_MASK);
3154 carry >>= PyLong_SHIFT;
3155 assert(carry <= PyLong_MASK);
3156 }
3157 if (carry)
3158 *pz += (digit)(carry & PyLong_MASK);
3159 assert((carry >> PyLong_SHIFT) == 0);
3160 }
3161 }
3162 return long_normalize(z);
Tim Peters5af4e6c2002-08-12 02:31:19 +00003163}
3164
3165/* A helper for Karatsuba multiplication (k_mul).
Serhiy Storchaka95949422013-08-27 19:40:23 +03003166 Takes an int "n" and an integer "size" representing the place to
Tim Peters5af4e6c2002-08-12 02:31:19 +00003167 split, and sets low and high such that abs(n) == (high << size) + low,
3168 viewing the shift as being by digits. The sign bit is ignored, and
3169 the return values are >= 0.
3170 Returns 0 on success, -1 on failure.
3171*/
3172static int
Mark Dickinson22b20182010-05-10 21:27:53 +00003173kmul_split(PyLongObject *n,
3174 Py_ssize_t size,
3175 PyLongObject **high,
3176 PyLongObject **low)
Tim Peters5af4e6c2002-08-12 02:31:19 +00003177{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003178 PyLongObject *hi, *lo;
3179 Py_ssize_t size_lo, size_hi;
Victor Stinner45e8e2f2014-05-14 17:24:35 +02003180 const Py_ssize_t size_n = Py_ABS(Py_SIZE(n));
Tim Peters5af4e6c2002-08-12 02:31:19 +00003181
Victor Stinner640c35c2013-06-04 23:14:37 +02003182 size_lo = Py_MIN(size_n, size);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003183 size_hi = size_n - size_lo;
Tim Peters5af4e6c2002-08-12 02:31:19 +00003184
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003185 if ((hi = _PyLong_New(size_hi)) == NULL)
3186 return -1;
3187 if ((lo = _PyLong_New(size_lo)) == NULL) {
3188 Py_DECREF(hi);
3189 return -1;
3190 }
Tim Peters5af4e6c2002-08-12 02:31:19 +00003191
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003192 memcpy(lo->ob_digit, n->ob_digit, size_lo * sizeof(digit));
3193 memcpy(hi->ob_digit, n->ob_digit + size_lo, size_hi * sizeof(digit));
Tim Peters5af4e6c2002-08-12 02:31:19 +00003194
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003195 *high = long_normalize(hi);
3196 *low = long_normalize(lo);
3197 return 0;
Tim Peters5af4e6c2002-08-12 02:31:19 +00003198}
3199
Tim Peters60004642002-08-12 22:01:34 +00003200static PyLongObject *k_lopsided_mul(PyLongObject *a, PyLongObject *b);
3201
Tim Peters5af4e6c2002-08-12 02:31:19 +00003202/* Karatsuba multiplication. Ignores the input signs, and returns the
3203 * absolute value of the product (or NULL if error).
3204 * See Knuth Vol. 2 Chapter 4.3.3 (Pp. 294-295).
3205 */
3206static PyLongObject *
3207k_mul(PyLongObject *a, PyLongObject *b)
3208{
Victor Stinner45e8e2f2014-05-14 17:24:35 +02003209 Py_ssize_t asize = Py_ABS(Py_SIZE(a));
3210 Py_ssize_t bsize = Py_ABS(Py_SIZE(b));
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003211 PyLongObject *ah = NULL;
3212 PyLongObject *al = NULL;
3213 PyLongObject *bh = NULL;
3214 PyLongObject *bl = NULL;
3215 PyLongObject *ret = NULL;
3216 PyLongObject *t1, *t2, *t3;
3217 Py_ssize_t shift; /* the number of digits we split off */
3218 Py_ssize_t i;
Tim Peters738eda72002-08-12 15:08:20 +00003219
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003220 /* (ah*X+al)(bh*X+bl) = ah*bh*X*X + (ah*bl + al*bh)*X + al*bl
3221 * Let k = (ah+al)*(bh+bl) = ah*bl + al*bh + ah*bh + al*bl
3222 * Then the original product is
3223 * ah*bh*X*X + (k - ah*bh - al*bl)*X + al*bl
3224 * By picking X to be a power of 2, "*X" is just shifting, and it's
3225 * been reduced to 3 multiplies on numbers half the size.
3226 */
Tim Peters5af4e6c2002-08-12 02:31:19 +00003227
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003228 /* We want to split based on the larger number; fiddle so that b
3229 * is largest.
3230 */
3231 if (asize > bsize) {
3232 t1 = a;
3233 a = b;
3234 b = t1;
Tim Peters738eda72002-08-12 15:08:20 +00003235
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003236 i = asize;
3237 asize = bsize;
3238 bsize = i;
3239 }
Tim Peters5af4e6c2002-08-12 02:31:19 +00003240
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003241 /* Use gradeschool math when either number is too small. */
3242 i = a == b ? KARATSUBA_SQUARE_CUTOFF : KARATSUBA_CUTOFF;
3243 if (asize <= i) {
3244 if (asize == 0)
3245 return (PyLongObject *)PyLong_FromLong(0);
3246 else
3247 return x_mul(a, b);
3248 }
Tim Peters5af4e6c2002-08-12 02:31:19 +00003249
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003250 /* If a is small compared to b, splitting on b gives a degenerate
3251 * case with ah==0, and Karatsuba may be (even much) less efficient
3252 * than "grade school" then. However, we can still win, by viewing
3253 * b as a string of "big digits", each of width a->ob_size. That
3254 * leads to a sequence of balanced calls to k_mul.
3255 */
3256 if (2 * asize <= bsize)
3257 return k_lopsided_mul(a, b);
Tim Peters60004642002-08-12 22:01:34 +00003258
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003259 /* Split a & b into hi & lo pieces. */
3260 shift = bsize >> 1;
3261 if (kmul_split(a, shift, &ah, &al) < 0) goto fail;
3262 assert(Py_SIZE(ah) > 0); /* the split isn't degenerate */
Tim Petersd6974a52002-08-13 20:37:51 +00003263
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003264 if (a == b) {
3265 bh = ah;
3266 bl = al;
3267 Py_INCREF(bh);
3268 Py_INCREF(bl);
3269 }
3270 else if (kmul_split(b, shift, &bh, &bl) < 0) goto fail;
Tim Peters5af4e6c2002-08-12 02:31:19 +00003271
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003272 /* The plan:
3273 * 1. Allocate result space (asize + bsize digits: that's always
3274 * enough).
3275 * 2. Compute ah*bh, and copy into result at 2*shift.
3276 * 3. Compute al*bl, and copy into result at 0. Note that this
3277 * can't overlap with #2.
3278 * 4. Subtract al*bl from the result, starting at shift. This may
3279 * underflow (borrow out of the high digit), but we don't care:
3280 * we're effectively doing unsigned arithmetic mod
3281 * BASE**(sizea + sizeb), and so long as the *final* result fits,
3282 * borrows and carries out of the high digit can be ignored.
3283 * 5. Subtract ah*bh from the result, starting at shift.
3284 * 6. Compute (ah+al)*(bh+bl), and add it into the result starting
3285 * at shift.
3286 */
Tim Petersd64c1de2002-08-12 17:36:03 +00003287
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003288 /* 1. Allocate result space. */
3289 ret = _PyLong_New(asize + bsize);
3290 if (ret == NULL) goto fail;
Tim Peters5af4e6c2002-08-12 02:31:19 +00003291#ifdef Py_DEBUG
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003292 /* Fill with trash, to catch reference to uninitialized digits. */
3293 memset(ret->ob_digit, 0xDF, Py_SIZE(ret) * sizeof(digit));
Tim Peters5af4e6c2002-08-12 02:31:19 +00003294#endif
Tim Peters44121a62002-08-12 06:17:58 +00003295
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003296 /* 2. t1 <- ah*bh, and copy into high digits of result. */
3297 if ((t1 = k_mul(ah, bh)) == NULL) goto fail;
3298 assert(Py_SIZE(t1) >= 0);
3299 assert(2*shift + Py_SIZE(t1) <= Py_SIZE(ret));
3300 memcpy(ret->ob_digit + 2*shift, t1->ob_digit,
3301 Py_SIZE(t1) * sizeof(digit));
Tim Peters738eda72002-08-12 15:08:20 +00003302
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003303 /* Zero-out the digits higher than the ah*bh copy. */
3304 i = Py_SIZE(ret) - 2*shift - Py_SIZE(t1);
3305 if (i)
3306 memset(ret->ob_digit + 2*shift + Py_SIZE(t1), 0,
3307 i * sizeof(digit));
Tim Peters5af4e6c2002-08-12 02:31:19 +00003308
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003309 /* 3. t2 <- al*bl, and copy into the low digits. */
3310 if ((t2 = k_mul(al, bl)) == NULL) {
3311 Py_DECREF(t1);
3312 goto fail;
3313 }
3314 assert(Py_SIZE(t2) >= 0);
3315 assert(Py_SIZE(t2) <= 2*shift); /* no overlap with high digits */
3316 memcpy(ret->ob_digit, t2->ob_digit, Py_SIZE(t2) * sizeof(digit));
Tim Peters5af4e6c2002-08-12 02:31:19 +00003317
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003318 /* Zero out remaining digits. */
3319 i = 2*shift - Py_SIZE(t2); /* number of uninitialized digits */
3320 if (i)
3321 memset(ret->ob_digit + Py_SIZE(t2), 0, i * sizeof(digit));
Tim Peters5af4e6c2002-08-12 02:31:19 +00003322
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003323 /* 4 & 5. Subtract ah*bh (t1) and al*bl (t2). We do al*bl first
3324 * because it's fresher in cache.
3325 */
3326 i = Py_SIZE(ret) - shift; /* # digits after shift */
3327 (void)v_isub(ret->ob_digit + shift, i, t2->ob_digit, Py_SIZE(t2));
3328 Py_DECREF(t2);
Tim Peters738eda72002-08-12 15:08:20 +00003329
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003330 (void)v_isub(ret->ob_digit + shift, i, t1->ob_digit, Py_SIZE(t1));
3331 Py_DECREF(t1);
Tim Peters738eda72002-08-12 15:08:20 +00003332
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003333 /* 6. t3 <- (ah+al)(bh+bl), and add into result. */
3334 if ((t1 = x_add(ah, al)) == NULL) goto fail;
3335 Py_DECREF(ah);
3336 Py_DECREF(al);
3337 ah = al = NULL;
Tim Peters5af4e6c2002-08-12 02:31:19 +00003338
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003339 if (a == b) {
3340 t2 = t1;
3341 Py_INCREF(t2);
3342 }
3343 else if ((t2 = x_add(bh, bl)) == NULL) {
3344 Py_DECREF(t1);
3345 goto fail;
3346 }
3347 Py_DECREF(bh);
3348 Py_DECREF(bl);
3349 bh = bl = NULL;
Tim Peters5af4e6c2002-08-12 02:31:19 +00003350
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003351 t3 = k_mul(t1, t2);
3352 Py_DECREF(t1);
3353 Py_DECREF(t2);
3354 if (t3 == NULL) goto fail;
3355 assert(Py_SIZE(t3) >= 0);
Tim Peters5af4e6c2002-08-12 02:31:19 +00003356
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003357 /* Add t3. It's not obvious why we can't run out of room here.
3358 * See the (*) comment after this function.
3359 */
3360 (void)v_iadd(ret->ob_digit + shift, i, t3->ob_digit, Py_SIZE(t3));
3361 Py_DECREF(t3);
Tim Peters5af4e6c2002-08-12 02:31:19 +00003362
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003363 return long_normalize(ret);
Tim Peters5af4e6c2002-08-12 02:31:19 +00003364
Mark Dickinson22b20182010-05-10 21:27:53 +00003365 fail:
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003366 Py_XDECREF(ret);
3367 Py_XDECREF(ah);
3368 Py_XDECREF(al);
3369 Py_XDECREF(bh);
3370 Py_XDECREF(bl);
3371 return NULL;
Tim Peters5af4e6c2002-08-12 02:31:19 +00003372}
3373
Tim Petersd6974a52002-08-13 20:37:51 +00003374/* (*) Why adding t3 can't "run out of room" above.
3375
Tim Petersab86c2b2002-08-15 20:06:00 +00003376Let f(x) mean the floor of x and c(x) mean the ceiling of x. Some facts
3377to start with:
Tim Petersd6974a52002-08-13 20:37:51 +00003378
Tim Petersab86c2b2002-08-15 20:06:00 +000033791. For any integer i, i = c(i/2) + f(i/2). In particular,
3380 bsize = c(bsize/2) + f(bsize/2).
33812. shift = f(bsize/2)
33823. asize <= bsize
33834. Since we call k_lopsided_mul if asize*2 <= bsize, asize*2 > bsize in this
3384 routine, so asize > bsize/2 >= f(bsize/2) in this routine.
Tim Petersd6974a52002-08-13 20:37:51 +00003385
Tim Petersab86c2b2002-08-15 20:06:00 +00003386We allocated asize + bsize result digits, and add t3 into them at an offset
3387of shift. This leaves asize+bsize-shift allocated digit positions for t3
3388to fit into, = (by #1 and #2) asize + f(bsize/2) + c(bsize/2) - f(bsize/2) =
3389asize + c(bsize/2) available digit positions.
Tim Petersd6974a52002-08-13 20:37:51 +00003390
Tim Petersab86c2b2002-08-15 20:06:00 +00003391bh has c(bsize/2) digits, and bl at most f(size/2) digits. So bh+hl has
3392at most c(bsize/2) digits + 1 bit.
Tim Petersd6974a52002-08-13 20:37:51 +00003393
Tim Petersab86c2b2002-08-15 20:06:00 +00003394If asize == bsize, ah has c(bsize/2) digits, else ah has at most f(bsize/2)
3395digits, and al has at most f(bsize/2) digits in any case. So ah+al has at
3396most (asize == bsize ? c(bsize/2) : f(bsize/2)) digits + 1 bit.
Tim Petersd6974a52002-08-13 20:37:51 +00003397
Tim Petersab86c2b2002-08-15 20:06:00 +00003398The product (ah+al)*(bh+bl) therefore has at most
Tim Petersd6974a52002-08-13 20:37:51 +00003399
Tim Petersab86c2b2002-08-15 20:06:00 +00003400 c(bsize/2) + (asize == bsize ? c(bsize/2) : f(bsize/2)) digits + 2 bits
Tim Petersd6974a52002-08-13 20:37:51 +00003401
Tim Petersab86c2b2002-08-15 20:06:00 +00003402and we have asize + c(bsize/2) available digit positions. We need to show
3403this is always enough. An instance of c(bsize/2) cancels out in both, so
3404the question reduces to whether asize digits is enough to hold
3405(asize == bsize ? c(bsize/2) : f(bsize/2)) digits + 2 bits. If asize < bsize,
3406then we're asking whether asize digits >= f(bsize/2) digits + 2 bits. By #4,
3407asize is at least f(bsize/2)+1 digits, so this in turn reduces to whether 1
Martin v. Löwis9f2e3462007-07-21 17:22:18 +00003408digit is enough to hold 2 bits. This is so since PyLong_SHIFT=15 >= 2. If
Tim Petersab86c2b2002-08-15 20:06:00 +00003409asize == bsize, then we're asking whether bsize digits is enough to hold
Tim Peterse417de02002-08-15 20:10:45 +00003410c(bsize/2) digits + 2 bits, or equivalently (by #1) whether f(bsize/2) digits
3411is enough to hold 2 bits. This is so if bsize >= 2, which holds because
3412bsize >= KARATSUBA_CUTOFF >= 2.
Tim Peters8e966ee2002-08-14 16:36:23 +00003413
Tim Peters48d52c02002-08-14 17:07:32 +00003414Note that since there's always enough room for (ah+al)*(bh+bl), and that's
3415clearly >= each of ah*bh and al*bl, there's always enough room to subtract
3416ah*bh and al*bl too.
Tim Petersd6974a52002-08-13 20:37:51 +00003417*/
3418
Tim Peters60004642002-08-12 22:01:34 +00003419/* b has at least twice the digits of a, and a is big enough that Karatsuba
3420 * would pay off *if* the inputs had balanced sizes. View b as a sequence
3421 * of slices, each with a->ob_size digits, and multiply the slices by a,
3422 * one at a time. This gives k_mul balanced inputs to work with, and is
3423 * also cache-friendly (we compute one double-width slice of the result
Ezio Melotti42da6632011-03-15 05:18:48 +02003424 * at a time, then move on, never backtracking except for the helpful
Tim Peters60004642002-08-12 22:01:34 +00003425 * single-width slice overlap between successive partial sums).
3426 */
3427static PyLongObject *
3428k_lopsided_mul(PyLongObject *a, PyLongObject *b)
3429{
Victor Stinner45e8e2f2014-05-14 17:24:35 +02003430 const Py_ssize_t asize = Py_ABS(Py_SIZE(a));
3431 Py_ssize_t bsize = Py_ABS(Py_SIZE(b));
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003432 Py_ssize_t nbdone; /* # of b digits already multiplied */
3433 PyLongObject *ret;
3434 PyLongObject *bslice = NULL;
Tim Peters60004642002-08-12 22:01:34 +00003435
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003436 assert(asize > KARATSUBA_CUTOFF);
3437 assert(2 * asize <= bsize);
Tim Peters60004642002-08-12 22:01:34 +00003438
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003439 /* Allocate result space, and zero it out. */
3440 ret = _PyLong_New(asize + bsize);
3441 if (ret == NULL)
3442 return NULL;
3443 memset(ret->ob_digit, 0, Py_SIZE(ret) * sizeof(digit));
Tim Peters60004642002-08-12 22:01:34 +00003444
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003445 /* Successive slices of b are copied into bslice. */
3446 bslice = _PyLong_New(asize);
3447 if (bslice == NULL)
3448 goto fail;
Tim Peters60004642002-08-12 22:01:34 +00003449
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003450 nbdone = 0;
3451 while (bsize > 0) {
3452 PyLongObject *product;
Victor Stinner640c35c2013-06-04 23:14:37 +02003453 const Py_ssize_t nbtouse = Py_MIN(bsize, asize);
Tim Peters60004642002-08-12 22:01:34 +00003454
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003455 /* Multiply the next slice of b by a. */
3456 memcpy(bslice->ob_digit, b->ob_digit + nbdone,
3457 nbtouse * sizeof(digit));
3458 Py_SIZE(bslice) = nbtouse;
3459 product = k_mul(a, bslice);
3460 if (product == NULL)
3461 goto fail;
Tim Peters60004642002-08-12 22:01:34 +00003462
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003463 /* Add into result. */
3464 (void)v_iadd(ret->ob_digit + nbdone, Py_SIZE(ret) - nbdone,
3465 product->ob_digit, Py_SIZE(product));
3466 Py_DECREF(product);
Tim Peters60004642002-08-12 22:01:34 +00003467
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003468 bsize -= nbtouse;
3469 nbdone += nbtouse;
3470 }
Tim Peters60004642002-08-12 22:01:34 +00003471
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003472 Py_DECREF(bslice);
3473 return long_normalize(ret);
Tim Peters60004642002-08-12 22:01:34 +00003474
Mark Dickinson22b20182010-05-10 21:27:53 +00003475 fail:
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003476 Py_DECREF(ret);
3477 Py_XDECREF(bslice);
3478 return NULL;
Tim Peters60004642002-08-12 22:01:34 +00003479}
Tim Peters5af4e6c2002-08-12 02:31:19 +00003480
3481static PyObject *
Martin v. Löwisda86fcc2007-09-10 07:59:54 +00003482long_mul(PyLongObject *a, PyLongObject *b)
Tim Peters5af4e6c2002-08-12 02:31:19 +00003483{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003484 PyLongObject *z;
Tim Peters5af4e6c2002-08-12 02:31:19 +00003485
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003486 CHECK_BINOP(a, b);
Tim Peters5af4e6c2002-08-12 02:31:19 +00003487
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003488 /* fast path for single-digit multiplication */
Victor Stinner45e8e2f2014-05-14 17:24:35 +02003489 if (Py_ABS(Py_SIZE(a)) <= 1 && Py_ABS(Py_SIZE(b)) <= 1) {
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003490 stwodigits v = (stwodigits)(MEDIUM_VALUE(a)) * MEDIUM_VALUE(b);
Mark Dickinsonbd792642009-03-18 20:06:12 +00003491#ifdef HAVE_LONG_LONG
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003492 return PyLong_FromLongLong((PY_LONG_LONG)v);
Mark Dickinsonbd792642009-03-18 20:06:12 +00003493#else
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003494 /* if we don't have long long then we're almost certainly
3495 using 15-bit digits, so v will fit in a long. In the
3496 unlikely event that we're using 30-bit digits on a platform
3497 without long long, a large v will just cause us to fall
3498 through to the general multiplication code below. */
3499 if (v >= LONG_MIN && v <= LONG_MAX)
3500 return PyLong_FromLong((long)v);
Mark Dickinsonbd792642009-03-18 20:06:12 +00003501#endif
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003502 }
Guido van Rossumddefaf32007-01-14 03:31:43 +00003503
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003504 z = k_mul(a, b);
3505 /* Negate if exactly one of the inputs is negative. */
Victor Stinner8aed6f12013-07-17 22:31:17 +02003506 if (((Py_SIZE(a) ^ Py_SIZE(b)) < 0) && z) {
3507 _PyLong_Negate(&z);
3508 if (z == NULL)
3509 return NULL;
3510 }
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003511 return (PyObject *)z;
Guido van Rossumedcc38a1991-05-05 20:09:44 +00003512}
3513
Yury Selivanove0b23092016-02-11 10:26:27 -05003514/* Fast modulo division for single-digit longs. */
3515static PyObject *
3516fast_mod(PyLongObject *a, PyLongObject *b)
3517{
3518 sdigit left = a->ob_digit[0];
3519 sdigit right = b->ob_digit[0];
3520 sdigit mod;
3521
3522 assert(Py_ABS(Py_SIZE(a)) == 1);
3523 assert(Py_ABS(Py_SIZE(b)) == 1);
3524
3525 if (Py_SIZE(a) == Py_SIZE(b)) {
3526 /* 'a' and 'b' have the same sign. */
3527 mod = left % right;
3528 }
3529 else {
3530 /* Either 'a' or 'b' is negative. */
3531 mod = right - 1 - (left - 1) % right;
3532 }
3533
Victor Stinnerf963c132016-03-23 18:36:54 +01003534 return PyLong_FromLong(mod * (sdigit)Py_SIZE(b));
Yury Selivanove0b23092016-02-11 10:26:27 -05003535}
3536
3537/* Fast floor division for single-digit longs. */
3538static PyObject *
3539fast_floor_div(PyLongObject *a, PyLongObject *b)
3540{
3541 sdigit left = a->ob_digit[0];
3542 sdigit right = b->ob_digit[0];
3543 sdigit div;
3544
3545 assert(Py_ABS(Py_SIZE(a)) == 1);
3546 assert(Py_ABS(Py_SIZE(b)) == 1);
3547
3548 if (Py_SIZE(a) == Py_SIZE(b)) {
3549 /* 'a' and 'b' have the same sign. */
3550 div = left / right;
3551 }
3552 else {
3553 /* Either 'a' or 'b' is negative. */
3554 div = -1 - (left - 1) / right;
3555 }
3556
3557 return PyLong_FromLong(div);
3558}
3559
Guido van Rossume32e0141992-01-19 16:31:05 +00003560/* The / and % operators are now defined in terms of divmod().
3561 The expression a mod b has the value a - b*floor(a/b).
3562 The long_divrem function gives the remainder after division of
Guido van Rossumedcc38a1991-05-05 20:09:44 +00003563 |a| by |b|, with the sign of a. This is also expressed
3564 as a - b*trunc(a/b), if trunc truncates towards zero.
3565 Some examples:
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003566 a b a rem b a mod b
3567 13 10 3 3
3568 -13 10 -3 7
3569 13 -10 3 -7
3570 -13 -10 -3 -3
Guido van Rossumedcc38a1991-05-05 20:09:44 +00003571 So, to get from rem to mod, we have to add b if a and b
Guido van Rossum23d6f0e1991-05-14 12:06:49 +00003572 have different signs. We then subtract one from the 'div'
3573 part of the outcome to keep the invariant intact. */
Guido van Rossumedcc38a1991-05-05 20:09:44 +00003574
Tim Peters47e52ee2004-08-30 02:44:38 +00003575/* Compute
3576 * *pdiv, *pmod = divmod(v, w)
3577 * NULL can be passed for pdiv or pmod, in which case that part of
3578 * the result is simply thrown away. The caller owns a reference to
3579 * each of these it requests (does not pass NULL for).
3580 */
Guido van Rossume32e0141992-01-19 16:31:05 +00003581static int
Tim Peters5af4e6c2002-08-12 02:31:19 +00003582l_divmod(PyLongObject *v, PyLongObject *w,
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003583 PyLongObject **pdiv, PyLongObject **pmod)
Guido van Rossume32e0141992-01-19 16:31:05 +00003584{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003585 PyLongObject *div, *mod;
Tim Peters5af4e6c2002-08-12 02:31:19 +00003586
Yury Selivanove0b23092016-02-11 10:26:27 -05003587 if (Py_ABS(Py_SIZE(v)) == 1 && Py_ABS(Py_SIZE(w)) == 1) {
3588 /* Fast path for single-digit longs */
3589 div = NULL;
3590 if (pdiv != NULL) {
3591 div = (PyLongObject *)fast_floor_div(v, w);
3592 if (div == NULL) {
3593 return -1;
3594 }
3595 }
3596 if (pmod != NULL) {
3597 mod = (PyLongObject *)fast_mod(v, w);
3598 if (mod == NULL) {
3599 Py_XDECREF(div);
3600 return -1;
3601 }
3602 *pmod = mod;
3603 }
3604 if (pdiv != NULL) {
3605 /* We only want to set `*pdiv` when `*pmod` is
3606 set successfully. */
3607 *pdiv = div;
3608 }
3609 return 0;
3610 }
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003611 if (long_divrem(v, w, &div, &mod) < 0)
3612 return -1;
3613 if ((Py_SIZE(mod) < 0 && Py_SIZE(w) > 0) ||
3614 (Py_SIZE(mod) > 0 && Py_SIZE(w) < 0)) {
3615 PyLongObject *temp;
3616 PyLongObject *one;
3617 temp = (PyLongObject *) long_add(mod, w);
3618 Py_DECREF(mod);
3619 mod = temp;
3620 if (mod == NULL) {
3621 Py_DECREF(div);
3622 return -1;
3623 }
3624 one = (PyLongObject *) PyLong_FromLong(1L);
3625 if (one == NULL ||
3626 (temp = (PyLongObject *) long_sub(div, one)) == NULL) {
3627 Py_DECREF(mod);
3628 Py_DECREF(div);
3629 Py_XDECREF(one);
3630 return -1;
3631 }
3632 Py_DECREF(one);
3633 Py_DECREF(div);
3634 div = temp;
3635 }
3636 if (pdiv != NULL)
3637 *pdiv = div;
3638 else
3639 Py_DECREF(div);
Tim Peters47e52ee2004-08-30 02:44:38 +00003640
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003641 if (pmod != NULL)
3642 *pmod = mod;
3643 else
3644 Py_DECREF(mod);
Tim Peters47e52ee2004-08-30 02:44:38 +00003645
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003646 return 0;
Guido van Rossume32e0141992-01-19 16:31:05 +00003647}
3648
Guido van Rossumc0b618a1997-05-02 03:12:38 +00003649static PyObject *
Martin v. Löwisda86fcc2007-09-10 07:59:54 +00003650long_div(PyObject *a, PyObject *b)
Guido van Rossume32e0141992-01-19 16:31:05 +00003651{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003652 PyLongObject *div;
Neil Schemenauerba872e22001-01-04 01:46:03 +00003653
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003654 CHECK_BINOP(a, b);
Yury Selivanove0b23092016-02-11 10:26:27 -05003655
3656 if (Py_ABS(Py_SIZE(a)) == 1 && Py_ABS(Py_SIZE(b)) == 1) {
3657 return fast_floor_div((PyLongObject*)a, (PyLongObject*)b);
3658 }
3659
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003660 if (l_divmod((PyLongObject*)a, (PyLongObject*)b, &div, NULL) < 0)
3661 div = NULL;
3662 return (PyObject *)div;
Guido van Rossume32e0141992-01-19 16:31:05 +00003663}
3664
Mark Dickinsoncbb62742009-12-27 15:09:50 +00003665/* PyLong/PyLong -> float, with correctly rounded result. */
3666
3667#define MANT_DIG_DIGITS (DBL_MANT_DIG / PyLong_SHIFT)
3668#define MANT_DIG_BITS (DBL_MANT_DIG % PyLong_SHIFT)
3669
Guido van Rossumc0b618a1997-05-02 03:12:38 +00003670static PyObject *
Mark Dickinsoncbb62742009-12-27 15:09:50 +00003671long_true_divide(PyObject *v, PyObject *w)
Tim Peters20dab9f2001-09-04 05:31:47 +00003672{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003673 PyLongObject *a, *b, *x;
3674 Py_ssize_t a_size, b_size, shift, extra_bits, diff, x_size, x_bits;
3675 digit mask, low;
3676 int inexact, negate, a_is_small, b_is_small;
3677 double dx, result;
Tim Peterse2a60002001-09-04 06:17:36 +00003678
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003679 CHECK_BINOP(v, w);
3680 a = (PyLongObject *)v;
3681 b = (PyLongObject *)w;
Tim Peterse2a60002001-09-04 06:17:36 +00003682
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003683 /*
3684 Method in a nutshell:
Mark Dickinsoncbb62742009-12-27 15:09:50 +00003685
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003686 0. reduce to case a, b > 0; filter out obvious underflow/overflow
3687 1. choose a suitable integer 'shift'
3688 2. use integer arithmetic to compute x = floor(2**-shift*a/b)
3689 3. adjust x for correct rounding
3690 4. convert x to a double dx with the same value
3691 5. return ldexp(dx, shift).
Mark Dickinsoncbb62742009-12-27 15:09:50 +00003692
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003693 In more detail:
Mark Dickinsoncbb62742009-12-27 15:09:50 +00003694
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003695 0. For any a, a/0 raises ZeroDivisionError; for nonzero b, 0/b
3696 returns either 0.0 or -0.0, depending on the sign of b. For a and
3697 b both nonzero, ignore signs of a and b, and add the sign back in
3698 at the end. Now write a_bits and b_bits for the bit lengths of a
3699 and b respectively (that is, a_bits = 1 + floor(log_2(a)); likewise
3700 for b). Then
Mark Dickinsoncbb62742009-12-27 15:09:50 +00003701
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003702 2**(a_bits - b_bits - 1) < a/b < 2**(a_bits - b_bits + 1).
Mark Dickinsoncbb62742009-12-27 15:09:50 +00003703
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003704 So if a_bits - b_bits > DBL_MAX_EXP then a/b > 2**DBL_MAX_EXP and
3705 so overflows. Similarly, if a_bits - b_bits < DBL_MIN_EXP -
3706 DBL_MANT_DIG - 1 then a/b underflows to 0. With these cases out of
3707 the way, we can assume that
Mark Dickinsoncbb62742009-12-27 15:09:50 +00003708
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003709 DBL_MIN_EXP - DBL_MANT_DIG - 1 <= a_bits - b_bits <= DBL_MAX_EXP.
Mark Dickinsoncbb62742009-12-27 15:09:50 +00003710
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003711 1. The integer 'shift' is chosen so that x has the right number of
3712 bits for a double, plus two or three extra bits that will be used
3713 in the rounding decisions. Writing a_bits and b_bits for the
3714 number of significant bits in a and b respectively, a
3715 straightforward formula for shift is:
Mark Dickinsoncbb62742009-12-27 15:09:50 +00003716
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003717 shift = a_bits - b_bits - DBL_MANT_DIG - 2
Mark Dickinsoncbb62742009-12-27 15:09:50 +00003718
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003719 This is fine in the usual case, but if a/b is smaller than the
3720 smallest normal float then it can lead to double rounding on an
3721 IEEE 754 platform, giving incorrectly rounded results. So we
3722 adjust the formula slightly. The actual formula used is:
Mark Dickinsoncbb62742009-12-27 15:09:50 +00003723
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003724 shift = MAX(a_bits - b_bits, DBL_MIN_EXP) - DBL_MANT_DIG - 2
Mark Dickinsoncbb62742009-12-27 15:09:50 +00003725
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003726 2. The quantity x is computed by first shifting a (left -shift bits
3727 if shift <= 0, right shift bits if shift > 0) and then dividing by
3728 b. For both the shift and the division, we keep track of whether
3729 the result is inexact, in a flag 'inexact'; this information is
3730 needed at the rounding stage.
Mark Dickinsoncbb62742009-12-27 15:09:50 +00003731
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003732 With the choice of shift above, together with our assumption that
3733 a_bits - b_bits >= DBL_MIN_EXP - DBL_MANT_DIG - 1, it follows
3734 that x >= 1.
Mark Dickinsoncbb62742009-12-27 15:09:50 +00003735
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003736 3. Now x * 2**shift <= a/b < (x+1) * 2**shift. We want to replace
3737 this with an exactly representable float of the form
Mark Dickinsoncbb62742009-12-27 15:09:50 +00003738
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003739 round(x/2**extra_bits) * 2**(extra_bits+shift).
Mark Dickinsoncbb62742009-12-27 15:09:50 +00003740
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003741 For float representability, we need x/2**extra_bits <
3742 2**DBL_MANT_DIG and extra_bits + shift >= DBL_MIN_EXP -
3743 DBL_MANT_DIG. This translates to the condition:
Mark Dickinsoncbb62742009-12-27 15:09:50 +00003744
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003745 extra_bits >= MAX(x_bits, DBL_MIN_EXP - shift) - DBL_MANT_DIG
Mark Dickinsoncbb62742009-12-27 15:09:50 +00003746
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003747 To round, we just modify the bottom digit of x in-place; this can
3748 end up giving a digit with value > PyLONG_MASK, but that's not a
3749 problem since digits can hold values up to 2*PyLONG_MASK+1.
Mark Dickinsoncbb62742009-12-27 15:09:50 +00003750
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003751 With the original choices for shift above, extra_bits will always
3752 be 2 or 3. Then rounding under the round-half-to-even rule, we
3753 round up iff the most significant of the extra bits is 1, and
3754 either: (a) the computation of x in step 2 had an inexact result,
3755 or (b) at least one other of the extra bits is 1, or (c) the least
3756 significant bit of x (above those to be rounded) is 1.
Mark Dickinsoncbb62742009-12-27 15:09:50 +00003757
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003758 4. Conversion to a double is straightforward; all floating-point
3759 operations involved in the conversion are exact, so there's no
3760 danger of rounding errors.
Mark Dickinsoncbb62742009-12-27 15:09:50 +00003761
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003762 5. Use ldexp(x, shift) to compute x*2**shift, the final result.
3763 The result will always be exactly representable as a double, except
3764 in the case that it overflows. To avoid dependence on the exact
3765 behaviour of ldexp on overflow, we check for overflow before
3766 applying ldexp. The result of ldexp is adjusted for sign before
3767 returning.
3768 */
Mark Dickinsoncbb62742009-12-27 15:09:50 +00003769
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003770 /* Reduce to case where a and b are both positive. */
Victor Stinner45e8e2f2014-05-14 17:24:35 +02003771 a_size = Py_ABS(Py_SIZE(a));
3772 b_size = Py_ABS(Py_SIZE(b));
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003773 negate = (Py_SIZE(a) < 0) ^ (Py_SIZE(b) < 0);
3774 if (b_size == 0) {
3775 PyErr_SetString(PyExc_ZeroDivisionError,
3776 "division by zero");
3777 goto error;
3778 }
3779 if (a_size == 0)
3780 goto underflow_or_zero;
Mark Dickinsoncbb62742009-12-27 15:09:50 +00003781
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003782 /* Fast path for a and b small (exactly representable in a double).
3783 Relies on floating-point division being correctly rounded; results
3784 may be subject to double rounding on x86 machines that operate with
3785 the x87 FPU set to 64-bit precision. */
3786 a_is_small = a_size <= MANT_DIG_DIGITS ||
3787 (a_size == MANT_DIG_DIGITS+1 &&
3788 a->ob_digit[MANT_DIG_DIGITS] >> MANT_DIG_BITS == 0);
3789 b_is_small = b_size <= MANT_DIG_DIGITS ||
3790 (b_size == MANT_DIG_DIGITS+1 &&
3791 b->ob_digit[MANT_DIG_DIGITS] >> MANT_DIG_BITS == 0);
3792 if (a_is_small && b_is_small) {
3793 double da, db;
3794 da = a->ob_digit[--a_size];
3795 while (a_size > 0)
3796 da = da * PyLong_BASE + a->ob_digit[--a_size];
3797 db = b->ob_digit[--b_size];
3798 while (b_size > 0)
3799 db = db * PyLong_BASE + b->ob_digit[--b_size];
3800 result = da / db;
3801 goto success;
3802 }
Tim Peterse2a60002001-09-04 06:17:36 +00003803
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003804 /* Catch obvious cases of underflow and overflow */
3805 diff = a_size - b_size;
3806 if (diff > PY_SSIZE_T_MAX/PyLong_SHIFT - 1)
3807 /* Extreme overflow */
3808 goto overflow;
3809 else if (diff < 1 - PY_SSIZE_T_MAX/PyLong_SHIFT)
3810 /* Extreme underflow */
3811 goto underflow_or_zero;
3812 /* Next line is now safe from overflowing a Py_ssize_t */
3813 diff = diff * PyLong_SHIFT + bits_in_digit(a->ob_digit[a_size - 1]) -
3814 bits_in_digit(b->ob_digit[b_size - 1]);
3815 /* Now diff = a_bits - b_bits. */
3816 if (diff > DBL_MAX_EXP)
3817 goto overflow;
3818 else if (diff < DBL_MIN_EXP - DBL_MANT_DIG - 1)
3819 goto underflow_or_zero;
Tim Peterse2a60002001-09-04 06:17:36 +00003820
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003821 /* Choose value for shift; see comments for step 1 above. */
Victor Stinner640c35c2013-06-04 23:14:37 +02003822 shift = Py_MAX(diff, DBL_MIN_EXP) - DBL_MANT_DIG - 2;
Mark Dickinsoncbb62742009-12-27 15:09:50 +00003823
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003824 inexact = 0;
Mark Dickinsoncbb62742009-12-27 15:09:50 +00003825
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003826 /* x = abs(a * 2**-shift) */
3827 if (shift <= 0) {
3828 Py_ssize_t i, shift_digits = -shift / PyLong_SHIFT;
3829 digit rem;
3830 /* x = a << -shift */
3831 if (a_size >= PY_SSIZE_T_MAX - 1 - shift_digits) {
3832 /* In practice, it's probably impossible to end up
3833 here. Both a and b would have to be enormous,
3834 using close to SIZE_T_MAX bytes of memory each. */
3835 PyErr_SetString(PyExc_OverflowError,
Mark Dickinson22b20182010-05-10 21:27:53 +00003836 "intermediate overflow during division");
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003837 goto error;
3838 }
3839 x = _PyLong_New(a_size + shift_digits + 1);
3840 if (x == NULL)
3841 goto error;
3842 for (i = 0; i < shift_digits; i++)
3843 x->ob_digit[i] = 0;
3844 rem = v_lshift(x->ob_digit + shift_digits, a->ob_digit,
3845 a_size, -shift % PyLong_SHIFT);
3846 x->ob_digit[a_size + shift_digits] = rem;
3847 }
3848 else {
3849 Py_ssize_t shift_digits = shift / PyLong_SHIFT;
3850 digit rem;
3851 /* x = a >> shift */
3852 assert(a_size >= shift_digits);
3853 x = _PyLong_New(a_size - shift_digits);
3854 if (x == NULL)
3855 goto error;
3856 rem = v_rshift(x->ob_digit, a->ob_digit + shift_digits,
3857 a_size - shift_digits, shift % PyLong_SHIFT);
3858 /* set inexact if any of the bits shifted out is nonzero */
3859 if (rem)
3860 inexact = 1;
3861 while (!inexact && shift_digits > 0)
3862 if (a->ob_digit[--shift_digits])
3863 inexact = 1;
3864 }
3865 long_normalize(x);
3866 x_size = Py_SIZE(x);
Mark Dickinsoncbb62742009-12-27 15:09:50 +00003867
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003868 /* x //= b. If the remainder is nonzero, set inexact. We own the only
3869 reference to x, so it's safe to modify it in-place. */
3870 if (b_size == 1) {
3871 digit rem = inplace_divrem1(x->ob_digit, x->ob_digit, x_size,
3872 b->ob_digit[0]);
3873 long_normalize(x);
3874 if (rem)
3875 inexact = 1;
3876 }
3877 else {
3878 PyLongObject *div, *rem;
3879 div = x_divrem(x, b, &rem);
3880 Py_DECREF(x);
3881 x = div;
3882 if (x == NULL)
3883 goto error;
3884 if (Py_SIZE(rem))
3885 inexact = 1;
3886 Py_DECREF(rem);
3887 }
Victor Stinner45e8e2f2014-05-14 17:24:35 +02003888 x_size = Py_ABS(Py_SIZE(x));
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003889 assert(x_size > 0); /* result of division is never zero */
3890 x_bits = (x_size-1)*PyLong_SHIFT+bits_in_digit(x->ob_digit[x_size-1]);
Mark Dickinsoncbb62742009-12-27 15:09:50 +00003891
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003892 /* The number of extra bits that have to be rounded away. */
Victor Stinner640c35c2013-06-04 23:14:37 +02003893 extra_bits = Py_MAX(x_bits, DBL_MIN_EXP - shift) - DBL_MANT_DIG;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003894 assert(extra_bits == 2 || extra_bits == 3);
Mark Dickinsoncbb62742009-12-27 15:09:50 +00003895
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003896 /* Round by directly modifying the low digit of x. */
3897 mask = (digit)1 << (extra_bits - 1);
3898 low = x->ob_digit[0] | inexact;
Mark Dickinsondc590a42016-08-21 10:23:23 +01003899 if ((low & mask) && (low & (3U*mask-1U)))
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003900 low += mask;
Mark Dickinsondc590a42016-08-21 10:23:23 +01003901 x->ob_digit[0] = low & ~(2U*mask-1U);
Mark Dickinsoncbb62742009-12-27 15:09:50 +00003902
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003903 /* Convert x to a double dx; the conversion is exact. */
3904 dx = x->ob_digit[--x_size];
3905 while (x_size > 0)
3906 dx = dx * PyLong_BASE + x->ob_digit[--x_size];
3907 Py_DECREF(x);
Mark Dickinsoncbb62742009-12-27 15:09:50 +00003908
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003909 /* Check whether ldexp result will overflow a double. */
3910 if (shift + x_bits >= DBL_MAX_EXP &&
3911 (shift + x_bits > DBL_MAX_EXP || dx == ldexp(1.0, (int)x_bits)))
3912 goto overflow;
3913 result = ldexp(dx, (int)shift);
Mark Dickinsoncbb62742009-12-27 15:09:50 +00003914
3915 success:
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003916 return PyFloat_FromDouble(negate ? -result : result);
Mark Dickinsoncbb62742009-12-27 15:09:50 +00003917
3918 underflow_or_zero:
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003919 return PyFloat_FromDouble(negate ? -0.0 : 0.0);
Mark Dickinsoncbb62742009-12-27 15:09:50 +00003920
3921 overflow:
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003922 PyErr_SetString(PyExc_OverflowError,
3923 "integer division result too large for a float");
Mark Dickinsoncbb62742009-12-27 15:09:50 +00003924 error:
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003925 return NULL;
Tim Peters20dab9f2001-09-04 05:31:47 +00003926}
3927
3928static PyObject *
Martin v. Löwisda86fcc2007-09-10 07:59:54 +00003929long_mod(PyObject *a, PyObject *b)
Guido van Rossume32e0141992-01-19 16:31:05 +00003930{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003931 PyLongObject *mod;
Neil Schemenauerba872e22001-01-04 01:46:03 +00003932
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003933 CHECK_BINOP(a, b);
3934
Yury Selivanove0b23092016-02-11 10:26:27 -05003935 if (Py_ABS(Py_SIZE(a)) == 1 && Py_ABS(Py_SIZE(b)) == 1) {
3936 return fast_mod((PyLongObject*)a, (PyLongObject*)b);
3937 }
3938
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003939 if (l_divmod((PyLongObject*)a, (PyLongObject*)b, NULL, &mod) < 0)
3940 mod = NULL;
3941 return (PyObject *)mod;
Guido van Rossume32e0141992-01-19 16:31:05 +00003942}
3943
Guido van Rossumc0b618a1997-05-02 03:12:38 +00003944static PyObject *
Martin v. Löwisda86fcc2007-09-10 07:59:54 +00003945long_divmod(PyObject *a, PyObject *b)
Guido van Rossumedcc38a1991-05-05 20:09:44 +00003946{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003947 PyLongObject *div, *mod;
3948 PyObject *z;
Neil Schemenauerba872e22001-01-04 01:46:03 +00003949
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003950 CHECK_BINOP(a, b);
Neil Schemenauerba872e22001-01-04 01:46:03 +00003951
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003952 if (l_divmod((PyLongObject*)a, (PyLongObject*)b, &div, &mod) < 0) {
3953 return NULL;
3954 }
3955 z = PyTuple_New(2);
3956 if (z != NULL) {
3957 PyTuple_SetItem(z, 0, (PyObject *) div);
3958 PyTuple_SetItem(z, 1, (PyObject *) mod);
3959 }
3960 else {
3961 Py_DECREF(div);
3962 Py_DECREF(mod);
3963 }
3964 return z;
Guido van Rossumedcc38a1991-05-05 20:09:44 +00003965}
3966
Tim Peters47e52ee2004-08-30 02:44:38 +00003967/* pow(v, w, x) */
Guido van Rossumc0b618a1997-05-02 03:12:38 +00003968static PyObject *
Neil Schemenauerba872e22001-01-04 01:46:03 +00003969long_pow(PyObject *v, PyObject *w, PyObject *x)
Guido van Rossumedcc38a1991-05-05 20:09:44 +00003970{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003971 PyLongObject *a, *b, *c; /* a,b,c = v,w,x */
3972 int negativeOutput = 0; /* if x<0 return negative output */
Neil Schemenauerba872e22001-01-04 01:46:03 +00003973
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003974 PyLongObject *z = NULL; /* accumulated result */
3975 Py_ssize_t i, j, k; /* counters */
3976 PyLongObject *temp = NULL;
Tim Peters47e52ee2004-08-30 02:44:38 +00003977
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003978 /* 5-ary values. If the exponent is large enough, table is
3979 * precomputed so that table[i] == a**i % c for i in range(32).
3980 */
3981 PyLongObject *table[32] = {0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
3982 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0};
Tim Peters47e52ee2004-08-30 02:44:38 +00003983
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003984 /* a, b, c = v, w, x */
3985 CHECK_BINOP(v, w);
3986 a = (PyLongObject*)v; Py_INCREF(a);
3987 b = (PyLongObject*)w; Py_INCREF(b);
3988 if (PyLong_Check(x)) {
3989 c = (PyLongObject *)x;
3990 Py_INCREF(x);
3991 }
3992 else if (x == Py_None)
3993 c = NULL;
3994 else {
3995 Py_DECREF(a);
3996 Py_DECREF(b);
Brian Curtindfc80e32011-08-10 20:28:54 -05003997 Py_RETURN_NOTIMPLEMENTED;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00003998 }
Tim Peters4c483c42001-09-05 06:24:58 +00003999
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00004000 if (Py_SIZE(b) < 0) { /* if exponent is negative */
4001 if (c) {
Mark Dickinson0c346d82014-04-11 14:34:40 -04004002 PyErr_SetString(PyExc_ValueError, "pow() 2nd argument "
Mark Dickinson22b20182010-05-10 21:27:53 +00004003 "cannot be negative when 3rd argument specified");
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00004004 goto Error;
4005 }
4006 else {
4007 /* else return a float. This works because we know
4008 that this calls float_pow() which converts its
4009 arguments to double. */
4010 Py_DECREF(a);
4011 Py_DECREF(b);
4012 return PyFloat_Type.tp_as_number->nb_power(v, w, x);
4013 }
4014 }
Tim Peters47e52ee2004-08-30 02:44:38 +00004015
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00004016 if (c) {
4017 /* if modulus == 0:
4018 raise ValueError() */
4019 if (Py_SIZE(c) == 0) {
4020 PyErr_SetString(PyExc_ValueError,
4021 "pow() 3rd argument cannot be 0");
4022 goto Error;
4023 }
Tim Peters47e52ee2004-08-30 02:44:38 +00004024
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00004025 /* if modulus < 0:
4026 negativeOutput = True
4027 modulus = -modulus */
4028 if (Py_SIZE(c) < 0) {
4029 negativeOutput = 1;
4030 temp = (PyLongObject *)_PyLong_Copy(c);
4031 if (temp == NULL)
4032 goto Error;
4033 Py_DECREF(c);
4034 c = temp;
4035 temp = NULL;
Victor Stinner8aed6f12013-07-17 22:31:17 +02004036 _PyLong_Negate(&c);
4037 if (c == NULL)
4038 goto Error;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00004039 }
Tim Peters47e52ee2004-08-30 02:44:38 +00004040
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00004041 /* if modulus == 1:
4042 return 0 */
4043 if ((Py_SIZE(c) == 1) && (c->ob_digit[0] == 1)) {
4044 z = (PyLongObject *)PyLong_FromLong(0L);
4045 goto Done;
4046 }
Tim Peters47e52ee2004-08-30 02:44:38 +00004047
Tim Peters81a93152013-10-05 16:53:52 -05004048 /* Reduce base by modulus in some cases:
4049 1. If base < 0. Forcing the base non-negative makes things easier.
4050 2. If base is obviously larger than the modulus. The "small
4051 exponent" case later can multiply directly by base repeatedly,
4052 while the "large exponent" case multiplies directly by base 31
4053 times. It can be unboundedly faster to multiply by
4054 base % modulus instead.
4055 We could _always_ do this reduction, but l_divmod() isn't cheap,
4056 so we only do it when it buys something. */
4057 if (Py_SIZE(a) < 0 || Py_SIZE(a) > Py_SIZE(c)) {
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00004058 if (l_divmod(a, c, NULL, &temp) < 0)
4059 goto Error;
4060 Py_DECREF(a);
4061 a = temp;
4062 temp = NULL;
4063 }
4064 }
Tim Peters47e52ee2004-08-30 02:44:38 +00004065
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00004066 /* At this point a, b, and c are guaranteed non-negative UNLESS
4067 c is NULL, in which case a may be negative. */
Tim Peters47e52ee2004-08-30 02:44:38 +00004068
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00004069 z = (PyLongObject *)PyLong_FromLong(1L);
4070 if (z == NULL)
4071 goto Error;
Tim Peters47e52ee2004-08-30 02:44:38 +00004072
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00004073 /* Perform a modular reduction, X = X % c, but leave X alone if c
4074 * is NULL.
4075 */
4076#define REDUCE(X) \
Mark Dickinsoncdd01d22010-05-10 21:37:34 +00004077 do { \
4078 if (c != NULL) { \
4079 if (l_divmod(X, c, NULL, &temp) < 0) \
4080 goto Error; \
4081 Py_XDECREF(X); \
4082 X = temp; \
4083 temp = NULL; \
4084 } \
4085 } while(0)
Tim Peters47e52ee2004-08-30 02:44:38 +00004086
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00004087 /* Multiply two values, then reduce the result:
4088 result = X*Y % c. If c is NULL, skip the mod. */
Mark Dickinsoncdd01d22010-05-10 21:37:34 +00004089#define MULT(X, Y, result) \
4090 do { \
4091 temp = (PyLongObject *)long_mul(X, Y); \
4092 if (temp == NULL) \
4093 goto Error; \
4094 Py_XDECREF(result); \
4095 result = temp; \
4096 temp = NULL; \
4097 REDUCE(result); \
4098 } while(0)
Tim Peters47e52ee2004-08-30 02:44:38 +00004099
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00004100 if (Py_SIZE(b) <= FIVEARY_CUTOFF) {
4101 /* Left-to-right binary exponentiation (HAC Algorithm 14.79) */
4102 /* http://www.cacr.math.uwaterloo.ca/hac/about/chap14.pdf */
4103 for (i = Py_SIZE(b) - 1; i >= 0; --i) {
4104 digit bi = b->ob_digit[i];
Tim Peters47e52ee2004-08-30 02:44:38 +00004105
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00004106 for (j = (digit)1 << (PyLong_SHIFT-1); j != 0; j >>= 1) {
Mark Dickinsoncdd01d22010-05-10 21:37:34 +00004107 MULT(z, z, z);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00004108 if (bi & j)
Mark Dickinsoncdd01d22010-05-10 21:37:34 +00004109 MULT(z, a, z);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00004110 }
4111 }
4112 }
4113 else {
4114 /* Left-to-right 5-ary exponentiation (HAC Algorithm 14.82) */
4115 Py_INCREF(z); /* still holds 1L */
4116 table[0] = z;
4117 for (i = 1; i < 32; ++i)
Mark Dickinsoncdd01d22010-05-10 21:37:34 +00004118 MULT(table[i-1], a, table[i]);
Tim Peters47e52ee2004-08-30 02:44:38 +00004119
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00004120 for (i = Py_SIZE(b) - 1; i >= 0; --i) {
4121 const digit bi = b->ob_digit[i];
Tim Peters47e52ee2004-08-30 02:44:38 +00004122
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00004123 for (j = PyLong_SHIFT - 5; j >= 0; j -= 5) {
4124 const int index = (bi >> j) & 0x1f;
4125 for (k = 0; k < 5; ++k)
Mark Dickinsoncdd01d22010-05-10 21:37:34 +00004126 MULT(z, z, z);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00004127 if (index)
Mark Dickinsoncdd01d22010-05-10 21:37:34 +00004128 MULT(z, table[index], z);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00004129 }
4130 }
4131 }
Tim Peters47e52ee2004-08-30 02:44:38 +00004132
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00004133 if (negativeOutput && (Py_SIZE(z) != 0)) {
4134 temp = (PyLongObject *)long_sub(z, c);
4135 if (temp == NULL)
4136 goto Error;
4137 Py_DECREF(z);
4138 z = temp;
4139 temp = NULL;
4140 }
4141 goto Done;
Tim Peters47e52ee2004-08-30 02:44:38 +00004142
Mark Dickinson22b20182010-05-10 21:27:53 +00004143 Error:
Victor Stinner8aed6f12013-07-17 22:31:17 +02004144 Py_CLEAR(z);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00004145 /* fall through */
Mark Dickinson22b20182010-05-10 21:27:53 +00004146 Done:
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00004147 if (Py_SIZE(b) > FIVEARY_CUTOFF) {
4148 for (i = 0; i < 32; ++i)
4149 Py_XDECREF(table[i]);
4150 }
4151 Py_DECREF(a);
4152 Py_DECREF(b);
4153 Py_XDECREF(c);
4154 Py_XDECREF(temp);
4155 return (PyObject *)z;
Guido van Rossumedcc38a1991-05-05 20:09:44 +00004156}
4157
Guido van Rossumc0b618a1997-05-02 03:12:38 +00004158static PyObject *
Tim Peters9f688bf2000-07-07 15:53:28 +00004159long_invert(PyLongObject *v)
Guido van Rossumedcc38a1991-05-05 20:09:44 +00004160{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00004161 /* Implement ~x as -(x+1) */
4162 PyLongObject *x;
4163 PyLongObject *w;
Victor Stinner45e8e2f2014-05-14 17:24:35 +02004164 if (Py_ABS(Py_SIZE(v)) <=1)
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00004165 return PyLong_FromLong(-(MEDIUM_VALUE(v)+1));
4166 w = (PyLongObject *)PyLong_FromLong(1L);
4167 if (w == NULL)
4168 return NULL;
4169 x = (PyLongObject *) long_add(v, w);
4170 Py_DECREF(w);
4171 if (x == NULL)
4172 return NULL;
4173 Py_SIZE(x) = -(Py_SIZE(x));
4174 return (PyObject *)maybe_small_long(x);
Guido van Rossumedcc38a1991-05-05 20:09:44 +00004175}
4176
Guido van Rossumc0b618a1997-05-02 03:12:38 +00004177static PyObject *
Tim Peters9f688bf2000-07-07 15:53:28 +00004178long_neg(PyLongObject *v)
Guido van Rossumc6913e71991-11-19 20:26:46 +00004179{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00004180 PyLongObject *z;
Victor Stinner45e8e2f2014-05-14 17:24:35 +02004181 if (Py_ABS(Py_SIZE(v)) <= 1)
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00004182 return PyLong_FromLong(-MEDIUM_VALUE(v));
4183 z = (PyLongObject *)_PyLong_Copy(v);
4184 if (z != NULL)
4185 Py_SIZE(z) = -(Py_SIZE(v));
4186 return (PyObject *)z;
Guido van Rossumc6913e71991-11-19 20:26:46 +00004187}
4188
Guido van Rossumc0b618a1997-05-02 03:12:38 +00004189static PyObject *
Tim Peters9f688bf2000-07-07 15:53:28 +00004190long_abs(PyLongObject *v)
Guido van Rossumedcc38a1991-05-05 20:09:44 +00004191{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00004192 if (Py_SIZE(v) < 0)
4193 return long_neg(v);
4194 else
4195 return long_long((PyObject *)v);
Guido van Rossumedcc38a1991-05-05 20:09:44 +00004196}
4197
Guido van Rossum23d6f0e1991-05-14 12:06:49 +00004198static int
Jack Diederich4dafcc42006-11-28 19:15:13 +00004199long_bool(PyLongObject *v)
Guido van Rossum23d6f0e1991-05-14 12:06:49 +00004200{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00004201 return Py_SIZE(v) != 0;
Guido van Rossumc6913e71991-11-19 20:26:46 +00004202}
4203
Guido van Rossumc0b618a1997-05-02 03:12:38 +00004204static PyObject *
Martin v. Löwisda86fcc2007-09-10 07:59:54 +00004205long_rshift(PyLongObject *a, PyLongObject *b)
Guido van Rossumc6913e71991-11-19 20:26:46 +00004206{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00004207 PyLongObject *z = NULL;
4208 Py_ssize_t shiftby, newsize, wordshift, loshift, hishift, i, j;
4209 digit lomask, himask;
Tim Peters5af4e6c2002-08-12 02:31:19 +00004210
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00004211 CHECK_BINOP(a, b);
Neil Schemenauerba872e22001-01-04 01:46:03 +00004212
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00004213 if (Py_SIZE(a) < 0) {
4214 /* Right shifting negative numbers is harder */
4215 PyLongObject *a1, *a2;
4216 a1 = (PyLongObject *) long_invert(a);
4217 if (a1 == NULL)
4218 goto rshift_error;
4219 a2 = (PyLongObject *) long_rshift(a1, b);
4220 Py_DECREF(a1);
4221 if (a2 == NULL)
4222 goto rshift_error;
4223 z = (PyLongObject *) long_invert(a2);
4224 Py_DECREF(a2);
4225 }
4226 else {
4227 shiftby = PyLong_AsSsize_t((PyObject *)b);
4228 if (shiftby == -1L && PyErr_Occurred())
4229 goto rshift_error;
4230 if (shiftby < 0) {
4231 PyErr_SetString(PyExc_ValueError,
4232 "negative shift count");
4233 goto rshift_error;
4234 }
4235 wordshift = shiftby / PyLong_SHIFT;
Victor Stinner45e8e2f2014-05-14 17:24:35 +02004236 newsize = Py_ABS(Py_SIZE(a)) - wordshift;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00004237 if (newsize <= 0)
4238 return PyLong_FromLong(0);
4239 loshift = shiftby % PyLong_SHIFT;
4240 hishift = PyLong_SHIFT - loshift;
4241 lomask = ((digit)1 << hishift) - 1;
4242 himask = PyLong_MASK ^ lomask;
4243 z = _PyLong_New(newsize);
4244 if (z == NULL)
4245 goto rshift_error;
4246 if (Py_SIZE(a) < 0)
4247 Py_SIZE(z) = -(Py_SIZE(z));
4248 for (i = 0, j = wordshift; i < newsize; i++, j++) {
4249 z->ob_digit[i] = (a->ob_digit[j] >> loshift) & lomask;
4250 if (i+1 < newsize)
Mark Dickinson22b20182010-05-10 21:27:53 +00004251 z->ob_digit[i] |= (a->ob_digit[j+1] << hishift) & himask;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00004252 }
4253 z = long_normalize(z);
4254 }
Mark Dickinson22b20182010-05-10 21:27:53 +00004255 rshift_error:
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00004256 return (PyObject *) maybe_small_long(z);
Neil Schemenauerba872e22001-01-04 01:46:03 +00004257
Guido van Rossumc6913e71991-11-19 20:26:46 +00004258}
4259
Guido van Rossumc0b618a1997-05-02 03:12:38 +00004260static PyObject *
Neil Schemenauerba872e22001-01-04 01:46:03 +00004261long_lshift(PyObject *v, PyObject *w)
Guido van Rossumc6913e71991-11-19 20:26:46 +00004262{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00004263 /* This version due to Tim Peters */
4264 PyLongObject *a = (PyLongObject*)v;
4265 PyLongObject *b = (PyLongObject*)w;
4266 PyLongObject *z = NULL;
4267 Py_ssize_t shiftby, oldsize, newsize, wordshift, remshift, i, j;
4268 twodigits accum;
Tim Peters5af4e6c2002-08-12 02:31:19 +00004269
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00004270 CHECK_BINOP(a, b);
Neil Schemenauerba872e22001-01-04 01:46:03 +00004271
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00004272 shiftby = PyLong_AsSsize_t((PyObject *)b);
4273 if (shiftby == -1L && PyErr_Occurred())
Victor Stinner8aed6f12013-07-17 22:31:17 +02004274 return NULL;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00004275 if (shiftby < 0) {
4276 PyErr_SetString(PyExc_ValueError, "negative shift count");
Victor Stinner8aed6f12013-07-17 22:31:17 +02004277 return NULL;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00004278 }
4279 /* wordshift, remshift = divmod(shiftby, PyLong_SHIFT) */
4280 wordshift = shiftby / PyLong_SHIFT;
4281 remshift = shiftby - wordshift * PyLong_SHIFT;
Guido van Rossumf2e499b1997-03-16 00:37:59 +00004282
Victor Stinner45e8e2f2014-05-14 17:24:35 +02004283 oldsize = Py_ABS(Py_SIZE(a));
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00004284 newsize = oldsize + wordshift;
4285 if (remshift)
4286 ++newsize;
4287 z = _PyLong_New(newsize);
4288 if (z == NULL)
Victor Stinner8aed6f12013-07-17 22:31:17 +02004289 return NULL;
4290 if (Py_SIZE(a) < 0) {
4291 assert(Py_REFCNT(z) == 1);
4292 Py_SIZE(z) = -Py_SIZE(z);
4293 }
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00004294 for (i = 0; i < wordshift; i++)
4295 z->ob_digit[i] = 0;
4296 accum = 0;
4297 for (i = wordshift, j = 0; j < oldsize; i++, j++) {
4298 accum |= (twodigits)a->ob_digit[j] << remshift;
4299 z->ob_digit[i] = (digit)(accum & PyLong_MASK);
4300 accum >>= PyLong_SHIFT;
4301 }
4302 if (remshift)
4303 z->ob_digit[newsize-1] = (digit)accum;
4304 else
4305 assert(!accum);
4306 z = long_normalize(z);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00004307 return (PyObject *) maybe_small_long(z);
Guido van Rossumc6913e71991-11-19 20:26:46 +00004308}
4309
Mark Dickinson27a87a22009-10-25 20:43:34 +00004310/* Compute two's complement of digit vector a[0:m], writing result to
4311 z[0:m]. The digit vector a need not be normalized, but should not
4312 be entirely zero. a and z may point to the same digit vector. */
4313
4314static void
4315v_complement(digit *z, digit *a, Py_ssize_t m)
4316{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00004317 Py_ssize_t i;
4318 digit carry = 1;
4319 for (i = 0; i < m; ++i) {
4320 carry += a[i] ^ PyLong_MASK;
4321 z[i] = carry & PyLong_MASK;
4322 carry >>= PyLong_SHIFT;
4323 }
4324 assert(carry == 0);
Mark Dickinson27a87a22009-10-25 20:43:34 +00004325}
Guido van Rossum4c260ff1992-01-14 18:36:43 +00004326
4327/* Bitwise and/xor/or operations */
4328
Guido van Rossumc0b618a1997-05-02 03:12:38 +00004329static PyObject *
Tim Peters9f688bf2000-07-07 15:53:28 +00004330long_bitwise(PyLongObject *a,
Benjamin Peterson513762f2012-12-26 16:43:33 -06004331 char op, /* '&', '|', '^' */
Mark Dickinson22b20182010-05-10 21:27:53 +00004332 PyLongObject *b)
Guido van Rossumc6913e71991-11-19 20:26:46 +00004333{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00004334 int nega, negb, negz;
4335 Py_ssize_t size_a, size_b, size_z, i;
4336 PyLongObject *z;
Tim Peters5af4e6c2002-08-12 02:31:19 +00004337
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00004338 /* Bitwise operations for negative numbers operate as though
4339 on a two's complement representation. So convert arguments
4340 from sign-magnitude to two's complement, and convert the
4341 result back to sign-magnitude at the end. */
Mark Dickinson27a87a22009-10-25 20:43:34 +00004342
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00004343 /* If a is negative, replace it by its two's complement. */
Victor Stinner45e8e2f2014-05-14 17:24:35 +02004344 size_a = Py_ABS(Py_SIZE(a));
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00004345 nega = Py_SIZE(a) < 0;
4346 if (nega) {
4347 z = _PyLong_New(size_a);
4348 if (z == NULL)
4349 return NULL;
4350 v_complement(z->ob_digit, a->ob_digit, size_a);
4351 a = z;
4352 }
4353 else
4354 /* Keep reference count consistent. */
4355 Py_INCREF(a);
Mark Dickinson27a87a22009-10-25 20:43:34 +00004356
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00004357 /* Same for b. */
Victor Stinner45e8e2f2014-05-14 17:24:35 +02004358 size_b = Py_ABS(Py_SIZE(b));
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00004359 negb = Py_SIZE(b) < 0;
4360 if (negb) {
4361 z = _PyLong_New(size_b);
4362 if (z == NULL) {
4363 Py_DECREF(a);
4364 return NULL;
4365 }
4366 v_complement(z->ob_digit, b->ob_digit, size_b);
4367 b = z;
4368 }
4369 else
4370 Py_INCREF(b);
Tim Peters5af4e6c2002-08-12 02:31:19 +00004371
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00004372 /* Swap a and b if necessary to ensure size_a >= size_b. */
4373 if (size_a < size_b) {
4374 z = a; a = b; b = z;
4375 size_z = size_a; size_a = size_b; size_b = size_z;
4376 negz = nega; nega = negb; negb = negz;
4377 }
Tim Peters5af4e6c2002-08-12 02:31:19 +00004378
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00004379 /* JRH: The original logic here was to allocate the result value (z)
4380 as the longer of the two operands. However, there are some cases
4381 where the result is guaranteed to be shorter than that: AND of two
4382 positives, OR of two negatives: use the shorter number. AND with
4383 mixed signs: use the positive number. OR with mixed signs: use the
4384 negative number.
4385 */
4386 switch (op) {
4387 case '^':
4388 negz = nega ^ negb;
4389 size_z = size_a;
4390 break;
4391 case '&':
4392 negz = nega & negb;
4393 size_z = negb ? size_a : size_b;
4394 break;
4395 case '|':
4396 negz = nega | negb;
4397 size_z = negb ? size_b : size_a;
4398 break;
4399 default:
4400 PyErr_BadArgument();
4401 return NULL;
4402 }
Guido van Rossumbd3a5271998-08-11 15:04:47 +00004403
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00004404 /* We allow an extra digit if z is negative, to make sure that
4405 the final two's complement of z doesn't overflow. */
4406 z = _PyLong_New(size_z + negz);
4407 if (z == NULL) {
4408 Py_DECREF(a);
4409 Py_DECREF(b);
4410 return NULL;
4411 }
Tim Peters5af4e6c2002-08-12 02:31:19 +00004412
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00004413 /* Compute digits for overlap of a and b. */
4414 switch(op) {
4415 case '&':
4416 for (i = 0; i < size_b; ++i)
4417 z->ob_digit[i] = a->ob_digit[i] & b->ob_digit[i];
4418 break;
4419 case '|':
4420 for (i = 0; i < size_b; ++i)
4421 z->ob_digit[i] = a->ob_digit[i] | b->ob_digit[i];
4422 break;
4423 case '^':
4424 for (i = 0; i < size_b; ++i)
4425 z->ob_digit[i] = a->ob_digit[i] ^ b->ob_digit[i];
4426 break;
4427 default:
4428 PyErr_BadArgument();
4429 return NULL;
4430 }
Mark Dickinson27a87a22009-10-25 20:43:34 +00004431
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00004432 /* Copy any remaining digits of a, inverting if necessary. */
4433 if (op == '^' && negb)
4434 for (; i < size_z; ++i)
4435 z->ob_digit[i] = a->ob_digit[i] ^ PyLong_MASK;
4436 else if (i < size_z)
4437 memcpy(&z->ob_digit[i], &a->ob_digit[i],
4438 (size_z-i)*sizeof(digit));
Mark Dickinson27a87a22009-10-25 20:43:34 +00004439
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00004440 /* Complement result if negative. */
4441 if (negz) {
4442 Py_SIZE(z) = -(Py_SIZE(z));
4443 z->ob_digit[size_z] = PyLong_MASK;
4444 v_complement(z->ob_digit, z->ob_digit, size_z+1);
4445 }
Tim Peters5af4e6c2002-08-12 02:31:19 +00004446
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00004447 Py_DECREF(a);
4448 Py_DECREF(b);
4449 return (PyObject *)maybe_small_long(long_normalize(z));
Guido van Rossumc6913e71991-11-19 20:26:46 +00004450}
4451
Guido van Rossumc0b618a1997-05-02 03:12:38 +00004452static PyObject *
Martin v. Löwisda86fcc2007-09-10 07:59:54 +00004453long_and(PyObject *a, PyObject *b)
Guido van Rossumc6913e71991-11-19 20:26:46 +00004454{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00004455 PyObject *c;
4456 CHECK_BINOP(a, b);
4457 c = long_bitwise((PyLongObject*)a, '&', (PyLongObject*)b);
4458 return c;
Guido van Rossumc6913e71991-11-19 20:26:46 +00004459}
4460
Guido van Rossumc0b618a1997-05-02 03:12:38 +00004461static PyObject *
Martin v. Löwisda86fcc2007-09-10 07:59:54 +00004462long_xor(PyObject *a, PyObject *b)
Guido van Rossumc6913e71991-11-19 20:26:46 +00004463{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00004464 PyObject *c;
4465 CHECK_BINOP(a, b);
4466 c = long_bitwise((PyLongObject*)a, '^', (PyLongObject*)b);
4467 return c;
Guido van Rossumc6913e71991-11-19 20:26:46 +00004468}
4469
Guido van Rossumc0b618a1997-05-02 03:12:38 +00004470static PyObject *
Martin v. Löwisda86fcc2007-09-10 07:59:54 +00004471long_or(PyObject *a, PyObject *b)
Guido van Rossumc6913e71991-11-19 20:26:46 +00004472{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00004473 PyObject *c;
4474 CHECK_BINOP(a, b);
4475 c = long_bitwise((PyLongObject*)a, '|', (PyLongObject*)b);
4476 return c;
Guido van Rossum23d6f0e1991-05-14 12:06:49 +00004477}
4478
Guido van Rossumc0b618a1997-05-02 03:12:38 +00004479static PyObject *
Tim Peters9f688bf2000-07-07 15:53:28 +00004480long_long(PyObject *v)
Guido van Rossum1899c2e1992-09-12 11:09:23 +00004481{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00004482 if (PyLong_CheckExact(v))
4483 Py_INCREF(v);
4484 else
4485 v = _PyLong_Copy((PyLongObject *)v);
4486 return v;
Guido van Rossum1899c2e1992-09-12 11:09:23 +00004487}
4488
Serhiy Storchaka48e47aa2015-05-13 00:19:51 +03004489PyObject *
4490_PyLong_GCD(PyObject *aarg, PyObject *barg)
4491{
4492 PyLongObject *a, *b, *c = NULL, *d = NULL, *r;
4493 stwodigits x, y, q, s, t, c_carry, d_carry;
4494 stwodigits A, B, C, D, T;
4495 int nbits, k;
4496 Py_ssize_t size_a, size_b, alloc_a, alloc_b;
4497 digit *a_digit, *b_digit, *c_digit, *d_digit, *a_end, *b_end;
4498
4499 a = (PyLongObject *)aarg;
4500 b = (PyLongObject *)barg;
4501 size_a = Py_SIZE(a);
4502 size_b = Py_SIZE(b);
4503 if (-2 <= size_a && size_a <= 2 && -2 <= size_b && size_b <= 2) {
4504 Py_INCREF(a);
4505 Py_INCREF(b);
4506 goto simple;
4507 }
4508
4509 /* Initial reduction: make sure that 0 <= b <= a. */
4510 a = (PyLongObject *)long_abs(a);
4511 if (a == NULL)
4512 return NULL;
4513 b = (PyLongObject *)long_abs(b);
4514 if (b == NULL) {
4515 Py_DECREF(a);
4516 return NULL;
4517 }
4518 if (long_compare(a, b) < 0) {
4519 r = a;
4520 a = b;
4521 b = r;
4522 }
4523 /* We now own references to a and b */
4524
4525 alloc_a = Py_SIZE(a);
4526 alloc_b = Py_SIZE(b);
4527 /* reduce until a fits into 2 digits */
4528 while ((size_a = Py_SIZE(a)) > 2) {
4529 nbits = bits_in_digit(a->ob_digit[size_a-1]);
4530 /* extract top 2*PyLong_SHIFT bits of a into x, along with
4531 corresponding bits of b into y */
4532 size_b = Py_SIZE(b);
4533 assert(size_b <= size_a);
4534 if (size_b == 0) {
4535 if (size_a < alloc_a) {
4536 r = (PyLongObject *)_PyLong_Copy(a);
4537 Py_DECREF(a);
4538 }
4539 else
4540 r = a;
4541 Py_DECREF(b);
4542 Py_XDECREF(c);
4543 Py_XDECREF(d);
4544 return (PyObject *)r;
4545 }
4546 x = (((twodigits)a->ob_digit[size_a-1] << (2*PyLong_SHIFT-nbits)) |
4547 ((twodigits)a->ob_digit[size_a-2] << (PyLong_SHIFT-nbits)) |
4548 (a->ob_digit[size_a-3] >> nbits));
4549
4550 y = ((size_b >= size_a - 2 ? b->ob_digit[size_a-3] >> nbits : 0) |
4551 (size_b >= size_a - 1 ? (twodigits)b->ob_digit[size_a-2] << (PyLong_SHIFT-nbits) : 0) |
4552 (size_b >= size_a ? (twodigits)b->ob_digit[size_a-1] << (2*PyLong_SHIFT-nbits) : 0));
4553
4554 /* inner loop of Lehmer's algorithm; A, B, C, D never grow
4555 larger than PyLong_MASK during the algorithm. */
4556 A = 1; B = 0; C = 0; D = 1;
4557 for (k=0;; k++) {
4558 if (y-C == 0)
4559 break;
4560 q = (x+(A-1))/(y-C);
4561 s = B+q*D;
4562 t = x-q*y;
4563 if (s > t)
4564 break;
4565 x = y; y = t;
4566 t = A+q*C; A = D; B = C; C = s; D = t;
4567 }
4568
4569 if (k == 0) {
4570 /* no progress; do a Euclidean step */
4571 if (l_divmod(a, b, NULL, &r) < 0)
4572 goto error;
4573 Py_DECREF(a);
4574 a = b;
4575 b = r;
4576 alloc_a = alloc_b;
4577 alloc_b = Py_SIZE(b);
4578 continue;
4579 }
4580
4581 /*
4582 a, b = A*b-B*a, D*a-C*b if k is odd
4583 a, b = A*a-B*b, D*b-C*a if k is even
4584 */
4585 if (k&1) {
4586 T = -A; A = -B; B = T;
4587 T = -C; C = -D; D = T;
4588 }
4589 if (c != NULL)
4590 Py_SIZE(c) = size_a;
4591 else if (Py_REFCNT(a) == 1) {
4592 Py_INCREF(a);
4593 c = a;
4594 }
4595 else {
4596 alloc_a = size_a;
4597 c = _PyLong_New(size_a);
4598 if (c == NULL)
4599 goto error;
4600 }
4601
4602 if (d != NULL)
4603 Py_SIZE(d) = size_a;
4604 else if (Py_REFCNT(b) == 1 && size_a <= alloc_b) {
4605 Py_INCREF(b);
4606 d = b;
4607 Py_SIZE(d) = size_a;
4608 }
4609 else {
4610 alloc_b = size_a;
4611 d = _PyLong_New(size_a);
4612 if (d == NULL)
4613 goto error;
4614 }
4615 a_end = a->ob_digit + size_a;
4616 b_end = b->ob_digit + size_b;
4617
4618 /* compute new a and new b in parallel */
4619 a_digit = a->ob_digit;
4620 b_digit = b->ob_digit;
4621 c_digit = c->ob_digit;
4622 d_digit = d->ob_digit;
4623 c_carry = 0;
4624 d_carry = 0;
4625 while (b_digit < b_end) {
4626 c_carry += (A * *a_digit) - (B * *b_digit);
4627 d_carry += (D * *b_digit++) - (C * *a_digit++);
4628 *c_digit++ = (digit)(c_carry & PyLong_MASK);
4629 *d_digit++ = (digit)(d_carry & PyLong_MASK);
4630 c_carry >>= PyLong_SHIFT;
4631 d_carry >>= PyLong_SHIFT;
4632 }
4633 while (a_digit < a_end) {
4634 c_carry += A * *a_digit;
4635 d_carry -= C * *a_digit++;
4636 *c_digit++ = (digit)(c_carry & PyLong_MASK);
4637 *d_digit++ = (digit)(d_carry & PyLong_MASK);
4638 c_carry >>= PyLong_SHIFT;
4639 d_carry >>= PyLong_SHIFT;
4640 }
4641 assert(c_carry == 0);
4642 assert(d_carry == 0);
4643
4644 Py_INCREF(c);
4645 Py_INCREF(d);
4646 Py_DECREF(a);
4647 Py_DECREF(b);
4648 a = long_normalize(c);
4649 b = long_normalize(d);
4650 }
4651 Py_XDECREF(c);
4652 Py_XDECREF(d);
4653
4654simple:
4655 assert(Py_REFCNT(a) > 0);
4656 assert(Py_REFCNT(b) > 0);
Victor Stinner5783fd22015-09-19 13:39:03 +02004657/* Issue #24999: use two shifts instead of ">> 2*PyLong_SHIFT" to avoid
4658 undefined behaviour when LONG_MAX type is smaller than 60 bits */
4659#if LONG_MAX >> PyLong_SHIFT >> PyLong_SHIFT
Serhiy Storchaka48e47aa2015-05-13 00:19:51 +03004660 /* a fits into a long, so b must too */
4661 x = PyLong_AsLong((PyObject *)a);
4662 y = PyLong_AsLong((PyObject *)b);
Victor Stinner5783fd22015-09-19 13:39:03 +02004663#elif defined(PY_LONG_LONG) && PY_LLONG_MAX >> PyLong_SHIFT >> PyLong_SHIFT
Serhiy Storchaka48e47aa2015-05-13 00:19:51 +03004664 x = PyLong_AsLongLong((PyObject *)a);
4665 y = PyLong_AsLongLong((PyObject *)b);
4666#else
4667# error "_PyLong_GCD"
4668#endif
4669 x = Py_ABS(x);
4670 y = Py_ABS(y);
4671 Py_DECREF(a);
4672 Py_DECREF(b);
4673
4674 /* usual Euclidean algorithm for longs */
4675 while (y != 0) {
4676 t = y;
4677 y = x % y;
4678 x = t;
4679 }
Victor Stinner5783fd22015-09-19 13:39:03 +02004680#if LONG_MAX >> PyLong_SHIFT >> PyLong_SHIFT
Serhiy Storchaka48e47aa2015-05-13 00:19:51 +03004681 return PyLong_FromLong(x);
Victor Stinner5783fd22015-09-19 13:39:03 +02004682#elif defined(PY_LONG_LONG) && PY_LLONG_MAX >> PyLong_SHIFT >> PyLong_SHIFT
Serhiy Storchaka48e47aa2015-05-13 00:19:51 +03004683 return PyLong_FromLongLong(x);
4684#else
4685# error "_PyLong_GCD"
4686#endif
4687
4688error:
4689 Py_DECREF(a);
4690 Py_DECREF(b);
4691 Py_XDECREF(c);
4692 Py_XDECREF(d);
4693 return NULL;
4694}
4695
Guido van Rossumc0b618a1997-05-02 03:12:38 +00004696static PyObject *
Tim Peters9f688bf2000-07-07 15:53:28 +00004697long_float(PyObject *v)
Guido van Rossum1899c2e1992-09-12 11:09:23 +00004698{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00004699 double result;
4700 result = PyLong_AsDouble(v);
4701 if (result == -1.0 && PyErr_Occurred())
4702 return NULL;
4703 return PyFloat_FromDouble(result);
Guido van Rossum1899c2e1992-09-12 11:09:23 +00004704}
4705
Guido van Rossumc0b618a1997-05-02 03:12:38 +00004706static PyObject *
Guido van Rossumbef14172001-08-29 15:47:46 +00004707long_subtype_new(PyTypeObject *type, PyObject *args, PyObject *kwds);
Guido van Rossum1899c2e1992-09-12 11:09:23 +00004708
Tim Peters6d6c1a32001-08-02 04:15:00 +00004709static PyObject *
4710long_new(PyTypeObject *type, PyObject *args, PyObject *kwds)
4711{
Mark Dickinsonf9a5a8e2010-05-26 20:07:58 +00004712 PyObject *obase = NULL, *x = NULL;
Gregory P. Smitha689e522012-12-25 22:38:32 -08004713 Py_ssize_t base;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00004714 static char *kwlist[] = {"x", "base", 0};
Tim Peters6d6c1a32001-08-02 04:15:00 +00004715
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00004716 if (type != &PyLong_Type)
4717 return long_subtype_new(type, args, kwds); /* Wimp out */
Mark Dickinsonf9a5a8e2010-05-26 20:07:58 +00004718 if (!PyArg_ParseTupleAndKeywords(args, kwds, "|OO:int", kwlist,
4719 &x, &obase))
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00004720 return NULL;
Serhiy Storchaka0b386d52012-12-28 09:42:11 +02004721 if (x == NULL) {
4722 if (obase != NULL) {
4723 PyErr_SetString(PyExc_TypeError,
4724 "int() missing string argument");
4725 return NULL;
4726 }
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00004727 return PyLong_FromLong(0L);
Serhiy Storchaka0b386d52012-12-28 09:42:11 +02004728 }
Mark Dickinsonf9a5a8e2010-05-26 20:07:58 +00004729 if (obase == NULL)
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00004730 return PyNumber_Long(x);
Mark Dickinsonf9a5a8e2010-05-26 20:07:58 +00004731
Gregory P. Smitha689e522012-12-25 22:38:32 -08004732 base = PyNumber_AsSsize_t(obase, NULL);
Mark Dickinsonf9a5a8e2010-05-26 20:07:58 +00004733 if (base == -1 && PyErr_Occurred())
4734 return NULL;
Gregory P. Smitha689e522012-12-25 22:38:32 -08004735 if ((base != 0 && base < 2) || base > 36) {
Mark Dickinsonf9a5a8e2010-05-26 20:07:58 +00004736 PyErr_SetString(PyExc_ValueError,
Serhiy Storchaka0b386d52012-12-28 09:42:11 +02004737 "int() base must be >= 2 and <= 36");
Mark Dickinsonf9a5a8e2010-05-26 20:07:58 +00004738 return NULL;
4739 }
4740
4741 if (PyUnicode_Check(x))
Martin v. Löwisd63a3b82011-09-28 07:41:54 +02004742 return PyLong_FromUnicodeObject(x, (int)base);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00004743 else if (PyByteArray_Check(x) || PyBytes_Check(x)) {
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00004744 char *string;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00004745 if (PyByteArray_Check(x))
4746 string = PyByteArray_AS_STRING(x);
4747 else
4748 string = PyBytes_AS_STRING(x);
Serhiy Storchakaf6d0aee2013-08-03 20:55:06 +03004749 return _PyLong_FromBytes(string, Py_SIZE(x), (int)base);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00004750 }
4751 else {
4752 PyErr_SetString(PyExc_TypeError,
Mark Dickinson22b20182010-05-10 21:27:53 +00004753 "int() can't convert non-string with explicit base");
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00004754 return NULL;
4755 }
Tim Peters6d6c1a32001-08-02 04:15:00 +00004756}
4757
Serhiy Storchaka95949422013-08-27 19:40:23 +03004758/* Wimpy, slow approach to tp_new calls for subtypes of int:
4759 first create a regular int from whatever arguments we got,
Guido van Rossumbef14172001-08-29 15:47:46 +00004760 then allocate a subtype instance and initialize it from
Serhiy Storchaka95949422013-08-27 19:40:23 +03004761 the regular int. The regular int is then thrown away.
Guido van Rossumbef14172001-08-29 15:47:46 +00004762*/
4763static PyObject *
4764long_subtype_new(PyTypeObject *type, PyObject *args, PyObject *kwds)
4765{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00004766 PyLongObject *tmp, *newobj;
4767 Py_ssize_t i, n;
Guido van Rossumbef14172001-08-29 15:47:46 +00004768
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00004769 assert(PyType_IsSubtype(type, &PyLong_Type));
4770 tmp = (PyLongObject *)long_new(&PyLong_Type, args, kwds);
4771 if (tmp == NULL)
4772 return NULL;
Serhiy Storchaka15095802015-11-25 15:47:01 +02004773 assert(PyLong_Check(tmp));
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00004774 n = Py_SIZE(tmp);
4775 if (n < 0)
4776 n = -n;
4777 newobj = (PyLongObject *)type->tp_alloc(type, n);
4778 if (newobj == NULL) {
4779 Py_DECREF(tmp);
4780 return NULL;
4781 }
4782 assert(PyLong_Check(newobj));
4783 Py_SIZE(newobj) = Py_SIZE(tmp);
4784 for (i = 0; i < n; i++)
4785 newobj->ob_digit[i] = tmp->ob_digit[i];
4786 Py_DECREF(tmp);
4787 return (PyObject *)newobj;
Guido van Rossumbef14172001-08-29 15:47:46 +00004788}
4789
Guido van Rossum5d9113d2003-01-29 17:58:45 +00004790static PyObject *
4791long_getnewargs(PyLongObject *v)
4792{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00004793 return Py_BuildValue("(N)", _PyLong_Copy(v));
Guido van Rossum5d9113d2003-01-29 17:58:45 +00004794}
4795
Guido van Rossumb43daf72007-08-01 18:08:08 +00004796static PyObject *
Mark Dickinson6bf19002009-05-02 17:57:52 +00004797long_get0(PyLongObject *v, void *context) {
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00004798 return PyLong_FromLong(0L);
Mark Dickinson6bf19002009-05-02 17:57:52 +00004799}
4800
4801static PyObject *
4802long_get1(PyLongObject *v, void *context) {
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00004803 return PyLong_FromLong(1L);
Guido van Rossumb43daf72007-08-01 18:08:08 +00004804}
4805
Guido van Rossum2fa33db2007-08-23 22:07:24 +00004806static PyObject *
Eric Smith8c663262007-08-25 02:26:07 +00004807long__format__(PyObject *self, PyObject *args)
4808{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00004809 PyObject *format_spec;
Victor Stinnerd3f08822012-05-29 12:57:52 +02004810 _PyUnicodeWriter writer;
4811 int ret;
Eric Smith4a7d76d2008-05-30 18:10:19 +00004812
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00004813 if (!PyArg_ParseTuple(args, "U:__format__", &format_spec))
4814 return NULL;
Victor Stinnerd3f08822012-05-29 12:57:52 +02004815
Victor Stinner8f674cc2013-04-17 23:02:17 +02004816 _PyUnicodeWriter_Init(&writer);
Victor Stinnerd3f08822012-05-29 12:57:52 +02004817 ret = _PyLong_FormatAdvancedWriter(
4818 &writer,
4819 self,
4820 format_spec, 0, PyUnicode_GET_LENGTH(format_spec));
4821 if (ret == -1) {
4822 _PyUnicodeWriter_Dealloc(&writer);
4823 return NULL;
4824 }
4825 return _PyUnicodeWriter_Finish(&writer);
Eric Smith8c663262007-08-25 02:26:07 +00004826}
4827
Mark Dickinson7f1bf802010-05-26 16:02:59 +00004828/* Return a pair (q, r) such that a = b * q + r, and
4829 abs(r) <= abs(b)/2, with equality possible only if q is even.
4830 In other words, q == a / b, rounded to the nearest integer using
4831 round-half-to-even. */
4832
4833PyObject *
Mark Dickinsonfa68a612010-06-07 18:47:09 +00004834_PyLong_DivmodNear(PyObject *a, PyObject *b)
Mark Dickinson7f1bf802010-05-26 16:02:59 +00004835{
4836 PyLongObject *quo = NULL, *rem = NULL;
4837 PyObject *one = NULL, *twice_rem, *result, *temp;
4838 int cmp, quo_is_odd, quo_is_neg;
4839
4840 /* Equivalent Python code:
4841
4842 def divmod_near(a, b):
4843 q, r = divmod(a, b)
4844 # round up if either r / b > 0.5, or r / b == 0.5 and q is odd.
4845 # The expression r / b > 0.5 is equivalent to 2 * r > b if b is
4846 # positive, 2 * r < b if b negative.
4847 greater_than_half = 2*r > b if b > 0 else 2*r < b
4848 exactly_half = 2*r == b
4849 if greater_than_half or exactly_half and q % 2 == 1:
4850 q += 1
4851 r -= b
4852 return q, r
4853
4854 */
4855 if (!PyLong_Check(a) || !PyLong_Check(b)) {
4856 PyErr_SetString(PyExc_TypeError,
4857 "non-integer arguments in division");
4858 return NULL;
4859 }
4860
4861 /* Do a and b have different signs? If so, quotient is negative. */
4862 quo_is_neg = (Py_SIZE(a) < 0) != (Py_SIZE(b) < 0);
4863
4864 one = PyLong_FromLong(1L);
4865 if (one == NULL)
4866 return NULL;
4867
4868 if (long_divrem((PyLongObject*)a, (PyLongObject*)b, &quo, &rem) < 0)
4869 goto error;
4870
4871 /* compare twice the remainder with the divisor, to see
4872 if we need to adjust the quotient and remainder */
4873 twice_rem = long_lshift((PyObject *)rem, one);
4874 if (twice_rem == NULL)
4875 goto error;
4876 if (quo_is_neg) {
4877 temp = long_neg((PyLongObject*)twice_rem);
4878 Py_DECREF(twice_rem);
4879 twice_rem = temp;
4880 if (twice_rem == NULL)
4881 goto error;
4882 }
4883 cmp = long_compare((PyLongObject *)twice_rem, (PyLongObject *)b);
4884 Py_DECREF(twice_rem);
4885
4886 quo_is_odd = Py_SIZE(quo) != 0 && ((quo->ob_digit[0] & 1) != 0);
4887 if ((Py_SIZE(b) < 0 ? cmp < 0 : cmp > 0) || (cmp == 0 && quo_is_odd)) {
4888 /* fix up quotient */
4889 if (quo_is_neg)
4890 temp = long_sub(quo, (PyLongObject *)one);
4891 else
4892 temp = long_add(quo, (PyLongObject *)one);
4893 Py_DECREF(quo);
4894 quo = (PyLongObject *)temp;
4895 if (quo == NULL)
4896 goto error;
4897 /* and remainder */
4898 if (quo_is_neg)
4899 temp = long_add(rem, (PyLongObject *)b);
4900 else
4901 temp = long_sub(rem, (PyLongObject *)b);
4902 Py_DECREF(rem);
4903 rem = (PyLongObject *)temp;
4904 if (rem == NULL)
4905 goto error;
4906 }
4907
4908 result = PyTuple_New(2);
4909 if (result == NULL)
4910 goto error;
4911
4912 /* PyTuple_SET_ITEM steals references */
4913 PyTuple_SET_ITEM(result, 0, (PyObject *)quo);
4914 PyTuple_SET_ITEM(result, 1, (PyObject *)rem);
4915 Py_DECREF(one);
4916 return result;
4917
4918 error:
4919 Py_XDECREF(quo);
4920 Py_XDECREF(rem);
4921 Py_XDECREF(one);
4922 return NULL;
4923}
4924
Eric Smith8c663262007-08-25 02:26:07 +00004925static PyObject *
Guido van Rossum2fa33db2007-08-23 22:07:24 +00004926long_round(PyObject *self, PyObject *args)
4927{
Mark Dickinson7f1bf802010-05-26 16:02:59 +00004928 PyObject *o_ndigits=NULL, *temp, *result, *ndigits;
Guido van Rossum2fa33db2007-08-23 22:07:24 +00004929
Mark Dickinson7f1bf802010-05-26 16:02:59 +00004930 /* To round an integer m to the nearest 10**n (n positive), we make use of
4931 * the divmod_near operation, defined by:
4932 *
4933 * divmod_near(a, b) = (q, r)
4934 *
4935 * where q is the nearest integer to the quotient a / b (the
4936 * nearest even integer in the case of a tie) and r == a - q * b.
4937 * Hence q * b = a - r is the nearest multiple of b to a,
4938 * preferring even multiples in the case of a tie.
4939 *
4940 * So the nearest multiple of 10**n to m is:
4941 *
4942 * m - divmod_near(m, 10**n)[1].
4943 */
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00004944 if (!PyArg_ParseTuple(args, "|O", &o_ndigits))
4945 return NULL;
4946 if (o_ndigits == NULL)
4947 return long_long(self);
Guido van Rossum2fa33db2007-08-23 22:07:24 +00004948
Mark Dickinson7f1bf802010-05-26 16:02:59 +00004949 ndigits = PyNumber_Index(o_ndigits);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00004950 if (ndigits == NULL)
4951 return NULL;
Mark Dickinson1124e712009-01-28 21:25:58 +00004952
Mark Dickinson7f1bf802010-05-26 16:02:59 +00004953 /* if ndigits >= 0 then no rounding is necessary; return self unchanged */
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00004954 if (Py_SIZE(ndigits) >= 0) {
4955 Py_DECREF(ndigits);
4956 return long_long(self);
4957 }
Mark Dickinson1124e712009-01-28 21:25:58 +00004958
Mark Dickinson7f1bf802010-05-26 16:02:59 +00004959 /* result = self - divmod_near(self, 10 ** -ndigits)[1] */
4960 temp = long_neg((PyLongObject*)ndigits);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00004961 Py_DECREF(ndigits);
Mark Dickinson7f1bf802010-05-26 16:02:59 +00004962 ndigits = temp;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00004963 if (ndigits == NULL)
Mark Dickinson7f1bf802010-05-26 16:02:59 +00004964 return NULL;
Mark Dickinson1124e712009-01-28 21:25:58 +00004965
Mark Dickinson7f1bf802010-05-26 16:02:59 +00004966 result = PyLong_FromLong(10L);
4967 if (result == NULL) {
4968 Py_DECREF(ndigits);
4969 return NULL;
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00004970 }
Mark Dickinson1124e712009-01-28 21:25:58 +00004971
Mark Dickinson7f1bf802010-05-26 16:02:59 +00004972 temp = long_pow(result, ndigits, Py_None);
4973 Py_DECREF(ndigits);
4974 Py_DECREF(result);
4975 result = temp;
4976 if (result == NULL)
4977 return NULL;
4978
Mark Dickinsonfa68a612010-06-07 18:47:09 +00004979 temp = _PyLong_DivmodNear(self, result);
Mark Dickinson7f1bf802010-05-26 16:02:59 +00004980 Py_DECREF(result);
4981 result = temp;
4982 if (result == NULL)
4983 return NULL;
4984
4985 temp = long_sub((PyLongObject *)self,
4986 (PyLongObject *)PyTuple_GET_ITEM(result, 1));
4987 Py_DECREF(result);
4988 result = temp;
4989
4990 return result;
Guido van Rossum2fa33db2007-08-23 22:07:24 +00004991}
4992
Martin v. Löwis00709aa2008-06-04 14:18:43 +00004993static PyObject *
4994long_sizeof(PyLongObject *v)
4995{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00004996 Py_ssize_t res;
Martin v. Löwis00709aa2008-06-04 14:18:43 +00004997
Victor Stinner45e8e2f2014-05-14 17:24:35 +02004998 res = offsetof(PyLongObject, ob_digit) + Py_ABS(Py_SIZE(v))*sizeof(digit);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00004999 return PyLong_FromSsize_t(res);
Martin v. Löwis00709aa2008-06-04 14:18:43 +00005000}
5001
Mark Dickinson54bc1ec2008-12-17 16:19:07 +00005002static PyObject *
5003long_bit_length(PyLongObject *v)
5004{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00005005 PyLongObject *result, *x, *y;
5006 Py_ssize_t ndigits, msd_bits = 0;
5007 digit msd;
Mark Dickinson54bc1ec2008-12-17 16:19:07 +00005008
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00005009 assert(v != NULL);
5010 assert(PyLong_Check(v));
Mark Dickinson54bc1ec2008-12-17 16:19:07 +00005011
Victor Stinner45e8e2f2014-05-14 17:24:35 +02005012 ndigits = Py_ABS(Py_SIZE(v));
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00005013 if (ndigits == 0)
5014 return PyLong_FromLong(0);
Mark Dickinson54bc1ec2008-12-17 16:19:07 +00005015
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00005016 msd = v->ob_digit[ndigits-1];
5017 while (msd >= 32) {
5018 msd_bits += 6;
5019 msd >>= 6;
5020 }
5021 msd_bits += (long)(BitLengthTable[msd]);
Mark Dickinson54bc1ec2008-12-17 16:19:07 +00005022
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00005023 if (ndigits <= PY_SSIZE_T_MAX/PyLong_SHIFT)
5024 return PyLong_FromSsize_t((ndigits-1)*PyLong_SHIFT + msd_bits);
Mark Dickinson54bc1ec2008-12-17 16:19:07 +00005025
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00005026 /* expression above may overflow; use Python integers instead */
5027 result = (PyLongObject *)PyLong_FromSsize_t(ndigits - 1);
5028 if (result == NULL)
5029 return NULL;
5030 x = (PyLongObject *)PyLong_FromLong(PyLong_SHIFT);
5031 if (x == NULL)
5032 goto error;
5033 y = (PyLongObject *)long_mul(result, x);
5034 Py_DECREF(x);
5035 if (y == NULL)
5036 goto error;
5037 Py_DECREF(result);
5038 result = y;
Mark Dickinson54bc1ec2008-12-17 16:19:07 +00005039
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00005040 x = (PyLongObject *)PyLong_FromLong((long)msd_bits);
5041 if (x == NULL)
5042 goto error;
5043 y = (PyLongObject *)long_add(result, x);
5044 Py_DECREF(x);
5045 if (y == NULL)
5046 goto error;
5047 Py_DECREF(result);
5048 result = y;
Mark Dickinson54bc1ec2008-12-17 16:19:07 +00005049
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00005050 return (PyObject *)result;
Mark Dickinson54bc1ec2008-12-17 16:19:07 +00005051
Mark Dickinson22b20182010-05-10 21:27:53 +00005052 error:
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00005053 Py_DECREF(result);
5054 return NULL;
Mark Dickinson54bc1ec2008-12-17 16:19:07 +00005055}
5056
5057PyDoc_STRVAR(long_bit_length_doc,
5058"int.bit_length() -> int\n\
5059\n\
5060Number of bits necessary to represent self in binary.\n\
5061>>> bin(37)\n\
5062'0b100101'\n\
5063>>> (37).bit_length()\n\
50646");
5065
Christian Heimes53876d92008-04-19 00:31:39 +00005066#if 0
5067static PyObject *
5068long_is_finite(PyObject *v)
5069{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00005070 Py_RETURN_TRUE;
Christian Heimes53876d92008-04-19 00:31:39 +00005071}
5072#endif
5073
Alexandre Vassalottic36c3782010-01-09 20:35:09 +00005074
Alexandre Vassalottic36c3782010-01-09 20:35:09 +00005075static PyObject *
5076long_to_bytes(PyLongObject *v, PyObject *args, PyObject *kwds)
5077{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00005078 PyObject *byteorder_str;
5079 PyObject *is_signed_obj = NULL;
5080 Py_ssize_t length;
5081 int little_endian;
5082 int is_signed;
5083 PyObject *bytes;
5084 static char *kwlist[] = {"length", "byteorder", "signed", NULL};
Alexandre Vassalottic36c3782010-01-09 20:35:09 +00005085
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00005086 if (!PyArg_ParseTupleAndKeywords(args, kwds, "nU|O:to_bytes", kwlist,
5087 &length, &byteorder_str,
5088 &is_signed_obj))
5089 return NULL;
Alexandre Vassalottic36c3782010-01-09 20:35:09 +00005090
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00005091 if (args != NULL && Py_SIZE(args) > 2) {
5092 PyErr_SetString(PyExc_TypeError,
5093 "'signed' is a keyword-only argument");
5094 return NULL;
5095 }
Alexandre Vassalottic36c3782010-01-09 20:35:09 +00005096
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00005097 if (!PyUnicode_CompareWithASCIIString(byteorder_str, "little"))
5098 little_endian = 1;
5099 else if (!PyUnicode_CompareWithASCIIString(byteorder_str, "big"))
5100 little_endian = 0;
5101 else {
5102 PyErr_SetString(PyExc_ValueError,
5103 "byteorder must be either 'little' or 'big'");
5104 return NULL;
5105 }
Alexandre Vassalottic36c3782010-01-09 20:35:09 +00005106
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00005107 if (is_signed_obj != NULL) {
5108 int cmp = PyObject_IsTrue(is_signed_obj);
5109 if (cmp < 0)
5110 return NULL;
5111 is_signed = cmp ? 1 : 0;
5112 }
5113 else {
5114 /* If the signed argument was omitted, use False as the
5115 default. */
5116 is_signed = 0;
5117 }
Alexandre Vassalottic36c3782010-01-09 20:35:09 +00005118
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00005119 if (length < 0) {
5120 PyErr_SetString(PyExc_ValueError,
5121 "length argument must be non-negative");
5122 return NULL;
5123 }
Alexandre Vassalottic36c3782010-01-09 20:35:09 +00005124
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00005125 bytes = PyBytes_FromStringAndSize(NULL, length);
5126 if (bytes == NULL)
5127 return NULL;
Alexandre Vassalottic36c3782010-01-09 20:35:09 +00005128
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00005129 if (_PyLong_AsByteArray(v, (unsigned char *)PyBytes_AS_STRING(bytes),
5130 length, little_endian, is_signed) < 0) {
5131 Py_DECREF(bytes);
5132 return NULL;
5133 }
Alexandre Vassalottic36c3782010-01-09 20:35:09 +00005134
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00005135 return bytes;
Alexandre Vassalottic36c3782010-01-09 20:35:09 +00005136}
5137
Mark Dickinson078c2532010-01-30 18:06:17 +00005138PyDoc_STRVAR(long_to_bytes_doc,
5139"int.to_bytes(length, byteorder, *, signed=False) -> bytes\n\
Alexandre Vassalottic36c3782010-01-09 20:35:09 +00005140\n\
Mark Dickinson078c2532010-01-30 18:06:17 +00005141Return an array of bytes representing an integer.\n\
Alexandre Vassalottic36c3782010-01-09 20:35:09 +00005142\n\
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00005143The integer is represented using length bytes. An OverflowError is\n\
Mark Dickinson078c2532010-01-30 18:06:17 +00005144raised if the integer is not representable with the given number of\n\
5145bytes.\n\
Alexandre Vassalottic36c3782010-01-09 20:35:09 +00005146\n\
5147The byteorder argument determines the byte order used to represent the\n\
5148integer. If byteorder is 'big', the most significant byte is at the\n\
5149beginning of the byte array. If byteorder is 'little', the most\n\
5150significant byte is at the end of the byte array. To request the native\n\
5151byte order of the host system, use `sys.byteorder' as the byte order value.\n\
5152\n\
Mark Dickinson078c2532010-01-30 18:06:17 +00005153The signed keyword-only argument determines whether two's complement is\n\
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00005154used to represent the integer. If signed is False and a negative integer\n\
Mark Dickinson078c2532010-01-30 18:06:17 +00005155is given, an OverflowError is raised.");
Alexandre Vassalottic36c3782010-01-09 20:35:09 +00005156
5157static PyObject *
5158long_from_bytes(PyTypeObject *type, PyObject *args, PyObject *kwds)
5159{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00005160 PyObject *byteorder_str;
5161 PyObject *is_signed_obj = NULL;
5162 int little_endian;
5163 int is_signed;
5164 PyObject *obj;
5165 PyObject *bytes;
5166 PyObject *long_obj;
5167 static char *kwlist[] = {"bytes", "byteorder", "signed", NULL};
Alexandre Vassalottic36c3782010-01-09 20:35:09 +00005168
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00005169 if (!PyArg_ParseTupleAndKeywords(args, kwds, "OU|O:from_bytes", kwlist,
5170 &obj, &byteorder_str,
5171 &is_signed_obj))
5172 return NULL;
Alexandre Vassalottic36c3782010-01-09 20:35:09 +00005173
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00005174 if (args != NULL && Py_SIZE(args) > 2) {
5175 PyErr_SetString(PyExc_TypeError,
5176 "'signed' is a keyword-only argument");
5177 return NULL;
5178 }
Alexandre Vassalottic36c3782010-01-09 20:35:09 +00005179
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00005180 if (!PyUnicode_CompareWithASCIIString(byteorder_str, "little"))
5181 little_endian = 1;
5182 else if (!PyUnicode_CompareWithASCIIString(byteorder_str, "big"))
5183 little_endian = 0;
5184 else {
5185 PyErr_SetString(PyExc_ValueError,
5186 "byteorder must be either 'little' or 'big'");
5187 return NULL;
5188 }
Alexandre Vassalottic36c3782010-01-09 20:35:09 +00005189
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00005190 if (is_signed_obj != NULL) {
5191 int cmp = PyObject_IsTrue(is_signed_obj);
5192 if (cmp < 0)
5193 return NULL;
5194 is_signed = cmp ? 1 : 0;
5195 }
5196 else {
5197 /* If the signed argument was omitted, use False as the
5198 default. */
5199 is_signed = 0;
5200 }
Alexandre Vassalottic36c3782010-01-09 20:35:09 +00005201
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00005202 bytes = PyObject_Bytes(obj);
5203 if (bytes == NULL)
5204 return NULL;
Alexandre Vassalottic36c3782010-01-09 20:35:09 +00005205
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00005206 long_obj = _PyLong_FromByteArray(
5207 (unsigned char *)PyBytes_AS_STRING(bytes), Py_SIZE(bytes),
5208 little_endian, is_signed);
5209 Py_DECREF(bytes);
Alexandre Vassalottic36c3782010-01-09 20:35:09 +00005210
Serhiy Storchakaea36c942016-05-12 10:37:58 +03005211 if (type != &PyLong_Type) {
5212 Py_SETREF(long_obj, PyObject_CallFunctionObjArgs((PyObject *)type,
5213 long_obj, NULL));
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00005214 }
Alexandre Vassalottic36c3782010-01-09 20:35:09 +00005215
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00005216 return long_obj;
Alexandre Vassalottic36c3782010-01-09 20:35:09 +00005217}
5218
Mark Dickinson078c2532010-01-30 18:06:17 +00005219PyDoc_STRVAR(long_from_bytes_doc,
5220"int.from_bytes(bytes, byteorder, *, signed=False) -> int\n\
5221\n\
5222Return the integer represented by the given array of bytes.\n\
5223\n\
R David Murray861470c2014-10-05 11:47:01 -04005224The bytes argument must be a bytes-like object (e.g. bytes or bytearray).\n\
Mark Dickinson078c2532010-01-30 18:06:17 +00005225\n\
5226The byteorder argument determines the byte order used to represent the\n\
5227integer. If byteorder is 'big', the most significant byte is at the\n\
5228beginning of the byte array. If byteorder is 'little', the most\n\
5229significant byte is at the end of the byte array. To request the native\n\
5230byte order of the host system, use `sys.byteorder' as the byte order value.\n\
5231\n\
5232The signed keyword-only argument indicates whether two's complement is\n\
5233used to represent the integer.");
5234
Guido van Rossum5d9113d2003-01-29 17:58:45 +00005235static PyMethodDef long_methods[] = {
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00005236 {"conjugate", (PyCFunction)long_long, METH_NOARGS,
5237 "Returns self, the complex conjugate of any int."},
5238 {"bit_length", (PyCFunction)long_bit_length, METH_NOARGS,
5239 long_bit_length_doc},
Christian Heimes53876d92008-04-19 00:31:39 +00005240#if 0
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00005241 {"is_finite", (PyCFunction)long_is_finite, METH_NOARGS,
5242 "Returns always True."},
Christian Heimes53876d92008-04-19 00:31:39 +00005243#endif
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00005244 {"to_bytes", (PyCFunction)long_to_bytes,
5245 METH_VARARGS|METH_KEYWORDS, long_to_bytes_doc},
5246 {"from_bytes", (PyCFunction)long_from_bytes,
5247 METH_VARARGS|METH_KEYWORDS|METH_CLASS, long_from_bytes_doc},
5248 {"__trunc__", (PyCFunction)long_long, METH_NOARGS,
5249 "Truncating an Integral returns itself."},
5250 {"__floor__", (PyCFunction)long_long, METH_NOARGS,
5251 "Flooring an Integral returns itself."},
5252 {"__ceil__", (PyCFunction)long_long, METH_NOARGS,
5253 "Ceiling of an Integral returns itself."},
5254 {"__round__", (PyCFunction)long_round, METH_VARARGS,
5255 "Rounding an Integral returns itself.\n"
5256 "Rounding with an ndigits argument also returns an integer."},
5257 {"__getnewargs__", (PyCFunction)long_getnewargs, METH_NOARGS},
5258 {"__format__", (PyCFunction)long__format__, METH_VARARGS},
5259 {"__sizeof__", (PyCFunction)long_sizeof, METH_NOARGS,
5260 "Returns size in memory, in bytes"},
5261 {NULL, NULL} /* sentinel */
Guido van Rossum5d9113d2003-01-29 17:58:45 +00005262};
5263
Guido van Rossumb43daf72007-08-01 18:08:08 +00005264static PyGetSetDef long_getset[] = {
Mark Dickinson6bf19002009-05-02 17:57:52 +00005265 {"real",
Guido van Rossumb43daf72007-08-01 18:08:08 +00005266 (getter)long_long, (setter)NULL,
5267 "the real part of a complex number",
5268 NULL},
Mark Dickinson6bf19002009-05-02 17:57:52 +00005269 {"imag",
5270 (getter)long_get0, (setter)NULL,
Guido van Rossumb43daf72007-08-01 18:08:08 +00005271 "the imaginary part of a complex number",
Mark Dickinson6bf19002009-05-02 17:57:52 +00005272 NULL},
5273 {"numerator",
Guido van Rossumb43daf72007-08-01 18:08:08 +00005274 (getter)long_long, (setter)NULL,
5275 "the numerator of a rational number in lowest terms",
5276 NULL},
Mark Dickinson6bf19002009-05-02 17:57:52 +00005277 {"denominator",
5278 (getter)long_get1, (setter)NULL,
Guido van Rossumb43daf72007-08-01 18:08:08 +00005279 "the denominator of a rational number in lowest terms",
Mark Dickinson6bf19002009-05-02 17:57:52 +00005280 NULL},
Guido van Rossumb43daf72007-08-01 18:08:08 +00005281 {NULL} /* Sentinel */
5282};
5283
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00005284PyDoc_STRVAR(long_doc,
Chris Jerdonek83fe2e12012-10-07 14:48:36 -07005285"int(x=0) -> integer\n\
5286int(x, base=10) -> integer\n\
Tim Peters6d6c1a32001-08-02 04:15:00 +00005287\n\
Chris Jerdonek83fe2e12012-10-07 14:48:36 -07005288Convert a number or string to an integer, or return 0 if no arguments\n\
5289are given. If x is a number, return x.__int__(). For floating point\n\
5290numbers, this truncates towards zero.\n\
5291\n\
5292If x is not a number or if base is given, then x must be a string,\n\
5293bytes, or bytearray instance representing an integer literal in the\n\
5294given base. The literal can be preceded by '+' or '-' and be surrounded\n\
5295by whitespace. The base defaults to 10. Valid bases are 0 and 2-36.\n\
5296Base 0 means to interpret the base from the string as an integer literal.\n\
5297>>> int('0b100', base=0)\n\
52984");
Tim Peters6d6c1a32001-08-02 04:15:00 +00005299
Guido van Rossumc0b618a1997-05-02 03:12:38 +00005300static PyNumberMethods long_as_number = {
Mark Dickinson22b20182010-05-10 21:27:53 +00005301 (binaryfunc)long_add, /*nb_add*/
5302 (binaryfunc)long_sub, /*nb_subtract*/
5303 (binaryfunc)long_mul, /*nb_multiply*/
5304 long_mod, /*nb_remainder*/
5305 long_divmod, /*nb_divmod*/
5306 long_pow, /*nb_power*/
5307 (unaryfunc)long_neg, /*nb_negative*/
5308 (unaryfunc)long_long, /*tp_positive*/
5309 (unaryfunc)long_abs, /*tp_absolute*/
5310 (inquiry)long_bool, /*tp_bool*/
5311 (unaryfunc)long_invert, /*nb_invert*/
5312 long_lshift, /*nb_lshift*/
5313 (binaryfunc)long_rshift, /*nb_rshift*/
5314 long_and, /*nb_and*/
5315 long_xor, /*nb_xor*/
5316 long_or, /*nb_or*/
5317 long_long, /*nb_int*/
5318 0, /*nb_reserved*/
5319 long_float, /*nb_float*/
5320 0, /* nb_inplace_add */
5321 0, /* nb_inplace_subtract */
5322 0, /* nb_inplace_multiply */
5323 0, /* nb_inplace_remainder */
5324 0, /* nb_inplace_power */
5325 0, /* nb_inplace_lshift */
5326 0, /* nb_inplace_rshift */
5327 0, /* nb_inplace_and */
5328 0, /* nb_inplace_xor */
5329 0, /* nb_inplace_or */
5330 long_div, /* nb_floor_divide */
5331 long_true_divide, /* nb_true_divide */
5332 0, /* nb_inplace_floor_divide */
5333 0, /* nb_inplace_true_divide */
5334 long_long, /* nb_index */
Guido van Rossumedcc38a1991-05-05 20:09:44 +00005335};
5336
Guido van Rossumc0b618a1997-05-02 03:12:38 +00005337PyTypeObject PyLong_Type = {
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00005338 PyVarObject_HEAD_INIT(&PyType_Type, 0)
5339 "int", /* tp_name */
5340 offsetof(PyLongObject, ob_digit), /* tp_basicsize */
5341 sizeof(digit), /* tp_itemsize */
5342 long_dealloc, /* tp_dealloc */
5343 0, /* tp_print */
5344 0, /* tp_getattr */
5345 0, /* tp_setattr */
5346 0, /* tp_reserved */
5347 long_to_decimal_string, /* tp_repr */
5348 &long_as_number, /* tp_as_number */
5349 0, /* tp_as_sequence */
5350 0, /* tp_as_mapping */
5351 (hashfunc)long_hash, /* tp_hash */
5352 0, /* tp_call */
5353 long_to_decimal_string, /* tp_str */
5354 PyObject_GenericGetAttr, /* tp_getattro */
5355 0, /* tp_setattro */
5356 0, /* tp_as_buffer */
5357 Py_TPFLAGS_DEFAULT | Py_TPFLAGS_BASETYPE |
5358 Py_TPFLAGS_LONG_SUBCLASS, /* tp_flags */
5359 long_doc, /* tp_doc */
5360 0, /* tp_traverse */
5361 0, /* tp_clear */
5362 long_richcompare, /* tp_richcompare */
5363 0, /* tp_weaklistoffset */
5364 0, /* tp_iter */
5365 0, /* tp_iternext */
5366 long_methods, /* tp_methods */
5367 0, /* tp_members */
5368 long_getset, /* tp_getset */
5369 0, /* tp_base */
5370 0, /* tp_dict */
5371 0, /* tp_descr_get */
5372 0, /* tp_descr_set */
5373 0, /* tp_dictoffset */
5374 0, /* tp_init */
5375 0, /* tp_alloc */
5376 long_new, /* tp_new */
5377 PyObject_Del, /* tp_free */
Guido van Rossumedcc38a1991-05-05 20:09:44 +00005378};
Guido van Rossumddefaf32007-01-14 03:31:43 +00005379
Mark Dickinsonbd792642009-03-18 20:06:12 +00005380static PyTypeObject Int_InfoType;
5381
5382PyDoc_STRVAR(int_info__doc__,
5383"sys.int_info\n\
5384\n\
5385A struct sequence that holds information about Python's\n\
5386internal representation of integers. The attributes are read only.");
5387
5388static PyStructSequence_Field int_info_fields[] = {
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00005389 {"bits_per_digit", "size of a digit in bits"},
Mark Dickinson22b20182010-05-10 21:27:53 +00005390 {"sizeof_digit", "size in bytes of the C type used to represent a digit"},
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00005391 {NULL, NULL}
Mark Dickinsonbd792642009-03-18 20:06:12 +00005392};
5393
5394static PyStructSequence_Desc int_info_desc = {
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00005395 "sys.int_info", /* name */
5396 int_info__doc__, /* doc */
5397 int_info_fields, /* fields */
5398 2 /* number of fields */
Mark Dickinsonbd792642009-03-18 20:06:12 +00005399};
5400
5401PyObject *
5402PyLong_GetInfo(void)
5403{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00005404 PyObject* int_info;
5405 int field = 0;
5406 int_info = PyStructSequence_New(&Int_InfoType);
5407 if (int_info == NULL)
5408 return NULL;
5409 PyStructSequence_SET_ITEM(int_info, field++,
5410 PyLong_FromLong(PyLong_SHIFT));
5411 PyStructSequence_SET_ITEM(int_info, field++,
5412 PyLong_FromLong(sizeof(digit)));
5413 if (PyErr_Occurred()) {
5414 Py_CLEAR(int_info);
5415 return NULL;
5416 }
5417 return int_info;
Mark Dickinsonbd792642009-03-18 20:06:12 +00005418}
5419
Guido van Rossumddefaf32007-01-14 03:31:43 +00005420int
5421_PyLong_Init(void)
5422{
5423#if NSMALLNEGINTS + NSMALLPOSINTS > 0
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00005424 int ival, size;
5425 PyLongObject *v = small_ints;
Christian Heimesdfc12ed2008-01-31 15:16:38 +00005426
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00005427 for (ival = -NSMALLNEGINTS; ival < NSMALLPOSINTS; ival++, v++) {
5428 size = (ival < 0) ? -1 : ((ival == 0) ? 0 : 1);
5429 if (Py_TYPE(v) == &PyLong_Type) {
5430 /* The element is already initialized, most likely
5431 * the Python interpreter was initialized before.
5432 */
5433 Py_ssize_t refcnt;
5434 PyObject* op = (PyObject*)v;
Christian Heimesdfc12ed2008-01-31 15:16:38 +00005435
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00005436 refcnt = Py_REFCNT(op) < 0 ? 0 : Py_REFCNT(op);
5437 _Py_NewReference(op);
5438 /* _Py_NewReference sets the ref count to 1 but
5439 * the ref count might be larger. Set the refcnt
5440 * to the original refcnt + 1 */
5441 Py_REFCNT(op) = refcnt + 1;
5442 assert(Py_SIZE(op) == size);
Victor Stinner12174a52014-08-15 23:17:38 +02005443 assert(v->ob_digit[0] == (digit)abs(ival));
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00005444 }
5445 else {
Christian Heimesd3afe782013-12-04 09:27:47 +01005446 (void)PyObject_INIT(v, &PyLong_Type);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00005447 }
5448 Py_SIZE(v) = size;
Victor Stinner12174a52014-08-15 23:17:38 +02005449 v->ob_digit[0] = (digit)abs(ival);
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00005450 }
Guido van Rossumddefaf32007-01-14 03:31:43 +00005451#endif
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00005452 /* initialize int_info */
Victor Stinner1c8f0592013-07-22 22:24:54 +02005453 if (Int_InfoType.tp_name == NULL) {
5454 if (PyStructSequence_InitType2(&Int_InfoType, &int_info_desc) < 0)
5455 return 0;
5456 }
Mark Dickinsonbd792642009-03-18 20:06:12 +00005457
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00005458 return 1;
Guido van Rossumddefaf32007-01-14 03:31:43 +00005459}
5460
5461void
5462PyLong_Fini(void)
5463{
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00005464 /* Integers are currently statically allocated. Py_DECREF is not
5465 needed, but Python must forget about the reference or multiple
5466 reinitializations will fail. */
Guido van Rossumddefaf32007-01-14 03:31:43 +00005467#if NSMALLNEGINTS + NSMALLPOSINTS > 0
Antoine Pitrouf95a1b32010-05-09 15:52:27 +00005468 int i;
5469 PyLongObject *v = small_ints;
5470 for (i = 0; i < NSMALLNEGINTS + NSMALLPOSINTS; i++, v++) {
5471 _Py_DEC_REFTOTAL;
5472 _Py_ForgetReference((PyObject*)v);
5473 }
Guido van Rossumddefaf32007-01-14 03:31:43 +00005474#endif
5475}