blob: f7c2e3aa2476c20e2fdd98d7cf2104ef67c05207 [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"
Mark Dickinsonbd792642009-03-18 20:06:12 +00007#include "structseq.h"
Guido van Rossumc0b618a1997-05-02 03:12:38 +00008
Mark Dickinsonc6300392009-04-20 21:38:00 +00009#include <float.h>
Guido van Rossumeb1fafc1994-08-29 12:47:19 +000010#include <ctype.h>
Mark Dickinson5a74bf62009-02-15 11:04:38 +000011#include <stddef.h>
Guido van Rossumedcc38a1991-05-05 20:09:44 +000012
Guido van Rossumddefaf32007-01-14 03:31:43 +000013#ifndef NSMALLPOSINTS
Antoine Pitrou7f14f0d2010-05-09 16:14:21 +000014#define NSMALLPOSINTS 257
Guido van Rossumddefaf32007-01-14 03:31:43 +000015#endif
16#ifndef NSMALLNEGINTS
Antoine Pitrou7f14f0d2010-05-09 16:14:21 +000017#define NSMALLNEGINTS 5
Guido van Rossumddefaf32007-01-14 03:31:43 +000018#endif
Facundo Batista6e6f59b2008-07-24 18:57:11 +000019
Mark Dickinsone4416742009-02-15 15:14:57 +000020/* convert a PyLong of size 1, 0 or -1 to an sdigit */
Antoine Pitrou7f14f0d2010-05-09 16:14:21 +000021#define MEDIUM_VALUE(x) (Py_SIZE(x) < 0 ? -(sdigit)(x)->ob_digit[0] : \
22 (Py_SIZE(x) == 0 ? (sdigit)0 : \
23 (sdigit)(x)->ob_digit[0]))
Facundo Batista6e6f59b2008-07-24 18:57:11 +000024#define ABS(x) ((x) < 0 ? -(x) : (x))
25
Guido van Rossumddefaf32007-01-14 03:31:43 +000026#if NSMALLNEGINTS + NSMALLPOSINTS > 0
27/* Small integers are preallocated in this array so that they
28 can be shared.
29 The integers that are preallocated are those in the range
30 -NSMALLNEGINTS (inclusive) to NSMALLPOSINTS (not inclusive).
31*/
32static PyLongObject small_ints[NSMALLNEGINTS + NSMALLPOSINTS];
33#ifdef COUNT_ALLOCS
34int quick_int_allocs, quick_neg_int_allocs;
35#endif
36
Guido van Rossum7eaf8222007-06-18 17:58:50 +000037static PyObject *
Mark Dickinsone4416742009-02-15 15:14:57 +000038get_small_int(sdigit ival)
Guido van Rossumddefaf32007-01-14 03:31:43 +000039{
Antoine Pitrou7f14f0d2010-05-09 16:14:21 +000040 PyObject *v = (PyObject*)(small_ints + ival + NSMALLNEGINTS);
41 Py_INCREF(v);
Guido van Rossumddefaf32007-01-14 03:31:43 +000042#ifdef COUNT_ALLOCS
Antoine Pitrou7f14f0d2010-05-09 16:14:21 +000043 if (ival >= 0)
44 quick_int_allocs++;
45 else
46 quick_neg_int_allocs++;
Guido van Rossumddefaf32007-01-14 03:31:43 +000047#endif
Antoine Pitrou7f14f0d2010-05-09 16:14:21 +000048 return v;
Guido van Rossumddefaf32007-01-14 03:31:43 +000049}
50#define CHECK_SMALL_INT(ival) \
Antoine Pitrou7f14f0d2010-05-09 16:14:21 +000051 do if (-NSMALLNEGINTS <= ival && ival < NSMALLPOSINTS) { \
52 return get_small_int((sdigit)ival); \
53 } while(0)
Guido van Rossumddefaf32007-01-14 03:31:43 +000054
Antoine Pitrou7f14f0d2010-05-09 16:14:21 +000055static PyLongObject *
Facundo Batista6e6f59b2008-07-24 18:57:11 +000056maybe_small_long(PyLongObject *v)
57{
Antoine Pitrou7f14f0d2010-05-09 16:14:21 +000058 if (v && ABS(Py_SIZE(v)) <= 1) {
59 sdigit ival = MEDIUM_VALUE(v);
60 if (-NSMALLNEGINTS <= ival && ival < NSMALLPOSINTS) {
61 Py_DECREF(v);
62 return (PyLongObject *)get_small_int(ival);
63 }
64 }
65 return v;
Facundo Batista6e6f59b2008-07-24 18:57:11 +000066}
Guido van Rossumddefaf32007-01-14 03:31:43 +000067#else
68#define CHECK_SMALL_INT(ival)
Facundo Batista6e6f59b2008-07-24 18:57:11 +000069#define maybe_small_long(val) (val)
Guido van Rossumddefaf32007-01-14 03:31:43 +000070#endif
71
Guido van Rossumddefaf32007-01-14 03:31:43 +000072/* If a freshly-allocated long is already shared, it must
73 be a small integer, so negating it must go to PyLong_FromLong */
74#define NEGATE(x) \
Antoine Pitrou7f14f0d2010-05-09 16:14:21 +000075 do if (Py_REFCNT(x) == 1) Py_SIZE(x) = -Py_SIZE(x); \
76 else { PyObject* tmp=PyLong_FromLong(-MEDIUM_VALUE(x)); \
77 Py_DECREF(x); (x) = (PyLongObject*)tmp; } \
78 while(0)
Tim Peters5af4e6c2002-08-12 02:31:19 +000079/* For long multiplication, use the O(N**2) school algorithm unless
80 * both operands contain more than KARATSUBA_CUTOFF digits (this
81 * being an internal Python long digit, in base BASE).
82 */
Tim Peters0973b992004-08-29 22:16:50 +000083#define KARATSUBA_CUTOFF 70
84#define KARATSUBA_SQUARE_CUTOFF (2 * KARATSUBA_CUTOFF)
Tim Peters5af4e6c2002-08-12 02:31:19 +000085
Tim Peters47e52ee2004-08-30 02:44:38 +000086/* For exponentiation, use the binary left-to-right algorithm
87 * unless the exponent contains more than FIVEARY_CUTOFF digits.
88 * In that case, do 5 bits at a time. The potential drawback is that
89 * a table of 2**5 intermediate results is computed.
90 */
91#define FIVEARY_CUTOFF 8
92
Tim Peters5af4e6c2002-08-12 02:31:19 +000093#undef MIN
94#undef MAX
95#define MAX(x, y) ((x) < (y) ? (y) : (x))
96#define MIN(x, y) ((x) > (y) ? (y) : (x))
97
Guido van Rossumc0b618a1997-05-02 03:12:38 +000098#define SIGCHECK(PyTryBlock) \
Antoine Pitrou7f14f0d2010-05-09 16:14:21 +000099 if (--_Py_Ticker < 0) { \
100 _Py_Ticker = _Py_CheckInterval; \
101 if (PyErr_CheckSignals()) PyTryBlock \
102 }
Guido van Rossum23d6f0e1991-05-14 12:06:49 +0000103
Mark Dickinsonc6300392009-04-20 21:38:00 +0000104/* forward declaration */
105static int bits_in_digit(digit d);
106
Guido van Rossumedcc38a1991-05-05 20:09:44 +0000107/* Normalize (remove leading zeros from) a long int object.
108 Doesn't attempt to free the storage--in most cases, due to the nature
109 of the algorithms used, this could save at most be one word anyway. */
110
Guido van Rossumc0b618a1997-05-02 03:12:38 +0000111static PyLongObject *
Tim Peters9f688bf2000-07-07 15:53:28 +0000112long_normalize(register PyLongObject *v)
Guido van Rossumedcc38a1991-05-05 20:09:44 +0000113{
Antoine Pitrou7f14f0d2010-05-09 16:14:21 +0000114 Py_ssize_t j = ABS(Py_SIZE(v));
115 Py_ssize_t i = j;
Tim Peters5af4e6c2002-08-12 02:31:19 +0000116
Antoine Pitrou7f14f0d2010-05-09 16:14:21 +0000117 while (i > 0 && v->ob_digit[i-1] == 0)
118 --i;
119 if (i != j)
120 Py_SIZE(v) = (Py_SIZE(v) < 0) ? -(i) : i;
121 return v;
Guido van Rossumedcc38a1991-05-05 20:09:44 +0000122}
123
124/* Allocate a new long int object with size digits.
125 Return NULL and set exception if we run out of memory. */
126
Mark Dickinson5a74bf62009-02-15 11:04:38 +0000127#define MAX_LONG_DIGITS \
Antoine Pitrou7f14f0d2010-05-09 16:14:21 +0000128 ((PY_SSIZE_T_MAX - offsetof(PyLongObject, ob_digit))/sizeof(digit))
Mark Dickinson5a74bf62009-02-15 11:04:38 +0000129
Guido van Rossumc0b618a1997-05-02 03:12:38 +0000130PyLongObject *
Martin v. Löwis18e16552006-02-15 17:27:45 +0000131_PyLong_New(Py_ssize_t size)
Guido van Rossumedcc38a1991-05-05 20:09:44 +0000132{
Antoine Pitrou7f14f0d2010-05-09 16:14:21 +0000133 PyLongObject *result;
134 /* Number of bytes needed is: offsetof(PyLongObject, ob_digit) +
135 sizeof(digit)*size. Previous incarnations of this code used
136 sizeof(PyVarObject) instead of the offsetof, but this risks being
137 incorrect in the presence of padding between the PyVarObject header
138 and the digits. */
139 if (size > (Py_ssize_t)MAX_LONG_DIGITS) {
140 PyErr_SetString(PyExc_OverflowError,
141 "too many digits in integer");
142 return NULL;
143 }
144 result = PyObject_MALLOC(offsetof(PyLongObject, ob_digit) +
145 size*sizeof(digit));
146 if (!result) {
147 PyErr_NoMemory();
148 return NULL;
149 }
150 return (PyLongObject*)PyObject_INIT_VAR(result, &PyLong_Type, size);
Guido van Rossumedcc38a1991-05-05 20:09:44 +0000151}
152
Tim Peters64b5ce32001-09-10 20:52:51 +0000153PyObject *
154_PyLong_Copy(PyLongObject *src)
155{
Antoine Pitrou7f14f0d2010-05-09 16:14:21 +0000156 PyLongObject *result;
157 Py_ssize_t i;
Tim Peters64b5ce32001-09-10 20:52:51 +0000158
Antoine Pitrou7f14f0d2010-05-09 16:14:21 +0000159 assert(src != NULL);
160 i = Py_SIZE(src);
161 if (i < 0)
162 i = -(i);
163 if (i < 2) {
164 sdigit ival = src->ob_digit[0];
165 if (Py_SIZE(src) < 0)
166 ival = -ival;
167 CHECK_SMALL_INT(ival);
168 }
169 result = _PyLong_New(i);
170 if (result != NULL) {
171 Py_SIZE(result) = Py_SIZE(src);
172 while (--i >= 0)
173 result->ob_digit[i] = src->ob_digit[i];
174 }
175 return (PyObject *)result;
Tim Peters64b5ce32001-09-10 20:52:51 +0000176}
177
Guido van Rossumedcc38a1991-05-05 20:09:44 +0000178/* Create a new long int object from a C long int */
179
Guido van Rossumc0b618a1997-05-02 03:12:38 +0000180PyObject *
Tim Peters9f688bf2000-07-07 15:53:28 +0000181PyLong_FromLong(long ival)
Guido van Rossumedcc38a1991-05-05 20:09:44 +0000182{
Antoine Pitrou7f14f0d2010-05-09 16:14:21 +0000183 PyLongObject *v;
184 unsigned long abs_ival;
185 unsigned long t; /* unsigned so >> doesn't propagate sign bit */
186 int ndigits = 0;
187 int sign = 1;
Guido van Rossumddefaf32007-01-14 03:31:43 +0000188
Antoine Pitrou7f14f0d2010-05-09 16:14:21 +0000189 CHECK_SMALL_INT(ival);
Tim Petersce9de2f2001-06-14 04:56:19 +0000190
Antoine Pitrou7f14f0d2010-05-09 16:14:21 +0000191 if (ival < 0) {
192 /* negate: can't write this as abs_ival = -ival since that
193 invokes undefined behaviour when ival is LONG_MIN */
194 abs_ival = 0U-(unsigned long)ival;
195 sign = -1;
196 }
197 else {
198 abs_ival = (unsigned long)ival;
199 }
Tim Petersce9de2f2001-06-14 04:56:19 +0000200
Antoine Pitrou7f14f0d2010-05-09 16:14:21 +0000201 /* Fast path for single-digit ints */
202 if (!(abs_ival >> PyLong_SHIFT)) {
203 v = _PyLong_New(1);
204 if (v) {
205 Py_SIZE(v) = sign;
206 v->ob_digit[0] = Py_SAFE_DOWNCAST(
207 abs_ival, unsigned long, digit);
208 }
209 return (PyObject*)v;
210 }
Guido van Rossumddefaf32007-01-14 03:31:43 +0000211
Mark Dickinson249b8982009-04-27 19:41:00 +0000212#if PyLong_SHIFT==15
Antoine Pitrou7f14f0d2010-05-09 16:14:21 +0000213 /* 2 digits */
214 if (!(abs_ival >> 2*PyLong_SHIFT)) {
215 v = _PyLong_New(2);
216 if (v) {
217 Py_SIZE(v) = 2*sign;
218 v->ob_digit[0] = Py_SAFE_DOWNCAST(
219 abs_ival & PyLong_MASK, unsigned long, digit);
220 v->ob_digit[1] = Py_SAFE_DOWNCAST(
221 abs_ival >> PyLong_SHIFT, unsigned long, digit);
222 }
223 return (PyObject*)v;
224 }
Mark Dickinsonbd792642009-03-18 20:06:12 +0000225#endif
Guido van Rossumddefaf32007-01-14 03:31:43 +0000226
Antoine Pitrou7f14f0d2010-05-09 16:14:21 +0000227 /* Larger numbers: loop to determine number of digits */
228 t = abs_ival;
229 while (t) {
230 ++ndigits;
231 t >>= PyLong_SHIFT;
232 }
233 v = _PyLong_New(ndigits);
234 if (v != NULL) {
235 digit *p = v->ob_digit;
236 Py_SIZE(v) = ndigits*sign;
237 t = abs_ival;
238 while (t) {
239 *p++ = Py_SAFE_DOWNCAST(
240 t & PyLong_MASK, unsigned long, digit);
241 t >>= PyLong_SHIFT;
242 }
243 }
244 return (PyObject *)v;
Guido van Rossumedcc38a1991-05-05 20:09:44 +0000245}
246
Guido van Rossum53756b11997-01-03 17:14:46 +0000247/* Create a new long int object from a C unsigned long int */
248
Guido van Rossumc0b618a1997-05-02 03:12:38 +0000249PyObject *
Tim Peters9f688bf2000-07-07 15:53:28 +0000250PyLong_FromUnsignedLong(unsigned long ival)
Guido van Rossum53756b11997-01-03 17:14:46 +0000251{
Antoine Pitrou7f14f0d2010-05-09 16:14:21 +0000252 PyLongObject *v;
253 unsigned long t;
254 int ndigits = 0;
Tim Petersce9de2f2001-06-14 04:56:19 +0000255
Antoine Pitrou7f14f0d2010-05-09 16:14:21 +0000256 if (ival < PyLong_BASE)
257 return PyLong_FromLong(ival);
258 /* Count the number of Python digits. */
259 t = (unsigned long)ival;
260 while (t) {
261 ++ndigits;
262 t >>= PyLong_SHIFT;
263 }
264 v = _PyLong_New(ndigits);
265 if (v != NULL) {
266 digit *p = v->ob_digit;
267 Py_SIZE(v) = ndigits;
268 while (ival) {
269 *p++ = (digit)(ival & PyLong_MASK);
270 ival >>= PyLong_SHIFT;
271 }
272 }
273 return (PyObject *)v;
Guido van Rossum53756b11997-01-03 17:14:46 +0000274}
275
Guido van Rossum149e9ea1991-06-03 10:58:24 +0000276/* Create a new long int object from a C double */
277
Guido van Rossumc0b618a1997-05-02 03:12:38 +0000278PyObject *
Guido van Rossumc0b618a1997-05-02 03:12:38 +0000279PyLong_FromDouble(double dval)
Guido van Rossum149e9ea1991-06-03 10:58:24 +0000280{
Antoine Pitrou7f14f0d2010-05-09 16:14:21 +0000281 PyLongObject *v;
282 double frac;
283 int i, ndig, expo, neg;
284 neg = 0;
285 if (Py_IS_INFINITY(dval)) {
286 PyErr_SetString(PyExc_OverflowError,
287 "cannot convert float infinity to integer");
288 return NULL;
289 }
290 if (Py_IS_NAN(dval)) {
291 PyErr_SetString(PyExc_ValueError,
292 "cannot convert float NaN to integer");
293 return NULL;
294 }
295 if (dval < 0.0) {
296 neg = 1;
297 dval = -dval;
298 }
299 frac = frexp(dval, &expo); /* dval = frac*2**expo; 0.0 <= frac < 1.0 */
300 if (expo <= 0)
301 return PyLong_FromLong(0L);
302 ndig = (expo-1) / PyLong_SHIFT + 1; /* Number of 'digits' in result */
303 v = _PyLong_New(ndig);
304 if (v == NULL)
305 return NULL;
306 frac = ldexp(frac, (expo-1) % PyLong_SHIFT + 1);
307 for (i = ndig; --i >= 0; ) {
308 digit bits = (digit)frac;
309 v->ob_digit[i] = bits;
310 frac = frac - (double)bits;
311 frac = ldexp(frac, PyLong_SHIFT);
312 }
313 if (neg)
314 Py_SIZE(v) = -(Py_SIZE(v));
315 return (PyObject *)v;
Guido van Rossum149e9ea1991-06-03 10:58:24 +0000316}
317
Thomas Wouters89f507f2006-12-13 04:49:30 +0000318/* Checking for overflow in PyLong_AsLong is a PITA since C doesn't define
319 * anything about what happens when a signed integer operation overflows,
320 * and some compilers think they're doing you a favor by being "clever"
321 * then. The bit pattern for the largest postive signed long is
322 * (unsigned long)LONG_MAX, and for the smallest negative signed long
323 * it is abs(LONG_MIN), which we could write -(unsigned long)LONG_MIN.
324 * However, some other compilers warn about applying unary minus to an
325 * unsigned operand. Hence the weird "0-".
326 */
Antoine Pitrou7f14f0d2010-05-09 16:14:21 +0000327#define PY_ABS_LONG_MIN (0-(unsigned long)LONG_MIN)
328#define PY_ABS_SSIZE_T_MIN (0-(size_t)PY_SSIZE_T_MIN)
Thomas Wouters89f507f2006-12-13 04:49:30 +0000329
Guido van Rossumedcc38a1991-05-05 20:09:44 +0000330/* Get a C long int from a long int object.
331 Returns -1 and sets an error condition if overflow occurs. */
332
333long
Martin v. Löwisd1a1d1e2007-12-04 22:10:37 +0000334PyLong_AsLongAndOverflow(PyObject *vv, int *overflow)
Guido van Rossumedcc38a1991-05-05 20:09:44 +0000335{
Antoine Pitrou7f14f0d2010-05-09 16:14:21 +0000336 /* This version by Tim Peters */
337 register PyLongObject *v;
338 unsigned long x, prev;
339 long res;
340 Py_ssize_t i;
341 int sign;
342 int do_decref = 0; /* if nb_int was called */
Guido van Rossumf7531811998-05-26 14:33:37 +0000343
Antoine Pitrou7f14f0d2010-05-09 16:14:21 +0000344 *overflow = 0;
345 if (vv == NULL) {
346 PyErr_BadInternalCall();
347 return -1;
348 }
Guido van Rossumddefaf32007-01-14 03:31:43 +0000349
Antoine Pitrou7f14f0d2010-05-09 16:14:21 +0000350 if (!PyLong_Check(vv)) {
351 PyNumberMethods *nb;
352 if ((nb = vv->ob_type->tp_as_number) == NULL ||
353 nb->nb_int == NULL) {
354 PyErr_SetString(PyExc_TypeError, "an integer is required");
355 return -1;
356 }
357 vv = (*nb->nb_int) (vv);
358 if (vv == NULL)
359 return -1;
360 do_decref = 1;
361 if (!PyLong_Check(vv)) {
362 Py_DECREF(vv);
363 PyErr_SetString(PyExc_TypeError,
364 "nb_int should return int object");
365 return -1;
366 }
367 }
Guido van Rossumddefaf32007-01-14 03:31:43 +0000368
Antoine Pitrou7f14f0d2010-05-09 16:14:21 +0000369 res = -1;
370 v = (PyLongObject *)vv;
371 i = Py_SIZE(v);
Guido van Rossumf7531811998-05-26 14:33:37 +0000372
Antoine Pitrou7f14f0d2010-05-09 16:14:21 +0000373 switch (i) {
374 case -1:
375 res = -(sdigit)v->ob_digit[0];
376 break;
377 case 0:
378 res = 0;
379 break;
380 case 1:
381 res = v->ob_digit[0];
382 break;
383 default:
384 sign = 1;
385 x = 0;
386 if (i < 0) {
387 sign = -1;
388 i = -(i);
389 }
390 while (--i >= 0) {
391 prev = x;
392 x = (x << PyLong_SHIFT) + v->ob_digit[i];
393 if ((x >> PyLong_SHIFT) != prev) {
394 *overflow = Py_SIZE(v) > 0 ? 1 : -1;
395 goto exit;
396 }
397 }
398 /* Haven't lost any bits, but casting to long requires extra care
399 * (see comment above).
400 */
401 if (x <= (unsigned long)LONG_MAX) {
402 res = (long)x * sign;
403 }
404 else if (sign < 0 && x == PY_ABS_LONG_MIN) {
405 res = LONG_MIN;
406 }
407 else {
408 *overflow = Py_SIZE(v) > 0 ? 1 : -1;
409 /* res is already set to -1 */
410 }
411 }
Georg Brandl61c31b02007-02-26 14:46:30 +0000412 exit:
Antoine Pitrou7f14f0d2010-05-09 16:14:21 +0000413 if (do_decref) {
414 Py_DECREF(vv);
415 }
416 return res;
Guido van Rossumedcc38a1991-05-05 20:09:44 +0000417}
418
Antoine Pitrou7f14f0d2010-05-09 16:14:21 +0000419long
Martin v. Löwisd1a1d1e2007-12-04 22:10:37 +0000420PyLong_AsLong(PyObject *obj)
421{
Antoine Pitrou7f14f0d2010-05-09 16:14:21 +0000422 int overflow;
423 long result = PyLong_AsLongAndOverflow(obj, &overflow);
424 if (overflow) {
425 /* XXX: could be cute and give a different
426 message for overflow == -1 */
427 PyErr_SetString(PyExc_OverflowError,
428 "Python int too large to convert to C long");
429 }
430 return result;
Martin v. Löwisd1a1d1e2007-12-04 22:10:37 +0000431}
432
Thomas Wouters00ee7ba2006-08-21 19:07:27 +0000433/* Get a Py_ssize_t from a long int object.
434 Returns -1 and sets an error condition if overflow occurs. */
435
436Py_ssize_t
Guido van Rossumddefaf32007-01-14 03:31:43 +0000437PyLong_AsSsize_t(PyObject *vv) {
Antoine Pitrou7f14f0d2010-05-09 16:14:21 +0000438 register PyLongObject *v;
439 size_t x, prev;
440 Py_ssize_t i;
441 int sign;
Martin v. Löwis18e16552006-02-15 17:27:45 +0000442
Antoine Pitrou7f14f0d2010-05-09 16:14:21 +0000443 if (vv == NULL) {
444 PyErr_BadInternalCall();
445 return -1;
446 }
447 if (!PyLong_Check(vv)) {
448 PyErr_SetString(PyExc_TypeError, "an integer is required");
449 return -1;
450 }
Mark Dickinsonbee1fb02010-04-06 15:44:57 +0000451
Antoine Pitrou7f14f0d2010-05-09 16:14:21 +0000452 v = (PyLongObject *)vv;
453 i = Py_SIZE(v);
454 switch (i) {
455 case -1: return -(sdigit)v->ob_digit[0];
456 case 0: return 0;
457 case 1: return v->ob_digit[0];
458 }
459 sign = 1;
460 x = 0;
461 if (i < 0) {
462 sign = -1;
463 i = -(i);
464 }
465 while (--i >= 0) {
466 prev = x;
467 x = (x << PyLong_SHIFT) + v->ob_digit[i];
468 if ((x >> PyLong_SHIFT) != prev)
469 goto overflow;
470 }
471 /* Haven't lost any bits, but casting to a signed type requires
472 * extra care (see comment above).
473 */
474 if (x <= (size_t)PY_SSIZE_T_MAX) {
475 return (Py_ssize_t)x * sign;
476 }
477 else if (sign < 0 && x == PY_ABS_SSIZE_T_MIN) {
478 return PY_SSIZE_T_MIN;
479 }
480 /* else overflow */
Martin v. Löwis18e16552006-02-15 17:27:45 +0000481
482 overflow:
Antoine Pitrou7f14f0d2010-05-09 16:14:21 +0000483 PyErr_SetString(PyExc_OverflowError,
484 "Python int too large to convert to C ssize_t");
485 return -1;
Martin v. Löwis18e16552006-02-15 17:27:45 +0000486}
487
Guido van Rossumd8c80482002-08-13 00:24:58 +0000488/* Get a C unsigned long int from a long int object.
Guido van Rossum53756b11997-01-03 17:14:46 +0000489 Returns -1 and sets an error condition if overflow occurs. */
490
491unsigned long
Tim Peters9f688bf2000-07-07 15:53:28 +0000492PyLong_AsUnsignedLong(PyObject *vv)
Guido van Rossum53756b11997-01-03 17:14:46 +0000493{
Antoine Pitrou7f14f0d2010-05-09 16:14:21 +0000494 register PyLongObject *v;
495 unsigned long x, prev;
496 Py_ssize_t i;
Tim Peters5af4e6c2002-08-12 02:31:19 +0000497
Antoine Pitrou7f14f0d2010-05-09 16:14:21 +0000498 if (vv == NULL) {
499 PyErr_BadInternalCall();
500 return (unsigned long)-1;
501 }
502 if (!PyLong_Check(vv)) {
503 PyErr_SetString(PyExc_TypeError, "an integer is required");
504 return (unsigned long)-1;
505 }
Mark Dickinsonbee1fb02010-04-06 15:44:57 +0000506
Antoine Pitrou7f14f0d2010-05-09 16:14:21 +0000507 v = (PyLongObject *)vv;
508 i = Py_SIZE(v);
509 x = 0;
510 if (i < 0) {
511 PyErr_SetString(PyExc_OverflowError,
512 "can't convert negative value to unsigned int");
513 return (unsigned long) -1;
514 }
515 switch (i) {
516 case 0: return 0;
517 case 1: return v->ob_digit[0];
518 }
519 while (--i >= 0) {
520 prev = x;
521 x = (x << PyLong_SHIFT) + v->ob_digit[i];
522 if ((x >> PyLong_SHIFT) != prev) {
523 PyErr_SetString(PyExc_OverflowError,
524 "python int too large to convert to C unsigned long");
525 return (unsigned long) -1;
526 }
527 }
528 return x;
Guido van Rossumddefaf32007-01-14 03:31:43 +0000529}
530
531/* Get a C unsigned long int from a long int object.
532 Returns -1 and sets an error condition if overflow occurs. */
533
534size_t
535PyLong_AsSize_t(PyObject *vv)
536{
Antoine Pitrou7f14f0d2010-05-09 16:14:21 +0000537 register PyLongObject *v;
538 size_t x, prev;
539 Py_ssize_t i;
Guido van Rossumddefaf32007-01-14 03:31:43 +0000540
Antoine Pitrou7f14f0d2010-05-09 16:14:21 +0000541 if (vv == NULL) {
542 PyErr_BadInternalCall();
543 return (size_t) -1;
544 }
545 if (!PyLong_Check(vv)) {
546 PyErr_SetString(PyExc_TypeError, "an integer is required");
547 return (size_t)-1;
548 }
Mark Dickinsonbee1fb02010-04-06 15:44:57 +0000549
Antoine Pitrou7f14f0d2010-05-09 16:14:21 +0000550 v = (PyLongObject *)vv;
551 i = Py_SIZE(v);
552 x = 0;
553 if (i < 0) {
554 PyErr_SetString(PyExc_OverflowError,
555 "can't convert negative value to size_t");
556 return (size_t) -1;
557 }
558 switch (i) {
559 case 0: return 0;
560 case 1: return v->ob_digit[0];
561 }
562 while (--i >= 0) {
563 prev = x;
564 x = (x << PyLong_SHIFT) + v->ob_digit[i];
565 if ((x >> PyLong_SHIFT) != prev) {
566 PyErr_SetString(PyExc_OverflowError,
567 "Python int too large to convert to C size_t");
568 return (unsigned long) -1;
569 }
570 }
571 return x;
Guido van Rossum53756b11997-01-03 17:14:46 +0000572}
573
Thomas Hellera4ea6032003-04-17 18:55:45 +0000574/* Get a C unsigned long int from a long int object, ignoring the high bits.
575 Returns -1 and sets an error condition if an error occurs. */
576
Guido van Rossumddefaf32007-01-14 03:31:43 +0000577static unsigned long
578_PyLong_AsUnsignedLongMask(PyObject *vv)
Thomas Hellera4ea6032003-04-17 18:55:45 +0000579{
Antoine Pitrou7f14f0d2010-05-09 16:14:21 +0000580 register PyLongObject *v;
581 unsigned long x;
582 Py_ssize_t i;
583 int sign;
Thomas Hellera4ea6032003-04-17 18:55:45 +0000584
Antoine Pitrou7f14f0d2010-05-09 16:14:21 +0000585 if (vv == NULL || !PyLong_Check(vv)) {
586 PyErr_BadInternalCall();
587 return (unsigned long) -1;
588 }
589 v = (PyLongObject *)vv;
590 i = Py_SIZE(v);
591 switch (i) {
592 case 0: return 0;
593 case 1: return v->ob_digit[0];
594 }
595 sign = 1;
596 x = 0;
597 if (i < 0) {
598 sign = -1;
599 i = -i;
600 }
601 while (--i >= 0) {
602 x = (x << PyLong_SHIFT) + v->ob_digit[i];
603 }
604 return x * sign;
Thomas Hellera4ea6032003-04-17 18:55:45 +0000605}
606
Guido van Rossumddefaf32007-01-14 03:31:43 +0000607unsigned long
608PyLong_AsUnsignedLongMask(register PyObject *op)
609{
Antoine Pitrou7f14f0d2010-05-09 16:14:21 +0000610 PyNumberMethods *nb;
611 PyLongObject *lo;
612 unsigned long val;
Guido van Rossumddefaf32007-01-14 03:31:43 +0000613
Antoine Pitrou7f14f0d2010-05-09 16:14:21 +0000614 if (op && PyLong_Check(op))
615 return _PyLong_AsUnsignedLongMask(op);
Guido van Rossumddefaf32007-01-14 03:31:43 +0000616
Antoine Pitrou7f14f0d2010-05-09 16:14:21 +0000617 if (op == NULL || (nb = op->ob_type->tp_as_number) == NULL ||
618 nb->nb_int == NULL) {
619 PyErr_SetString(PyExc_TypeError, "an integer is required");
620 return (unsigned long)-1;
621 }
Guido van Rossumddefaf32007-01-14 03:31:43 +0000622
Antoine Pitrou7f14f0d2010-05-09 16:14:21 +0000623 lo = (PyLongObject*) (*nb->nb_int) (op);
624 if (lo == NULL)
625 return (unsigned long)-1;
626 if (PyLong_Check(lo)) {
627 val = _PyLong_AsUnsignedLongMask((PyObject *)lo);
628 Py_DECREF(lo);
629 if (PyErr_Occurred())
630 return (unsigned long)-1;
631 return val;
632 }
633 else
634 {
635 Py_DECREF(lo);
636 PyErr_SetString(PyExc_TypeError,
637 "nb_int should return int object");
638 return (unsigned long)-1;
639 }
Guido van Rossumddefaf32007-01-14 03:31:43 +0000640}
641
Tim Peters5b8132f2003-01-31 15:52:05 +0000642int
643_PyLong_Sign(PyObject *vv)
644{
Antoine Pitrou7f14f0d2010-05-09 16:14:21 +0000645 PyLongObject *v = (PyLongObject *)vv;
Tim Peters5b8132f2003-01-31 15:52:05 +0000646
Antoine Pitrou7f14f0d2010-05-09 16:14:21 +0000647 assert(v != NULL);
648 assert(PyLong_Check(v));
Tim Peters5b8132f2003-01-31 15:52:05 +0000649
Antoine Pitrou7f14f0d2010-05-09 16:14:21 +0000650 return Py_SIZE(v) == 0 ? 0 : (Py_SIZE(v) < 0 ? -1 : 1);
Tim Peters5b8132f2003-01-31 15:52:05 +0000651}
652
Tim Petersbaefd9e2003-01-28 20:37:45 +0000653size_t
654_PyLong_NumBits(PyObject *vv)
655{
Antoine Pitrou7f14f0d2010-05-09 16:14:21 +0000656 PyLongObject *v = (PyLongObject *)vv;
657 size_t result = 0;
658 Py_ssize_t ndigits;
Tim Petersbaefd9e2003-01-28 20:37:45 +0000659
Antoine Pitrou7f14f0d2010-05-09 16:14:21 +0000660 assert(v != NULL);
661 assert(PyLong_Check(v));
662 ndigits = ABS(Py_SIZE(v));
663 assert(ndigits == 0 || v->ob_digit[ndigits - 1] != 0);
664 if (ndigits > 0) {
665 digit msd = v->ob_digit[ndigits - 1];
Tim Petersbaefd9e2003-01-28 20:37:45 +0000666
Antoine Pitrou7f14f0d2010-05-09 16:14:21 +0000667 result = (ndigits - 1) * PyLong_SHIFT;
668 if (result / PyLong_SHIFT != (size_t)(ndigits - 1))
669 goto Overflow;
670 do {
671 ++result;
672 if (result == 0)
673 goto Overflow;
674 msd >>= 1;
675 } while (msd);
676 }
677 return result;
Tim Petersbaefd9e2003-01-28 20:37:45 +0000678
679Overflow:
Antoine Pitrou7f14f0d2010-05-09 16:14:21 +0000680 PyErr_SetString(PyExc_OverflowError, "int has too many bits "
681 "to express in a platform size_t");
682 return (size_t)-1;
Tim Petersbaefd9e2003-01-28 20:37:45 +0000683}
684
Tim Peters2a9b3672001-06-11 21:23:58 +0000685PyObject *
686_PyLong_FromByteArray(const unsigned char* bytes, size_t n,
Antoine Pitrou7f14f0d2010-05-09 16:14:21 +0000687 int little_endian, int is_signed)
Tim Peters2a9b3672001-06-11 21:23:58 +0000688{
Antoine Pitrou7f14f0d2010-05-09 16:14:21 +0000689 const unsigned char* pstartbyte;/* LSB of bytes */
690 int incr; /* direction to move pstartbyte */
691 const unsigned char* pendbyte; /* MSB of bytes */
692 size_t numsignificantbytes; /* number of bytes that matter */
693 Py_ssize_t ndigits; /* number of Python long digits */
694 PyLongObject* v; /* result */
695 Py_ssize_t idigit = 0; /* next free index in v->ob_digit */
Tim Peters2a9b3672001-06-11 21:23:58 +0000696
Antoine Pitrou7f14f0d2010-05-09 16:14:21 +0000697 if (n == 0)
698 return PyLong_FromLong(0L);
Tim Peters2a9b3672001-06-11 21:23:58 +0000699
Antoine Pitrou7f14f0d2010-05-09 16:14:21 +0000700 if (little_endian) {
701 pstartbyte = bytes;
702 pendbyte = bytes + n - 1;
703 incr = 1;
704 }
705 else {
706 pstartbyte = bytes + n - 1;
707 pendbyte = bytes;
708 incr = -1;
709 }
Tim Peters2a9b3672001-06-11 21:23:58 +0000710
Antoine Pitrou7f14f0d2010-05-09 16:14:21 +0000711 if (is_signed)
712 is_signed = *pendbyte >= 0x80;
Tim Peters2a9b3672001-06-11 21:23:58 +0000713
Antoine Pitrou7f14f0d2010-05-09 16:14:21 +0000714 /* Compute numsignificantbytes. This consists of finding the most
715 significant byte. Leading 0 bytes are insignficant if the number
716 is positive, and leading 0xff bytes if negative. */
717 {
718 size_t i;
719 const unsigned char* p = pendbyte;
720 const int pincr = -incr; /* search MSB to LSB */
721 const unsigned char insignficant = is_signed ? 0xff : 0x00;
Tim Peters2a9b3672001-06-11 21:23:58 +0000722
Antoine Pitrou7f14f0d2010-05-09 16:14:21 +0000723 for (i = 0; i < n; ++i, p += pincr) {
724 if (*p != insignficant)
725 break;
726 }
727 numsignificantbytes = n - i;
728 /* 2's-comp is a bit tricky here, e.g. 0xff00 == -0x0100, so
729 actually has 2 significant bytes. OTOH, 0xff0001 ==
730 -0x00ffff, so we wouldn't *need* to bump it there; but we
731 do for 0xffff = -0x0001. To be safe without bothering to
732 check every case, bump it regardless. */
733 if (is_signed && numsignificantbytes < n)
734 ++numsignificantbytes;
735 }
Tim Peters2a9b3672001-06-11 21:23:58 +0000736
Antoine Pitrou7f14f0d2010-05-09 16:14:21 +0000737 /* How many Python long digits do we need? We have
738 8*numsignificantbytes bits, and each Python long digit has
739 PyLong_SHIFT bits, so it's the ceiling of the quotient. */
740 /* catch overflow before it happens */
741 if (numsignificantbytes > (PY_SSIZE_T_MAX - PyLong_SHIFT) / 8) {
742 PyErr_SetString(PyExc_OverflowError,
743 "byte array too long to convert to int");
744 return NULL;
745 }
746 ndigits = (numsignificantbytes * 8 + PyLong_SHIFT - 1) / PyLong_SHIFT;
747 v = _PyLong_New(ndigits);
748 if (v == NULL)
749 return NULL;
Tim Peters2a9b3672001-06-11 21:23:58 +0000750
Antoine Pitrou7f14f0d2010-05-09 16:14:21 +0000751 /* Copy the bits over. The tricky parts are computing 2's-comp on
752 the fly for signed numbers, and dealing with the mismatch between
753 8-bit bytes and (probably) 15-bit Python digits.*/
754 {
755 size_t i;
756 twodigits carry = 1; /* for 2's-comp calculation */
757 twodigits accum = 0; /* sliding register */
758 unsigned int accumbits = 0; /* number of bits in accum */
759 const unsigned char* p = pstartbyte;
Tim Peters2a9b3672001-06-11 21:23:58 +0000760
Antoine Pitrou7f14f0d2010-05-09 16:14:21 +0000761 for (i = 0; i < numsignificantbytes; ++i, p += incr) {
762 twodigits thisbyte = *p;
763 /* Compute correction for 2's comp, if needed. */
764 if (is_signed) {
765 thisbyte = (0xff ^ thisbyte) + carry;
766 carry = thisbyte >> 8;
767 thisbyte &= 0xff;
768 }
769 /* Because we're going LSB to MSB, thisbyte is
770 more significant than what's already in accum,
771 so needs to be prepended to accum. */
772 accum |= (twodigits)thisbyte << accumbits;
773 accumbits += 8;
774 if (accumbits >= PyLong_SHIFT) {
775 /* There's enough to fill a Python digit. */
776 assert(idigit < ndigits);
777 v->ob_digit[idigit] = (digit)(accum &
778 PyLong_MASK);
779 ++idigit;
780 accum >>= PyLong_SHIFT;
781 accumbits -= PyLong_SHIFT;
782 assert(accumbits < PyLong_SHIFT);
783 }
784 }
785 assert(accumbits < PyLong_SHIFT);
786 if (accumbits) {
787 assert(idigit < ndigits);
788 v->ob_digit[idigit] = (digit)accum;
789 ++idigit;
790 }
791 }
Tim Peters2a9b3672001-06-11 21:23:58 +0000792
Antoine Pitrou7f14f0d2010-05-09 16:14:21 +0000793 Py_SIZE(v) = is_signed ? -idigit : idigit;
794 return (PyObject *)long_normalize(v);
Tim Peters2a9b3672001-06-11 21:23:58 +0000795}
796
797int
798_PyLong_AsByteArray(PyLongObject* v,
Antoine Pitrou7f14f0d2010-05-09 16:14:21 +0000799 unsigned char* bytes, size_t n,
800 int little_endian, int is_signed)
Tim Peters2a9b3672001-06-11 21:23:58 +0000801{
Antoine Pitrou7f14f0d2010-05-09 16:14:21 +0000802 Py_ssize_t i; /* index into v->ob_digit */
803 Py_ssize_t ndigits; /* |v->ob_size| */
804 twodigits accum; /* sliding register */
805 unsigned int accumbits; /* # bits in accum */
806 int do_twos_comp; /* store 2's-comp? is_signed and v < 0 */
807 digit carry; /* for computing 2's-comp */
808 size_t j; /* # bytes filled */
809 unsigned char* p; /* pointer to next byte in bytes */
810 int pincr; /* direction to move p */
Tim Peters2a9b3672001-06-11 21:23:58 +0000811
Antoine Pitrou7f14f0d2010-05-09 16:14:21 +0000812 assert(v != NULL && PyLong_Check(v));
Tim Peters2a9b3672001-06-11 21:23:58 +0000813
Antoine Pitrou7f14f0d2010-05-09 16:14:21 +0000814 if (Py_SIZE(v) < 0) {
815 ndigits = -(Py_SIZE(v));
816 if (!is_signed) {
817 PyErr_SetString(PyExc_OverflowError,
818 "can't convert negative int to unsigned");
819 return -1;
820 }
821 do_twos_comp = 1;
822 }
823 else {
824 ndigits = Py_SIZE(v);
825 do_twos_comp = 0;
826 }
Tim Peters2a9b3672001-06-11 21:23:58 +0000827
Antoine Pitrou7f14f0d2010-05-09 16:14:21 +0000828 if (little_endian) {
829 p = bytes;
830 pincr = 1;
831 }
832 else {
833 p = bytes + n - 1;
834 pincr = -1;
835 }
Tim Peters2a9b3672001-06-11 21:23:58 +0000836
Antoine Pitrou7f14f0d2010-05-09 16:14:21 +0000837 /* Copy over all the Python digits.
838 It's crucial that every Python digit except for the MSD contribute
839 exactly PyLong_SHIFT bits to the total, so first assert that the long is
840 normalized. */
841 assert(ndigits == 0 || v->ob_digit[ndigits - 1] != 0);
842 j = 0;
843 accum = 0;
844 accumbits = 0;
845 carry = do_twos_comp ? 1 : 0;
846 for (i = 0; i < ndigits; ++i) {
847 digit thisdigit = v->ob_digit[i];
848 if (do_twos_comp) {
849 thisdigit = (thisdigit ^ PyLong_MASK) + carry;
850 carry = thisdigit >> PyLong_SHIFT;
851 thisdigit &= PyLong_MASK;
852 }
853 /* Because we're going LSB to MSB, thisdigit is more
854 significant than what's already in accum, so needs to be
855 prepended to accum. */
856 accum |= (twodigits)thisdigit << accumbits;
Tim Peters8bc84b42001-06-12 19:17:03 +0000857
Antoine Pitrou7f14f0d2010-05-09 16:14:21 +0000858 /* The most-significant digit may be (probably is) at least
859 partly empty. */
860 if (i == ndigits - 1) {
861 /* Count # of sign bits -- they needn't be stored,
862 * although for signed conversion we need later to
863 * make sure at least one sign bit gets stored. */
864 digit s = do_twos_comp ? thisdigit ^ PyLong_MASK :
865 thisdigit;
866 while (s != 0) {
867 s >>= 1;
868 accumbits++;
869 }
870 }
871 else
872 accumbits += PyLong_SHIFT;
Tim Peters8bc84b42001-06-12 19:17:03 +0000873
Antoine Pitrou7f14f0d2010-05-09 16:14:21 +0000874 /* Store as many bytes as possible. */
875 while (accumbits >= 8) {
876 if (j >= n)
877 goto Overflow;
878 ++j;
879 *p = (unsigned char)(accum & 0xff);
880 p += pincr;
881 accumbits -= 8;
882 accum >>= 8;
883 }
884 }
Tim Peters2a9b3672001-06-11 21:23:58 +0000885
Antoine Pitrou7f14f0d2010-05-09 16:14:21 +0000886 /* Store the straggler (if any). */
887 assert(accumbits < 8);
888 assert(carry == 0); /* else do_twos_comp and *every* digit was 0 */
889 if (accumbits > 0) {
890 if (j >= n)
891 goto Overflow;
892 ++j;
893 if (do_twos_comp) {
894 /* Fill leading bits of the byte with sign bits
895 (appropriately pretending that the long had an
896 infinite supply of sign bits). */
897 accum |= (~(twodigits)0) << accumbits;
898 }
899 *p = (unsigned char)(accum & 0xff);
900 p += pincr;
901 }
902 else if (j == n && n > 0 && is_signed) {
903 /* The main loop filled the byte array exactly, so the code
904 just above didn't get to ensure there's a sign bit, and the
905 loop below wouldn't add one either. Make sure a sign bit
906 exists. */
907 unsigned char msb = *(p - pincr);
908 int sign_bit_set = msb >= 0x80;
909 assert(accumbits == 0);
910 if (sign_bit_set == do_twos_comp)
911 return 0;
912 else
913 goto Overflow;
914 }
Tim Peters05607ad2001-06-13 21:01:27 +0000915
Antoine Pitrou7f14f0d2010-05-09 16:14:21 +0000916 /* Fill remaining bytes with copies of the sign bit. */
917 {
918 unsigned char signbyte = do_twos_comp ? 0xffU : 0U;
919 for ( ; j < n; ++j, p += pincr)
920 *p = signbyte;
921 }
Tim Peters05607ad2001-06-13 21:01:27 +0000922
Antoine Pitrou7f14f0d2010-05-09 16:14:21 +0000923 return 0;
Tim Peters2a9b3672001-06-11 21:23:58 +0000924
925Overflow:
Antoine Pitrou7f14f0d2010-05-09 16:14:21 +0000926 PyErr_SetString(PyExc_OverflowError, "int too big to convert");
927 return -1;
Tim Peters5af4e6c2002-08-12 02:31:19 +0000928
Tim Peters2a9b3672001-06-11 21:23:58 +0000929}
930
Tim Petersa1c1b0f2001-09-04 02:50:49 +0000931double
932_PyLong_AsScaledDouble(PyObject *vv, int *exponent)
933{
934/* NBITS_WANTED should be > the number of bits in a double's precision,
935 but small enough so that 2**NBITS_WANTED is within the normal double
936 range. nbitsneeded is set to 1 less than that because the most-significant
937 Python digit contains at least 1 significant bit, but we don't want to
938 bother counting them (catering to the worst case cheaply).
939
940 57 is one more than VAX-D double precision; I (Tim) don't know of a double
941 format with more precision than that; it's 1 larger so that we add in at
942 least one round bit to stand in for the ignored least-significant bits.
943*/
944#define NBITS_WANTED 57
Antoine Pitrou7f14f0d2010-05-09 16:14:21 +0000945 PyLongObject *v;
946 double x;
947 const double multiplier = (double)(1L << PyLong_SHIFT);
948 Py_ssize_t i;
949 int sign;
950 int nbitsneeded;
Tim Petersa1c1b0f2001-09-04 02:50:49 +0000951
Antoine Pitrou7f14f0d2010-05-09 16:14:21 +0000952 if (vv == NULL || !PyLong_Check(vv)) {
953 PyErr_BadInternalCall();
954 return -1;
955 }
956 v = (PyLongObject *)vv;
957 i = Py_SIZE(v);
958 sign = 1;
959 if (i < 0) {
960 sign = -1;
961 i = -(i);
962 }
963 else if (i == 0) {
964 *exponent = 0;
965 return 0.0;
966 }
967 --i;
968 x = (double)v->ob_digit[i];
969 nbitsneeded = NBITS_WANTED - 1;
970 /* Invariant: i Python digits remain unaccounted for. */
971 while (i > 0 && nbitsneeded > 0) {
972 --i;
973 x = x * multiplier + (double)v->ob_digit[i];
974 nbitsneeded -= PyLong_SHIFT;
975 }
976 /* There are i digits we didn't shift in. Pretending they're all
977 zeroes, the true value is x * 2**(i*PyLong_SHIFT). */
978 *exponent = i;
979 assert(x > 0.0);
980 return x * sign;
Tim Petersa1c1b0f2001-09-04 02:50:49 +0000981#undef NBITS_WANTED
982}
983
Mark Dickinsonc6300392009-04-20 21:38:00 +0000984/* Get a C double from a long int object. Rounds to the nearest double,
985 using the round-half-to-even rule in the case of a tie. */
Guido van Rossumedcc38a1991-05-05 20:09:44 +0000986
987double
Tim Peters9f688bf2000-07-07 15:53:28 +0000988PyLong_AsDouble(PyObject *vv)
Guido van Rossumedcc38a1991-05-05 20:09:44 +0000989{
Antoine Pitrou7f14f0d2010-05-09 16:14:21 +0000990 PyLongObject *v = (PyLongObject *)vv;
991 Py_ssize_t rnd_digit, rnd_bit, m, n;
992 digit lsb, *d;
993 int round_up = 0;
994 double x;
Tim Peters9fffa3e2001-09-04 05:14:19 +0000995
Antoine Pitrou7f14f0d2010-05-09 16:14:21 +0000996 if (vv == NULL || !PyLong_Check(vv)) {
997 PyErr_BadInternalCall();
998 return -1.0;
999 }
Tim Peters9fffa3e2001-09-04 05:14:19 +00001000
Antoine Pitrou7f14f0d2010-05-09 16:14:21 +00001001 /* Notes on the method: for simplicity, assume v is positive and >=
1002 2**DBL_MANT_DIG. (For negative v we just ignore the sign until the
1003 end; for small v no rounding is necessary.) Write n for the number
1004 of bits in v, so that 2**(n-1) <= v < 2**n, and n > DBL_MANT_DIG.
Mark Dickinsonc6300392009-04-20 21:38:00 +00001005
Antoine Pitrou7f14f0d2010-05-09 16:14:21 +00001006 Some terminology: the *rounding bit* of v is the 1st bit of v that
1007 will be rounded away (bit n - DBL_MANT_DIG - 1); the *parity bit*
1008 is the bit immediately above. The round-half-to-even rule says
1009 that we round up if the rounding bit is set, unless v is exactly
1010 halfway between two floats and the parity bit is zero.
Mark Dickinsonc6300392009-04-20 21:38:00 +00001011
Antoine Pitrou7f14f0d2010-05-09 16:14:21 +00001012 Write d[0] ... d[m] for the digits of v, least to most significant.
1013 Let rnd_bit be the index of the rounding bit, and rnd_digit the
1014 index of the PyLong digit containing the rounding bit. Then the
1015 bits of the digit d[rnd_digit] look something like:
Mark Dickinsonc6300392009-04-20 21:38:00 +00001016
Antoine Pitrou7f14f0d2010-05-09 16:14:21 +00001017 rounding bit
1018 |
1019 v
1020 msb -> sssssrttttttttt <- lsb
1021 ^
1022 |
1023 parity bit
Mark Dickinsonc6300392009-04-20 21:38:00 +00001024
Antoine Pitrou7f14f0d2010-05-09 16:14:21 +00001025 where 's' represents a 'significant bit' that will be included in
1026 the mantissa of the result, 'r' is the rounding bit, and 't'
1027 represents a 'trailing bit' following the rounding bit. Note that
1028 if the rounding bit is at the top of d[rnd_digit] then the parity
1029 bit will be the lsb of d[rnd_digit+1]. If we set
Mark Dickinsonc6300392009-04-20 21:38:00 +00001030
Antoine Pitrou7f14f0d2010-05-09 16:14:21 +00001031 lsb = 1 << (rnd_bit % PyLong_SHIFT)
Mark Dickinsonc6300392009-04-20 21:38:00 +00001032
Antoine Pitrou7f14f0d2010-05-09 16:14:21 +00001033 then d[rnd_digit] & (PyLong_BASE - 2*lsb) selects just the
1034 significant bits of d[rnd_digit], d[rnd_digit] & (lsb-1) gets the
1035 trailing bits, and d[rnd_digit] & lsb gives the rounding bit.
Mark Dickinsonc6300392009-04-20 21:38:00 +00001036
Antoine Pitrou7f14f0d2010-05-09 16:14:21 +00001037 We initialize the double x to the integer given by digits
1038 d[rnd_digit:m-1], but with the rounding bit and trailing bits of
1039 d[rnd_digit] masked out. So the value of x comes from the top
1040 DBL_MANT_DIG bits of v, multiplied by 2*lsb. Note that in the loop
1041 that produces x, all floating-point operations are exact (assuming
1042 that FLT_RADIX==2). Now if we're rounding down, the value we want
1043 to return is simply
Mark Dickinsonc6300392009-04-20 21:38:00 +00001044
Antoine Pitrou7f14f0d2010-05-09 16:14:21 +00001045 x * 2**(PyLong_SHIFT * rnd_digit).
Mark Dickinsonc6300392009-04-20 21:38:00 +00001046
Antoine Pitrou7f14f0d2010-05-09 16:14:21 +00001047 and if we're rounding up, it's
Mark Dickinsonc6300392009-04-20 21:38:00 +00001048
Antoine Pitrou7f14f0d2010-05-09 16:14:21 +00001049 (x + 2*lsb) * 2**(PyLong_SHIFT * rnd_digit).
Mark Dickinsonc6300392009-04-20 21:38:00 +00001050
Antoine Pitrou7f14f0d2010-05-09 16:14:21 +00001051 Under the round-half-to-even rule, we round up if, and only
1052 if, the rounding bit is set *and* at least one of the
1053 following three conditions is satisfied:
Mark Dickinsonc6300392009-04-20 21:38:00 +00001054
Antoine Pitrou7f14f0d2010-05-09 16:14:21 +00001055 (1) the parity bit is set, or
1056 (2) at least one of the trailing bits of d[rnd_digit] is set, or
1057 (3) at least one of the digits d[i], 0 <= i < rnd_digit
1058 is nonzero.
Mark Dickinsonc6300392009-04-20 21:38:00 +00001059
Antoine Pitrou7f14f0d2010-05-09 16:14:21 +00001060 Finally, we have to worry about overflow. If v >= 2**DBL_MAX_EXP,
1061 or equivalently n > DBL_MAX_EXP, then overflow occurs. If v <
1062 2**DBL_MAX_EXP then we're usually safe, but there's a corner case
1063 to consider: if v is very close to 2**DBL_MAX_EXP then it's
1064 possible that v is rounded up to exactly 2**DBL_MAX_EXP, and then
1065 again overflow occurs.
1066 */
Mark Dickinsonc6300392009-04-20 21:38:00 +00001067
Antoine Pitrou7f14f0d2010-05-09 16:14:21 +00001068 if (Py_SIZE(v) == 0)
1069 return 0.0;
1070 m = ABS(Py_SIZE(v)) - 1;
1071 d = v->ob_digit;
1072 assert(d[m]); /* v should be normalized */
Mark Dickinsonc6300392009-04-20 21:38:00 +00001073
Antoine Pitrou7f14f0d2010-05-09 16:14:21 +00001074 /* fast path for case where 0 < abs(v) < 2**DBL_MANT_DIG */
1075 if (m < DBL_MANT_DIG / PyLong_SHIFT ||
1076 (m == DBL_MANT_DIG / PyLong_SHIFT &&
1077 d[m] < (digit)1 << DBL_MANT_DIG%PyLong_SHIFT)) {
1078 x = d[m];
1079 while (--m >= 0)
1080 x = x*PyLong_BASE + d[m];
1081 return Py_SIZE(v) < 0 ? -x : x;
1082 }
Mark Dickinsonc6300392009-04-20 21:38:00 +00001083
Antoine Pitrou7f14f0d2010-05-09 16:14:21 +00001084 /* if m is huge then overflow immediately; otherwise, compute the
1085 number of bits n in v. The condition below implies n (= #bits) >=
1086 m * PyLong_SHIFT + 1 > DBL_MAX_EXP, hence v >= 2**DBL_MAX_EXP. */
1087 if (m > (DBL_MAX_EXP-1)/PyLong_SHIFT)
1088 goto overflow;
1089 n = m * PyLong_SHIFT + bits_in_digit(d[m]);
1090 if (n > DBL_MAX_EXP)
1091 goto overflow;
Mark Dickinsonc6300392009-04-20 21:38:00 +00001092
Antoine Pitrou7f14f0d2010-05-09 16:14:21 +00001093 /* find location of rounding bit */
1094 assert(n > DBL_MANT_DIG); /* dealt with |v| < 2**DBL_MANT_DIG above */
1095 rnd_bit = n - DBL_MANT_DIG - 1;
1096 rnd_digit = rnd_bit/PyLong_SHIFT;
1097 lsb = (digit)1 << (rnd_bit%PyLong_SHIFT);
Mark Dickinsonc6300392009-04-20 21:38:00 +00001098
Antoine Pitrou7f14f0d2010-05-09 16:14:21 +00001099 /* Get top DBL_MANT_DIG bits of v. Assumes PyLong_SHIFT <
1100 DBL_MANT_DIG, so we'll need bits from at least 2 digits of v. */
1101 x = d[m];
1102 assert(m > rnd_digit);
1103 while (--m > rnd_digit)
1104 x = x*PyLong_BASE + d[m];
1105 x = x*PyLong_BASE + (d[m] & (PyLong_BASE-2*lsb));
Mark Dickinsonc6300392009-04-20 21:38:00 +00001106
Antoine Pitrou7f14f0d2010-05-09 16:14:21 +00001107 /* decide whether to round up, using round-half-to-even */
1108 assert(m == rnd_digit);
1109 if (d[m] & lsb) { /* if (rounding bit is set) */
1110 digit parity_bit;
1111 if (lsb == PyLong_BASE/2)
1112 parity_bit = d[m+1] & 1;
1113 else
1114 parity_bit = d[m] & 2*lsb;
1115 if (parity_bit)
1116 round_up = 1;
1117 else if (d[m] & (lsb-1))
1118 round_up = 1;
1119 else {
1120 while (--m >= 0) {
1121 if (d[m]) {
1122 round_up = 1;
1123 break;
1124 }
1125 }
1126 }
1127 }
Mark Dickinsonc6300392009-04-20 21:38:00 +00001128
Antoine Pitrou7f14f0d2010-05-09 16:14:21 +00001129 /* and round up if necessary */
1130 if (round_up) {
1131 x += 2*lsb;
1132 if (n == DBL_MAX_EXP &&
1133 x == ldexp((double)(2*lsb), DBL_MANT_DIG)) {
1134 /* overflow corner case */
1135 goto overflow;
1136 }
1137 }
Mark Dickinsonc6300392009-04-20 21:38:00 +00001138
Antoine Pitrou7f14f0d2010-05-09 16:14:21 +00001139 /* shift, adjust for sign, and return */
1140 x = ldexp(x, rnd_digit*PyLong_SHIFT);
1141 return Py_SIZE(v) < 0 ? -x : x;
Mark Dickinsonc6300392009-04-20 21:38:00 +00001142
1143 overflow:
Antoine Pitrou7f14f0d2010-05-09 16:14:21 +00001144 PyErr_SetString(PyExc_OverflowError,
1145 "Python int too large to convert to C double");
1146 return -1.0;
Guido van Rossumedcc38a1991-05-05 20:09:44 +00001147}
1148
Guido van Rossum78694d91998-09-18 14:14:13 +00001149/* Create a new long (or int) object from a C pointer */
1150
1151PyObject *
Tim Peters9f688bf2000-07-07 15:53:28 +00001152PyLong_FromVoidPtr(void *p)
Guido van Rossum78694d91998-09-18 14:14:13 +00001153{
Tim Peters70128a12001-06-16 08:48:40 +00001154#ifndef HAVE_LONG_LONG
1155# error "PyLong_FromVoidPtr: sizeof(void*) > sizeof(long), but no long long"
1156#endif
1157#if SIZEOF_LONG_LONG < SIZEOF_VOID_P
Martin v. Löwisb9a0f912003-03-29 10:06:18 +00001158# error "PyLong_FromVoidPtr: sizeof(PY_LONG_LONG) < sizeof(void*)"
Tim Peters70128a12001-06-16 08:48:40 +00001159#endif
Antoine Pitrou7f14f0d2010-05-09 16:14:21 +00001160 /* special-case null pointer */
1161 if (!p)
1162 return PyLong_FromLong(0);
1163 return PyLong_FromUnsignedLongLong((unsigned PY_LONG_LONG)(Py_uintptr_t)p);
Tim Peters70128a12001-06-16 08:48:40 +00001164
Guido van Rossum78694d91998-09-18 14:14:13 +00001165}
1166
1167/* Get a C pointer from a long object (or an int object in some cases) */
1168
1169void *
Tim Peters9f688bf2000-07-07 15:53:28 +00001170PyLong_AsVoidPtr(PyObject *vv)
Guido van Rossum78694d91998-09-18 14:14:13 +00001171{
Antoine Pitrou7f14f0d2010-05-09 16:14:21 +00001172 /* This function will allow int or long objects. If vv is neither,
1173 then the PyLong_AsLong*() functions will raise the exception:
1174 PyExc_SystemError, "bad argument to internal function"
1175 */
Tim Peters70128a12001-06-16 08:48:40 +00001176#if SIZEOF_VOID_P <= SIZEOF_LONG
Antoine Pitrou7f14f0d2010-05-09 16:14:21 +00001177 long x;
Guido van Rossum78694d91998-09-18 14:14:13 +00001178
Antoine Pitrou7f14f0d2010-05-09 16:14:21 +00001179 if (PyLong_Check(vv) && _PyLong_Sign(vv) < 0)
1180 x = PyLong_AsLong(vv);
1181 else
1182 x = PyLong_AsUnsignedLong(vv);
Guido van Rossum78694d91998-09-18 14:14:13 +00001183#else
Tim Peters70128a12001-06-16 08:48:40 +00001184
1185#ifndef HAVE_LONG_LONG
1186# error "PyLong_AsVoidPtr: sizeof(void*) > sizeof(long), but no long long"
1187#endif
1188#if SIZEOF_LONG_LONG < SIZEOF_VOID_P
Martin v. Löwisb9a0f912003-03-29 10:06:18 +00001189# error "PyLong_AsVoidPtr: sizeof(PY_LONG_LONG) < sizeof(void*)"
Tim Peters70128a12001-06-16 08:48:40 +00001190#endif
Antoine Pitrou7f14f0d2010-05-09 16:14:21 +00001191 PY_LONG_LONG x;
Guido van Rossum78694d91998-09-18 14:14:13 +00001192
Antoine Pitrou7f14f0d2010-05-09 16:14:21 +00001193 if (PyLong_Check(vv) && _PyLong_Sign(vv) < 0)
1194 x = PyLong_AsLongLong(vv);
1195 else
1196 x = PyLong_AsUnsignedLongLong(vv);
Tim Peters70128a12001-06-16 08:48:40 +00001197
1198#endif /* SIZEOF_VOID_P <= SIZEOF_LONG */
Guido van Rossum78694d91998-09-18 14:14:13 +00001199
Antoine Pitrou7f14f0d2010-05-09 16:14:21 +00001200 if (x == -1 && PyErr_Occurred())
1201 return NULL;
1202 return (void *)x;
Guido van Rossum78694d91998-09-18 14:14:13 +00001203}
1204
Guido van Rossum1a8791e1998-08-04 22:46:29 +00001205#ifdef HAVE_LONG_LONG
Tim Petersd1a7da62001-06-13 00:35:57 +00001206
Martin v. Löwisb9a0f912003-03-29 10:06:18 +00001207/* Initial PY_LONG_LONG support by Chris Herborth (chrish@qnx.com), later
Tim Petersd1a7da62001-06-13 00:35:57 +00001208 * rewritten to use the newer PyLong_{As,From}ByteArray API.
Guido van Rossum1a8791e1998-08-04 22:46:29 +00001209 */
1210
Tim Peterscf37dfc2001-06-14 18:42:50 +00001211#define IS_LITTLE_ENDIAN (int)*(unsigned char*)&one
Tim Petersd1a7da62001-06-13 00:35:57 +00001212
Martin v. Löwisb9a0f912003-03-29 10:06:18 +00001213/* Create a new long int object from a C PY_LONG_LONG int. */
Guido van Rossum1a8791e1998-08-04 22:46:29 +00001214
1215PyObject *
Martin v. Löwisb9a0f912003-03-29 10:06:18 +00001216PyLong_FromLongLong(PY_LONG_LONG ival)
Guido van Rossum1a8791e1998-08-04 22:46:29 +00001217{
Antoine Pitrou7f14f0d2010-05-09 16:14:21 +00001218 PyLongObject *v;
1219 unsigned PY_LONG_LONG abs_ival;
1220 unsigned PY_LONG_LONG t; /* unsigned so >> doesn't propagate sign bit */
1221 int ndigits = 0;
1222 int negative = 0;
Thomas Wouters477c8d52006-05-27 19:21:47 +00001223
Antoine Pitrou7f14f0d2010-05-09 16:14:21 +00001224 CHECK_SMALL_INT(ival);
1225 if (ival < 0) {
1226 /* avoid signed overflow on negation; see comments
1227 in PyLong_FromLong above. */
1228 abs_ival = (unsigned PY_LONG_LONG)(-1-ival) + 1;
1229 negative = 1;
1230 }
1231 else {
1232 abs_ival = (unsigned PY_LONG_LONG)ival;
1233 }
Thomas Wouters477c8d52006-05-27 19:21:47 +00001234
Antoine Pitrou7f14f0d2010-05-09 16:14:21 +00001235 /* Count the number of Python digits.
1236 We used to pick 5 ("big enough for anything"), but that's a
1237 waste of time and space given that 5*15 = 75 bits are rarely
1238 needed. */
1239 t = abs_ival;
1240 while (t) {
1241 ++ndigits;
1242 t >>= PyLong_SHIFT;
1243 }
1244 v = _PyLong_New(ndigits);
1245 if (v != NULL) {
1246 digit *p = v->ob_digit;
1247 Py_SIZE(v) = negative ? -ndigits : ndigits;
1248 t = abs_ival;
1249 while (t) {
1250 *p++ = (digit)(t & PyLong_MASK);
1251 t >>= PyLong_SHIFT;
1252 }
1253 }
1254 return (PyObject *)v;
Guido van Rossum1a8791e1998-08-04 22:46:29 +00001255}
1256
Martin v. Löwisb9a0f912003-03-29 10:06:18 +00001257/* Create a new long int object from a C unsigned PY_LONG_LONG int. */
Tim Petersd1a7da62001-06-13 00:35:57 +00001258
Guido van Rossum1a8791e1998-08-04 22:46:29 +00001259PyObject *
Martin v. Löwisb9a0f912003-03-29 10:06:18 +00001260PyLong_FromUnsignedLongLong(unsigned PY_LONG_LONG ival)
Guido van Rossum1a8791e1998-08-04 22:46:29 +00001261{
Antoine Pitrou7f14f0d2010-05-09 16:14:21 +00001262 PyLongObject *v;
1263 unsigned PY_LONG_LONG t;
1264 int ndigits = 0;
Thomas Wouters477c8d52006-05-27 19:21:47 +00001265
Antoine Pitrou7f14f0d2010-05-09 16:14:21 +00001266 if (ival < PyLong_BASE)
1267 return PyLong_FromLong((long)ival);
1268 /* Count the number of Python digits. */
1269 t = (unsigned PY_LONG_LONG)ival;
1270 while (t) {
1271 ++ndigits;
1272 t >>= PyLong_SHIFT;
1273 }
1274 v = _PyLong_New(ndigits);
1275 if (v != NULL) {
1276 digit *p = v->ob_digit;
1277 Py_SIZE(v) = ndigits;
1278 while (ival) {
1279 *p++ = (digit)(ival & PyLong_MASK);
1280 ival >>= PyLong_SHIFT;
1281 }
1282 }
1283 return (PyObject *)v;
Guido van Rossum1a8791e1998-08-04 22:46:29 +00001284}
1285
Martin v. Löwis18e16552006-02-15 17:27:45 +00001286/* Create a new long int object from a C Py_ssize_t. */
1287
1288PyObject *
Guido van Rossumddefaf32007-01-14 03:31:43 +00001289PyLong_FromSsize_t(Py_ssize_t ival)
Martin v. Löwis18e16552006-02-15 17:27:45 +00001290{
Antoine Pitrou7f14f0d2010-05-09 16:14:21 +00001291 PyLongObject *v;
1292 size_t abs_ival;
1293 size_t t; /* unsigned so >> doesn't propagate sign bit */
1294 int ndigits = 0;
1295 int negative = 0;
Mark Dickinson7ab6be22008-04-15 21:42:42 +00001296
Antoine Pitrou7f14f0d2010-05-09 16:14:21 +00001297 CHECK_SMALL_INT(ival);
1298 if (ival < 0) {
1299 /* avoid signed overflow when ival = SIZE_T_MIN */
1300 abs_ival = (size_t)(-1-ival)+1;
1301 negative = 1;
1302 }
1303 else {
1304 abs_ival = (size_t)ival;
1305 }
Mark Dickinson7ab6be22008-04-15 21:42:42 +00001306
Antoine Pitrou7f14f0d2010-05-09 16:14:21 +00001307 /* Count the number of Python digits. */
1308 t = abs_ival;
1309 while (t) {
1310 ++ndigits;
1311 t >>= PyLong_SHIFT;
1312 }
1313 v = _PyLong_New(ndigits);
1314 if (v != NULL) {
1315 digit *p = v->ob_digit;
1316 Py_SIZE(v) = negative ? -ndigits : ndigits;
1317 t = abs_ival;
1318 while (t) {
1319 *p++ = (digit)(t & PyLong_MASK);
1320 t >>= PyLong_SHIFT;
1321 }
1322 }
1323 return (PyObject *)v;
Martin v. Löwis18e16552006-02-15 17:27:45 +00001324}
1325
1326/* Create a new long int object from a C size_t. */
1327
1328PyObject *
Guido van Rossumddefaf32007-01-14 03:31:43 +00001329PyLong_FromSize_t(size_t ival)
Martin v. Löwis18e16552006-02-15 17:27:45 +00001330{
Antoine Pitrou7f14f0d2010-05-09 16:14:21 +00001331 PyLongObject *v;
1332 size_t t;
1333 int ndigits = 0;
Mark Dickinson7ab6be22008-04-15 21:42:42 +00001334
Antoine Pitrou7f14f0d2010-05-09 16:14:21 +00001335 if (ival < PyLong_BASE)
1336 return PyLong_FromLong((long)ival);
1337 /* Count the number of Python digits. */
1338 t = ival;
1339 while (t) {
1340 ++ndigits;
1341 t >>= PyLong_SHIFT;
1342 }
1343 v = _PyLong_New(ndigits);
1344 if (v != NULL) {
1345 digit *p = v->ob_digit;
1346 Py_SIZE(v) = ndigits;
1347 while (ival) {
1348 *p++ = (digit)(ival & PyLong_MASK);
1349 ival >>= PyLong_SHIFT;
1350 }
1351 }
1352 return (PyObject *)v;
Martin v. Löwis18e16552006-02-15 17:27:45 +00001353}
1354
Martin v. Löwisb9a0f912003-03-29 10:06:18 +00001355/* Get a C PY_LONG_LONG int from a long int object.
Tim Petersd1a7da62001-06-13 00:35:57 +00001356 Return -1 and set an error if overflow occurs. */
Guido van Rossum1a8791e1998-08-04 22:46:29 +00001357
Martin v. Löwisb9a0f912003-03-29 10:06:18 +00001358PY_LONG_LONG
Tim Peters9f688bf2000-07-07 15:53:28 +00001359PyLong_AsLongLong(PyObject *vv)
Guido van Rossum1a8791e1998-08-04 22:46:29 +00001360{
Antoine Pitrou7f14f0d2010-05-09 16:14:21 +00001361 PyLongObject *v;
1362 PY_LONG_LONG bytes;
1363 int one = 1;
1364 int res;
Tim Petersd1a7da62001-06-13 00:35:57 +00001365
Antoine Pitrou7f14f0d2010-05-09 16:14:21 +00001366 if (vv == NULL) {
1367 PyErr_BadInternalCall();
1368 return -1;
1369 }
1370 if (!PyLong_Check(vv)) {
1371 PyNumberMethods *nb;
1372 PyObject *io;
1373 if ((nb = vv->ob_type->tp_as_number) == NULL ||
1374 nb->nb_int == NULL) {
1375 PyErr_SetString(PyExc_TypeError, "an integer is required");
1376 return -1;
1377 }
1378 io = (*nb->nb_int) (vv);
1379 if (io == NULL)
1380 return -1;
1381 if (PyLong_Check(io)) {
1382 bytes = PyLong_AsLongLong(io);
1383 Py_DECREF(io);
1384 return bytes;
1385 }
1386 Py_DECREF(io);
1387 PyErr_SetString(PyExc_TypeError, "integer conversion failed");
1388 return -1;
1389 }
Guido van Rossum1a8791e1998-08-04 22:46:29 +00001390
Antoine Pitrou7f14f0d2010-05-09 16:14:21 +00001391 v = (PyLongObject*)vv;
1392 switch(Py_SIZE(v)) {
1393 case -1: return -(sdigit)v->ob_digit[0];
1394 case 0: return 0;
1395 case 1: return v->ob_digit[0];
1396 }
1397 res = _PyLong_AsByteArray(
1398 (PyLongObject *)vv, (unsigned char *)&bytes,
1399 SIZEOF_LONG_LONG, IS_LITTLE_ENDIAN, 1);
Guido van Rossum1a8791e1998-08-04 22:46:29 +00001400
Antoine Pitrou7f14f0d2010-05-09 16:14:21 +00001401 /* Plan 9 can't handle PY_LONG_LONG in ? : expressions */
1402 if (res < 0)
1403 return (PY_LONG_LONG)-1;
1404 else
1405 return bytes;
Guido van Rossum1a8791e1998-08-04 22:46:29 +00001406}
1407
Martin v. Löwisb9a0f912003-03-29 10:06:18 +00001408/* Get a C unsigned PY_LONG_LONG int from a long int object.
Tim Petersd1a7da62001-06-13 00:35:57 +00001409 Return -1 and set an error if overflow occurs. */
1410
Martin v. Löwisb9a0f912003-03-29 10:06:18 +00001411unsigned PY_LONG_LONG
Tim Peters9f688bf2000-07-07 15:53:28 +00001412PyLong_AsUnsignedLongLong(PyObject *vv)
Guido van Rossum1a8791e1998-08-04 22:46:29 +00001413{
Antoine Pitrou7f14f0d2010-05-09 16:14:21 +00001414 PyLongObject *v;
1415 unsigned PY_LONG_LONG bytes;
1416 int one = 1;
1417 int res;
Tim Petersd1a7da62001-06-13 00:35:57 +00001418
Antoine Pitrou7f14f0d2010-05-09 16:14:21 +00001419 if (vv == NULL || !PyLong_Check(vv)) {
1420 PyErr_BadInternalCall();
1421 return (unsigned PY_LONG_LONG)-1;
1422 }
Guido van Rossum1a8791e1998-08-04 22:46:29 +00001423
Antoine Pitrou7f14f0d2010-05-09 16:14:21 +00001424 v = (PyLongObject*)vv;
1425 switch(Py_SIZE(v)) {
1426 case 0: return 0;
1427 case 1: return v->ob_digit[0];
1428 }
Guido van Rossumddefaf32007-01-14 03:31:43 +00001429
Antoine Pitrou7f14f0d2010-05-09 16:14:21 +00001430 res = _PyLong_AsByteArray(
1431 (PyLongObject *)vv, (unsigned char *)&bytes,
1432 SIZEOF_LONG_LONG, IS_LITTLE_ENDIAN, 0);
Guido van Rossum1a8791e1998-08-04 22:46:29 +00001433
Antoine Pitrou7f14f0d2010-05-09 16:14:21 +00001434 /* Plan 9 can't handle PY_LONG_LONG in ? : expressions */
1435 if (res < 0)
1436 return (unsigned PY_LONG_LONG)res;
1437 else
1438 return bytes;
Guido van Rossum1a8791e1998-08-04 22:46:29 +00001439}
Tim Petersd1a7da62001-06-13 00:35:57 +00001440
Thomas Hellera4ea6032003-04-17 18:55:45 +00001441/* Get a C unsigned long int from a long int object, ignoring the high bits.
1442 Returns -1 and sets an error condition if an error occurs. */
1443
Guido van Rossumddefaf32007-01-14 03:31:43 +00001444static unsigned PY_LONG_LONG
1445_PyLong_AsUnsignedLongLongMask(PyObject *vv)
Thomas Hellera4ea6032003-04-17 18:55:45 +00001446{
Antoine Pitrou7f14f0d2010-05-09 16:14:21 +00001447 register PyLongObject *v;
1448 unsigned PY_LONG_LONG x;
1449 Py_ssize_t i;
1450 int sign;
Thomas Hellera4ea6032003-04-17 18:55:45 +00001451
Antoine Pitrou7f14f0d2010-05-09 16:14:21 +00001452 if (vv == NULL || !PyLong_Check(vv)) {
1453 PyErr_BadInternalCall();
1454 return (unsigned long) -1;
1455 }
1456 v = (PyLongObject *)vv;
1457 switch(Py_SIZE(v)) {
1458 case 0: return 0;
1459 case 1: return v->ob_digit[0];
1460 }
1461 i = Py_SIZE(v);
1462 sign = 1;
1463 x = 0;
1464 if (i < 0) {
1465 sign = -1;
1466 i = -i;
1467 }
1468 while (--i >= 0) {
1469 x = (x << PyLong_SHIFT) + v->ob_digit[i];
1470 }
1471 return x * sign;
Thomas Hellera4ea6032003-04-17 18:55:45 +00001472}
Guido van Rossumddefaf32007-01-14 03:31:43 +00001473
1474unsigned PY_LONG_LONG
1475PyLong_AsUnsignedLongLongMask(register PyObject *op)
1476{
Antoine Pitrou7f14f0d2010-05-09 16:14:21 +00001477 PyNumberMethods *nb;
1478 PyLongObject *lo;
1479 unsigned PY_LONG_LONG val;
Guido van Rossumddefaf32007-01-14 03:31:43 +00001480
Antoine Pitrou7f14f0d2010-05-09 16:14:21 +00001481 if (op && PyLong_Check(op))
1482 return _PyLong_AsUnsignedLongLongMask(op);
Guido van Rossumddefaf32007-01-14 03:31:43 +00001483
Antoine Pitrou7f14f0d2010-05-09 16:14:21 +00001484 if (op == NULL || (nb = op->ob_type->tp_as_number) == NULL ||
1485 nb->nb_int == NULL) {
1486 PyErr_SetString(PyExc_TypeError, "an integer is required");
1487 return (unsigned PY_LONG_LONG)-1;
1488 }
Guido van Rossumddefaf32007-01-14 03:31:43 +00001489
Antoine Pitrou7f14f0d2010-05-09 16:14:21 +00001490 lo = (PyLongObject*) (*nb->nb_int) (op);
1491 if (lo == NULL)
1492 return (unsigned PY_LONG_LONG)-1;
1493 if (PyLong_Check(lo)) {
1494 val = _PyLong_AsUnsignedLongLongMask((PyObject *)lo);
1495 Py_DECREF(lo);
1496 if (PyErr_Occurred())
1497 return (unsigned PY_LONG_LONG)-1;
1498 return val;
1499 }
1500 else
1501 {
1502 Py_DECREF(lo);
1503 PyErr_SetString(PyExc_TypeError,
1504 "nb_int should return int object");
1505 return (unsigned PY_LONG_LONG)-1;
1506 }
Guido van Rossumddefaf32007-01-14 03:31:43 +00001507}
Tim Petersd1a7da62001-06-13 00:35:57 +00001508#undef IS_LITTLE_ENDIAN
1509
Guido van Rossum1a8791e1998-08-04 22:46:29 +00001510#endif /* HAVE_LONG_LONG */
1511
Martin v. Löwisda86fcc2007-09-10 07:59:54 +00001512#define CHECK_BINOP(v,w) \
Antoine Pitrou7f14f0d2010-05-09 16:14:21 +00001513 if (!PyLong_Check(v) || !PyLong_Check(w)) { \
1514 Py_INCREF(Py_NotImplemented); \
1515 return Py_NotImplemented; \
1516 }
Neil Schemenauerba872e22001-01-04 01:46:03 +00001517
Mark Dickinson17e4fdd2009-03-23 18:44:57 +00001518/* bits_in_digit(d) returns the unique integer k such that 2**(k-1) <= d <
1519 2**k if d is nonzero, else 0. */
1520
1521static const unsigned char BitLengthTable[32] = {
Antoine Pitrou7f14f0d2010-05-09 16:14:21 +00001522 0, 1, 2, 2, 3, 3, 3, 3, 4, 4, 4, 4, 4, 4, 4, 4,
1523 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5
Mark Dickinson17e4fdd2009-03-23 18:44:57 +00001524};
1525
1526static int
1527bits_in_digit(digit d)
1528{
Antoine Pitrou7f14f0d2010-05-09 16:14:21 +00001529 int d_bits = 0;
1530 while (d >= 32) {
1531 d_bits += 6;
1532 d >>= 6;
1533 }
1534 d_bits += (int)BitLengthTable[d];
1535 return d_bits;
Mark Dickinson17e4fdd2009-03-23 18:44:57 +00001536}
1537
Tim Peters877a2122002-08-12 05:09:36 +00001538/* x[0:m] and y[0:n] are digit vectors, LSD first, m >= n required. x[0:n]
1539 * is modified in place, by adding y to it. Carries are propagated as far as
1540 * x[m-1], and the remaining carry (0 or 1) is returned.
1541 */
1542static digit
Martin v. Löwis18e16552006-02-15 17:27:45 +00001543v_iadd(digit *x, Py_ssize_t m, digit *y, Py_ssize_t n)
Tim Peters877a2122002-08-12 05:09:36 +00001544{
Antoine Pitrou7f14f0d2010-05-09 16:14:21 +00001545 Py_ssize_t i;
1546 digit carry = 0;
Tim Peters877a2122002-08-12 05:09:36 +00001547
Antoine Pitrou7f14f0d2010-05-09 16:14:21 +00001548 assert(m >= n);
1549 for (i = 0; i < n; ++i) {
1550 carry += x[i] + y[i];
1551 x[i] = carry & PyLong_MASK;
1552 carry >>= PyLong_SHIFT;
1553 assert((carry & 1) == carry);
1554 }
1555 for (; carry && i < m; ++i) {
1556 carry += x[i];
1557 x[i] = carry & PyLong_MASK;
1558 carry >>= PyLong_SHIFT;
1559 assert((carry & 1) == carry);
1560 }
1561 return carry;
Tim Peters877a2122002-08-12 05:09:36 +00001562}
1563
1564/* x[0:m] and y[0:n] are digit vectors, LSD first, m >= n required. x[0:n]
1565 * is modified in place, by subtracting y from it. Borrows are propagated as
1566 * far as x[m-1], and the remaining borrow (0 or 1) is returned.
1567 */
1568static digit
Martin v. Löwis18e16552006-02-15 17:27:45 +00001569v_isub(digit *x, Py_ssize_t m, digit *y, Py_ssize_t n)
Tim Peters877a2122002-08-12 05:09:36 +00001570{
Antoine Pitrou7f14f0d2010-05-09 16:14:21 +00001571 Py_ssize_t i;
1572 digit borrow = 0;
Tim Peters877a2122002-08-12 05:09:36 +00001573
Antoine Pitrou7f14f0d2010-05-09 16:14:21 +00001574 assert(m >= n);
1575 for (i = 0; i < n; ++i) {
1576 borrow = x[i] - y[i] - borrow;
1577 x[i] = borrow & PyLong_MASK;
1578 borrow >>= PyLong_SHIFT;
1579 borrow &= 1; /* keep only 1 sign bit */
1580 }
1581 for (; borrow && i < m; ++i) {
1582 borrow = x[i] - borrow;
1583 x[i] = borrow & PyLong_MASK;
1584 borrow >>= PyLong_SHIFT;
1585 borrow &= 1;
1586 }
1587 return borrow;
Tim Peters877a2122002-08-12 05:09:36 +00001588}
Neil Schemenauerba872e22001-01-04 01:46:03 +00001589
Mark Dickinson17e4fdd2009-03-23 18:44:57 +00001590/* Shift digit vector a[0:m] d bits left, with 0 <= d < PyLong_SHIFT. Put
1591 * result in z[0:m], and return the d bits shifted out of the top.
1592 */
1593static digit
1594v_lshift(digit *z, digit *a, Py_ssize_t m, int d)
Guido van Rossumedcc38a1991-05-05 20:09:44 +00001595{
Antoine Pitrou7f14f0d2010-05-09 16:14:21 +00001596 Py_ssize_t i;
1597 digit carry = 0;
Tim Peters5af4e6c2002-08-12 02:31:19 +00001598
Antoine Pitrou7f14f0d2010-05-09 16:14:21 +00001599 assert(0 <= d && d < PyLong_SHIFT);
1600 for (i=0; i < m; i++) {
1601 twodigits acc = (twodigits)a[i] << d | carry;
1602 z[i] = (digit)acc & PyLong_MASK;
1603 carry = (digit)(acc >> PyLong_SHIFT);
1604 }
1605 return carry;
Mark Dickinson17e4fdd2009-03-23 18:44:57 +00001606}
1607
1608/* Shift digit vector a[0:m] d bits right, with 0 <= d < PyLong_SHIFT. Put
1609 * result in z[0:m], and return the d bits shifted out of the bottom.
1610 */
1611static digit
1612v_rshift(digit *z, digit *a, Py_ssize_t m, int d)
1613{
Antoine Pitrou7f14f0d2010-05-09 16:14:21 +00001614 Py_ssize_t i;
1615 digit carry = 0;
1616 digit mask = ((digit)1 << d) - 1U;
Mark Dickinson17e4fdd2009-03-23 18:44:57 +00001617
Antoine Pitrou7f14f0d2010-05-09 16:14:21 +00001618 assert(0 <= d && d < PyLong_SHIFT);
1619 for (i=m; i-- > 0;) {
1620 twodigits acc = (twodigits)carry << PyLong_SHIFT | a[i];
1621 carry = (digit)acc & mask;
1622 z[i] = (digit)(acc >> d);
1623 }
1624 return carry;
Guido van Rossumedcc38a1991-05-05 20:09:44 +00001625}
1626
Tim Peters212e6142001-07-14 12:23:19 +00001627/* Divide long pin, w/ size digits, by non-zero digit n, storing quotient
1628 in pout, and returning the remainder. pin and pout point at the LSD.
1629 It's OK for pin == pout on entry, which saves oodles of mallocs/frees in
Guido van Rossumcd16bf62007-06-13 18:07:49 +00001630 _PyLong_Format, but that should be done with great care since longs are
Tim Peters212e6142001-07-14 12:23:19 +00001631 immutable. */
1632
1633static digit
Martin v. Löwis18e16552006-02-15 17:27:45 +00001634inplace_divrem1(digit *pout, digit *pin, Py_ssize_t size, digit n)
Tim Peters212e6142001-07-14 12:23:19 +00001635{
Antoine Pitrou7f14f0d2010-05-09 16:14:21 +00001636 twodigits rem = 0;
Tim Peters212e6142001-07-14 12:23:19 +00001637
Antoine Pitrou7f14f0d2010-05-09 16:14:21 +00001638 assert(n > 0 && n <= PyLong_MASK);
1639 pin += size;
1640 pout += size;
1641 while (--size >= 0) {
1642 digit hi;
1643 rem = (rem << PyLong_SHIFT) + *--pin;
1644 *--pout = hi = (digit)(rem / n);
1645 rem -= (twodigits)hi * n;
1646 }
1647 return (digit)rem;
Tim Peters212e6142001-07-14 12:23:19 +00001648}
1649
Guido van Rossumedcc38a1991-05-05 20:09:44 +00001650/* Divide a long integer by a digit, returning both the quotient
1651 (as function result) and the remainder (through *prem).
1652 The sign of a is ignored; n should not be zero. */
1653
Guido van Rossumc0b618a1997-05-02 03:12:38 +00001654static PyLongObject *
Tim Peters212e6142001-07-14 12:23:19 +00001655divrem1(PyLongObject *a, digit n, digit *prem)
Guido van Rossumedcc38a1991-05-05 20:09:44 +00001656{
Antoine Pitrou7f14f0d2010-05-09 16:14:21 +00001657 const Py_ssize_t size = ABS(Py_SIZE(a));
1658 PyLongObject *z;
Tim Peters5af4e6c2002-08-12 02:31:19 +00001659
Antoine Pitrou7f14f0d2010-05-09 16:14:21 +00001660 assert(n > 0 && n <= PyLong_MASK);
1661 z = _PyLong_New(size);
1662 if (z == NULL)
1663 return NULL;
1664 *prem = inplace_divrem1(z->ob_digit, a->ob_digit, size, n);
1665 return long_normalize(z);
Guido van Rossumedcc38a1991-05-05 20:09:44 +00001666}
1667
1668/* Convert a long int object to a string, using a given conversion base.
Guido van Rossum3d3037d1991-10-24 14:55:57 +00001669 Return a string object.
Guido van Rossumcd16bf62007-06-13 18:07:49 +00001670 If base is 2, 8 or 16, add the proper prefix '0b', '0o' or '0x'. */
Guido van Rossumedcc38a1991-05-05 20:09:44 +00001671
Guido van Rossumcd16bf62007-06-13 18:07:49 +00001672PyObject *
1673_PyLong_Format(PyObject *aa, int base)
Guido van Rossumedcc38a1991-05-05 20:09:44 +00001674{
Antoine Pitrou7f14f0d2010-05-09 16:14:21 +00001675 register PyLongObject *a = (PyLongObject *)aa;
1676 PyObject *str;
1677 Py_ssize_t i, sz;
1678 Py_ssize_t size_a;
1679 Py_UNICODE *p;
1680 int bits;
1681 char sign = '\0';
Guido van Rossume32e0141992-01-19 16:31:05 +00001682
Antoine Pitrou7f14f0d2010-05-09 16:14:21 +00001683 if (a == NULL || !PyLong_Check(a)) {
1684 PyErr_BadInternalCall();
1685 return NULL;
1686 }
1687 assert(base >= 2 && base <= 36);
1688 size_a = ABS(Py_SIZE(a));
Tim Peters5af4e6c2002-08-12 02:31:19 +00001689
Antoine Pitrou7f14f0d2010-05-09 16:14:21 +00001690 /* Compute a rough upper bound for the length of the string */
1691 i = base;
1692 bits = 0;
1693 while (i > 1) {
1694 ++bits;
1695 i >>= 1;
1696 }
1697 i = 5;
1698 /* ensure we don't get signed overflow in sz calculation */
1699 if (size_a > (PY_SSIZE_T_MAX - i) / PyLong_SHIFT) {
1700 PyErr_SetString(PyExc_OverflowError,
1701 "int is too large to format");
1702 return NULL;
1703 }
1704 sz = i + 1 + (size_a * PyLong_SHIFT - 1) / bits;
1705 assert(sz >= 0);
1706 str = PyUnicode_FromUnicode(NULL, sz);
1707 if (str == NULL)
1708 return NULL;
1709 p = PyUnicode_AS_UNICODE(str) + sz;
1710 *p = '\0';
1711 if (Py_SIZE(a) < 0)
1712 sign = '-';
Tim Peters5af4e6c2002-08-12 02:31:19 +00001713
Antoine Pitrou7f14f0d2010-05-09 16:14:21 +00001714 if (Py_SIZE(a) == 0) {
1715 *--p = '0';
1716 }
1717 else if ((base & (base - 1)) == 0) {
1718 /* JRH: special case for power-of-2 bases */
1719 twodigits accum = 0;
1720 int accumbits = 0; /* # of bits in accum */
1721 int basebits = 1; /* # of bits in base-1 */
1722 i = base;
1723 while ((i >>= 1) > 1)
1724 ++basebits;
Tim Peters586b2e32001-07-15 09:11:14 +00001725
Antoine Pitrou7f14f0d2010-05-09 16:14:21 +00001726 for (i = 0; i < size_a; ++i) {
1727 accum |= (twodigits)a->ob_digit[i] << accumbits;
1728 accumbits += PyLong_SHIFT;
1729 assert(accumbits >= basebits);
1730 do {
1731 char cdigit = (char)(accum & (base - 1));
1732 cdigit += (cdigit < 10) ? '0' : 'a'-10;
1733 assert(p > PyUnicode_AS_UNICODE(str));
1734 *--p = cdigit;
1735 accumbits -= basebits;
1736 accum >>= basebits;
1737 } while (i < size_a-1 ? accumbits >= basebits :
1738 accum > 0);
1739 }
1740 }
1741 else {
1742 /* Not 0, and base not a power of 2. Divide repeatedly by
1743 base, but for speed use the highest power of base that
1744 fits in a digit. */
1745 Py_ssize_t size = size_a;
1746 digit *pin = a->ob_digit;
1747 PyLongObject *scratch;
1748 /* powbasw <- largest power of base that fits in a digit. */
1749 digit powbase = base; /* powbase == base ** power */
1750 int power = 1;
1751 for (;;) {
1752 twodigits newpow = powbase * (twodigits)base;
1753 if (newpow >> PyLong_SHIFT)
1754 /* doesn't fit in a digit */
1755 break;
1756 powbase = (digit)newpow;
1757 ++power;
1758 }
Tim Peters212e6142001-07-14 12:23:19 +00001759
Antoine Pitrou7f14f0d2010-05-09 16:14:21 +00001760 /* Get a scratch area for repeated division. */
1761 scratch = _PyLong_New(size);
1762 if (scratch == NULL) {
1763 Py_DECREF(str);
1764 return NULL;
1765 }
Tim Peters212e6142001-07-14 12:23:19 +00001766
Antoine Pitrou7f14f0d2010-05-09 16:14:21 +00001767 /* Repeatedly divide by powbase. */
1768 do {
1769 int ntostore = power;
1770 digit rem = inplace_divrem1(scratch->ob_digit,
1771 pin, size, powbase);
1772 pin = scratch->ob_digit; /* no need to use a again */
1773 if (pin[size - 1] == 0)
1774 --size;
1775 SIGCHECK({
1776 Py_DECREF(scratch);
1777 Py_DECREF(str);
1778 return NULL;
1779 })
Tim Peters212e6142001-07-14 12:23:19 +00001780
Antoine Pitrou7f14f0d2010-05-09 16:14:21 +00001781 /* Break rem into digits. */
1782 assert(ntostore > 0);
1783 do {
1784 digit nextrem = (digit)(rem / base);
1785 char c = (char)(rem - nextrem * base);
1786 assert(p > PyUnicode_AS_UNICODE(str));
1787 c += (c < 10) ? '0' : 'a'-10;
1788 *--p = c;
1789 rem = nextrem;
1790 --ntostore;
1791 /* Termination is a bit delicate: must not
1792 store leading zeroes, so must get out if
1793 remaining quotient and rem are both 0. */
1794 } while (ntostore && (size || rem));
1795 } while (size != 0);
1796 Py_DECREF(scratch);
1797 }
Guido van Rossumbd3a5271998-08-11 15:04:47 +00001798
Antoine Pitrou7f14f0d2010-05-09 16:14:21 +00001799 if (base == 16) {
1800 *--p = 'x';
1801 *--p = '0';
1802 }
1803 else if (base == 8) {
1804 *--p = 'o';
1805 *--p = '0';
1806 }
1807 else if (base == 2) {
1808 *--p = 'b';
1809 *--p = '0';
1810 }
1811 else if (base != 10) {
1812 *--p = '#';
1813 *--p = '0' + base%10;
1814 if (base > 10)
1815 *--p = '0' + base/10;
1816 }
1817 if (sign)
1818 *--p = sign;
1819 if (p != PyUnicode_AS_UNICODE(str)) {
1820 Py_UNICODE *q = PyUnicode_AS_UNICODE(str);
1821 assert(p > q);
1822 do {
1823 } while ((*q++ = *p++) != '\0');
1824 q--;
1825 if (PyUnicode_Resize(&str,(Py_ssize_t) (q -
1826 PyUnicode_AS_UNICODE(str)))) {
1827 Py_DECREF(str);
1828 return NULL;
1829 }
1830 }
1831 return (PyObject *)str;
Guido van Rossumedcc38a1991-05-05 20:09:44 +00001832}
1833
Thomas Wouters477c8d52006-05-27 19:21:47 +00001834/* Table of digit values for 8-bit string -> integer conversion.
1835 * '0' maps to 0, ..., '9' maps to 9.
1836 * 'a' and 'A' map to 10, ..., 'z' and 'Z' map to 35.
1837 * All other indices map to 37.
1838 * Note that when converting a base B string, a char c is a legitimate
Martin v. Löwis9f2e3462007-07-21 17:22:18 +00001839 * base B digit iff _PyLong_DigitValue[Py_CHARPyLong_MASK(c)] < B.
Thomas Wouters477c8d52006-05-27 19:21:47 +00001840 */
Raymond Hettinger35631532009-01-09 03:58:09 +00001841unsigned char _PyLong_DigitValue[256] = {
Antoine Pitrou7f14f0d2010-05-09 16:14:21 +00001842 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37,
1843 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37,
1844 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37,
1845 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 37, 37, 37, 37, 37, 37,
1846 37, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24,
1847 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 37, 37, 37, 37, 37,
1848 37, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24,
1849 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 37, 37, 37, 37, 37,
1850 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37,
1851 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37,
1852 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37,
1853 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37,
1854 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37,
1855 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37,
1856 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37,
1857 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37,
Thomas Wouters477c8d52006-05-27 19:21:47 +00001858};
1859
1860/* *str points to the first digit in a string of base `base` digits. base
Tim Petersbf2674b2003-02-02 07:51:32 +00001861 * is a power of 2 (2, 4, 8, 16, or 32). *str is set to point to the first
1862 * non-digit (which may be *str!). A normalized long is returned.
1863 * The point to this routine is that it takes time linear in the number of
1864 * string characters.
1865 */
1866static PyLongObject *
1867long_from_binary_base(char **str, int base)
1868{
Antoine Pitrou7f14f0d2010-05-09 16:14:21 +00001869 char *p = *str;
1870 char *start = p;
1871 int bits_per_char;
1872 Py_ssize_t n;
1873 PyLongObject *z;
1874 twodigits accum;
1875 int bits_in_accum;
1876 digit *pdigit;
Tim Petersbf2674b2003-02-02 07:51:32 +00001877
Antoine Pitrou7f14f0d2010-05-09 16:14:21 +00001878 assert(base >= 2 && base <= 32 && (base & (base - 1)) == 0);
1879 n = base;
1880 for (bits_per_char = -1; n; ++bits_per_char)
1881 n >>= 1;
1882 /* n <- total # of bits needed, while setting p to end-of-string */
1883 while (_PyLong_DigitValue[Py_CHARMASK(*p)] < base)
1884 ++p;
1885 *str = p;
1886 /* n <- # of Python digits needed, = ceiling(n/PyLong_SHIFT). */
1887 n = (p - start) * bits_per_char + PyLong_SHIFT - 1;
1888 if (n / bits_per_char < p - start) {
1889 PyErr_SetString(PyExc_ValueError,
1890 "int string too large to convert");
1891 return NULL;
1892 }
1893 n = n / PyLong_SHIFT;
1894 z = _PyLong_New(n);
1895 if (z == NULL)
1896 return NULL;
1897 /* Read string from right, and fill in long from left; i.e.,
1898 * from least to most significant in both.
1899 */
1900 accum = 0;
1901 bits_in_accum = 0;
1902 pdigit = z->ob_digit;
1903 while (--p >= start) {
1904 int k = (int)_PyLong_DigitValue[Py_CHARMASK(*p)];
1905 assert(k >= 0 && k < base);
1906 accum |= (twodigits)k << bits_in_accum;
1907 bits_in_accum += bits_per_char;
1908 if (bits_in_accum >= PyLong_SHIFT) {
1909 *pdigit++ = (digit)(accum & PyLong_MASK);
1910 assert(pdigit - z->ob_digit <= n);
1911 accum >>= PyLong_SHIFT;
1912 bits_in_accum -= PyLong_SHIFT;
1913 assert(bits_in_accum < PyLong_SHIFT);
1914 }
1915 }
1916 if (bits_in_accum) {
1917 assert(bits_in_accum <= PyLong_SHIFT);
1918 *pdigit++ = (digit)accum;
1919 assert(pdigit - z->ob_digit <= n);
1920 }
1921 while (pdigit - z->ob_digit < n)
1922 *pdigit++ = 0;
1923 return long_normalize(z);
Tim Petersbf2674b2003-02-02 07:51:32 +00001924}
1925
Guido van Rossumc0b618a1997-05-02 03:12:38 +00001926PyObject *
Tim Peters9f688bf2000-07-07 15:53:28 +00001927PyLong_FromString(char *str, char **pend, int base)
Guido van Rossumeb1fafc1994-08-29 12:47:19 +00001928{
Antoine Pitrou7f14f0d2010-05-09 16:14:21 +00001929 int sign = 1, error_if_nonzero = 0;
1930 char *start, *orig_str = str;
1931 PyLongObject *z = NULL;
1932 PyObject *strobj;
1933 Py_ssize_t slen;
Tim Peters5af4e6c2002-08-12 02:31:19 +00001934
Antoine Pitrou7f14f0d2010-05-09 16:14:21 +00001935 if ((base != 0 && base < 2) || base > 36) {
1936 PyErr_SetString(PyExc_ValueError,
1937 "int() arg 2 must be >= 2 and <= 36");
1938 return NULL;
1939 }
1940 while (*str != '\0' && isspace(Py_CHARMASK(*str)))
1941 str++;
1942 if (*str == '+')
1943 ++str;
1944 else if (*str == '-') {
1945 ++str;
1946 sign = -1;
1947 }
1948 if (base == 0) {
1949 if (str[0] != '0')
1950 base = 10;
1951 else if (str[1] == 'x' || str[1] == 'X')
1952 base = 16;
1953 else if (str[1] == 'o' || str[1] == 'O')
1954 base = 8;
1955 else if (str[1] == 'b' || str[1] == 'B')
1956 base = 2;
1957 else {
1958 /* "old" (C-style) octal literal, now invalid.
1959 it might still be zero though */
1960 error_if_nonzero = 1;
1961 base = 10;
1962 }
1963 }
1964 if (str[0] == '0' &&
1965 ((base == 16 && (str[1] == 'x' || str[1] == 'X')) ||
1966 (base == 8 && (str[1] == 'o' || str[1] == 'O')) ||
1967 (base == 2 && (str[1] == 'b' || str[1] == 'B'))))
1968 str += 2;
Thomas Wouters477c8d52006-05-27 19:21:47 +00001969
Antoine Pitrou7f14f0d2010-05-09 16:14:21 +00001970 start = str;
1971 if ((base & (base - 1)) == 0)
1972 z = long_from_binary_base(&str, base);
1973 else {
Thomas Wouters477c8d52006-05-27 19:21:47 +00001974/***
1975Binary bases can be converted in time linear in the number of digits, because
1976Python's representation base is binary. Other bases (including decimal!) use
1977the simple quadratic-time algorithm below, complicated by some speed tricks.
Tim Peters5af4e6c2002-08-12 02:31:19 +00001978
Thomas Wouters477c8d52006-05-27 19:21:47 +00001979First some math: the largest integer that can be expressed in N base-B digits
1980is B**N-1. Consequently, if we have an N-digit input in base B, the worst-
1981case number of Python digits needed to hold it is the smallest integer n s.t.
1982
1983 BASE**n-1 >= B**N-1 [or, adding 1 to both sides]
1984 BASE**n >= B**N [taking logs to base BASE]
1985 n >= log(B**N)/log(BASE) = N * log(B)/log(BASE)
1986
1987The static array log_base_BASE[base] == log(base)/log(BASE) so we can compute
1988this quickly. A Python long with that much space is reserved near the start,
1989and the result is computed into it.
1990
1991The input string is actually treated as being in base base**i (i.e., i digits
1992are processed at a time), where two more static arrays hold:
1993
1994 convwidth_base[base] = the largest integer i such that base**i <= BASE
1995 convmultmax_base[base] = base ** convwidth_base[base]
1996
1997The first of these is the largest i such that i consecutive input digits
1998must fit in a single Python digit. The second is effectively the input
1999base we're really using.
2000
2001Viewing the input as a sequence <c0, c1, ..., c_n-1> of digits in base
2002convmultmax_base[base], the result is "simply"
2003
2004 (((c0*B + c1)*B + c2)*B + c3)*B + ... ))) + c_n-1
2005
2006where B = convmultmax_base[base].
Thomas Wouters4d70c3d2006-06-08 14:42:34 +00002007
2008Error analysis: as above, the number of Python digits `n` needed is worst-
2009case
2010
2011 n >= N * log(B)/log(BASE)
2012
2013where `N` is the number of input digits in base `B`. This is computed via
2014
2015 size_z = (Py_ssize_t)((scan - str) * log_base_BASE[base]) + 1;
2016
2017below. Two numeric concerns are how much space this can waste, and whether
2018the computed result can be too small. To be concrete, assume BASE = 2**15,
2019which is the default (and it's unlikely anyone changes that).
2020
2021Waste isn't a problem: provided the first input digit isn't 0, the difference
2022between the worst-case input with N digits and the smallest input with N
2023digits is about a factor of B, but B is small compared to BASE so at most
2024one allocated Python digit can remain unused on that count. If
2025N*log(B)/log(BASE) is mathematically an exact integer, then truncating that
2026and adding 1 returns a result 1 larger than necessary. However, that can't
2027happen: whenever B is a power of 2, long_from_binary_base() is called
2028instead, and it's impossible for B**i to be an integer power of 2**15 when
2029B is not a power of 2 (i.e., it's impossible for N*log(B)/log(BASE) to be
2030an exact integer when B is not a power of 2, since B**i has a prime factor
2031other than 2 in that case, but (2**15)**j's only prime factor is 2).
2032
2033The computed result can be too small if the true value of N*log(B)/log(BASE)
2034is a little bit larger than an exact integer, but due to roundoff errors (in
2035computing log(B), log(BASE), their quotient, and/or multiplying that by N)
2036yields a numeric result a little less than that integer. Unfortunately, "how
2037close can a transcendental function get to an integer over some range?"
2038questions are generally theoretically intractable. Computer analysis via
2039continued fractions is practical: expand log(B)/log(BASE) via continued
2040fractions, giving a sequence i/j of "the best" rational approximations. Then
2041j*log(B)/log(BASE) is approximately equal to (the integer) i. This shows that
2042we can get very close to being in trouble, but very rarely. For example,
204376573 is a denominator in one of the continued-fraction approximations to
2044log(10)/log(2**15), and indeed:
2045
2046 >>> log(10)/log(2**15)*76573
2047 16958.000000654003
2048
2049is very close to an integer. If we were working with IEEE single-precision,
2050rounding errors could kill us. Finding worst cases in IEEE double-precision
2051requires better-than-double-precision log() functions, and Tim didn't bother.
2052Instead the code checks to see whether the allocated space is enough as each
2053new Python digit is added, and copies the whole thing to a larger long if not.
2054This should happen extremely rarely, and in fact I don't have a test case
2055that triggers it(!). Instead the code was tested by artificially allocating
2056just 1 digit at the start, so that the copying code was exercised for every
2057digit beyond the first.
Thomas Wouters477c8d52006-05-27 19:21:47 +00002058***/
Antoine Pitrou7f14f0d2010-05-09 16:14:21 +00002059 register twodigits c; /* current input character */
2060 Py_ssize_t size_z;
2061 int i;
2062 int convwidth;
2063 twodigits convmultmax, convmult;
2064 digit *pz, *pzstop;
2065 char* scan;
Thomas Wouters477c8d52006-05-27 19:21:47 +00002066
Antoine Pitrou7f14f0d2010-05-09 16:14:21 +00002067 static double log_base_BASE[37] = {0.0e0,};
2068 static int convwidth_base[37] = {0,};
2069 static twodigits convmultmax_base[37] = {0,};
Thomas Wouters477c8d52006-05-27 19:21:47 +00002070
Antoine Pitrou7f14f0d2010-05-09 16:14:21 +00002071 if (log_base_BASE[base] == 0.0) {
2072 twodigits convmax = base;
2073 int i = 1;
Thomas Wouters477c8d52006-05-27 19:21:47 +00002074
Antoine Pitrou7f14f0d2010-05-09 16:14:21 +00002075 log_base_BASE[base] = log((double)base) /
2076 log((double)PyLong_BASE);
2077 for (;;) {
2078 twodigits next = convmax * base;
2079 if (next > PyLong_BASE)
2080 break;
2081 convmax = next;
2082 ++i;
2083 }
2084 convmultmax_base[base] = convmax;
2085 assert(i > 0);
2086 convwidth_base[base] = i;
2087 }
Thomas Wouters477c8d52006-05-27 19:21:47 +00002088
Antoine Pitrou7f14f0d2010-05-09 16:14:21 +00002089 /* Find length of the string of numeric characters. */
2090 scan = str;
2091 while (_PyLong_DigitValue[Py_CHARMASK(*scan)] < base)
2092 ++scan;
Thomas Wouters477c8d52006-05-27 19:21:47 +00002093
Antoine Pitrou7f14f0d2010-05-09 16:14:21 +00002094 /* Create a long object that can contain the largest possible
2095 * integer with this base and length. Note that there's no
2096 * need to initialize z->ob_digit -- no slot is read up before
2097 * being stored into.
2098 */
2099 size_z = (Py_ssize_t)((scan - str) * log_base_BASE[base]) + 1;
2100 /* Uncomment next line to test exceedingly rare copy code */
2101 /* size_z = 1; */
2102 assert(size_z > 0);
2103 z = _PyLong_New(size_z);
2104 if (z == NULL)
2105 return NULL;
2106 Py_SIZE(z) = 0;
Thomas Wouters477c8d52006-05-27 19:21:47 +00002107
Antoine Pitrou7f14f0d2010-05-09 16:14:21 +00002108 /* `convwidth` consecutive input digits are treated as a single
2109 * digit in base `convmultmax`.
2110 */
2111 convwidth = convwidth_base[base];
2112 convmultmax = convmultmax_base[base];
Thomas Wouters477c8d52006-05-27 19:21:47 +00002113
Antoine Pitrou7f14f0d2010-05-09 16:14:21 +00002114 /* Work ;-) */
2115 while (str < scan) {
2116 /* grab up to convwidth digits from the input string */
2117 c = (digit)_PyLong_DigitValue[Py_CHARMASK(*str++)];
2118 for (i = 1; i < convwidth && str != scan; ++i, ++str) {
2119 c = (twodigits)(c * base +
2120 (int)_PyLong_DigitValue[Py_CHARMASK(*str)]);
2121 assert(c < PyLong_BASE);
2122 }
Thomas Wouters477c8d52006-05-27 19:21:47 +00002123
Antoine Pitrou7f14f0d2010-05-09 16:14:21 +00002124 convmult = convmultmax;
2125 /* Calculate the shift only if we couldn't get
2126 * convwidth digits.
2127 */
2128 if (i != convwidth) {
2129 convmult = base;
2130 for ( ; i > 1; --i)
2131 convmult *= base;
2132 }
Thomas Wouters477c8d52006-05-27 19:21:47 +00002133
Antoine Pitrou7f14f0d2010-05-09 16:14:21 +00002134 /* Multiply z by convmult, and add c. */
2135 pz = z->ob_digit;
2136 pzstop = pz + Py_SIZE(z);
2137 for (; pz < pzstop; ++pz) {
2138 c += (twodigits)*pz * convmult;
2139 *pz = (digit)(c & PyLong_MASK);
2140 c >>= PyLong_SHIFT;
2141 }
2142 /* carry off the current end? */
2143 if (c) {
2144 assert(c < PyLong_BASE);
2145 if (Py_SIZE(z) < size_z) {
2146 *pz = (digit)c;
2147 ++Py_SIZE(z);
2148 }
2149 else {
2150 PyLongObject *tmp;
2151 /* Extremely rare. Get more space. */
2152 assert(Py_SIZE(z) == size_z);
2153 tmp = _PyLong_New(size_z + 1);
2154 if (tmp == NULL) {
2155 Py_DECREF(z);
2156 return NULL;
2157 }
2158 memcpy(tmp->ob_digit,
2159 z->ob_digit,
2160 sizeof(digit) * size_z);
2161 Py_DECREF(z);
2162 z = tmp;
2163 z->ob_digit[size_z] = (digit)c;
2164 ++size_z;
2165 }
2166 }
2167 }
2168 }
2169 if (z == NULL)
2170 return NULL;
2171 if (error_if_nonzero) {
2172 /* reset the base to 0, else the exception message
2173 doesn't make too much sense */
2174 base = 0;
2175 if (Py_SIZE(z) != 0)
2176 goto onError;
2177 /* there might still be other problems, therefore base
2178 remains zero here for the same reason */
2179 }
2180 if (str == start)
2181 goto onError;
2182 if (sign < 0)
2183 Py_SIZE(z) = -(Py_SIZE(z));
2184 while (*str && isspace(Py_CHARMASK(*str)))
2185 str++;
2186 if (*str != '\0')
2187 goto onError;
2188 if (pend)
2189 *pend = str;
2190 long_normalize(z);
2191 return (PyObject *) maybe_small_long(z);
Guido van Rossum9e896b32000-04-05 20:11:21 +00002192
2193 onError:
Antoine Pitrou7f14f0d2010-05-09 16:14:21 +00002194 Py_XDECREF(z);
2195 slen = strlen(orig_str) < 200 ? strlen(orig_str) : 200;
2196 strobj = PyUnicode_FromStringAndSize(orig_str, slen);
2197 if (strobj == NULL)
2198 return NULL;
2199 PyErr_Format(PyExc_ValueError,
2200 "invalid literal for int() with base %d: %R",
2201 base, strobj);
2202 Py_DECREF(strobj);
2203 return NULL;
Guido van Rossum9e896b32000-04-05 20:11:21 +00002204}
2205
2206PyObject *
Martin v. Löwis18e16552006-02-15 17:27:45 +00002207PyLong_FromUnicode(Py_UNICODE *u, Py_ssize_t length, int base)
Guido van Rossum9e896b32000-04-05 20:11:21 +00002208{
Antoine Pitrou7f14f0d2010-05-09 16:14:21 +00002209 PyObject *result;
2210 char *buffer = (char *)PyMem_MALLOC(length+1);
Guido van Rossum9e896b32000-04-05 20:11:21 +00002211
Antoine Pitrou7f14f0d2010-05-09 16:14:21 +00002212 if (buffer == NULL)
2213 return NULL;
Walter Dörwald07e14762002-11-06 16:15:14 +00002214
Antoine Pitrou7f14f0d2010-05-09 16:14:21 +00002215 if (PyUnicode_EncodeDecimal(u, length, buffer, NULL)) {
2216 PyMem_FREE(buffer);
2217 return NULL;
2218 }
2219 result = PyLong_FromString(buffer, NULL, base);
2220 PyMem_FREE(buffer);
2221 return result;
Guido van Rossumedcc38a1991-05-05 20:09:44 +00002222}
2223
Tim Peters9f688bf2000-07-07 15:53:28 +00002224/* forward */
Guido van Rossumc0b618a1997-05-02 03:12:38 +00002225static PyLongObject *x_divrem
Antoine Pitrou7f14f0d2010-05-09 16:14:21 +00002226 (PyLongObject *, PyLongObject *, PyLongObject **);
Guido van Rossumb43daf72007-08-01 18:08:08 +00002227static PyObject *long_long(PyObject *v);
Guido van Rossumedcc38a1991-05-05 20:09:44 +00002228
2229/* Long division with remainder, top-level routine */
2230
Guido van Rossume32e0141992-01-19 16:31:05 +00002231static int
Tim Peters9f688bf2000-07-07 15:53:28 +00002232long_divrem(PyLongObject *a, PyLongObject *b,
Antoine Pitrou7f14f0d2010-05-09 16:14:21 +00002233 PyLongObject **pdiv, PyLongObject **prem)
Guido van Rossumedcc38a1991-05-05 20:09:44 +00002234{
Antoine Pitrou7f14f0d2010-05-09 16:14:21 +00002235 Py_ssize_t size_a = ABS(Py_SIZE(a)), size_b = ABS(Py_SIZE(b));
2236 PyLongObject *z;
Tim Peters5af4e6c2002-08-12 02:31:19 +00002237
Antoine Pitrou7f14f0d2010-05-09 16:14:21 +00002238 if (size_b == 0) {
2239 PyErr_SetString(PyExc_ZeroDivisionError,
2240 "integer division or modulo by zero");
2241 return -1;
2242 }
2243 if (size_a < size_b ||
2244 (size_a == size_b &&
2245 a->ob_digit[size_a-1] < b->ob_digit[size_b-1])) {
2246 /* |a| < |b|. */
2247 *pdiv = (PyLongObject*)PyLong_FromLong(0);
2248 if (*pdiv == NULL)
2249 return -1;
2250 Py_INCREF(a);
2251 *prem = (PyLongObject *) a;
2252 return 0;
2253 }
2254 if (size_b == 1) {
2255 digit rem = 0;
2256 z = divrem1(a, b->ob_digit[0], &rem);
2257 if (z == NULL)
2258 return -1;
2259 *prem = (PyLongObject *) PyLong_FromLong((long)rem);
2260 if (*prem == NULL) {
2261 Py_DECREF(z);
2262 return -1;
2263 }
2264 }
2265 else {
2266 z = x_divrem(a, b, prem);
2267 if (z == NULL)
2268 return -1;
2269 }
2270 /* Set the signs.
2271 The quotient z has the sign of a*b;
2272 the remainder r has the sign of a,
2273 so a = b*z + r. */
2274 if ((Py_SIZE(a) < 0) != (Py_SIZE(b) < 0))
2275 NEGATE(z);
2276 if (Py_SIZE(a) < 0 && Py_SIZE(*prem) != 0)
2277 NEGATE(*prem);
2278 *pdiv = maybe_small_long(z);
2279 return 0;
Guido van Rossumedcc38a1991-05-05 20:09:44 +00002280}
2281
Mark Dickinson17e4fdd2009-03-23 18:44:57 +00002282/* Unsigned long division with remainder -- the algorithm. The arguments v1
2283 and w1 should satisfy 2 <= ABS(Py_SIZE(w1)) <= ABS(Py_SIZE(v1)). */
Guido van Rossumedcc38a1991-05-05 20:09:44 +00002284
Guido van Rossumc0b618a1997-05-02 03:12:38 +00002285static PyLongObject *
Tim Peters9f688bf2000-07-07 15:53:28 +00002286x_divrem(PyLongObject *v1, PyLongObject *w1, PyLongObject **prem)
Guido van Rossumedcc38a1991-05-05 20:09:44 +00002287{
Antoine Pitrou7f14f0d2010-05-09 16:14:21 +00002288 PyLongObject *v, *w, *a;
2289 Py_ssize_t i, k, size_v, size_w;
2290 int d;
2291 digit wm1, wm2, carry, q, r, vtop, *v0, *vk, *w0, *ak;
2292 twodigits vv;
2293 sdigit zhi;
2294 stwodigits z;
Tim Peters5af4e6c2002-08-12 02:31:19 +00002295
Antoine Pitrou7f14f0d2010-05-09 16:14:21 +00002296 /* We follow Knuth [The Art of Computer Programming, Vol. 2 (3rd
2297 edn.), section 4.3.1, Algorithm D], except that we don't explicitly
2298 handle the special case when the initial estimate q for a quotient
2299 digit is >= PyLong_BASE: the max value for q is PyLong_BASE+1, and
2300 that won't overflow a digit. */
Mark Dickinson17e4fdd2009-03-23 18:44:57 +00002301
Antoine Pitrou7f14f0d2010-05-09 16:14:21 +00002302 /* allocate space; w will also be used to hold the final remainder */
2303 size_v = ABS(Py_SIZE(v1));
2304 size_w = ABS(Py_SIZE(w1));
2305 assert(size_v >= size_w && size_w >= 2); /* Assert checks by div() */
2306 v = _PyLong_New(size_v+1);
2307 if (v == NULL) {
2308 *prem = NULL;
2309 return NULL;
2310 }
2311 w = _PyLong_New(size_w);
2312 if (w == NULL) {
2313 Py_DECREF(v);
2314 *prem = NULL;
2315 return NULL;
2316 }
Tim Peters5af4e6c2002-08-12 02:31:19 +00002317
Antoine Pitrou7f14f0d2010-05-09 16:14:21 +00002318 /* normalize: shift w1 left so that its top digit is >= PyLong_BASE/2.
2319 shift v1 left by the same amount. Results go into w and v. */
2320 d = PyLong_SHIFT - bits_in_digit(w1->ob_digit[size_w-1]);
2321 carry = v_lshift(w->ob_digit, w1->ob_digit, size_w, d);
2322 assert(carry == 0);
2323 carry = v_lshift(v->ob_digit, v1->ob_digit, size_v, d);
2324 if (carry != 0 || v->ob_digit[size_v-1] >= w->ob_digit[size_w-1]) {
2325 v->ob_digit[size_v] = carry;
2326 size_v++;
2327 }
Tim Peters5af4e6c2002-08-12 02:31:19 +00002328
Antoine Pitrou7f14f0d2010-05-09 16:14:21 +00002329 /* Now v->ob_digit[size_v-1] < w->ob_digit[size_w-1], so quotient has
2330 at most (and usually exactly) k = size_v - size_w digits. */
2331 k = size_v - size_w;
2332 assert(k >= 0);
2333 a = _PyLong_New(k);
2334 if (a == NULL) {
2335 Py_DECREF(w);
2336 Py_DECREF(v);
2337 *prem = NULL;
2338 return NULL;
2339 }
2340 v0 = v->ob_digit;
2341 w0 = w->ob_digit;
2342 wm1 = w0[size_w-1];
2343 wm2 = w0[size_w-2];
2344 for (vk = v0+k, ak = a->ob_digit + k; vk-- > v0;) {
2345 /* inner loop: divide vk[0:size_w+1] by w0[0:size_w], giving
2346 single-digit quotient q, remainder in vk[0:size_w]. */
Tim Peters5af4e6c2002-08-12 02:31:19 +00002347
Antoine Pitrou7f14f0d2010-05-09 16:14:21 +00002348 SIGCHECK({
2349 Py_DECREF(a);
2350 Py_DECREF(w);
2351 Py_DECREF(v);
2352 *prem = NULL;
2353 return NULL;
2354 })
Tim Peters5af4e6c2002-08-12 02:31:19 +00002355
Antoine Pitrou7f14f0d2010-05-09 16:14:21 +00002356 /* estimate quotient digit q; may overestimate by 1 (rare) */
2357 vtop = vk[size_w];
2358 assert(vtop <= wm1);
2359 vv = ((twodigits)vtop << PyLong_SHIFT) | vk[size_w-1];
2360 q = (digit)(vv / wm1);
2361 r = (digit)(vv - (twodigits)wm1 * q); /* r = vv % wm1 */
2362 while ((twodigits)wm2 * q > (((twodigits)r << PyLong_SHIFT)
2363 | vk[size_w-2])) {
2364 --q;
2365 r += wm1;
2366 if (r >= PyLong_BASE)
2367 break;
2368 }
2369 assert(q <= PyLong_BASE);
Tim Peters5af4e6c2002-08-12 02:31:19 +00002370
Antoine Pitrou7f14f0d2010-05-09 16:14:21 +00002371 /* subtract q*w0[0:size_w] from vk[0:size_w+1] */
2372 zhi = 0;
2373 for (i = 0; i < size_w; ++i) {
2374 /* invariants: -PyLong_BASE <= -q <= zhi <= 0;
2375 -PyLong_BASE * q <= z < PyLong_BASE */
2376 z = (sdigit)vk[i] + zhi -
2377 (stwodigits)q * (stwodigits)w0[i];
2378 vk[i] = (digit)z & PyLong_MASK;
2379 zhi = (sdigit)Py_ARITHMETIC_RIGHT_SHIFT(stwodigits,
2380 z, PyLong_SHIFT);
2381 }
Tim Peters5af4e6c2002-08-12 02:31:19 +00002382
Antoine Pitrou7f14f0d2010-05-09 16:14:21 +00002383 /* add w back if q was too large (this branch taken rarely) */
2384 assert((sdigit)vtop + zhi == -1 || (sdigit)vtop + zhi == 0);
2385 if ((sdigit)vtop + zhi < 0) {
2386 carry = 0;
2387 for (i = 0; i < size_w; ++i) {
2388 carry += vk[i] + w0[i];
2389 vk[i] = carry & PyLong_MASK;
2390 carry >>= PyLong_SHIFT;
2391 }
2392 --q;
2393 }
Tim Peters5af4e6c2002-08-12 02:31:19 +00002394
Antoine Pitrou7f14f0d2010-05-09 16:14:21 +00002395 /* store quotient digit */
2396 assert(q < PyLong_BASE);
2397 *--ak = q;
2398 }
Mark Dickinson17e4fdd2009-03-23 18:44:57 +00002399
Antoine Pitrou7f14f0d2010-05-09 16:14:21 +00002400 /* unshift remainder; we reuse w to store the result */
2401 carry = v_rshift(w0, v0, size_w, d);
2402 assert(carry==0);
2403 Py_DECREF(v);
Mark Dickinson17e4fdd2009-03-23 18:44:57 +00002404
Antoine Pitrou7f14f0d2010-05-09 16:14:21 +00002405 *prem = long_normalize(w);
2406 return long_normalize(a);
Guido van Rossumedcc38a1991-05-05 20:09:44 +00002407}
2408
2409/* Methods */
2410
2411static void
Tim Peters9f688bf2000-07-07 15:53:28 +00002412long_dealloc(PyObject *v)
Guido van Rossumedcc38a1991-05-05 20:09:44 +00002413{
Antoine Pitrou7f14f0d2010-05-09 16:14:21 +00002414 Py_TYPE(v)->tp_free(v);
Guido van Rossumedcc38a1991-05-05 20:09:44 +00002415}
2416
Guido van Rossumc0b618a1997-05-02 03:12:38 +00002417static PyObject *
Tim Peters9f688bf2000-07-07 15:53:28 +00002418long_repr(PyObject *v)
Guido van Rossumedcc38a1991-05-05 20:09:44 +00002419{
Antoine Pitrou7f14f0d2010-05-09 16:14:21 +00002420 return _PyLong_Format(v, 10);
Guido van Rossumedcc38a1991-05-05 20:09:44 +00002421}
2422
2423static int
Tim Peters9f688bf2000-07-07 15:53:28 +00002424long_compare(PyLongObject *a, PyLongObject *b)
Guido van Rossumedcc38a1991-05-05 20:09:44 +00002425{
Antoine Pitrou7f14f0d2010-05-09 16:14:21 +00002426 Py_ssize_t sign;
Tim Peters5af4e6c2002-08-12 02:31:19 +00002427
Antoine Pitrou7f14f0d2010-05-09 16:14:21 +00002428 if (Py_SIZE(a) != Py_SIZE(b)) {
2429 if (ABS(Py_SIZE(a)) == 0 && ABS(Py_SIZE(b)) == 0)
2430 sign = 0;
2431 else
2432 sign = Py_SIZE(a) - Py_SIZE(b);
2433 }
2434 else {
2435 Py_ssize_t i = ABS(Py_SIZE(a));
2436 while (--i >= 0 && a->ob_digit[i] == b->ob_digit[i])
2437 ;
2438 if (i < 0)
2439 sign = 0;
2440 else {
2441 sign = (sdigit)a->ob_digit[i] - (sdigit)b->ob_digit[i];
2442 if (Py_SIZE(a) < 0)
2443 sign = -sign;
2444 }
2445 }
2446 return sign < 0 ? -1 : sign > 0 ? 1 : 0;
Guido van Rossumedcc38a1991-05-05 20:09:44 +00002447}
2448
Antoine Pitrou51f3ef92008-12-20 13:14:23 +00002449#define TEST_COND(cond) \
Antoine Pitrou7f14f0d2010-05-09 16:14:21 +00002450 ((cond) ? Py_True : Py_False)
Antoine Pitrou51f3ef92008-12-20 13:14:23 +00002451
Guido van Rossum47b9ff62006-08-24 00:41:19 +00002452static PyObject *
2453long_richcompare(PyObject *self, PyObject *other, int op)
2454{
Antoine Pitrou7f14f0d2010-05-09 16:14:21 +00002455 int result;
2456 PyObject *v;
2457 CHECK_BINOP(self, other);
2458 if (self == other)
2459 result = 0;
2460 else
2461 result = long_compare((PyLongObject*)self, (PyLongObject*)other);
2462 /* Convert the return value to a Boolean */
2463 switch (op) {
2464 case Py_EQ:
2465 v = TEST_COND(result == 0);
2466 break;
2467 case Py_NE:
2468 v = TEST_COND(result != 0);
2469 break;
2470 case Py_LE:
2471 v = TEST_COND(result <= 0);
2472 break;
2473 case Py_GE:
2474 v = TEST_COND(result >= 0);
2475 break;
2476 case Py_LT:
2477 v = TEST_COND(result == -1);
2478 break;
2479 case Py_GT:
2480 v = TEST_COND(result == 1);
2481 break;
2482 default:
2483 PyErr_BadArgument();
2484 return NULL;
2485 }
2486 Py_INCREF(v);
2487 return v;
Guido van Rossum47b9ff62006-08-24 00:41:19 +00002488}
2489
Guido van Rossum9bfef441993-03-29 10:43:31 +00002490static long
Tim Peters9f688bf2000-07-07 15:53:28 +00002491long_hash(PyLongObject *v)
Guido van Rossum9bfef441993-03-29 10:43:31 +00002492{
Antoine Pitrou7f14f0d2010-05-09 16:14:21 +00002493 unsigned long x;
2494 Py_ssize_t i;
2495 int sign;
Guido van Rossum9bfef441993-03-29 10:43:31 +00002496
Antoine Pitrou7f14f0d2010-05-09 16:14:21 +00002497 /* This is designed so that Python ints and longs with the
2498 same value hash to the same value, otherwise comparisons
2499 of mapping keys will turn out weird */
2500 i = Py_SIZE(v);
2501 switch(i) {
2502 case -1: return v->ob_digit[0]==1 ? -2 : -(sdigit)v->ob_digit[0];
2503 case 0: return 0;
2504 case 1: return v->ob_digit[0];
2505 }
2506 sign = 1;
2507 x = 0;
2508 if (i < 0) {
2509 sign = -1;
2510 i = -(i);
2511 }
2512 /* The following loop produces a C unsigned long x such that x is
2513 congruent to the absolute value of v modulo ULONG_MAX. The
2514 resulting x is nonzero if and only if v is. */
2515 while (--i >= 0) {
2516 /* Force a native long #-bits (32 or 64) circular shift */
2517 x = (x >> (8*SIZEOF_LONG-PyLong_SHIFT)) | (x << PyLong_SHIFT);
2518 x += v->ob_digit[i];
2519 /* If the addition above overflowed we compensate by
2520 incrementing. This preserves the value modulo
2521 ULONG_MAX. */
2522 if (x < v->ob_digit[i])
2523 x++;
2524 }
2525 x = x * sign;
2526 if (x == (unsigned long)-1)
2527 x = (unsigned long)-2;
2528 return (long)x;
Guido van Rossum9bfef441993-03-29 10:43:31 +00002529}
2530
2531
Guido van Rossumedcc38a1991-05-05 20:09:44 +00002532/* Add the absolute values of two long integers. */
2533
Guido van Rossumc0b618a1997-05-02 03:12:38 +00002534static PyLongObject *
Tim Peters9f688bf2000-07-07 15:53:28 +00002535x_add(PyLongObject *a, PyLongObject *b)
Guido van Rossumedcc38a1991-05-05 20:09:44 +00002536{
Antoine Pitrou7f14f0d2010-05-09 16:14:21 +00002537 Py_ssize_t size_a = ABS(Py_SIZE(a)), size_b = ABS(Py_SIZE(b));
2538 PyLongObject *z;
2539 Py_ssize_t i;
2540 digit carry = 0;
Tim Peters69c2de32001-09-11 22:31:33 +00002541
Antoine Pitrou7f14f0d2010-05-09 16:14:21 +00002542 /* Ensure a is the larger of the two: */
2543 if (size_a < size_b) {
2544 { PyLongObject *temp = a; a = b; b = temp; }
2545 { Py_ssize_t size_temp = size_a;
2546 size_a = size_b;
2547 size_b = size_temp; }
2548 }
2549 z = _PyLong_New(size_a+1);
2550 if (z == NULL)
2551 return NULL;
2552 for (i = 0; i < size_b; ++i) {
2553 carry += a->ob_digit[i] + b->ob_digit[i];
2554 z->ob_digit[i] = carry & PyLong_MASK;
2555 carry >>= PyLong_SHIFT;
2556 }
2557 for (; i < size_a; ++i) {
2558 carry += a->ob_digit[i];
2559 z->ob_digit[i] = carry & PyLong_MASK;
2560 carry >>= PyLong_SHIFT;
2561 }
2562 z->ob_digit[i] = carry;
2563 return long_normalize(z);
Guido van Rossumedcc38a1991-05-05 20:09:44 +00002564}
2565
2566/* Subtract the absolute values of two integers. */
2567
Guido van Rossumc0b618a1997-05-02 03:12:38 +00002568static PyLongObject *
Tim Peters9f688bf2000-07-07 15:53:28 +00002569x_sub(PyLongObject *a, PyLongObject *b)
Guido van Rossumedcc38a1991-05-05 20:09:44 +00002570{
Antoine Pitrou7f14f0d2010-05-09 16:14:21 +00002571 Py_ssize_t size_a = ABS(Py_SIZE(a)), size_b = ABS(Py_SIZE(b));
2572 PyLongObject *z;
2573 Py_ssize_t i;
2574 int sign = 1;
2575 digit borrow = 0;
Tim Peters69c2de32001-09-11 22:31:33 +00002576
Antoine Pitrou7f14f0d2010-05-09 16:14:21 +00002577 /* Ensure a is the larger of the two: */
2578 if (size_a < size_b) {
2579 sign = -1;
2580 { PyLongObject *temp = a; a = b; b = temp; }
2581 { Py_ssize_t size_temp = size_a;
2582 size_a = size_b;
2583 size_b = size_temp; }
2584 }
2585 else if (size_a == size_b) {
2586 /* Find highest digit where a and b differ: */
2587 i = size_a;
2588 while (--i >= 0 && a->ob_digit[i] == b->ob_digit[i])
2589 ;
2590 if (i < 0)
2591 return (PyLongObject *)PyLong_FromLong(0);
2592 if (a->ob_digit[i] < b->ob_digit[i]) {
2593 sign = -1;
2594 { PyLongObject *temp = a; a = b; b = temp; }
2595 }
2596 size_a = size_b = i+1;
2597 }
2598 z = _PyLong_New(size_a);
2599 if (z == NULL)
2600 return NULL;
2601 for (i = 0; i < size_b; ++i) {
2602 /* The following assumes unsigned arithmetic
2603 works module 2**N for some N>PyLong_SHIFT. */
2604 borrow = a->ob_digit[i] - b->ob_digit[i] - borrow;
2605 z->ob_digit[i] = borrow & PyLong_MASK;
2606 borrow >>= PyLong_SHIFT;
2607 borrow &= 1; /* Keep only one sign bit */
2608 }
2609 for (; i < size_a; ++i) {
2610 borrow = a->ob_digit[i] - borrow;
2611 z->ob_digit[i] = borrow & PyLong_MASK;
2612 borrow >>= PyLong_SHIFT;
2613 borrow &= 1; /* Keep only one sign bit */
2614 }
2615 assert(borrow == 0);
2616 if (sign < 0)
2617 NEGATE(z);
2618 return long_normalize(z);
Guido van Rossumedcc38a1991-05-05 20:09:44 +00002619}
2620
Guido van Rossumc0b618a1997-05-02 03:12:38 +00002621static PyObject *
Martin v. Löwisda86fcc2007-09-10 07:59:54 +00002622long_add(PyLongObject *a, PyLongObject *b)
Guido van Rossum4c260ff1992-01-14 18:36:43 +00002623{
Antoine Pitrou7f14f0d2010-05-09 16:14:21 +00002624 PyLongObject *z;
Tim Peters69c2de32001-09-11 22:31:33 +00002625
Antoine Pitrou7f14f0d2010-05-09 16:14:21 +00002626 CHECK_BINOP(a, b);
Neil Schemenauerba872e22001-01-04 01:46:03 +00002627
Antoine Pitrou7f14f0d2010-05-09 16:14:21 +00002628 if (ABS(Py_SIZE(a)) <= 1 && ABS(Py_SIZE(b)) <= 1) {
2629 PyObject *result = PyLong_FromLong(MEDIUM_VALUE(a) +
2630 MEDIUM_VALUE(b));
2631 return result;
2632 }
2633 if (Py_SIZE(a) < 0) {
2634 if (Py_SIZE(b) < 0) {
2635 z = x_add(a, b);
2636 if (z != NULL && Py_SIZE(z) != 0)
2637 Py_SIZE(z) = -(Py_SIZE(z));
2638 }
2639 else
2640 z = x_sub(b, a);
2641 }
2642 else {
2643 if (Py_SIZE(b) < 0)
2644 z = x_sub(a, b);
2645 else
2646 z = x_add(a, b);
2647 }
2648 return (PyObject *)z;
Guido van Rossumedcc38a1991-05-05 20:09:44 +00002649}
2650
Guido van Rossumc0b618a1997-05-02 03:12:38 +00002651static PyObject *
Martin v. Löwisda86fcc2007-09-10 07:59:54 +00002652long_sub(PyLongObject *a, PyLongObject *b)
Guido van Rossum4c260ff1992-01-14 18:36:43 +00002653{
Antoine Pitrou7f14f0d2010-05-09 16:14:21 +00002654 PyLongObject *z;
Tim Peters5af4e6c2002-08-12 02:31:19 +00002655
Antoine Pitrou7f14f0d2010-05-09 16:14:21 +00002656 CHECK_BINOP(a, b);
Neil Schemenauerba872e22001-01-04 01:46:03 +00002657
Antoine Pitrou7f14f0d2010-05-09 16:14:21 +00002658 if (ABS(Py_SIZE(a)) <= 1 && ABS(Py_SIZE(b)) <= 1) {
2659 PyObject* r;
2660 r = PyLong_FromLong(MEDIUM_VALUE(a)-MEDIUM_VALUE(b));
2661 return r;
2662 }
2663 if (Py_SIZE(a) < 0) {
2664 if (Py_SIZE(b) < 0)
2665 z = x_sub(a, b);
2666 else
2667 z = x_add(a, b);
2668 if (z != NULL && Py_SIZE(z) != 0)
2669 Py_SIZE(z) = -(Py_SIZE(z));
2670 }
2671 else {
2672 if (Py_SIZE(b) < 0)
2673 z = x_add(a, b);
2674 else
2675 z = x_sub(a, b);
2676 }
2677 return (PyObject *)z;
Guido van Rossumedcc38a1991-05-05 20:09:44 +00002678}
2679
Tim Peters5af4e6c2002-08-12 02:31:19 +00002680/* Grade school multiplication, ignoring the signs.
2681 * Returns the absolute value of the product, or NULL if error.
2682 */
2683static PyLongObject *
2684x_mul(PyLongObject *a, PyLongObject *b)
Neil Schemenauerba872e22001-01-04 01:46:03 +00002685{
Antoine Pitrou7f14f0d2010-05-09 16:14:21 +00002686 PyLongObject *z;
2687 Py_ssize_t size_a = ABS(Py_SIZE(a));
2688 Py_ssize_t size_b = ABS(Py_SIZE(b));
2689 Py_ssize_t i;
Neil Schemenauerba872e22001-01-04 01:46:03 +00002690
Antoine Pitrou7f14f0d2010-05-09 16:14:21 +00002691 z = _PyLong_New(size_a + size_b);
2692 if (z == NULL)
2693 return NULL;
Tim Peters5af4e6c2002-08-12 02:31:19 +00002694
Antoine Pitrou7f14f0d2010-05-09 16:14:21 +00002695 memset(z->ob_digit, 0, Py_SIZE(z) * sizeof(digit));
2696 if (a == b) {
2697 /* Efficient squaring per HAC, Algorithm 14.16:
2698 * http://www.cacr.math.uwaterloo.ca/hac/about/chap14.pdf
2699 * Gives slightly less than a 2x speedup when a == b,
2700 * via exploiting that each entry in the multiplication
2701 * pyramid appears twice (except for the size_a squares).
2702 */
2703 for (i = 0; i < size_a; ++i) {
2704 twodigits carry;
2705 twodigits f = a->ob_digit[i];
2706 digit *pz = z->ob_digit + (i << 1);
2707 digit *pa = a->ob_digit + i + 1;
2708 digit *paend = a->ob_digit + size_a;
Tim Peters5af4e6c2002-08-12 02:31:19 +00002709
Antoine Pitrou7f14f0d2010-05-09 16:14:21 +00002710 SIGCHECK({
2711 Py_DECREF(z);
2712 return NULL;
2713 })
Tim Peters0973b992004-08-29 22:16:50 +00002714
Antoine Pitrou7f14f0d2010-05-09 16:14:21 +00002715 carry = *pz + f * f;
2716 *pz++ = (digit)(carry & PyLong_MASK);
2717 carry >>= PyLong_SHIFT;
2718 assert(carry <= PyLong_MASK);
Tim Peters0973b992004-08-29 22:16:50 +00002719
Antoine Pitrou7f14f0d2010-05-09 16:14:21 +00002720 /* Now f is added in twice in each column of the
2721 * pyramid it appears. Same as adding f<<1 once.
2722 */
2723 f <<= 1;
2724 while (pa < paend) {
2725 carry += *pz + *pa++ * f;
2726 *pz++ = (digit)(carry & PyLong_MASK);
2727 carry >>= PyLong_SHIFT;
2728 assert(carry <= (PyLong_MASK << 1));
2729 }
2730 if (carry) {
2731 carry += *pz;
2732 *pz++ = (digit)(carry & PyLong_MASK);
2733 carry >>= PyLong_SHIFT;
2734 }
2735 if (carry)
2736 *pz += (digit)(carry & PyLong_MASK);
2737 assert((carry >> PyLong_SHIFT) == 0);
2738 }
2739 }
2740 else { /* a is not the same as b -- gradeschool long mult */
2741 for (i = 0; i < size_a; ++i) {
2742 twodigits carry = 0;
2743 twodigits f = a->ob_digit[i];
2744 digit *pz = z->ob_digit + i;
2745 digit *pb = b->ob_digit;
2746 digit *pbend = b->ob_digit + size_b;
Tim Peters0973b992004-08-29 22:16:50 +00002747
Antoine Pitrou7f14f0d2010-05-09 16:14:21 +00002748 SIGCHECK({
2749 Py_DECREF(z);
2750 return NULL;
2751 })
Tim Peters0973b992004-08-29 22:16:50 +00002752
Antoine Pitrou7f14f0d2010-05-09 16:14:21 +00002753 while (pb < pbend) {
2754 carry += *pz + *pb++ * f;
2755 *pz++ = (digit)(carry & PyLong_MASK);
2756 carry >>= PyLong_SHIFT;
2757 assert(carry <= PyLong_MASK);
2758 }
2759 if (carry)
2760 *pz += (digit)(carry & PyLong_MASK);
2761 assert((carry >> PyLong_SHIFT) == 0);
2762 }
2763 }
2764 return long_normalize(z);
Tim Peters5af4e6c2002-08-12 02:31:19 +00002765}
2766
2767/* A helper for Karatsuba multiplication (k_mul).
2768 Takes a long "n" and an integer "size" representing the place to
2769 split, and sets low and high such that abs(n) == (high << size) + low,
2770 viewing the shift as being by digits. The sign bit is ignored, and
2771 the return values are >= 0.
2772 Returns 0 on success, -1 on failure.
2773*/
2774static int
Martin v. Löwis18e16552006-02-15 17:27:45 +00002775kmul_split(PyLongObject *n, Py_ssize_t size, PyLongObject **high, PyLongObject **low)
Tim Peters5af4e6c2002-08-12 02:31:19 +00002776{
Antoine Pitrou7f14f0d2010-05-09 16:14:21 +00002777 PyLongObject *hi, *lo;
2778 Py_ssize_t size_lo, size_hi;
2779 const Py_ssize_t size_n = ABS(Py_SIZE(n));
Tim Peters5af4e6c2002-08-12 02:31:19 +00002780
Antoine Pitrou7f14f0d2010-05-09 16:14:21 +00002781 size_lo = MIN(size_n, size);
2782 size_hi = size_n - size_lo;
Tim Peters5af4e6c2002-08-12 02:31:19 +00002783
Antoine Pitrou7f14f0d2010-05-09 16:14:21 +00002784 if ((hi = _PyLong_New(size_hi)) == NULL)
2785 return -1;
2786 if ((lo = _PyLong_New(size_lo)) == NULL) {
2787 Py_DECREF(hi);
2788 return -1;
2789 }
Tim Peters5af4e6c2002-08-12 02:31:19 +00002790
Antoine Pitrou7f14f0d2010-05-09 16:14:21 +00002791 memcpy(lo->ob_digit, n->ob_digit, size_lo * sizeof(digit));
2792 memcpy(hi->ob_digit, n->ob_digit + size_lo, size_hi * sizeof(digit));
Tim Peters5af4e6c2002-08-12 02:31:19 +00002793
Antoine Pitrou7f14f0d2010-05-09 16:14:21 +00002794 *high = long_normalize(hi);
2795 *low = long_normalize(lo);
2796 return 0;
Tim Peters5af4e6c2002-08-12 02:31:19 +00002797}
2798
Tim Peters60004642002-08-12 22:01:34 +00002799static PyLongObject *k_lopsided_mul(PyLongObject *a, PyLongObject *b);
2800
Tim Peters5af4e6c2002-08-12 02:31:19 +00002801/* Karatsuba multiplication. Ignores the input signs, and returns the
2802 * absolute value of the product (or NULL if error).
2803 * See Knuth Vol. 2 Chapter 4.3.3 (Pp. 294-295).
2804 */
2805static PyLongObject *
2806k_mul(PyLongObject *a, PyLongObject *b)
2807{
Antoine Pitrou7f14f0d2010-05-09 16:14:21 +00002808 Py_ssize_t asize = ABS(Py_SIZE(a));
2809 Py_ssize_t bsize = ABS(Py_SIZE(b));
2810 PyLongObject *ah = NULL;
2811 PyLongObject *al = NULL;
2812 PyLongObject *bh = NULL;
2813 PyLongObject *bl = NULL;
2814 PyLongObject *ret = NULL;
2815 PyLongObject *t1, *t2, *t3;
2816 Py_ssize_t shift; /* the number of digits we split off */
2817 Py_ssize_t i;
Tim Peters738eda72002-08-12 15:08:20 +00002818
Antoine Pitrou7f14f0d2010-05-09 16:14:21 +00002819 /* (ah*X+al)(bh*X+bl) = ah*bh*X*X + (ah*bl + al*bh)*X + al*bl
2820 * Let k = (ah+al)*(bh+bl) = ah*bl + al*bh + ah*bh + al*bl
2821 * Then the original product is
2822 * ah*bh*X*X + (k - ah*bh - al*bl)*X + al*bl
2823 * By picking X to be a power of 2, "*X" is just shifting, and it's
2824 * been reduced to 3 multiplies on numbers half the size.
2825 */
Tim Peters5af4e6c2002-08-12 02:31:19 +00002826
Antoine Pitrou7f14f0d2010-05-09 16:14:21 +00002827 /* We want to split based on the larger number; fiddle so that b
2828 * is largest.
2829 */
2830 if (asize > bsize) {
2831 t1 = a;
2832 a = b;
2833 b = t1;
Tim Peters738eda72002-08-12 15:08:20 +00002834
Antoine Pitrou7f14f0d2010-05-09 16:14:21 +00002835 i = asize;
2836 asize = bsize;
2837 bsize = i;
2838 }
Tim Peters5af4e6c2002-08-12 02:31:19 +00002839
Antoine Pitrou7f14f0d2010-05-09 16:14:21 +00002840 /* Use gradeschool math when either number is too small. */
2841 i = a == b ? KARATSUBA_SQUARE_CUTOFF : KARATSUBA_CUTOFF;
2842 if (asize <= i) {
2843 if (asize == 0)
2844 return (PyLongObject *)PyLong_FromLong(0);
2845 else
2846 return x_mul(a, b);
2847 }
Tim Peters5af4e6c2002-08-12 02:31:19 +00002848
Antoine Pitrou7f14f0d2010-05-09 16:14:21 +00002849 /* If a is small compared to b, splitting on b gives a degenerate
2850 * case with ah==0, and Karatsuba may be (even much) less efficient
2851 * than "grade school" then. However, we can still win, by viewing
2852 * b as a string of "big digits", each of width a->ob_size. That
2853 * leads to a sequence of balanced calls to k_mul.
2854 */
2855 if (2 * asize <= bsize)
2856 return k_lopsided_mul(a, b);
Tim Peters60004642002-08-12 22:01:34 +00002857
Antoine Pitrou7f14f0d2010-05-09 16:14:21 +00002858 /* Split a & b into hi & lo pieces. */
2859 shift = bsize >> 1;
2860 if (kmul_split(a, shift, &ah, &al) < 0) goto fail;
2861 assert(Py_SIZE(ah) > 0); /* the split isn't degenerate */
Tim Petersd6974a52002-08-13 20:37:51 +00002862
Antoine Pitrou7f14f0d2010-05-09 16:14:21 +00002863 if (a == b) {
2864 bh = ah;
2865 bl = al;
2866 Py_INCREF(bh);
2867 Py_INCREF(bl);
2868 }
2869 else if (kmul_split(b, shift, &bh, &bl) < 0) goto fail;
Tim Peters5af4e6c2002-08-12 02:31:19 +00002870
Antoine Pitrou7f14f0d2010-05-09 16:14:21 +00002871 /* The plan:
2872 * 1. Allocate result space (asize + bsize digits: that's always
2873 * enough).
2874 * 2. Compute ah*bh, and copy into result at 2*shift.
2875 * 3. Compute al*bl, and copy into result at 0. Note that this
2876 * can't overlap with #2.
2877 * 4. Subtract al*bl from the result, starting at shift. This may
2878 * underflow (borrow out of the high digit), but we don't care:
2879 * we're effectively doing unsigned arithmetic mod
2880 * BASE**(sizea + sizeb), and so long as the *final* result fits,
2881 * borrows and carries out of the high digit can be ignored.
2882 * 5. Subtract ah*bh from the result, starting at shift.
2883 * 6. Compute (ah+al)*(bh+bl), and add it into the result starting
2884 * at shift.
2885 */
Tim Petersd64c1de2002-08-12 17:36:03 +00002886
Antoine Pitrou7f14f0d2010-05-09 16:14:21 +00002887 /* 1. Allocate result space. */
2888 ret = _PyLong_New(asize + bsize);
2889 if (ret == NULL) goto fail;
Tim Peters5af4e6c2002-08-12 02:31:19 +00002890#ifdef Py_DEBUG
Antoine Pitrou7f14f0d2010-05-09 16:14:21 +00002891 /* Fill with trash, to catch reference to uninitialized digits. */
2892 memset(ret->ob_digit, 0xDF, Py_SIZE(ret) * sizeof(digit));
Tim Peters5af4e6c2002-08-12 02:31:19 +00002893#endif
Tim Peters44121a62002-08-12 06:17:58 +00002894
Antoine Pitrou7f14f0d2010-05-09 16:14:21 +00002895 /* 2. t1 <- ah*bh, and copy into high digits of result. */
2896 if ((t1 = k_mul(ah, bh)) == NULL) goto fail;
2897 assert(Py_SIZE(t1) >= 0);
2898 assert(2*shift + Py_SIZE(t1) <= Py_SIZE(ret));
2899 memcpy(ret->ob_digit + 2*shift, t1->ob_digit,
2900 Py_SIZE(t1) * sizeof(digit));
Tim Peters738eda72002-08-12 15:08:20 +00002901
Antoine Pitrou7f14f0d2010-05-09 16:14:21 +00002902 /* Zero-out the digits higher than the ah*bh copy. */
2903 i = Py_SIZE(ret) - 2*shift - Py_SIZE(t1);
2904 if (i)
2905 memset(ret->ob_digit + 2*shift + Py_SIZE(t1), 0,
2906 i * sizeof(digit));
Tim Peters5af4e6c2002-08-12 02:31:19 +00002907
Antoine Pitrou7f14f0d2010-05-09 16:14:21 +00002908 /* 3. t2 <- al*bl, and copy into the low digits. */
2909 if ((t2 = k_mul(al, bl)) == NULL) {
2910 Py_DECREF(t1);
2911 goto fail;
2912 }
2913 assert(Py_SIZE(t2) >= 0);
2914 assert(Py_SIZE(t2) <= 2*shift); /* no overlap with high digits */
2915 memcpy(ret->ob_digit, t2->ob_digit, Py_SIZE(t2) * sizeof(digit));
Tim Peters5af4e6c2002-08-12 02:31:19 +00002916
Antoine Pitrou7f14f0d2010-05-09 16:14:21 +00002917 /* Zero out remaining digits. */
2918 i = 2*shift - Py_SIZE(t2); /* number of uninitialized digits */
2919 if (i)
2920 memset(ret->ob_digit + Py_SIZE(t2), 0, i * sizeof(digit));
Tim Peters5af4e6c2002-08-12 02:31:19 +00002921
Antoine Pitrou7f14f0d2010-05-09 16:14:21 +00002922 /* 4 & 5. Subtract ah*bh (t1) and al*bl (t2). We do al*bl first
2923 * because it's fresher in cache.
2924 */
2925 i = Py_SIZE(ret) - shift; /* # digits after shift */
2926 (void)v_isub(ret->ob_digit + shift, i, t2->ob_digit, Py_SIZE(t2));
2927 Py_DECREF(t2);
Tim Peters738eda72002-08-12 15:08:20 +00002928
Antoine Pitrou7f14f0d2010-05-09 16:14:21 +00002929 (void)v_isub(ret->ob_digit + shift, i, t1->ob_digit, Py_SIZE(t1));
2930 Py_DECREF(t1);
Tim Peters738eda72002-08-12 15:08:20 +00002931
Antoine Pitrou7f14f0d2010-05-09 16:14:21 +00002932 /* 6. t3 <- (ah+al)(bh+bl), and add into result. */
2933 if ((t1 = x_add(ah, al)) == NULL) goto fail;
2934 Py_DECREF(ah);
2935 Py_DECREF(al);
2936 ah = al = NULL;
Tim Peters5af4e6c2002-08-12 02:31:19 +00002937
Antoine Pitrou7f14f0d2010-05-09 16:14:21 +00002938 if (a == b) {
2939 t2 = t1;
2940 Py_INCREF(t2);
2941 }
2942 else if ((t2 = x_add(bh, bl)) == NULL) {
2943 Py_DECREF(t1);
2944 goto fail;
2945 }
2946 Py_DECREF(bh);
2947 Py_DECREF(bl);
2948 bh = bl = NULL;
Tim Peters5af4e6c2002-08-12 02:31:19 +00002949
Antoine Pitrou7f14f0d2010-05-09 16:14:21 +00002950 t3 = k_mul(t1, t2);
2951 Py_DECREF(t1);
2952 Py_DECREF(t2);
2953 if (t3 == NULL) goto fail;
2954 assert(Py_SIZE(t3) >= 0);
Tim Peters5af4e6c2002-08-12 02:31:19 +00002955
Antoine Pitrou7f14f0d2010-05-09 16:14:21 +00002956 /* Add t3. It's not obvious why we can't run out of room here.
2957 * See the (*) comment after this function.
2958 */
2959 (void)v_iadd(ret->ob_digit + shift, i, t3->ob_digit, Py_SIZE(t3));
2960 Py_DECREF(t3);
Tim Peters5af4e6c2002-08-12 02:31:19 +00002961
Antoine Pitrou7f14f0d2010-05-09 16:14:21 +00002962 return long_normalize(ret);
Tim Peters5af4e6c2002-08-12 02:31:19 +00002963
2964 fail:
Antoine Pitrou7f14f0d2010-05-09 16:14:21 +00002965 Py_XDECREF(ret);
2966 Py_XDECREF(ah);
2967 Py_XDECREF(al);
2968 Py_XDECREF(bh);
2969 Py_XDECREF(bl);
2970 return NULL;
Tim Peters5af4e6c2002-08-12 02:31:19 +00002971}
2972
Tim Petersd6974a52002-08-13 20:37:51 +00002973/* (*) Why adding t3 can't "run out of room" above.
2974
Tim Petersab86c2b2002-08-15 20:06:00 +00002975Let f(x) mean the floor of x and c(x) mean the ceiling of x. Some facts
2976to start with:
Tim Petersd6974a52002-08-13 20:37:51 +00002977
Tim Petersab86c2b2002-08-15 20:06:00 +000029781. For any integer i, i = c(i/2) + f(i/2). In particular,
2979 bsize = c(bsize/2) + f(bsize/2).
29802. shift = f(bsize/2)
29813. asize <= bsize
29824. Since we call k_lopsided_mul if asize*2 <= bsize, asize*2 > bsize in this
2983 routine, so asize > bsize/2 >= f(bsize/2) in this routine.
Tim Petersd6974a52002-08-13 20:37:51 +00002984
Tim Petersab86c2b2002-08-15 20:06:00 +00002985We allocated asize + bsize result digits, and add t3 into them at an offset
2986of shift. This leaves asize+bsize-shift allocated digit positions for t3
2987to fit into, = (by #1 and #2) asize + f(bsize/2) + c(bsize/2) - f(bsize/2) =
2988asize + c(bsize/2) available digit positions.
Tim Petersd6974a52002-08-13 20:37:51 +00002989
Tim Petersab86c2b2002-08-15 20:06:00 +00002990bh has c(bsize/2) digits, and bl at most f(size/2) digits. So bh+hl has
2991at most c(bsize/2) digits + 1 bit.
Tim Petersd6974a52002-08-13 20:37:51 +00002992
Tim Petersab86c2b2002-08-15 20:06:00 +00002993If asize == bsize, ah has c(bsize/2) digits, else ah has at most f(bsize/2)
2994digits, and al has at most f(bsize/2) digits in any case. So ah+al has at
2995most (asize == bsize ? c(bsize/2) : f(bsize/2)) digits + 1 bit.
Tim Petersd6974a52002-08-13 20:37:51 +00002996
Tim Petersab86c2b2002-08-15 20:06:00 +00002997The product (ah+al)*(bh+bl) therefore has at most
Tim Petersd6974a52002-08-13 20:37:51 +00002998
Tim Petersab86c2b2002-08-15 20:06:00 +00002999 c(bsize/2) + (asize == bsize ? c(bsize/2) : f(bsize/2)) digits + 2 bits
Tim Petersd6974a52002-08-13 20:37:51 +00003000
Tim Petersab86c2b2002-08-15 20:06:00 +00003001and we have asize + c(bsize/2) available digit positions. We need to show
3002this is always enough. An instance of c(bsize/2) cancels out in both, so
3003the question reduces to whether asize digits is enough to hold
3004(asize == bsize ? c(bsize/2) : f(bsize/2)) digits + 2 bits. If asize < bsize,
3005then we're asking whether asize digits >= f(bsize/2) digits + 2 bits. By #4,
3006asize 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 +00003007digit is enough to hold 2 bits. This is so since PyLong_SHIFT=15 >= 2. If
Tim Petersab86c2b2002-08-15 20:06:00 +00003008asize == bsize, then we're asking whether bsize digits is enough to hold
Tim Peterse417de02002-08-15 20:10:45 +00003009c(bsize/2) digits + 2 bits, or equivalently (by #1) whether f(bsize/2) digits
3010is enough to hold 2 bits. This is so if bsize >= 2, which holds because
3011bsize >= KARATSUBA_CUTOFF >= 2.
Tim Peters8e966ee2002-08-14 16:36:23 +00003012
Tim Peters48d52c02002-08-14 17:07:32 +00003013Note that since there's always enough room for (ah+al)*(bh+bl), and that's
3014clearly >= each of ah*bh and al*bl, there's always enough room to subtract
3015ah*bh and al*bl too.
Tim Petersd6974a52002-08-13 20:37:51 +00003016*/
3017
Tim Peters60004642002-08-12 22:01:34 +00003018/* b has at least twice the digits of a, and a is big enough that Karatsuba
3019 * would pay off *if* the inputs had balanced sizes. View b as a sequence
3020 * of slices, each with a->ob_size digits, and multiply the slices by a,
3021 * one at a time. This gives k_mul balanced inputs to work with, and is
3022 * also cache-friendly (we compute one double-width slice of the result
3023 * at a time, then move on, never bactracking except for the helpful
3024 * single-width slice overlap between successive partial sums).
3025 */
3026static PyLongObject *
3027k_lopsided_mul(PyLongObject *a, PyLongObject *b)
3028{
Antoine Pitrou7f14f0d2010-05-09 16:14:21 +00003029 const Py_ssize_t asize = ABS(Py_SIZE(a));
3030 Py_ssize_t bsize = ABS(Py_SIZE(b));
3031 Py_ssize_t nbdone; /* # of b digits already multiplied */
3032 PyLongObject *ret;
3033 PyLongObject *bslice = NULL;
Tim Peters60004642002-08-12 22:01:34 +00003034
Antoine Pitrou7f14f0d2010-05-09 16:14:21 +00003035 assert(asize > KARATSUBA_CUTOFF);
3036 assert(2 * asize <= bsize);
Tim Peters60004642002-08-12 22:01:34 +00003037
Antoine Pitrou7f14f0d2010-05-09 16:14:21 +00003038 /* Allocate result space, and zero it out. */
3039 ret = _PyLong_New(asize + bsize);
3040 if (ret == NULL)
3041 return NULL;
3042 memset(ret->ob_digit, 0, Py_SIZE(ret) * sizeof(digit));
Tim Peters60004642002-08-12 22:01:34 +00003043
Antoine Pitrou7f14f0d2010-05-09 16:14:21 +00003044 /* Successive slices of b are copied into bslice. */
3045 bslice = _PyLong_New(asize);
3046 if (bslice == NULL)
3047 goto fail;
Tim Peters60004642002-08-12 22:01:34 +00003048
Antoine Pitrou7f14f0d2010-05-09 16:14:21 +00003049 nbdone = 0;
3050 while (bsize > 0) {
3051 PyLongObject *product;
3052 const Py_ssize_t nbtouse = MIN(bsize, asize);
Tim Peters60004642002-08-12 22:01:34 +00003053
Antoine Pitrou7f14f0d2010-05-09 16:14:21 +00003054 /* Multiply the next slice of b by a. */
3055 memcpy(bslice->ob_digit, b->ob_digit + nbdone,
3056 nbtouse * sizeof(digit));
3057 Py_SIZE(bslice) = nbtouse;
3058 product = k_mul(a, bslice);
3059 if (product == NULL)
3060 goto fail;
Tim Peters60004642002-08-12 22:01:34 +00003061
Antoine Pitrou7f14f0d2010-05-09 16:14:21 +00003062 /* Add into result. */
3063 (void)v_iadd(ret->ob_digit + nbdone, Py_SIZE(ret) - nbdone,
3064 product->ob_digit, Py_SIZE(product));
3065 Py_DECREF(product);
Tim Peters60004642002-08-12 22:01:34 +00003066
Antoine Pitrou7f14f0d2010-05-09 16:14:21 +00003067 bsize -= nbtouse;
3068 nbdone += nbtouse;
3069 }
Tim Peters60004642002-08-12 22:01:34 +00003070
Antoine Pitrou7f14f0d2010-05-09 16:14:21 +00003071 Py_DECREF(bslice);
3072 return long_normalize(ret);
Tim Peters60004642002-08-12 22:01:34 +00003073
3074 fail:
Antoine Pitrou7f14f0d2010-05-09 16:14:21 +00003075 Py_DECREF(ret);
3076 Py_XDECREF(bslice);
3077 return NULL;
Tim Peters60004642002-08-12 22:01:34 +00003078}
Tim Peters5af4e6c2002-08-12 02:31:19 +00003079
3080static PyObject *
Martin v. Löwisda86fcc2007-09-10 07:59:54 +00003081long_mul(PyLongObject *a, PyLongObject *b)
Tim Peters5af4e6c2002-08-12 02:31:19 +00003082{
Antoine Pitrou7f14f0d2010-05-09 16:14:21 +00003083 PyLongObject *z;
Tim Peters5af4e6c2002-08-12 02:31:19 +00003084
Antoine Pitrou7f14f0d2010-05-09 16:14:21 +00003085 CHECK_BINOP(a, b);
Tim Peters5af4e6c2002-08-12 02:31:19 +00003086
Antoine Pitrou7f14f0d2010-05-09 16:14:21 +00003087 /* fast path for single-digit multiplication */
3088 if (ABS(Py_SIZE(a)) <= 1 && ABS(Py_SIZE(b)) <= 1) {
3089 stwodigits v = (stwodigits)(MEDIUM_VALUE(a)) * MEDIUM_VALUE(b);
Mark Dickinsonbd792642009-03-18 20:06:12 +00003090#ifdef HAVE_LONG_LONG
Antoine Pitrou7f14f0d2010-05-09 16:14:21 +00003091 return PyLong_FromLongLong((PY_LONG_LONG)v);
Mark Dickinsonbd792642009-03-18 20:06:12 +00003092#else
Antoine Pitrou7f14f0d2010-05-09 16:14:21 +00003093 /* if we don't have long long then we're almost certainly
3094 using 15-bit digits, so v will fit in a long. In the
3095 unlikely event that we're using 30-bit digits on a platform
3096 without long long, a large v will just cause us to fall
3097 through to the general multiplication code below. */
3098 if (v >= LONG_MIN && v <= LONG_MAX)
3099 return PyLong_FromLong((long)v);
Mark Dickinsonbd792642009-03-18 20:06:12 +00003100#endif
Antoine Pitrou7f14f0d2010-05-09 16:14:21 +00003101 }
Guido van Rossumddefaf32007-01-14 03:31:43 +00003102
Antoine Pitrou7f14f0d2010-05-09 16:14:21 +00003103 z = k_mul(a, b);
3104 /* Negate if exactly one of the inputs is negative. */
3105 if (((Py_SIZE(a) ^ Py_SIZE(b)) < 0) && z)
3106 NEGATE(z);
3107 return (PyObject *)z;
Guido van Rossumedcc38a1991-05-05 20:09:44 +00003108}
3109
Guido van Rossume32e0141992-01-19 16:31:05 +00003110/* The / and % operators are now defined in terms of divmod().
3111 The expression a mod b has the value a - b*floor(a/b).
3112 The long_divrem function gives the remainder after division of
Guido van Rossumedcc38a1991-05-05 20:09:44 +00003113 |a| by |b|, with the sign of a. This is also expressed
3114 as a - b*trunc(a/b), if trunc truncates towards zero.
3115 Some examples:
Antoine Pitrou7f14f0d2010-05-09 16:14:21 +00003116 a b a rem b a mod b
3117 13 10 3 3
3118 -13 10 -3 7
3119 13 -10 3 -7
3120 -13 -10 -3 -3
Guido van Rossumedcc38a1991-05-05 20:09:44 +00003121 So, to get from rem to mod, we have to add b if a and b
Guido van Rossum23d6f0e1991-05-14 12:06:49 +00003122 have different signs. We then subtract one from the 'div'
3123 part of the outcome to keep the invariant intact. */
Guido van Rossumedcc38a1991-05-05 20:09:44 +00003124
Tim Peters47e52ee2004-08-30 02:44:38 +00003125/* Compute
3126 * *pdiv, *pmod = divmod(v, w)
3127 * NULL can be passed for pdiv or pmod, in which case that part of
3128 * the result is simply thrown away. The caller owns a reference to
3129 * each of these it requests (does not pass NULL for).
3130 */
Guido van Rossume32e0141992-01-19 16:31:05 +00003131static int
Tim Peters5af4e6c2002-08-12 02:31:19 +00003132l_divmod(PyLongObject *v, PyLongObject *w,
Antoine Pitrou7f14f0d2010-05-09 16:14:21 +00003133 PyLongObject **pdiv, PyLongObject **pmod)
Guido van Rossume32e0141992-01-19 16:31:05 +00003134{
Antoine Pitrou7f14f0d2010-05-09 16:14:21 +00003135 PyLongObject *div, *mod;
Tim Peters5af4e6c2002-08-12 02:31:19 +00003136
Antoine Pitrou7f14f0d2010-05-09 16:14:21 +00003137 if (long_divrem(v, w, &div, &mod) < 0)
3138 return -1;
3139 if ((Py_SIZE(mod) < 0 && Py_SIZE(w) > 0) ||
3140 (Py_SIZE(mod) > 0 && Py_SIZE(w) < 0)) {
3141 PyLongObject *temp;
3142 PyLongObject *one;
3143 temp = (PyLongObject *) long_add(mod, w);
3144 Py_DECREF(mod);
3145 mod = temp;
3146 if (mod == NULL) {
3147 Py_DECREF(div);
3148 return -1;
3149 }
3150 one = (PyLongObject *) PyLong_FromLong(1L);
3151 if (one == NULL ||
3152 (temp = (PyLongObject *) long_sub(div, one)) == NULL) {
3153 Py_DECREF(mod);
3154 Py_DECREF(div);
3155 Py_XDECREF(one);
3156 return -1;
3157 }
3158 Py_DECREF(one);
3159 Py_DECREF(div);
3160 div = temp;
3161 }
3162 if (pdiv != NULL)
3163 *pdiv = div;
3164 else
3165 Py_DECREF(div);
Tim Peters47e52ee2004-08-30 02:44:38 +00003166
Antoine Pitrou7f14f0d2010-05-09 16:14:21 +00003167 if (pmod != NULL)
3168 *pmod = mod;
3169 else
3170 Py_DECREF(mod);
Tim Peters47e52ee2004-08-30 02:44:38 +00003171
Antoine Pitrou7f14f0d2010-05-09 16:14:21 +00003172 return 0;
Guido van Rossume32e0141992-01-19 16:31:05 +00003173}
3174
Guido van Rossumc0b618a1997-05-02 03:12:38 +00003175static PyObject *
Martin v. Löwisda86fcc2007-09-10 07:59:54 +00003176long_div(PyObject *a, PyObject *b)
Guido van Rossume32e0141992-01-19 16:31:05 +00003177{
Antoine Pitrou7f14f0d2010-05-09 16:14:21 +00003178 PyLongObject *div;
Neil Schemenauerba872e22001-01-04 01:46:03 +00003179
Antoine Pitrou7f14f0d2010-05-09 16:14:21 +00003180 CHECK_BINOP(a, b);
3181 if (l_divmod((PyLongObject*)a, (PyLongObject*)b, &div, NULL) < 0)
3182 div = NULL;
3183 return (PyObject *)div;
Guido van Rossume32e0141992-01-19 16:31:05 +00003184}
3185
Guido van Rossumc0b618a1997-05-02 03:12:38 +00003186static PyObject *
Martin v. Löwisda86fcc2007-09-10 07:59:54 +00003187long_true_divide(PyObject *a, PyObject *b)
Tim Peters20dab9f2001-09-04 05:31:47 +00003188{
Antoine Pitrou7f14f0d2010-05-09 16:14:21 +00003189 double ad, bd;
3190 int failed, aexp = -1, bexp = -1;
Tim Peterse2a60002001-09-04 06:17:36 +00003191
Antoine Pitrou7f14f0d2010-05-09 16:14:21 +00003192 CHECK_BINOP(a, b);
3193 ad = _PyLong_AsScaledDouble((PyObject *)a, &aexp);
3194 bd = _PyLong_AsScaledDouble((PyObject *)b, &bexp);
3195 failed = (ad == -1.0 || bd == -1.0) && PyErr_Occurred();
3196 if (failed)
3197 return NULL;
3198 /* 'aexp' and 'bexp' were initialized to -1 to silence gcc-4.0.x,
3199 but should really be set correctly after sucessful calls to
3200 _PyLong_AsScaledDouble() */
3201 assert(aexp >= 0 && bexp >= 0);
Tim Peterse2a60002001-09-04 06:17:36 +00003202
Antoine Pitrou7f14f0d2010-05-09 16:14:21 +00003203 if (bd == 0.0) {
3204 PyErr_SetString(PyExc_ZeroDivisionError,
3205 "int division or modulo by zero");
3206 return NULL;
3207 }
Tim Peterse2a60002001-09-04 06:17:36 +00003208
Antoine Pitrou7f14f0d2010-05-09 16:14:21 +00003209 /* True value is very close to ad/bd * 2**(PyLong_SHIFT*(aexp-bexp)) */
3210 ad /= bd; /* overflow/underflow impossible here */
3211 aexp -= bexp;
3212 if (aexp > INT_MAX / PyLong_SHIFT)
3213 goto overflow;
3214 else if (aexp < -(INT_MAX / PyLong_SHIFT))
3215 return PyFloat_FromDouble(0.0); /* underflow to 0 */
3216 errno = 0;
3217 ad = ldexp(ad, aexp * PyLong_SHIFT);
3218 if (Py_OVERFLOWED(ad)) /* ignore underflow to 0.0 */
3219 goto overflow;
3220 return PyFloat_FromDouble(ad);
Tim Peterse2a60002001-09-04 06:17:36 +00003221
3222overflow:
Antoine Pitrou7f14f0d2010-05-09 16:14:21 +00003223 PyErr_SetString(PyExc_OverflowError,
3224 "int/int too large for a float");
3225 return NULL;
Tim Peters5af4e6c2002-08-12 02:31:19 +00003226
Tim Peters20dab9f2001-09-04 05:31:47 +00003227}
3228
3229static PyObject *
Martin v. Löwisda86fcc2007-09-10 07:59:54 +00003230long_mod(PyObject *a, PyObject *b)
Guido van Rossume32e0141992-01-19 16:31:05 +00003231{
Antoine Pitrou7f14f0d2010-05-09 16:14:21 +00003232 PyLongObject *mod;
Neil Schemenauerba872e22001-01-04 01:46:03 +00003233
Antoine Pitrou7f14f0d2010-05-09 16:14:21 +00003234 CHECK_BINOP(a, b);
3235
3236 if (l_divmod((PyLongObject*)a, (PyLongObject*)b, NULL, &mod) < 0)
3237 mod = NULL;
3238 return (PyObject *)mod;
Guido van Rossume32e0141992-01-19 16:31:05 +00003239}
3240
Guido van Rossumc0b618a1997-05-02 03:12:38 +00003241static PyObject *
Martin v. Löwisda86fcc2007-09-10 07:59:54 +00003242long_divmod(PyObject *a, PyObject *b)
Guido van Rossumedcc38a1991-05-05 20:09:44 +00003243{
Antoine Pitrou7f14f0d2010-05-09 16:14:21 +00003244 PyLongObject *div, *mod;
3245 PyObject *z;
Neil Schemenauerba872e22001-01-04 01:46:03 +00003246
Antoine Pitrou7f14f0d2010-05-09 16:14:21 +00003247 CHECK_BINOP(a, b);
Neil Schemenauerba872e22001-01-04 01:46:03 +00003248
Antoine Pitrou7f14f0d2010-05-09 16:14:21 +00003249 if (l_divmod((PyLongObject*)a, (PyLongObject*)b, &div, &mod) < 0) {
3250 return NULL;
3251 }
3252 z = PyTuple_New(2);
3253 if (z != NULL) {
3254 PyTuple_SetItem(z, 0, (PyObject *) div);
3255 PyTuple_SetItem(z, 1, (PyObject *) mod);
3256 }
3257 else {
3258 Py_DECREF(div);
3259 Py_DECREF(mod);
3260 }
3261 return z;
Guido van Rossumedcc38a1991-05-05 20:09:44 +00003262}
3263
Tim Peters47e52ee2004-08-30 02:44:38 +00003264/* pow(v, w, x) */
Guido van Rossumc0b618a1997-05-02 03:12:38 +00003265static PyObject *
Neil Schemenauerba872e22001-01-04 01:46:03 +00003266long_pow(PyObject *v, PyObject *w, PyObject *x)
Guido van Rossumedcc38a1991-05-05 20:09:44 +00003267{
Antoine Pitrou7f14f0d2010-05-09 16:14:21 +00003268 PyLongObject *a, *b, *c; /* a,b,c = v,w,x */
3269 int negativeOutput = 0; /* if x<0 return negative output */
Neil Schemenauerba872e22001-01-04 01:46:03 +00003270
Antoine Pitrou7f14f0d2010-05-09 16:14:21 +00003271 PyLongObject *z = NULL; /* accumulated result */
3272 Py_ssize_t i, j, k; /* counters */
3273 PyLongObject *temp = NULL;
Tim Peters47e52ee2004-08-30 02:44:38 +00003274
Antoine Pitrou7f14f0d2010-05-09 16:14:21 +00003275 /* 5-ary values. If the exponent is large enough, table is
3276 * precomputed so that table[i] == a**i % c for i in range(32).
3277 */
3278 PyLongObject *table[32] = {0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
3279 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0};
Tim Peters47e52ee2004-08-30 02:44:38 +00003280
Antoine Pitrou7f14f0d2010-05-09 16:14:21 +00003281 /* a, b, c = v, w, x */
3282 CHECK_BINOP(v, w);
3283 a = (PyLongObject*)v; Py_INCREF(a);
3284 b = (PyLongObject*)w; Py_INCREF(b);
3285 if (PyLong_Check(x)) {
3286 c = (PyLongObject *)x;
3287 Py_INCREF(x);
3288 }
3289 else if (x == Py_None)
3290 c = NULL;
3291 else {
3292 Py_DECREF(a);
3293 Py_DECREF(b);
3294 Py_INCREF(Py_NotImplemented);
3295 return Py_NotImplemented;
3296 }
Tim Peters4c483c42001-09-05 06:24:58 +00003297
Antoine Pitrou7f14f0d2010-05-09 16:14:21 +00003298 if (Py_SIZE(b) < 0) { /* if exponent is negative */
3299 if (c) {
3300 PyErr_SetString(PyExc_TypeError, "pow() 2nd argument "
3301 "cannot be negative when 3rd argument specified");
3302 goto Error;
3303 }
3304 else {
3305 /* else return a float. This works because we know
3306 that this calls float_pow() which converts its
3307 arguments to double. */
3308 Py_DECREF(a);
3309 Py_DECREF(b);
3310 return PyFloat_Type.tp_as_number->nb_power(v, w, x);
3311 }
3312 }
Tim Peters47e52ee2004-08-30 02:44:38 +00003313
Antoine Pitrou7f14f0d2010-05-09 16:14:21 +00003314 if (c) {
3315 /* if modulus == 0:
3316 raise ValueError() */
3317 if (Py_SIZE(c) == 0) {
3318 PyErr_SetString(PyExc_ValueError,
3319 "pow() 3rd argument cannot be 0");
3320 goto Error;
3321 }
Tim Peters47e52ee2004-08-30 02:44:38 +00003322
Antoine Pitrou7f14f0d2010-05-09 16:14:21 +00003323 /* if modulus < 0:
3324 negativeOutput = True
3325 modulus = -modulus */
3326 if (Py_SIZE(c) < 0) {
3327 negativeOutput = 1;
3328 temp = (PyLongObject *)_PyLong_Copy(c);
3329 if (temp == NULL)
3330 goto Error;
3331 Py_DECREF(c);
3332 c = temp;
3333 temp = NULL;
3334 NEGATE(c);
3335 }
Tim Peters47e52ee2004-08-30 02:44:38 +00003336
Antoine Pitrou7f14f0d2010-05-09 16:14:21 +00003337 /* if modulus == 1:
3338 return 0 */
3339 if ((Py_SIZE(c) == 1) && (c->ob_digit[0] == 1)) {
3340 z = (PyLongObject *)PyLong_FromLong(0L);
3341 goto Done;
3342 }
Tim Peters47e52ee2004-08-30 02:44:38 +00003343
Antoine Pitrou7f14f0d2010-05-09 16:14:21 +00003344 /* if base < 0:
3345 base = base % modulus
3346 Having the base positive just makes things easier. */
3347 if (Py_SIZE(a) < 0) {
3348 if (l_divmod(a, c, NULL, &temp) < 0)
3349 goto Error;
3350 Py_DECREF(a);
3351 a = temp;
3352 temp = NULL;
3353 }
3354 }
Tim Peters47e52ee2004-08-30 02:44:38 +00003355
Antoine Pitrou7f14f0d2010-05-09 16:14:21 +00003356 /* At this point a, b, and c are guaranteed non-negative UNLESS
3357 c is NULL, in which case a may be negative. */
Tim Peters47e52ee2004-08-30 02:44:38 +00003358
Antoine Pitrou7f14f0d2010-05-09 16:14:21 +00003359 z = (PyLongObject *)PyLong_FromLong(1L);
3360 if (z == NULL)
3361 goto Error;
Tim Peters47e52ee2004-08-30 02:44:38 +00003362
Antoine Pitrou7f14f0d2010-05-09 16:14:21 +00003363 /* Perform a modular reduction, X = X % c, but leave X alone if c
3364 * is NULL.
3365 */
3366#define REDUCE(X) \
3367 if (c != NULL) { \
3368 if (l_divmod(X, c, NULL, &temp) < 0) \
3369 goto Error; \
3370 Py_XDECREF(X); \
3371 X = temp; \
3372 temp = NULL; \
3373 }
Tim Peters47e52ee2004-08-30 02:44:38 +00003374
Antoine Pitrou7f14f0d2010-05-09 16:14:21 +00003375 /* Multiply two values, then reduce the result:
3376 result = X*Y % c. If c is NULL, skip the mod. */
3377#define MULT(X, Y, result) \
3378{ \
3379 temp = (PyLongObject *)long_mul(X, Y); \
3380 if (temp == NULL) \
3381 goto Error; \
3382 Py_XDECREF(result); \
3383 result = temp; \
3384 temp = NULL; \
3385 REDUCE(result) \
Tim Peters47e52ee2004-08-30 02:44:38 +00003386}
3387
Antoine Pitrou7f14f0d2010-05-09 16:14:21 +00003388 if (Py_SIZE(b) <= FIVEARY_CUTOFF) {
3389 /* Left-to-right binary exponentiation (HAC Algorithm 14.79) */
3390 /* http://www.cacr.math.uwaterloo.ca/hac/about/chap14.pdf */
3391 for (i = Py_SIZE(b) - 1; i >= 0; --i) {
3392 digit bi = b->ob_digit[i];
Tim Peters47e52ee2004-08-30 02:44:38 +00003393
Antoine Pitrou7f14f0d2010-05-09 16:14:21 +00003394 for (j = (digit)1 << (PyLong_SHIFT-1); j != 0; j >>= 1) {
3395 MULT(z, z, z)
3396 if (bi & j)
3397 MULT(z, a, z)
3398 }
3399 }
3400 }
3401 else {
3402 /* Left-to-right 5-ary exponentiation (HAC Algorithm 14.82) */
3403 Py_INCREF(z); /* still holds 1L */
3404 table[0] = z;
3405 for (i = 1; i < 32; ++i)
3406 MULT(table[i-1], a, table[i])
Tim Peters47e52ee2004-08-30 02:44:38 +00003407
Antoine Pitrou7f14f0d2010-05-09 16:14:21 +00003408 for (i = Py_SIZE(b) - 1; i >= 0; --i) {
3409 const digit bi = b->ob_digit[i];
Tim Peters47e52ee2004-08-30 02:44:38 +00003410
Antoine Pitrou7f14f0d2010-05-09 16:14:21 +00003411 for (j = PyLong_SHIFT - 5; j >= 0; j -= 5) {
3412 const int index = (bi >> j) & 0x1f;
3413 for (k = 0; k < 5; ++k)
3414 MULT(z, z, z)
3415 if (index)
3416 MULT(z, table[index], z)
3417 }
3418 }
3419 }
Tim Peters47e52ee2004-08-30 02:44:38 +00003420
Antoine Pitrou7f14f0d2010-05-09 16:14:21 +00003421 if (negativeOutput && (Py_SIZE(z) != 0)) {
3422 temp = (PyLongObject *)long_sub(z, c);
3423 if (temp == NULL)
3424 goto Error;
3425 Py_DECREF(z);
3426 z = temp;
3427 temp = NULL;
3428 }
3429 goto Done;
Tim Peters47e52ee2004-08-30 02:44:38 +00003430
3431 Error:
Antoine Pitrou7f14f0d2010-05-09 16:14:21 +00003432 if (z != NULL) {
3433 Py_DECREF(z);
3434 z = NULL;
3435 }
3436 /* fall through */
Tim Peters47e52ee2004-08-30 02:44:38 +00003437 Done:
Antoine Pitrou7f14f0d2010-05-09 16:14:21 +00003438 if (Py_SIZE(b) > FIVEARY_CUTOFF) {
3439 for (i = 0; i < 32; ++i)
3440 Py_XDECREF(table[i]);
3441 }
3442 Py_DECREF(a);
3443 Py_DECREF(b);
3444 Py_XDECREF(c);
3445 Py_XDECREF(temp);
3446 return (PyObject *)z;
Guido van Rossumedcc38a1991-05-05 20:09:44 +00003447}
3448
Guido van Rossumc0b618a1997-05-02 03:12:38 +00003449static PyObject *
Tim Peters9f688bf2000-07-07 15:53:28 +00003450long_invert(PyLongObject *v)
Guido van Rossumedcc38a1991-05-05 20:09:44 +00003451{
Antoine Pitrou7f14f0d2010-05-09 16:14:21 +00003452 /* Implement ~x as -(x+1) */
3453 PyLongObject *x;
3454 PyLongObject *w;
3455 if (ABS(Py_SIZE(v)) <=1)
3456 return PyLong_FromLong(-(MEDIUM_VALUE(v)+1));
3457 w = (PyLongObject *)PyLong_FromLong(1L);
3458 if (w == NULL)
3459 return NULL;
3460 x = (PyLongObject *) long_add(v, w);
3461 Py_DECREF(w);
3462 if (x == NULL)
3463 return NULL;
3464 Py_SIZE(x) = -(Py_SIZE(x));
3465 return (PyObject *)maybe_small_long(x);
Guido van Rossumedcc38a1991-05-05 20:09:44 +00003466}
3467
Guido van Rossumc0b618a1997-05-02 03:12:38 +00003468static PyObject *
Tim Peters9f688bf2000-07-07 15:53:28 +00003469long_neg(PyLongObject *v)
Guido van Rossumc6913e71991-11-19 20:26:46 +00003470{
Antoine Pitrou7f14f0d2010-05-09 16:14:21 +00003471 PyLongObject *z;
3472 if (ABS(Py_SIZE(v)) <= 1)
3473 return PyLong_FromLong(-MEDIUM_VALUE(v));
3474 z = (PyLongObject *)_PyLong_Copy(v);
3475 if (z != NULL)
3476 Py_SIZE(z) = -(Py_SIZE(v));
3477 return (PyObject *)z;
Guido van Rossumc6913e71991-11-19 20:26:46 +00003478}
3479
Guido van Rossumc0b618a1997-05-02 03:12:38 +00003480static PyObject *
Tim Peters9f688bf2000-07-07 15:53:28 +00003481long_abs(PyLongObject *v)
Guido van Rossumedcc38a1991-05-05 20:09:44 +00003482{
Antoine Pitrou7f14f0d2010-05-09 16:14:21 +00003483 if (Py_SIZE(v) < 0)
3484 return long_neg(v);
3485 else
3486 return long_long((PyObject *)v);
Guido van Rossumedcc38a1991-05-05 20:09:44 +00003487}
3488
Guido van Rossum23d6f0e1991-05-14 12:06:49 +00003489static int
Jack Diederich4dafcc42006-11-28 19:15:13 +00003490long_bool(PyLongObject *v)
Guido van Rossum23d6f0e1991-05-14 12:06:49 +00003491{
Antoine Pitrou7f14f0d2010-05-09 16:14:21 +00003492 return ABS(Py_SIZE(v)) != 0;
Guido van Rossumc6913e71991-11-19 20:26:46 +00003493}
3494
Guido van Rossumc0b618a1997-05-02 03:12:38 +00003495static PyObject *
Martin v. Löwisda86fcc2007-09-10 07:59:54 +00003496long_rshift(PyLongObject *a, PyLongObject *b)
Guido van Rossumc6913e71991-11-19 20:26:46 +00003497{
Antoine Pitrou7f14f0d2010-05-09 16:14:21 +00003498 PyLongObject *z = NULL;
3499 long shiftby;
3500 Py_ssize_t newsize, wordshift, loshift, hishift, i, j;
3501 digit lomask, himask;
Tim Peters5af4e6c2002-08-12 02:31:19 +00003502
Antoine Pitrou7f14f0d2010-05-09 16:14:21 +00003503 CHECK_BINOP(a, b);
Neil Schemenauerba872e22001-01-04 01:46:03 +00003504
Antoine Pitrou7f14f0d2010-05-09 16:14:21 +00003505 if (Py_SIZE(a) < 0) {
3506 /* Right shifting negative numbers is harder */
3507 PyLongObject *a1, *a2;
3508 a1 = (PyLongObject *) long_invert(a);
3509 if (a1 == NULL)
3510 goto rshift_error;
3511 a2 = (PyLongObject *) long_rshift(a1, b);
3512 Py_DECREF(a1);
3513 if (a2 == NULL)
3514 goto rshift_error;
3515 z = (PyLongObject *) long_invert(a2);
3516 Py_DECREF(a2);
3517 }
3518 else {
Tim Peters5af4e6c2002-08-12 02:31:19 +00003519
Antoine Pitrou7f14f0d2010-05-09 16:14:21 +00003520 shiftby = PyLong_AsLong((PyObject *)b);
3521 if (shiftby == -1L && PyErr_Occurred())
3522 goto rshift_error;
3523 if (shiftby < 0) {
3524 PyErr_SetString(PyExc_ValueError,
3525 "negative shift count");
3526 goto rshift_error;
3527 }
3528 wordshift = shiftby / PyLong_SHIFT;
3529 newsize = ABS(Py_SIZE(a)) - wordshift;
3530 if (newsize <= 0)
3531 return PyLong_FromLong(0);
3532 loshift = shiftby % PyLong_SHIFT;
3533 hishift = PyLong_SHIFT - loshift;
3534 lomask = ((digit)1 << hishift) - 1;
3535 himask = PyLong_MASK ^ lomask;
3536 z = _PyLong_New(newsize);
3537 if (z == NULL)
3538 goto rshift_error;
3539 if (Py_SIZE(a) < 0)
3540 Py_SIZE(z) = -(Py_SIZE(z));
3541 for (i = 0, j = wordshift; i < newsize; i++, j++) {
3542 z->ob_digit[i] = (a->ob_digit[j] >> loshift) & lomask;
3543 if (i+1 < newsize)
3544 z->ob_digit[i] |=
3545 (a->ob_digit[j+1] << hishift) & himask;
3546 }
3547 z = long_normalize(z);
3548 }
Neil Schemenauerba872e22001-01-04 01:46:03 +00003549rshift_error:
Antoine Pitrou7f14f0d2010-05-09 16:14:21 +00003550 return (PyObject *) maybe_small_long(z);
Neil Schemenauerba872e22001-01-04 01:46:03 +00003551
Guido van Rossumc6913e71991-11-19 20:26:46 +00003552}
3553
Guido van Rossumc0b618a1997-05-02 03:12:38 +00003554static PyObject *
Neil Schemenauerba872e22001-01-04 01:46:03 +00003555long_lshift(PyObject *v, PyObject *w)
Guido van Rossumc6913e71991-11-19 20:26:46 +00003556{
Antoine Pitrou7f14f0d2010-05-09 16:14:21 +00003557 /* This version due to Tim Peters */
3558 PyLongObject *a = (PyLongObject*)v;
3559 PyLongObject *b = (PyLongObject*)w;
3560 PyLongObject *z = NULL;
3561 long shiftby;
3562 Py_ssize_t oldsize, newsize, wordshift, remshift, i, j;
3563 twodigits accum;
Tim Peters5af4e6c2002-08-12 02:31:19 +00003564
Antoine Pitrou7f14f0d2010-05-09 16:14:21 +00003565 CHECK_BINOP(a, b);
Neil Schemenauerba872e22001-01-04 01:46:03 +00003566
Antoine Pitrou7f14f0d2010-05-09 16:14:21 +00003567 shiftby = PyLong_AsLong((PyObject *)b);
3568 if (shiftby == -1L && PyErr_Occurred())
3569 goto lshift_error;
3570 if (shiftby < 0) {
3571 PyErr_SetString(PyExc_ValueError, "negative shift count");
3572 goto lshift_error;
3573 }
3574 if ((long)(int)shiftby != shiftby) {
3575 PyErr_SetString(PyExc_ValueError,
3576 "outrageous left shift count");
3577 goto lshift_error;
3578 }
3579 /* wordshift, remshift = divmod(shiftby, PyLong_SHIFT) */
3580 wordshift = (int)shiftby / PyLong_SHIFT;
3581 remshift = (int)shiftby - wordshift * PyLong_SHIFT;
Guido van Rossumf2e499b1997-03-16 00:37:59 +00003582
Antoine Pitrou7f14f0d2010-05-09 16:14:21 +00003583 oldsize = ABS(Py_SIZE(a));
3584 newsize = oldsize + wordshift;
3585 if (remshift)
3586 ++newsize;
3587 z = _PyLong_New(newsize);
3588 if (z == NULL)
3589 goto lshift_error;
3590 if (Py_SIZE(a) < 0)
3591 NEGATE(z);
3592 for (i = 0; i < wordshift; i++)
3593 z->ob_digit[i] = 0;
3594 accum = 0;
3595 for (i = wordshift, j = 0; j < oldsize; i++, j++) {
3596 accum |= (twodigits)a->ob_digit[j] << remshift;
3597 z->ob_digit[i] = (digit)(accum & PyLong_MASK);
3598 accum >>= PyLong_SHIFT;
3599 }
3600 if (remshift)
3601 z->ob_digit[newsize-1] = (digit)accum;
3602 else
3603 assert(!accum);
3604 z = long_normalize(z);
Neil Schemenauerba872e22001-01-04 01:46:03 +00003605lshift_error:
Antoine Pitrou7f14f0d2010-05-09 16:14:21 +00003606 return (PyObject *) maybe_small_long(z);
Guido van Rossumc6913e71991-11-19 20:26:46 +00003607}
3608
Guido van Rossum4c260ff1992-01-14 18:36:43 +00003609
3610/* Bitwise and/xor/or operations */
3611
Guido van Rossumc0b618a1997-05-02 03:12:38 +00003612static PyObject *
Tim Peters9f688bf2000-07-07 15:53:28 +00003613long_bitwise(PyLongObject *a,
Antoine Pitrou7f14f0d2010-05-09 16:14:21 +00003614 int op, /* '&', '|', '^' */
3615 PyLongObject *b)
Guido van Rossumc6913e71991-11-19 20:26:46 +00003616{
Antoine Pitrou7f14f0d2010-05-09 16:14:21 +00003617 digit maska, maskb; /* 0 or PyLong_MASK */
3618 int negz;
3619 Py_ssize_t size_a, size_b, size_z, i;
3620 PyLongObject *z;
3621 digit diga, digb;
3622 PyObject *v;
Tim Peters5af4e6c2002-08-12 02:31:19 +00003623
Antoine Pitrou7f14f0d2010-05-09 16:14:21 +00003624 if (Py_SIZE(a) < 0) {
3625 a = (PyLongObject *) long_invert(a);
3626 if (a == NULL)
3627 return NULL;
3628 maska = PyLong_MASK;
3629 }
3630 else {
3631 Py_INCREF(a);
3632 maska = 0;
3633 }
3634 if (Py_SIZE(b) < 0) {
3635 b = (PyLongObject *) long_invert(b);
3636 if (b == NULL) {
3637 Py_DECREF(a);
3638 return NULL;
3639 }
3640 maskb = PyLong_MASK;
3641 }
3642 else {
3643 Py_INCREF(b);
3644 maskb = 0;
3645 }
Tim Peters5af4e6c2002-08-12 02:31:19 +00003646
Antoine Pitrou7f14f0d2010-05-09 16:14:21 +00003647 negz = 0;
3648 switch (op) {
3649 case '^':
3650 if (maska != maskb) {
3651 maska ^= PyLong_MASK;
3652 negz = -1;
3653 }
3654 break;
3655 case '&':
3656 if (maska && maskb) {
3657 op = '|';
3658 maska ^= PyLong_MASK;
3659 maskb ^= PyLong_MASK;
3660 negz = -1;
3661 }
3662 break;
3663 case '|':
3664 if (maska || maskb) {
3665 op = '&';
3666 maska ^= PyLong_MASK;
3667 maskb ^= PyLong_MASK;
3668 negz = -1;
3669 }
3670 break;
3671 }
Tim Peters5af4e6c2002-08-12 02:31:19 +00003672
Antoine Pitrou7f14f0d2010-05-09 16:14:21 +00003673 /* JRH: The original logic here was to allocate the result value (z)
3674 as the longer of the two operands. However, there are some cases
3675 where the result is guaranteed to be shorter than that: AND of two
3676 positives, OR of two negatives: use the shorter number. AND with
3677 mixed signs: use the positive number. OR with mixed signs: use the
3678 negative number. After the transformations above, op will be '&'
3679 iff one of these cases applies, and mask will be non-0 for operands
3680 whose length should be ignored.
3681 */
Guido van Rossumbd3a5271998-08-11 15:04:47 +00003682
Antoine Pitrou7f14f0d2010-05-09 16:14:21 +00003683 size_a = Py_SIZE(a);
3684 size_b = Py_SIZE(b);
3685 size_z = op == '&'
3686 ? (maska
3687 ? size_b
3688 : (maskb ? size_a : MIN(size_a, size_b)))
3689 : MAX(size_a, size_b);
3690 z = _PyLong_New(size_z);
3691 if (z == NULL) {
3692 Py_DECREF(a);
3693 Py_DECREF(b);
3694 return NULL;
3695 }
Tim Peters5af4e6c2002-08-12 02:31:19 +00003696
Antoine Pitrou7f14f0d2010-05-09 16:14:21 +00003697 for (i = 0; i < size_z; ++i) {
3698 diga = (i < size_a ? a->ob_digit[i] : 0) ^ maska;
3699 digb = (i < size_b ? b->ob_digit[i] : 0) ^ maskb;
3700 switch (op) {
3701 case '&': z->ob_digit[i] = diga & digb; break;
3702 case '|': z->ob_digit[i] = diga | digb; break;
3703 case '^': z->ob_digit[i] = diga ^ digb; break;
3704 }
3705 }
Tim Peters5af4e6c2002-08-12 02:31:19 +00003706
Antoine Pitrou7f14f0d2010-05-09 16:14:21 +00003707 Py_DECREF(a);
3708 Py_DECREF(b);
3709 z = long_normalize(z);
3710 if (negz == 0)
3711 return (PyObject *) maybe_small_long(z);
3712 v = long_invert(z);
3713 Py_DECREF(z);
3714 return v;
Guido van Rossumc6913e71991-11-19 20:26:46 +00003715}
3716
Guido van Rossumc0b618a1997-05-02 03:12:38 +00003717static PyObject *
Martin v. Löwisda86fcc2007-09-10 07:59:54 +00003718long_and(PyObject *a, PyObject *b)
Guido van Rossumc6913e71991-11-19 20:26:46 +00003719{
Antoine Pitrou7f14f0d2010-05-09 16:14:21 +00003720 PyObject *c;
3721 CHECK_BINOP(a, b);
3722 c = long_bitwise((PyLongObject*)a, '&', (PyLongObject*)b);
3723 return c;
Guido van Rossumc6913e71991-11-19 20:26:46 +00003724}
3725
Guido van Rossumc0b618a1997-05-02 03:12:38 +00003726static PyObject *
Martin v. Löwisda86fcc2007-09-10 07:59:54 +00003727long_xor(PyObject *a, PyObject *b)
Guido van Rossumc6913e71991-11-19 20:26:46 +00003728{
Antoine Pitrou7f14f0d2010-05-09 16:14:21 +00003729 PyObject *c;
3730 CHECK_BINOP(a, b);
3731 c = long_bitwise((PyLongObject*)a, '^', (PyLongObject*)b);
3732 return c;
Guido van Rossumc6913e71991-11-19 20:26:46 +00003733}
3734
Guido van Rossumc0b618a1997-05-02 03:12:38 +00003735static PyObject *
Martin v. Löwisda86fcc2007-09-10 07:59:54 +00003736long_or(PyObject *a, PyObject *b)
Guido van Rossumc6913e71991-11-19 20:26:46 +00003737{
Antoine Pitrou7f14f0d2010-05-09 16:14:21 +00003738 PyObject *c;
3739 CHECK_BINOP(a, b);
3740 c = long_bitwise((PyLongObject*)a, '|', (PyLongObject*)b);
3741 return c;
Guido van Rossum23d6f0e1991-05-14 12:06:49 +00003742}
3743
Guido van Rossumc0b618a1997-05-02 03:12:38 +00003744static PyObject *
Tim Peters9f688bf2000-07-07 15:53:28 +00003745long_long(PyObject *v)
Guido van Rossum1899c2e1992-09-12 11:09:23 +00003746{
Antoine Pitrou7f14f0d2010-05-09 16:14:21 +00003747 if (PyLong_CheckExact(v))
3748 Py_INCREF(v);
3749 else
3750 v = _PyLong_Copy((PyLongObject *)v);
3751 return v;
Guido van Rossum1899c2e1992-09-12 11:09:23 +00003752}
3753
Guido van Rossumc0b618a1997-05-02 03:12:38 +00003754static PyObject *
Tim Peters9f688bf2000-07-07 15:53:28 +00003755long_float(PyObject *v)
Guido van Rossum1899c2e1992-09-12 11:09:23 +00003756{
Antoine Pitrou7f14f0d2010-05-09 16:14:21 +00003757 double result;
3758 result = PyLong_AsDouble(v);
3759 if (result == -1.0 && PyErr_Occurred())
3760 return NULL;
3761 return PyFloat_FromDouble(result);
Guido van Rossum1899c2e1992-09-12 11:09:23 +00003762}
3763
Guido van Rossumc0b618a1997-05-02 03:12:38 +00003764static PyObject *
Guido van Rossumbef14172001-08-29 15:47:46 +00003765long_subtype_new(PyTypeObject *type, PyObject *args, PyObject *kwds);
Guido van Rossum1899c2e1992-09-12 11:09:23 +00003766
Tim Peters6d6c1a32001-08-02 04:15:00 +00003767static PyObject *
3768long_new(PyTypeObject *type, PyObject *args, PyObject *kwds)
3769{
Antoine Pitrou7f14f0d2010-05-09 16:14:21 +00003770 PyObject *x = NULL;
3771 int base = -909; /* unlikely! */
3772 static char *kwlist[] = {"x", "base", 0};
Tim Peters6d6c1a32001-08-02 04:15:00 +00003773
Antoine Pitrou7f14f0d2010-05-09 16:14:21 +00003774 if (type != &PyLong_Type)
3775 return long_subtype_new(type, args, kwds); /* Wimp out */
3776 if (!PyArg_ParseTupleAndKeywords(args, kwds, "|Oi:int", kwlist,
3777 &x, &base))
3778 return NULL;
3779 if (x == NULL)
3780 return PyLong_FromLong(0L);
3781 if (base == -909)
3782 return PyNumber_Long(x);
3783 else if (PyUnicode_Check(x))
3784 return PyLong_FromUnicode(PyUnicode_AS_UNICODE(x),
3785 PyUnicode_GET_SIZE(x),
3786 base);
3787 else if (PyByteArray_Check(x) || PyBytes_Check(x)) {
3788 /* Since PyLong_FromString doesn't have a length parameter,
3789 * check here for possible NULs in the string. */
3790 char *string;
3791 Py_ssize_t size = Py_SIZE(x);
3792 if (PyByteArray_Check(x))
3793 string = PyByteArray_AS_STRING(x);
3794 else
3795 string = PyBytes_AS_STRING(x);
3796 if (strlen(string) != (size_t)size) {
3797 /* We only see this if there's a null byte in x,
3798 x is a bytes or buffer, *and* a base is given. */
3799 PyErr_Format(PyExc_ValueError,
3800 "invalid literal for int() with base %d: %R",
3801 base, x);
3802 return NULL;
3803 }
3804 return PyLong_FromString(string, NULL, base);
3805 }
3806 else {
3807 PyErr_SetString(PyExc_TypeError,
3808 "int() can't convert non-string with explicit base");
3809 return NULL;
3810 }
Tim Peters6d6c1a32001-08-02 04:15:00 +00003811}
3812
Guido van Rossumbef14172001-08-29 15:47:46 +00003813/* Wimpy, slow approach to tp_new calls for subtypes of long:
3814 first create a regular long from whatever arguments we got,
3815 then allocate a subtype instance and initialize it from
3816 the regular long. The regular long is then thrown away.
3817*/
3818static PyObject *
3819long_subtype_new(PyTypeObject *type, PyObject *args, PyObject *kwds)
3820{
Antoine Pitrou7f14f0d2010-05-09 16:14:21 +00003821 PyLongObject *tmp, *newobj;
3822 Py_ssize_t i, n;
Guido van Rossumbef14172001-08-29 15:47:46 +00003823
Antoine Pitrou7f14f0d2010-05-09 16:14:21 +00003824 assert(PyType_IsSubtype(type, &PyLong_Type));
3825 tmp = (PyLongObject *)long_new(&PyLong_Type, args, kwds);
3826 if (tmp == NULL)
3827 return NULL;
3828 assert(PyLong_CheckExact(tmp));
3829 n = Py_SIZE(tmp);
3830 if (n < 0)
3831 n = -n;
3832 newobj = (PyLongObject *)type->tp_alloc(type, n);
3833 if (newobj == NULL) {
3834 Py_DECREF(tmp);
3835 return NULL;
3836 }
3837 assert(PyLong_Check(newobj));
3838 Py_SIZE(newobj) = Py_SIZE(tmp);
3839 for (i = 0; i < n; i++)
3840 newobj->ob_digit[i] = tmp->ob_digit[i];
3841 Py_DECREF(tmp);
3842 return (PyObject *)newobj;
Guido van Rossumbef14172001-08-29 15:47:46 +00003843}
3844
Guido van Rossum5d9113d2003-01-29 17:58:45 +00003845static PyObject *
3846long_getnewargs(PyLongObject *v)
3847{
Antoine Pitrou7f14f0d2010-05-09 16:14:21 +00003848 return Py_BuildValue("(N)", _PyLong_Copy(v));
Guido van Rossum5d9113d2003-01-29 17:58:45 +00003849}
3850
Guido van Rossumb43daf72007-08-01 18:08:08 +00003851static PyObject *
Mark Dickinson6bf19002009-05-02 17:57:52 +00003852long_get0(PyLongObject *v, void *context) {
Antoine Pitrou7f14f0d2010-05-09 16:14:21 +00003853 return PyLong_FromLong(0L);
Mark Dickinson6bf19002009-05-02 17:57:52 +00003854}
3855
3856static PyObject *
3857long_get1(PyLongObject *v, void *context) {
Antoine Pitrou7f14f0d2010-05-09 16:14:21 +00003858 return PyLong_FromLong(1L);
Guido van Rossumb43daf72007-08-01 18:08:08 +00003859}
3860
Guido van Rossum2fa33db2007-08-23 22:07:24 +00003861static PyObject *
Eric Smith8c663262007-08-25 02:26:07 +00003862long__format__(PyObject *self, PyObject *args)
3863{
Antoine Pitrou7f14f0d2010-05-09 16:14:21 +00003864 PyObject *format_spec;
Eric Smith4a7d76d2008-05-30 18:10:19 +00003865
Antoine Pitrou7f14f0d2010-05-09 16:14:21 +00003866 if (!PyArg_ParseTuple(args, "U:__format__", &format_spec))
3867 return NULL;
3868 return _PyLong_FormatAdvanced(self,
3869 PyUnicode_AS_UNICODE(format_spec),
3870 PyUnicode_GET_SIZE(format_spec));
Eric Smith8c663262007-08-25 02:26:07 +00003871}
3872
Eric Smith8c663262007-08-25 02:26:07 +00003873static PyObject *
Guido van Rossum2fa33db2007-08-23 22:07:24 +00003874long_round(PyObject *self, PyObject *args)
3875{
Antoine Pitrou7f14f0d2010-05-09 16:14:21 +00003876 PyObject *o_ndigits=NULL, *temp;
3877 PyLongObject *pow=NULL, *q=NULL, *r=NULL, *ndigits=NULL, *one;
3878 int errcode;
3879 digit q_mod_4;
Guido van Rossum2fa33db2007-08-23 22:07:24 +00003880
Antoine Pitrou7f14f0d2010-05-09 16:14:21 +00003881 /* Notes on the algorithm: to round to the nearest 10**n (n positive),
3882 the straightforward method is:
Mark Dickinson1124e712009-01-28 21:25:58 +00003883
Antoine Pitrou7f14f0d2010-05-09 16:14:21 +00003884 (1) divide by 10**n
3885 (2) round to nearest integer (round to even in case of tie)
3886 (3) multiply result by 10**n.
Mark Dickinson1124e712009-01-28 21:25:58 +00003887
Antoine Pitrou7f14f0d2010-05-09 16:14:21 +00003888 But the rounding step involves examining the fractional part of the
3889 quotient to see whether it's greater than 0.5 or not. Since we
3890 want to do the whole calculation in integer arithmetic, it's
3891 simpler to do:
Mark Dickinson1124e712009-01-28 21:25:58 +00003892
Antoine Pitrou7f14f0d2010-05-09 16:14:21 +00003893 (1) divide by (10**n)/2
3894 (2) round to nearest multiple of 2 (multiple of 4 in case of tie)
3895 (3) multiply result by (10**n)/2.
Mark Dickinson1124e712009-01-28 21:25:58 +00003896
Antoine Pitrou7f14f0d2010-05-09 16:14:21 +00003897 Then all we need to know about the fractional part of the quotient
3898 arising in step (2) is whether it's zero or not.
Mark Dickinson1124e712009-01-28 21:25:58 +00003899
Antoine Pitrou7f14f0d2010-05-09 16:14:21 +00003900 Doing both a multiplication and division is wasteful, and is easily
3901 avoided if we just figure out how much to adjust the original input
3902 by to do the rounding.
Mark Dickinson1124e712009-01-28 21:25:58 +00003903
Antoine Pitrou7f14f0d2010-05-09 16:14:21 +00003904 Here's the whole algorithm expressed in Python.
Mark Dickinson1124e712009-01-28 21:25:58 +00003905
Antoine Pitrou7f14f0d2010-05-09 16:14:21 +00003906 def round(self, ndigits = None):
3907 """round(int, int) -> int"""
3908 if ndigits is None or ndigits >= 0:
3909 return self
3910 pow = 10**-ndigits >> 1
3911 q, r = divmod(self, pow)
3912 self -= r
3913 if (q & 1 != 0):
3914 if (q & 2 == r == 0):
3915 self -= pow
3916 else:
3917 self += pow
3918 return self
Mark Dickinson1124e712009-01-28 21:25:58 +00003919
Antoine Pitrou7f14f0d2010-05-09 16:14:21 +00003920 */
3921 if (!PyArg_ParseTuple(args, "|O", &o_ndigits))
3922 return NULL;
3923 if (o_ndigits == NULL)
3924 return long_long(self);
Guido van Rossum2fa33db2007-08-23 22:07:24 +00003925
Antoine Pitrou7f14f0d2010-05-09 16:14:21 +00003926 ndigits = (PyLongObject *)PyNumber_Index(o_ndigits);
3927 if (ndigits == NULL)
3928 return NULL;
Mark Dickinson1124e712009-01-28 21:25:58 +00003929
Antoine Pitrou7f14f0d2010-05-09 16:14:21 +00003930 if (Py_SIZE(ndigits) >= 0) {
3931 Py_DECREF(ndigits);
3932 return long_long(self);
3933 }
Mark Dickinson1124e712009-01-28 21:25:58 +00003934
Antoine Pitrou7f14f0d2010-05-09 16:14:21 +00003935 Py_INCREF(self); /* to keep refcounting simple */
3936 /* we now own references to self, ndigits */
Mark Dickinson1124e712009-01-28 21:25:58 +00003937
Antoine Pitrou7f14f0d2010-05-09 16:14:21 +00003938 /* pow = 10 ** -ndigits >> 1 */
3939 pow = (PyLongObject *)PyLong_FromLong(10L);
3940 if (pow == NULL)
3941 goto error;
3942 temp = long_neg(ndigits);
3943 Py_DECREF(ndigits);
3944 ndigits = (PyLongObject *)temp;
3945 if (ndigits == NULL)
3946 goto error;
3947 temp = long_pow((PyObject *)pow, (PyObject *)ndigits, Py_None);
3948 Py_DECREF(pow);
3949 pow = (PyLongObject *)temp;
3950 if (pow == NULL)
3951 goto error;
3952 assert(PyLong_Check(pow)); /* check long_pow returned a long */
3953 one = (PyLongObject *)PyLong_FromLong(1L);
3954 if (one == NULL)
3955 goto error;
3956 temp = long_rshift(pow, one);
3957 Py_DECREF(one);
3958 Py_DECREF(pow);
3959 pow = (PyLongObject *)temp;
3960 if (pow == NULL)
3961 goto error;
Mark Dickinson1124e712009-01-28 21:25:58 +00003962
Antoine Pitrou7f14f0d2010-05-09 16:14:21 +00003963 /* q, r = divmod(self, pow) */
3964 errcode = l_divmod((PyLongObject *)self, pow, &q, &r);
3965 if (errcode == -1)
3966 goto error;
Mark Dickinson1124e712009-01-28 21:25:58 +00003967
Antoine Pitrou7f14f0d2010-05-09 16:14:21 +00003968 /* self -= r */
3969 temp = long_sub((PyLongObject *)self, r);
3970 Py_DECREF(self);
3971 self = temp;
3972 if (self == NULL)
3973 goto error;
Mark Dickinson1124e712009-01-28 21:25:58 +00003974
Antoine Pitrou7f14f0d2010-05-09 16:14:21 +00003975 /* get value of quotient modulo 4 */
3976 if (Py_SIZE(q) == 0)
3977 q_mod_4 = 0;
3978 else if (Py_SIZE(q) > 0)
3979 q_mod_4 = q->ob_digit[0] & 3;
3980 else
3981 q_mod_4 = (PyLong_BASE-q->ob_digit[0]) & 3;
Mark Dickinson1124e712009-01-28 21:25:58 +00003982
Antoine Pitrou7f14f0d2010-05-09 16:14:21 +00003983 if ((q_mod_4 & 1) == 1) {
3984 /* q is odd; round self up or down by adding or subtracting pow */
3985 if (q_mod_4 == 1 && Py_SIZE(r) == 0)
3986 temp = (PyObject *)long_sub((PyLongObject *)self, pow);
3987 else
3988 temp = (PyObject *)long_add((PyLongObject *)self, pow);
3989 Py_DECREF(self);
3990 self = temp;
3991 if (self == NULL)
3992 goto error;
3993 }
3994 Py_DECREF(q);
3995 Py_DECREF(r);
3996 Py_DECREF(pow);
3997 Py_DECREF(ndigits);
3998 return self;
Mark Dickinson1124e712009-01-28 21:25:58 +00003999
4000 error:
Antoine Pitrou7f14f0d2010-05-09 16:14:21 +00004001 Py_XDECREF(q);
4002 Py_XDECREF(r);
4003 Py_XDECREF(pow);
4004 Py_XDECREF(self);
4005 Py_XDECREF(ndigits);
4006 return NULL;
Guido van Rossum2fa33db2007-08-23 22:07:24 +00004007}
4008
Martin v. Löwis00709aa2008-06-04 14:18:43 +00004009static PyObject *
4010long_sizeof(PyLongObject *v)
4011{
Antoine Pitrou7f14f0d2010-05-09 16:14:21 +00004012 Py_ssize_t res;
Martin v. Löwis00709aa2008-06-04 14:18:43 +00004013
Antoine Pitrou7f14f0d2010-05-09 16:14:21 +00004014 res = offsetof(PyLongObject, ob_digit) + ABS(Py_SIZE(v))*sizeof(digit);
4015 return PyLong_FromSsize_t(res);
Martin v. Löwis00709aa2008-06-04 14:18:43 +00004016}
4017
Mark Dickinson54bc1ec2008-12-17 16:19:07 +00004018static PyObject *
4019long_bit_length(PyLongObject *v)
4020{
Antoine Pitrou7f14f0d2010-05-09 16:14:21 +00004021 PyLongObject *result, *x, *y;
4022 Py_ssize_t ndigits, msd_bits = 0;
4023 digit msd;
Mark Dickinson54bc1ec2008-12-17 16:19:07 +00004024
Antoine Pitrou7f14f0d2010-05-09 16:14:21 +00004025 assert(v != NULL);
4026 assert(PyLong_Check(v));
Mark Dickinson54bc1ec2008-12-17 16:19:07 +00004027
Antoine Pitrou7f14f0d2010-05-09 16:14:21 +00004028 ndigits = ABS(Py_SIZE(v));
4029 if (ndigits == 0)
4030 return PyLong_FromLong(0);
Mark Dickinson54bc1ec2008-12-17 16:19:07 +00004031
Antoine Pitrou7f14f0d2010-05-09 16:14:21 +00004032 msd = v->ob_digit[ndigits-1];
4033 while (msd >= 32) {
4034 msd_bits += 6;
4035 msd >>= 6;
4036 }
4037 msd_bits += (long)(BitLengthTable[msd]);
Mark Dickinson54bc1ec2008-12-17 16:19:07 +00004038
Antoine Pitrou7f14f0d2010-05-09 16:14:21 +00004039 if (ndigits <= PY_SSIZE_T_MAX/PyLong_SHIFT)
4040 return PyLong_FromSsize_t((ndigits-1)*PyLong_SHIFT + msd_bits);
Mark Dickinson54bc1ec2008-12-17 16:19:07 +00004041
Antoine Pitrou7f14f0d2010-05-09 16:14:21 +00004042 /* expression above may overflow; use Python integers instead */
4043 result = (PyLongObject *)PyLong_FromSsize_t(ndigits - 1);
4044 if (result == NULL)
4045 return NULL;
4046 x = (PyLongObject *)PyLong_FromLong(PyLong_SHIFT);
4047 if (x == NULL)
4048 goto error;
4049 y = (PyLongObject *)long_mul(result, x);
4050 Py_DECREF(x);
4051 if (y == NULL)
4052 goto error;
4053 Py_DECREF(result);
4054 result = y;
Mark Dickinson54bc1ec2008-12-17 16:19:07 +00004055
Antoine Pitrou7f14f0d2010-05-09 16:14:21 +00004056 x = (PyLongObject *)PyLong_FromLong((long)msd_bits);
4057 if (x == NULL)
4058 goto error;
4059 y = (PyLongObject *)long_add(result, x);
4060 Py_DECREF(x);
4061 if (y == NULL)
4062 goto error;
4063 Py_DECREF(result);
4064 result = y;
Mark Dickinson54bc1ec2008-12-17 16:19:07 +00004065
Antoine Pitrou7f14f0d2010-05-09 16:14:21 +00004066 return (PyObject *)result;
Mark Dickinson54bc1ec2008-12-17 16:19:07 +00004067
4068error:
Antoine Pitrou7f14f0d2010-05-09 16:14:21 +00004069 Py_DECREF(result);
4070 return NULL;
Mark Dickinson54bc1ec2008-12-17 16:19:07 +00004071}
4072
4073PyDoc_STRVAR(long_bit_length_doc,
4074"int.bit_length() -> int\n\
4075\n\
4076Number of bits necessary to represent self in binary.\n\
4077>>> bin(37)\n\
4078'0b100101'\n\
4079>>> (37).bit_length()\n\
40806");
4081
Christian Heimes53876d92008-04-19 00:31:39 +00004082#if 0
4083static PyObject *
4084long_is_finite(PyObject *v)
4085{
Antoine Pitrou7f14f0d2010-05-09 16:14:21 +00004086 Py_RETURN_TRUE;
Christian Heimes53876d92008-04-19 00:31:39 +00004087}
4088#endif
4089
Guido van Rossum5d9113d2003-01-29 17:58:45 +00004090static PyMethodDef long_methods[] = {
Antoine Pitrou7f14f0d2010-05-09 16:14:21 +00004091 {"conjugate", (PyCFunction)long_long, METH_NOARGS,
4092 "Returns self, the complex conjugate of any int."},
4093 {"bit_length", (PyCFunction)long_bit_length, METH_NOARGS,
4094 long_bit_length_doc},
Christian Heimes53876d92008-04-19 00:31:39 +00004095#if 0
Antoine Pitrou7f14f0d2010-05-09 16:14:21 +00004096 {"is_finite", (PyCFunction)long_is_finite, METH_NOARGS,
4097 "Returns always True."},
Christian Heimes53876d92008-04-19 00:31:39 +00004098#endif
Antoine Pitrou7f14f0d2010-05-09 16:14:21 +00004099 {"__trunc__", (PyCFunction)long_long, METH_NOARGS,
4100 "Truncating an Integral returns itself."},
4101 {"__floor__", (PyCFunction)long_long, METH_NOARGS,
4102 "Flooring an Integral returns itself."},
4103 {"__ceil__", (PyCFunction)long_long, METH_NOARGS,
4104 "Ceiling of an Integral returns itself."},
4105 {"__round__", (PyCFunction)long_round, METH_VARARGS,
4106 "Rounding an Integral returns itself.\n"
4107 "Rounding with an ndigits argument also returns an integer."},
4108 {"__getnewargs__", (PyCFunction)long_getnewargs, METH_NOARGS},
4109 {"__format__", (PyCFunction)long__format__, METH_VARARGS},
4110 {"__sizeof__", (PyCFunction)long_sizeof, METH_NOARGS,
4111 "Returns size in memory, in bytes"},
4112 {NULL, NULL} /* sentinel */
Guido van Rossum5d9113d2003-01-29 17:58:45 +00004113};
4114
Guido van Rossumb43daf72007-08-01 18:08:08 +00004115static PyGetSetDef long_getset[] = {
Mark Dickinson6bf19002009-05-02 17:57:52 +00004116 {"real",
Guido van Rossumb43daf72007-08-01 18:08:08 +00004117 (getter)long_long, (setter)NULL,
4118 "the real part of a complex number",
4119 NULL},
Mark Dickinson6bf19002009-05-02 17:57:52 +00004120 {"imag",
4121 (getter)long_get0, (setter)NULL,
Guido van Rossumb43daf72007-08-01 18:08:08 +00004122 "the imaginary part of a complex number",
Mark Dickinson6bf19002009-05-02 17:57:52 +00004123 NULL},
4124 {"numerator",
Guido van Rossumb43daf72007-08-01 18:08:08 +00004125 (getter)long_long, (setter)NULL,
4126 "the numerator of a rational number in lowest terms",
4127 NULL},
Mark Dickinson6bf19002009-05-02 17:57:52 +00004128 {"denominator",
4129 (getter)long_get1, (setter)NULL,
Guido van Rossumb43daf72007-08-01 18:08:08 +00004130 "the denominator of a rational number in lowest terms",
Mark Dickinson6bf19002009-05-02 17:57:52 +00004131 NULL},
Guido van Rossumb43daf72007-08-01 18:08:08 +00004132 {NULL} /* Sentinel */
4133};
4134
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00004135PyDoc_STRVAR(long_doc,
Guido van Rossumddefaf32007-01-14 03:31:43 +00004136"int(x[, base]) -> integer\n\
Tim Peters6d6c1a32001-08-02 04:15:00 +00004137\n\
Guido van Rossumddefaf32007-01-14 03:31:43 +00004138Convert a string or number to an integer, if possible. A floating\n\
Tim Peters6d6c1a32001-08-02 04:15:00 +00004139point argument will be truncated towards zero (this does not include a\n\
4140string representation of a floating point number!) When converting a\n\
4141string, use the optional base. It is an error to supply a base when\n\
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00004142converting a non-string.");
Tim Peters6d6c1a32001-08-02 04:15:00 +00004143
Guido van Rossumc0b618a1997-05-02 03:12:38 +00004144static PyNumberMethods long_as_number = {
Antoine Pitrou7f14f0d2010-05-09 16:14:21 +00004145 (binaryfunc) long_add, /*nb_add*/
4146 (binaryfunc) long_sub, /*nb_subtract*/
4147 (binaryfunc) long_mul, /*nb_multiply*/
4148 long_mod, /*nb_remainder*/
4149 long_divmod, /*nb_divmod*/
4150 long_pow, /*nb_power*/
4151 (unaryfunc) long_neg, /*nb_negative*/
4152 (unaryfunc) long_long, /*tp_positive*/
4153 (unaryfunc) long_abs, /*tp_absolute*/
4154 (inquiry) long_bool, /*tp_bool*/
4155 (unaryfunc) long_invert, /*nb_invert*/
4156 long_lshift, /*nb_lshift*/
4157 (binaryfunc) long_rshift, /*nb_rshift*/
4158 long_and, /*nb_and*/
4159 long_xor, /*nb_xor*/
4160 long_or, /*nb_or*/
4161 long_long, /*nb_int*/
4162 0, /*nb_reserved*/
4163 long_float, /*nb_float*/
4164 0, /* nb_inplace_add */
4165 0, /* nb_inplace_subtract */
4166 0, /* nb_inplace_multiply */
4167 0, /* nb_inplace_remainder */
4168 0, /* nb_inplace_power */
4169 0, /* nb_inplace_lshift */
4170 0, /* nb_inplace_rshift */
4171 0, /* nb_inplace_and */
4172 0, /* nb_inplace_xor */
4173 0, /* nb_inplace_or */
4174 long_div, /* nb_floor_divide */
4175 long_true_divide, /* nb_true_divide */
4176 0, /* nb_inplace_floor_divide */
4177 0, /* nb_inplace_true_divide */
4178 long_long, /* nb_index */
Guido van Rossumedcc38a1991-05-05 20:09:44 +00004179};
4180
Guido van Rossumc0b618a1997-05-02 03:12:38 +00004181PyTypeObject PyLong_Type = {
Antoine Pitrou7f14f0d2010-05-09 16:14:21 +00004182 PyVarObject_HEAD_INIT(&PyType_Type, 0)
4183 "int", /* tp_name */
4184 offsetof(PyLongObject, ob_digit), /* tp_basicsize */
4185 sizeof(digit), /* tp_itemsize */
4186 long_dealloc, /* tp_dealloc */
4187 0, /* tp_print */
4188 0, /* tp_getattr */
4189 0, /* tp_setattr */
4190 0, /* tp_reserved */
4191 long_repr, /* tp_repr */
4192 &long_as_number, /* tp_as_number */
4193 0, /* tp_as_sequence */
4194 0, /* tp_as_mapping */
4195 (hashfunc)long_hash, /* tp_hash */
4196 0, /* tp_call */
4197 long_repr, /* tp_str */
4198 PyObject_GenericGetAttr, /* tp_getattro */
4199 0, /* tp_setattro */
4200 0, /* tp_as_buffer */
4201 Py_TPFLAGS_DEFAULT | Py_TPFLAGS_BASETYPE |
4202 Py_TPFLAGS_LONG_SUBCLASS, /* tp_flags */
4203 long_doc, /* tp_doc */
4204 0, /* tp_traverse */
4205 0, /* tp_clear */
4206 long_richcompare, /* tp_richcompare */
4207 0, /* tp_weaklistoffset */
4208 0, /* tp_iter */
4209 0, /* tp_iternext */
4210 long_methods, /* tp_methods */
4211 0, /* tp_members */
4212 long_getset, /* tp_getset */
4213 0, /* tp_base */
4214 0, /* tp_dict */
4215 0, /* tp_descr_get */
4216 0, /* tp_descr_set */
4217 0, /* tp_dictoffset */
4218 0, /* tp_init */
4219 0, /* tp_alloc */
4220 long_new, /* tp_new */
4221 PyObject_Del, /* tp_free */
Guido van Rossumedcc38a1991-05-05 20:09:44 +00004222};
Guido van Rossumddefaf32007-01-14 03:31:43 +00004223
Mark Dickinsonbd792642009-03-18 20:06:12 +00004224static PyTypeObject Int_InfoType;
4225
4226PyDoc_STRVAR(int_info__doc__,
4227"sys.int_info\n\
4228\n\
4229A struct sequence that holds information about Python's\n\
4230internal representation of integers. The attributes are read only.");
4231
4232static PyStructSequence_Field int_info_fields[] = {
Antoine Pitrou7f14f0d2010-05-09 16:14:21 +00004233 {"bits_per_digit", "size of a digit in bits"},
4234 {"sizeof_digit", "size in bytes of the C type used to "
4235 "represent a digit"},
4236 {NULL, NULL}
Mark Dickinsonbd792642009-03-18 20:06:12 +00004237};
4238
4239static PyStructSequence_Desc int_info_desc = {
Antoine Pitrou7f14f0d2010-05-09 16:14:21 +00004240 "sys.int_info", /* name */
4241 int_info__doc__, /* doc */
4242 int_info_fields, /* fields */
4243 2 /* number of fields */
Mark Dickinsonbd792642009-03-18 20:06:12 +00004244};
4245
4246PyObject *
4247PyLong_GetInfo(void)
4248{
Antoine Pitrou7f14f0d2010-05-09 16:14:21 +00004249 PyObject* int_info;
4250 int field = 0;
4251 int_info = PyStructSequence_New(&Int_InfoType);
4252 if (int_info == NULL)
4253 return NULL;
4254 PyStructSequence_SET_ITEM(int_info, field++,
4255 PyLong_FromLong(PyLong_SHIFT));
4256 PyStructSequence_SET_ITEM(int_info, field++,
4257 PyLong_FromLong(sizeof(digit)));
4258 if (PyErr_Occurred()) {
4259 Py_CLEAR(int_info);
4260 return NULL;
4261 }
4262 return int_info;
Mark Dickinsonbd792642009-03-18 20:06:12 +00004263}
4264
Guido van Rossumddefaf32007-01-14 03:31:43 +00004265int
4266_PyLong_Init(void)
4267{
4268#if NSMALLNEGINTS + NSMALLPOSINTS > 0
Antoine Pitrou7f14f0d2010-05-09 16:14:21 +00004269 int ival, size;
4270 PyLongObject *v = small_ints;
Christian Heimesdfc12ed2008-01-31 15:16:38 +00004271
Antoine Pitrou7f14f0d2010-05-09 16:14:21 +00004272 for (ival = -NSMALLNEGINTS; ival < NSMALLPOSINTS; ival++, v++) {
4273 size = (ival < 0) ? -1 : ((ival == 0) ? 0 : 1);
4274 if (Py_TYPE(v) == &PyLong_Type) {
4275 /* The element is already initialized, most likely
4276 * the Python interpreter was initialized before.
4277 */
4278 Py_ssize_t refcnt;
4279 PyObject* op = (PyObject*)v;
Christian Heimesdfc12ed2008-01-31 15:16:38 +00004280
Antoine Pitrou7f14f0d2010-05-09 16:14:21 +00004281 refcnt = Py_REFCNT(op) < 0 ? 0 : Py_REFCNT(op);
4282 _Py_NewReference(op);
4283 /* _Py_NewReference sets the ref count to 1 but
4284 * the ref count might be larger. Set the refcnt
4285 * to the original refcnt + 1 */
4286 Py_REFCNT(op) = refcnt + 1;
4287 assert(Py_SIZE(op) == size);
4288 assert(v->ob_digit[0] == abs(ival));
4289 }
4290 else {
4291 PyObject_INIT(v, &PyLong_Type);
4292 }
4293 Py_SIZE(v) = size;
4294 v->ob_digit[0] = abs(ival);
4295 }
Guido van Rossumddefaf32007-01-14 03:31:43 +00004296#endif
Antoine Pitrou7f14f0d2010-05-09 16:14:21 +00004297 /* initialize int_info */
4298 if (Int_InfoType.tp_name == 0)
4299 PyStructSequence_InitType(&Int_InfoType, &int_info_desc);
Mark Dickinsonbd792642009-03-18 20:06:12 +00004300
Antoine Pitrou7f14f0d2010-05-09 16:14:21 +00004301 return 1;
Guido van Rossumddefaf32007-01-14 03:31:43 +00004302}
4303
4304void
4305PyLong_Fini(void)
4306{
Antoine Pitrou7f14f0d2010-05-09 16:14:21 +00004307 /* Integers are currently statically allocated. Py_DECREF is not
4308 needed, but Python must forget about the reference or multiple
4309 reinitializations will fail. */
Guido van Rossumddefaf32007-01-14 03:31:43 +00004310#if NSMALLNEGINTS + NSMALLPOSINTS > 0
Antoine Pitrou7f14f0d2010-05-09 16:14:21 +00004311 int i;
4312 PyLongObject *v = small_ints;
4313 for (i = 0; i < NSMALLNEGINTS + NSMALLPOSINTS; i++, v++) {
4314 _Py_DEC_REFTOTAL;
4315 _Py_ForgetReference((PyObject*)v);
4316 }
Guido van Rossumddefaf32007-01-14 03:31:43 +00004317#endif
4318}