blob: 6f469bf3e32e4f88ef0d2ebfffd7dfb30a8d6d43 [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 Dickinsonefc82f72009-03-20 15:51:55 +00007#include "structseq.h"
Guido van Rossumc0b618a1997-05-02 03:12:38 +00008
Mark Dickinson6736cf82009-04-20 21:13:33 +00009#include <float.h>
Guido van Rossumeb1fafc1994-08-29 12:47:19 +000010#include <ctype.h>
Mark Dickinson2ffb26f2009-02-15 10:13:41 +000011#include <stddef.h>
Guido van Rossumedcc38a1991-05-05 20:09:44 +000012
Tim Peters5af4e6c2002-08-12 02:31:19 +000013/* For long multiplication, use the O(N**2) school algorithm unless
14 * both operands contain more than KARATSUBA_CUTOFF digits (this
Christian Heimes7f39c9f2008-01-25 12:18:43 +000015 * being an internal Python long digit, in base PyLong_BASE).
Tim Peters5af4e6c2002-08-12 02:31:19 +000016 */
Tim Peters0973b992004-08-29 22:16:50 +000017#define KARATSUBA_CUTOFF 70
18#define KARATSUBA_SQUARE_CUTOFF (2 * KARATSUBA_CUTOFF)
Tim Peters5af4e6c2002-08-12 02:31:19 +000019
Tim Peters47e52ee2004-08-30 02:44:38 +000020/* For exponentiation, use the binary left-to-right algorithm
21 * unless the exponent contains more than FIVEARY_CUTOFF digits.
22 * In that case, do 5 bits at a time. The potential drawback is that
23 * a table of 2**5 intermediate results is computed.
24 */
25#define FIVEARY_CUTOFF 8
26
Guido van Rossume32e0141992-01-19 16:31:05 +000027#define ABS(x) ((x) < 0 ? -(x) : (x))
28
Tim Peters5af4e6c2002-08-12 02:31:19 +000029#undef MIN
30#undef MAX
31#define MAX(x, y) ((x) < (y) ? (y) : (x))
32#define MIN(x, y) ((x) > (y) ? (y) : (x))
33
Mark Dickinson43ca3772010-05-09 20:42:09 +000034#define SIGCHECK(PyTryBlock) \
35 do { \
36 if (--_Py_Ticker < 0) { \
37 _Py_Ticker = _Py_CheckInterval; \
38 if (PyErr_CheckSignals()) PyTryBlock \
39 } \
40 } while(0)
Guido van Rossum23d6f0e1991-05-14 12:06:49 +000041
Guido van Rossumedcc38a1991-05-05 20:09:44 +000042/* Normalize (remove leading zeros from) a long int object.
43 Doesn't attempt to free the storage--in most cases, due to the nature
44 of the algorithms used, this could save at most be one word anyway. */
45
Guido van Rossumc0b618a1997-05-02 03:12:38 +000046static PyLongObject *
Tim Peters9f688bf2000-07-07 15:53:28 +000047long_normalize(register PyLongObject *v)
Guido van Rossumedcc38a1991-05-05 20:09:44 +000048{
Antoine Pitrouc83ea132010-05-09 14:46:46 +000049 Py_ssize_t j = ABS(Py_SIZE(v));
50 Py_ssize_t i = j;
Tim Peters5af4e6c2002-08-12 02:31:19 +000051
Antoine Pitrouc83ea132010-05-09 14:46:46 +000052 while (i > 0 && v->ob_digit[i-1] == 0)
53 --i;
54 if (i != j)
55 Py_SIZE(v) = (Py_SIZE(v) < 0) ? -(i) : i;
56 return v;
Guido van Rossumedcc38a1991-05-05 20:09:44 +000057}
58
59/* Allocate a new long int object with size digits.
60 Return NULL and set exception if we run out of memory. */
61
Mark Dickinson2ffb26f2009-02-15 10:13:41 +000062#define MAX_LONG_DIGITS \
Antoine Pitrouc83ea132010-05-09 14:46:46 +000063 ((PY_SSIZE_T_MAX - offsetof(PyLongObject, ob_digit))/sizeof(digit))
Mark Dickinson2ffb26f2009-02-15 10:13:41 +000064
Guido van Rossumc0b618a1997-05-02 03:12:38 +000065PyLongObject *
Martin v. Löwis18e16552006-02-15 17:27:45 +000066_PyLong_New(Py_ssize_t size)
Guido van Rossumedcc38a1991-05-05 20:09:44 +000067{
Antoine Pitrouc83ea132010-05-09 14:46:46 +000068 if (size > (Py_ssize_t)MAX_LONG_DIGITS) {
69 PyErr_SetString(PyExc_OverflowError,
70 "too many digits in integer");
71 return NULL;
72 }
73 /* coverity[ampersand_in_size] */
74 /* XXX(nnorwitz): PyObject_NEW_VAR / _PyObject_VAR_SIZE need to detect
75 overflow */
76 return PyObject_NEW_VAR(PyLongObject, &PyLong_Type, size);
Guido van Rossumedcc38a1991-05-05 20:09:44 +000077}
78
Tim Peters64b5ce32001-09-10 20:52:51 +000079PyObject *
80_PyLong_Copy(PyLongObject *src)
81{
Antoine Pitrouc83ea132010-05-09 14:46:46 +000082 PyLongObject *result;
83 Py_ssize_t i;
Tim Peters64b5ce32001-09-10 20:52:51 +000084
Antoine Pitrouc83ea132010-05-09 14:46:46 +000085 assert(src != NULL);
86 i = src->ob_size;
87 if (i < 0)
88 i = -(i);
89 result = _PyLong_New(i);
90 if (result != NULL) {
91 result->ob_size = src->ob_size;
92 while (--i >= 0)
93 result->ob_digit[i] = src->ob_digit[i];
94 }
95 return (PyObject *)result;
Tim Peters64b5ce32001-09-10 20:52:51 +000096}
97
Guido van Rossumedcc38a1991-05-05 20:09:44 +000098/* Create a new long int object from a C long int */
99
Guido van Rossumc0b618a1997-05-02 03:12:38 +0000100PyObject *
Tim Peters9f688bf2000-07-07 15:53:28 +0000101PyLong_FromLong(long ival)
Guido van Rossumedcc38a1991-05-05 20:09:44 +0000102{
Antoine Pitrouc83ea132010-05-09 14:46:46 +0000103 PyLongObject *v;
104 unsigned long abs_ival;
105 unsigned long t; /* unsigned so >> doesn't propagate sign bit */
106 int ndigits = 0;
107 int negative = 0;
Tim Petersce9de2f2001-06-14 04:56:19 +0000108
Antoine Pitrouc83ea132010-05-09 14:46:46 +0000109 if (ival < 0) {
110 /* if LONG_MIN == -LONG_MAX-1 (true on most platforms) then
111 ANSI C says that the result of -ival is undefined when ival
112 == LONG_MIN. Hence the following workaround. */
113 abs_ival = (unsigned long)(-1-ival) + 1;
114 negative = 1;
115 }
116 else {
117 abs_ival = (unsigned long)ival;
118 }
Tim Petersce9de2f2001-06-14 04:56:19 +0000119
Antoine Pitrouc83ea132010-05-09 14:46:46 +0000120 /* Count the number of Python digits.
121 We used to pick 5 ("big enough for anything"), but that's a
122 waste of time and space given that 5*15 = 75 bits are rarely
123 needed. */
124 t = abs_ival;
125 while (t) {
126 ++ndigits;
127 t >>= PyLong_SHIFT;
128 }
129 v = _PyLong_New(ndigits);
130 if (v != NULL) {
131 digit *p = v->ob_digit;
132 v->ob_size = negative ? -ndigits : ndigits;
133 t = abs_ival;
134 while (t) {
135 *p++ = (digit)(t & PyLong_MASK);
136 t >>= PyLong_SHIFT;
137 }
138 }
139 return (PyObject *)v;
Guido van Rossumedcc38a1991-05-05 20:09:44 +0000140}
141
Guido van Rossum53756b11997-01-03 17:14:46 +0000142/* Create a new long int object from a C unsigned long int */
143
Guido van Rossumc0b618a1997-05-02 03:12:38 +0000144PyObject *
Tim Peters9f688bf2000-07-07 15:53:28 +0000145PyLong_FromUnsignedLong(unsigned long ival)
Guido van Rossum53756b11997-01-03 17:14:46 +0000146{
Antoine Pitrouc83ea132010-05-09 14:46:46 +0000147 PyLongObject *v;
148 unsigned long t;
149 int ndigits = 0;
Tim Petersce9de2f2001-06-14 04:56:19 +0000150
Antoine Pitrouc83ea132010-05-09 14:46:46 +0000151 /* Count the number of Python digits. */
152 t = (unsigned long)ival;
153 while (t) {
154 ++ndigits;
155 t >>= PyLong_SHIFT;
156 }
157 v = _PyLong_New(ndigits);
158 if (v != NULL) {
159 digit *p = v->ob_digit;
160 Py_SIZE(v) = ndigits;
161 while (ival) {
162 *p++ = (digit)(ival & PyLong_MASK);
163 ival >>= PyLong_SHIFT;
164 }
165 }
166 return (PyObject *)v;
Guido van Rossum53756b11997-01-03 17:14:46 +0000167}
168
Guido van Rossum149e9ea1991-06-03 10:58:24 +0000169/* Create a new long int object from a C double */
170
Guido van Rossumc0b618a1997-05-02 03:12:38 +0000171PyObject *
Guido van Rossumc0b618a1997-05-02 03:12:38 +0000172PyLong_FromDouble(double dval)
Guido van Rossum149e9ea1991-06-03 10:58:24 +0000173{
Antoine Pitrouc83ea132010-05-09 14:46:46 +0000174 PyLongObject *v;
175 double frac;
176 int i, ndig, expo, neg;
177 neg = 0;
178 if (Py_IS_INFINITY(dval)) {
179 PyErr_SetString(PyExc_OverflowError,
Mark Dickinsonfda8d112010-05-09 20:30:29 +0000180 "cannot convert float infinity to integer");
Antoine Pitrouc83ea132010-05-09 14:46:46 +0000181 return NULL;
182 }
183 if (Py_IS_NAN(dval)) {
184 PyErr_SetString(PyExc_ValueError,
Mark Dickinsonfda8d112010-05-09 20:30:29 +0000185 "cannot convert float NaN to integer");
Antoine Pitrouc83ea132010-05-09 14:46:46 +0000186 return NULL;
187 }
188 if (dval < 0.0) {
189 neg = 1;
190 dval = -dval;
191 }
192 frac = frexp(dval, &expo); /* dval = frac*2**expo; 0.0 <= frac < 1.0 */
193 if (expo <= 0)
194 return PyLong_FromLong(0L);
195 ndig = (expo-1) / PyLong_SHIFT + 1; /* Number of 'digits' in result */
196 v = _PyLong_New(ndig);
197 if (v == NULL)
198 return NULL;
199 frac = ldexp(frac, (expo-1) % PyLong_SHIFT + 1);
200 for (i = ndig; --i >= 0; ) {
201 digit bits = (digit)frac;
202 v->ob_digit[i] = bits;
203 frac = frac - (double)bits;
204 frac = ldexp(frac, PyLong_SHIFT);
205 }
206 if (neg)
207 Py_SIZE(v) = -(Py_SIZE(v));
208 return (PyObject *)v;
Guido van Rossum149e9ea1991-06-03 10:58:24 +0000209}
210
Armin Rigo7ccbca92006-10-04 12:17:45 +0000211/* Checking for overflow in PyLong_AsLong is a PITA since C doesn't define
212 * anything about what happens when a signed integer operation overflows,
213 * and some compilers think they're doing you a favor by being "clever"
214 * then. The bit pattern for the largest postive signed long is
215 * (unsigned long)LONG_MAX, and for the smallest negative signed long
216 * it is abs(LONG_MIN), which we could write -(unsigned long)LONG_MIN.
217 * However, some other compilers warn about applying unary minus to an
218 * unsigned operand. Hence the weird "0-".
219 */
Antoine Pitrouc83ea132010-05-09 14:46:46 +0000220#define PY_ABS_LONG_MIN (0-(unsigned long)LONG_MIN)
221#define PY_ABS_SSIZE_T_MIN (0-(size_t)PY_SSIZE_T_MIN)
Armin Rigo7ccbca92006-10-04 12:17:45 +0000222
Mark Dickinsone31d3002009-12-21 11:21:25 +0000223/* Get a C long int from a Python long or Python int object.
224 On overflow, returns -1 and sets *overflow to 1 or -1 depending
225 on the sign of the result. Otherwise *overflow is 0.
226
227 For other errors (e.g., type error), returns -1 and sets an error
228 condition.
229*/
Guido van Rossumedcc38a1991-05-05 20:09:44 +0000230
231long
Mark Dickinsone31d3002009-12-21 11:21:25 +0000232PyLong_AsLongAndOverflow(PyObject *vv, int *overflow)
Guido van Rossumedcc38a1991-05-05 20:09:44 +0000233{
Antoine Pitrouc83ea132010-05-09 14:46:46 +0000234 /* This version by Tim Peters */
235 register PyLongObject *v;
236 unsigned long x, prev;
237 long res;
238 Py_ssize_t i;
239 int sign;
240 int do_decref = 0; /* if nb_int was called */
Guido van Rossumf7531811998-05-26 14:33:37 +0000241
Antoine Pitrouc83ea132010-05-09 14:46:46 +0000242 *overflow = 0;
243 if (vv == NULL) {
244 PyErr_BadInternalCall();
245 return -1;
246 }
Guido van Rossumf7531811998-05-26 14:33:37 +0000247
Antoine Pitrouc83ea132010-05-09 14:46:46 +0000248 if(PyInt_Check(vv))
249 return PyInt_AsLong(vv);
Mark Dickinsone31d3002009-12-21 11:21:25 +0000250
Antoine Pitrouc83ea132010-05-09 14:46:46 +0000251 if (!PyLong_Check(vv)) {
252 PyNumberMethods *nb;
253 nb = vv->ob_type->tp_as_number;
254 if (nb == NULL || nb->nb_int == NULL) {
255 PyErr_SetString(PyExc_TypeError,
256 "an integer is required");
257 return -1;
258 }
259 vv = (*nb->nb_int) (vv);
260 if (vv == NULL)
261 return -1;
262 do_decref = 1;
263 if(PyInt_Check(vv)) {
264 res = PyInt_AsLong(vv);
265 goto exit;
266 }
267 if (!PyLong_Check(vv)) {
268 Py_DECREF(vv);
269 PyErr_SetString(PyExc_TypeError,
270 "nb_int should return int object");
271 return -1;
272 }
273 }
Mark Dickinsone31d3002009-12-21 11:21:25 +0000274
Antoine Pitrouc83ea132010-05-09 14:46:46 +0000275 res = -1;
276 v = (PyLongObject *)vv;
277 i = Py_SIZE(v);
Mark Dickinsone31d3002009-12-21 11:21:25 +0000278
Antoine Pitrouc83ea132010-05-09 14:46:46 +0000279 switch (i) {
280 case -1:
281 res = -(sdigit)v->ob_digit[0];
282 break;
283 case 0:
284 res = 0;
285 break;
286 case 1:
287 res = v->ob_digit[0];
288 break;
289 default:
290 sign = 1;
291 x = 0;
292 if (i < 0) {
293 sign = -1;
294 i = -(i);
295 }
296 while (--i >= 0) {
297 prev = x;
298 x = (x << PyLong_SHIFT) + v->ob_digit[i];
299 if ((x >> PyLong_SHIFT) != prev) {
300 *overflow = sign;
301 goto exit;
302 }
303 }
304 /* Haven't lost any bits, but casting to long requires extra
305 * care (see comment above).
306 */
307 if (x <= (unsigned long)LONG_MAX) {
308 res = (long)x * sign;
309 }
310 else if (sign < 0 && x == PY_ABS_LONG_MIN) {
311 res = LONG_MIN;
312 }
313 else {
314 *overflow = sign;
315 /* res is already set to -1 */
316 }
317 }
Mark Dickinsonfda8d112010-05-09 20:30:29 +0000318 exit:
Antoine Pitrouc83ea132010-05-09 14:46:46 +0000319 if (do_decref) {
320 Py_DECREF(vv);
321 }
322 return res;
Mark Dickinsone31d3002009-12-21 11:21:25 +0000323}
324
325/* Get a C long int from a long int object.
326 Returns -1 and sets an error condition if overflow occurs. */
327
328long
329PyLong_AsLong(PyObject *obj)
330{
Antoine Pitrouc83ea132010-05-09 14:46:46 +0000331 int overflow;
332 long result = PyLong_AsLongAndOverflow(obj, &overflow);
333 if (overflow) {
334 /* XXX: could be cute and give a different
335 message for overflow == -1 */
336 PyErr_SetString(PyExc_OverflowError,
337 "Python int too large to convert to C long");
338 }
339 return result;
Guido van Rossumedcc38a1991-05-05 20:09:44 +0000340}
341
Serhiy Storchaka74f49ab2013-01-19 12:55:39 +0200342/* Get a C int from a long int object or any object that has an __int__
343 method. Return -1 and set an error if overflow occurs. */
344
345int
346_PyLong_AsInt(PyObject *obj)
347{
348 int overflow;
349 long result = PyLong_AsLongAndOverflow(obj, &overflow);
350 if (overflow || result > INT_MAX || result < INT_MIN) {
351 /* XXX: could be cute and give a different
352 message for overflow == -1 */
353 PyErr_SetString(PyExc_OverflowError,
354 "Python int too large to convert to C int");
355 return -1;
356 }
357 return (int)result;
358}
359
Neal Norwitz8a87f5d2006-08-12 17:03:09 +0000360/* Get a Py_ssize_t from a long int object.
361 Returns -1 and sets an error condition if overflow occurs. */
362
363Py_ssize_t
Christian Heimes7f39c9f2008-01-25 12:18:43 +0000364PyLong_AsSsize_t(PyObject *vv) {
Antoine Pitrouc83ea132010-05-09 14:46:46 +0000365 register PyLongObject *v;
366 size_t x, prev;
367 Py_ssize_t i;
368 int sign;
Martin v. Löwis18e16552006-02-15 17:27:45 +0000369
Antoine Pitrouc83ea132010-05-09 14:46:46 +0000370 if (vv == NULL || !PyLong_Check(vv)) {
371 PyErr_BadInternalCall();
372 return -1;
373 }
374 v = (PyLongObject *)vv;
375 i = v->ob_size;
376 sign = 1;
377 x = 0;
378 if (i < 0) {
379 sign = -1;
380 i = -(i);
381 }
382 while (--i >= 0) {
383 prev = x;
384 x = (x << PyLong_SHIFT) | v->ob_digit[i];
385 if ((x >> PyLong_SHIFT) != prev)
386 goto overflow;
387 }
388 /* Haven't lost any bits, but casting to a signed type requires
389 * extra care (see comment above).
390 */
391 if (x <= (size_t)PY_SSIZE_T_MAX) {
392 return (Py_ssize_t)x * sign;
393 }
394 else if (sign < 0 && x == PY_ABS_SSIZE_T_MIN) {
395 return PY_SSIZE_T_MIN;
396 }
397 /* else overflow */
Martin v. Löwis18e16552006-02-15 17:27:45 +0000398
Mark Dickinsonfda8d112010-05-09 20:30:29 +0000399 overflow:
Antoine Pitrouc83ea132010-05-09 14:46:46 +0000400 PyErr_SetString(PyExc_OverflowError,
401 "long int too large to convert to int");
402 return -1;
Martin v. Löwis18e16552006-02-15 17:27:45 +0000403}
404
Guido van Rossumd8c80482002-08-13 00:24:58 +0000405/* Get a C unsigned long int from a long int object.
Guido van Rossum53756b11997-01-03 17:14:46 +0000406 Returns -1 and sets an error condition if overflow occurs. */
407
408unsigned long
Tim Peters9f688bf2000-07-07 15:53:28 +0000409PyLong_AsUnsignedLong(PyObject *vv)
Guido van Rossum53756b11997-01-03 17:14:46 +0000410{
Antoine Pitrouc83ea132010-05-09 14:46:46 +0000411 register PyLongObject *v;
412 unsigned long x, prev;
413 Py_ssize_t i;
Tim Peters5af4e6c2002-08-12 02:31:19 +0000414
Antoine Pitrouc83ea132010-05-09 14:46:46 +0000415 if (vv == NULL || !PyLong_Check(vv)) {
416 if (vv != NULL && PyInt_Check(vv)) {
417 long val = PyInt_AsLong(vv);
418 if (val < 0) {
419 PyErr_SetString(PyExc_OverflowError,
Mark Dickinsonfda8d112010-05-09 20:30:29 +0000420 "can't convert negative value "
421 "to unsigned long");
Antoine Pitrouc83ea132010-05-09 14:46:46 +0000422 return (unsigned long) -1;
423 }
424 return val;
425 }
426 PyErr_BadInternalCall();
427 return (unsigned long) -1;
428 }
429 v = (PyLongObject *)vv;
430 i = Py_SIZE(v);
431 x = 0;
432 if (i < 0) {
433 PyErr_SetString(PyExc_OverflowError,
Mark Dickinsonfda8d112010-05-09 20:30:29 +0000434 "can't convert negative value to unsigned long");
Antoine Pitrouc83ea132010-05-09 14:46:46 +0000435 return (unsigned long) -1;
436 }
437 while (--i >= 0) {
438 prev = x;
439 x = (x << PyLong_SHIFT) | v->ob_digit[i];
440 if ((x >> PyLong_SHIFT) != prev) {
441 PyErr_SetString(PyExc_OverflowError,
Mark Dickinsonfda8d112010-05-09 20:30:29 +0000442 "long int too large to convert");
Antoine Pitrouc83ea132010-05-09 14:46:46 +0000443 return (unsigned long) -1;
444 }
445 }
446 return x;
Guido van Rossum53756b11997-01-03 17:14:46 +0000447}
448
Thomas Hellera4ea6032003-04-17 18:55:45 +0000449/* Get a C unsigned long int from a long int object, ignoring the high bits.
450 Returns -1 and sets an error condition if an error occurs. */
451
452unsigned long
453PyLong_AsUnsignedLongMask(PyObject *vv)
454{
Antoine Pitrouc83ea132010-05-09 14:46:46 +0000455 register PyLongObject *v;
456 unsigned long x;
457 Py_ssize_t i;
458 int sign;
Thomas Hellera4ea6032003-04-17 18:55:45 +0000459
Antoine Pitrouc83ea132010-05-09 14:46:46 +0000460 if (vv == NULL || !PyLong_Check(vv)) {
461 if (vv != NULL && PyInt_Check(vv))
462 return PyInt_AsUnsignedLongMask(vv);
463 PyErr_BadInternalCall();
464 return (unsigned long) -1;
465 }
466 v = (PyLongObject *)vv;
467 i = v->ob_size;
468 sign = 1;
469 x = 0;
470 if (i < 0) {
471 sign = -1;
472 i = -i;
473 }
474 while (--i >= 0) {
475 x = (x << PyLong_SHIFT) | v->ob_digit[i];
476 }
477 return x * sign;
Thomas Hellera4ea6032003-04-17 18:55:45 +0000478}
479
Tim Peters5b8132f2003-01-31 15:52:05 +0000480int
481_PyLong_Sign(PyObject *vv)
482{
Antoine Pitrouc83ea132010-05-09 14:46:46 +0000483 PyLongObject *v = (PyLongObject *)vv;
Tim Peters5b8132f2003-01-31 15:52:05 +0000484
Antoine Pitrouc83ea132010-05-09 14:46:46 +0000485 assert(v != NULL);
486 assert(PyLong_Check(v));
Tim Peters5b8132f2003-01-31 15:52:05 +0000487
Antoine Pitrouc83ea132010-05-09 14:46:46 +0000488 return Py_SIZE(v) == 0 ? 0 : (Py_SIZE(v) < 0 ? -1 : 1);
Tim Peters5b8132f2003-01-31 15:52:05 +0000489}
490
Tim Petersbaefd9e2003-01-28 20:37:45 +0000491size_t
492_PyLong_NumBits(PyObject *vv)
493{
Antoine Pitrouc83ea132010-05-09 14:46:46 +0000494 PyLongObject *v = (PyLongObject *)vv;
495 size_t result = 0;
496 Py_ssize_t ndigits;
Tim Petersbaefd9e2003-01-28 20:37:45 +0000497
Antoine Pitrouc83ea132010-05-09 14:46:46 +0000498 assert(v != NULL);
499 assert(PyLong_Check(v));
500 ndigits = ABS(Py_SIZE(v));
501 assert(ndigits == 0 || v->ob_digit[ndigits - 1] != 0);
502 if (ndigits > 0) {
503 digit msd = v->ob_digit[ndigits - 1];
Tim Petersbaefd9e2003-01-28 20:37:45 +0000504
Antoine Pitrouc83ea132010-05-09 14:46:46 +0000505 result = (ndigits - 1) * PyLong_SHIFT;
506 if (result / PyLong_SHIFT != (size_t)(ndigits - 1))
507 goto Overflow;
508 do {
509 ++result;
510 if (result == 0)
511 goto Overflow;
512 msd >>= 1;
513 } while (msd);
514 }
515 return result;
Tim Petersbaefd9e2003-01-28 20:37:45 +0000516
Mark Dickinsonfda8d112010-05-09 20:30:29 +0000517 Overflow:
Antoine Pitrouc83ea132010-05-09 14:46:46 +0000518 PyErr_SetString(PyExc_OverflowError, "long has too many bits "
519 "to express in a platform size_t");
520 return (size_t)-1;
Tim Petersbaefd9e2003-01-28 20:37:45 +0000521}
522
Tim Peters2a9b3672001-06-11 21:23:58 +0000523PyObject *
524_PyLong_FromByteArray(const unsigned char* bytes, size_t n,
Antoine Pitrouc83ea132010-05-09 14:46:46 +0000525 int little_endian, int is_signed)
Tim Peters2a9b3672001-06-11 21:23:58 +0000526{
Mark Dickinsonfda8d112010-05-09 20:30:29 +0000527 const unsigned char* pstartbyte; /* LSB of bytes */
Antoine Pitrouc83ea132010-05-09 14:46:46 +0000528 int incr; /* direction to move pstartbyte */
529 const unsigned char* pendbyte; /* MSB of bytes */
530 size_t numsignificantbytes; /* number of bytes that matter */
531 Py_ssize_t ndigits; /* number of Python long digits */
532 PyLongObject* v; /* result */
533 Py_ssize_t idigit = 0; /* next free index in v->ob_digit */
Tim Peters2a9b3672001-06-11 21:23:58 +0000534
Antoine Pitrouc83ea132010-05-09 14:46:46 +0000535 if (n == 0)
536 return PyLong_FromLong(0L);
Tim Peters2a9b3672001-06-11 21:23:58 +0000537
Antoine Pitrouc83ea132010-05-09 14:46:46 +0000538 if (little_endian) {
539 pstartbyte = bytes;
540 pendbyte = bytes + n - 1;
541 incr = 1;
542 }
543 else {
544 pstartbyte = bytes + n - 1;
545 pendbyte = bytes;
546 incr = -1;
547 }
Tim Peters2a9b3672001-06-11 21:23:58 +0000548
Antoine Pitrouc83ea132010-05-09 14:46:46 +0000549 if (is_signed)
550 is_signed = *pendbyte >= 0x80;
Tim Peters2a9b3672001-06-11 21:23:58 +0000551
Antoine Pitrouc83ea132010-05-09 14:46:46 +0000552 /* Compute numsignificantbytes. This consists of finding the most
Ezio Melottic2077b02011-03-16 12:34:31 +0200553 significant byte. Leading 0 bytes are insignificant if the number
Antoine Pitrouc83ea132010-05-09 14:46:46 +0000554 is positive, and leading 0xff bytes if negative. */
555 {
556 size_t i;
557 const unsigned char* p = pendbyte;
558 const int pincr = -incr; /* search MSB to LSB */
Martin Pantera850ef62016-07-28 01:11:04 +0000559 const unsigned char insignificant = is_signed ? 0xff : 0x00;
Tim Peters2a9b3672001-06-11 21:23:58 +0000560
Antoine Pitrouc83ea132010-05-09 14:46:46 +0000561 for (i = 0; i < n; ++i, p += pincr) {
Martin Pantera850ef62016-07-28 01:11:04 +0000562 if (*p != insignificant)
Antoine Pitrouc83ea132010-05-09 14:46:46 +0000563 break;
564 }
565 numsignificantbytes = n - i;
566 /* 2's-comp is a bit tricky here, e.g. 0xff00 == -0x0100, so
567 actually has 2 significant bytes. OTOH, 0xff0001 ==
568 -0x00ffff, so we wouldn't *need* to bump it there; but we
569 do for 0xffff = -0x0001. To be safe without bothering to
570 check every case, bump it regardless. */
571 if (is_signed && numsignificantbytes < n)
572 ++numsignificantbytes;
573 }
Tim Peters2a9b3672001-06-11 21:23:58 +0000574
Antoine Pitrouc83ea132010-05-09 14:46:46 +0000575 /* How many Python long digits do we need? We have
576 8*numsignificantbytes bits, and each Python long digit has
577 PyLong_SHIFT bits, so it's the ceiling of the quotient. */
578 /* catch overflow before it happens */
579 if (numsignificantbytes > (PY_SSIZE_T_MAX - PyLong_SHIFT) / 8) {
580 PyErr_SetString(PyExc_OverflowError,
581 "byte array too long to convert to int");
582 return NULL;
583 }
584 ndigits = (numsignificantbytes * 8 + PyLong_SHIFT - 1) / PyLong_SHIFT;
585 v = _PyLong_New(ndigits);
586 if (v == NULL)
587 return NULL;
Tim Peters2a9b3672001-06-11 21:23:58 +0000588
Antoine Pitrouc83ea132010-05-09 14:46:46 +0000589 /* Copy the bits over. The tricky parts are computing 2's-comp on
590 the fly for signed numbers, and dealing with the mismatch between
591 8-bit bytes and (probably) 15-bit Python digits.*/
592 {
593 size_t i;
594 twodigits carry = 1; /* for 2's-comp calculation */
595 twodigits accum = 0; /* sliding register */
596 unsigned int accumbits = 0; /* number of bits in accum */
597 const unsigned char* p = pstartbyte;
Tim Peters2a9b3672001-06-11 21:23:58 +0000598
Antoine Pitrouc83ea132010-05-09 14:46:46 +0000599 for (i = 0; i < numsignificantbytes; ++i, p += incr) {
600 twodigits thisbyte = *p;
601 /* Compute correction for 2's comp, if needed. */
602 if (is_signed) {
603 thisbyte = (0xff ^ thisbyte) + carry;
604 carry = thisbyte >> 8;
605 thisbyte &= 0xff;
606 }
607 /* Because we're going LSB to MSB, thisbyte is
608 more significant than what's already in accum,
609 so needs to be prepended to accum. */
610 accum |= (twodigits)thisbyte << accumbits;
611 accumbits += 8;
612 if (accumbits >= PyLong_SHIFT) {
613 /* There's enough to fill a Python digit. */
614 assert(idigit < ndigits);
Mark Dickinsonfda8d112010-05-09 20:30:29 +0000615 v->ob_digit[idigit] = (digit)(accum & PyLong_MASK);
Antoine Pitrouc83ea132010-05-09 14:46:46 +0000616 ++idigit;
617 accum >>= PyLong_SHIFT;
618 accumbits -= PyLong_SHIFT;
619 assert(accumbits < PyLong_SHIFT);
620 }
621 }
622 assert(accumbits < PyLong_SHIFT);
623 if (accumbits) {
624 assert(idigit < ndigits);
625 v->ob_digit[idigit] = (digit)accum;
626 ++idigit;
627 }
628 }
Tim Peters2a9b3672001-06-11 21:23:58 +0000629
Antoine Pitrouc83ea132010-05-09 14:46:46 +0000630 Py_SIZE(v) = is_signed ? -idigit : idigit;
631 return (PyObject *)long_normalize(v);
Tim Peters2a9b3672001-06-11 21:23:58 +0000632}
633
634int
635_PyLong_AsByteArray(PyLongObject* v,
Antoine Pitrouc83ea132010-05-09 14:46:46 +0000636 unsigned char* bytes, size_t n,
637 int little_endian, int is_signed)
Tim Peters2a9b3672001-06-11 21:23:58 +0000638{
Antoine Pitrouc83ea132010-05-09 14:46:46 +0000639 Py_ssize_t i; /* index into v->ob_digit */
Mark Dickinsonfda8d112010-05-09 20:30:29 +0000640 Py_ssize_t ndigits; /* |v->ob_size| */
Antoine Pitrouc83ea132010-05-09 14:46:46 +0000641 twodigits accum; /* sliding register */
Mark Dickinsonfda8d112010-05-09 20:30:29 +0000642 unsigned int accumbits; /* # bits in accum */
Antoine Pitrouc83ea132010-05-09 14:46:46 +0000643 int do_twos_comp; /* store 2's-comp? is_signed and v < 0 */
644 digit carry; /* for computing 2's-comp */
645 size_t j; /* # bytes filled */
646 unsigned char* p; /* pointer to next byte in bytes */
647 int pincr; /* direction to move p */
Tim Peters2a9b3672001-06-11 21:23:58 +0000648
Antoine Pitrouc83ea132010-05-09 14:46:46 +0000649 assert(v != NULL && PyLong_Check(v));
Tim Peters2a9b3672001-06-11 21:23:58 +0000650
Antoine Pitrouc83ea132010-05-09 14:46:46 +0000651 if (Py_SIZE(v) < 0) {
652 ndigits = -(Py_SIZE(v));
653 if (!is_signed) {
654 PyErr_SetString(PyExc_OverflowError,
Mark Dickinsonfda8d112010-05-09 20:30:29 +0000655 "can't convert negative long to unsigned");
Antoine Pitrouc83ea132010-05-09 14:46:46 +0000656 return -1;
657 }
658 do_twos_comp = 1;
659 }
660 else {
661 ndigits = Py_SIZE(v);
662 do_twos_comp = 0;
663 }
Tim Peters2a9b3672001-06-11 21:23:58 +0000664
Antoine Pitrouc83ea132010-05-09 14:46:46 +0000665 if (little_endian) {
666 p = bytes;
667 pincr = 1;
668 }
669 else {
670 p = bytes + n - 1;
671 pincr = -1;
672 }
Tim Peters2a9b3672001-06-11 21:23:58 +0000673
Antoine Pitrouc83ea132010-05-09 14:46:46 +0000674 /* Copy over all the Python digits.
675 It's crucial that every Python digit except for the MSD contribute
676 exactly PyLong_SHIFT bits to the total, so first assert that the long is
677 normalized. */
678 assert(ndigits == 0 || v->ob_digit[ndigits - 1] != 0);
679 j = 0;
680 accum = 0;
681 accumbits = 0;
682 carry = do_twos_comp ? 1 : 0;
683 for (i = 0; i < ndigits; ++i) {
684 digit thisdigit = v->ob_digit[i];
685 if (do_twos_comp) {
686 thisdigit = (thisdigit ^ PyLong_MASK) + carry;
687 carry = thisdigit >> PyLong_SHIFT;
688 thisdigit &= PyLong_MASK;
689 }
690 /* Because we're going LSB to MSB, thisdigit is more
691 significant than what's already in accum, so needs to be
692 prepended to accum. */
693 accum |= (twodigits)thisdigit << accumbits;
Tim Peters8bc84b42001-06-12 19:17:03 +0000694
Antoine Pitrouc83ea132010-05-09 14:46:46 +0000695 /* The most-significant digit may be (probably is) at least
696 partly empty. */
697 if (i == ndigits - 1) {
698 /* Count # of sign bits -- they needn't be stored,
699 * although for signed conversion we need later to
700 * make sure at least one sign bit gets stored. */
Mark Dickinsonfda8d112010-05-09 20:30:29 +0000701 digit s = do_twos_comp ? thisdigit ^ PyLong_MASK : thisdigit;
Antoine Pitrouc83ea132010-05-09 14:46:46 +0000702 while (s != 0) {
703 s >>= 1;
704 accumbits++;
705 }
706 }
707 else
708 accumbits += PyLong_SHIFT;
Tim Peters8bc84b42001-06-12 19:17:03 +0000709
Antoine Pitrouc83ea132010-05-09 14:46:46 +0000710 /* Store as many bytes as possible. */
711 while (accumbits >= 8) {
712 if (j >= n)
713 goto Overflow;
714 ++j;
715 *p = (unsigned char)(accum & 0xff);
716 p += pincr;
717 accumbits -= 8;
718 accum >>= 8;
719 }
720 }
Tim Peters2a9b3672001-06-11 21:23:58 +0000721
Antoine Pitrouc83ea132010-05-09 14:46:46 +0000722 /* Store the straggler (if any). */
723 assert(accumbits < 8);
724 assert(carry == 0); /* else do_twos_comp and *every* digit was 0 */
725 if (accumbits > 0) {
726 if (j >= n)
727 goto Overflow;
728 ++j;
729 if (do_twos_comp) {
730 /* Fill leading bits of the byte with sign bits
731 (appropriately pretending that the long had an
732 infinite supply of sign bits). */
733 accum |= (~(twodigits)0) << accumbits;
734 }
735 *p = (unsigned char)(accum & 0xff);
736 p += pincr;
737 }
738 else if (j == n && n > 0 && is_signed) {
739 /* The main loop filled the byte array exactly, so the code
740 just above didn't get to ensure there's a sign bit, and the
741 loop below wouldn't add one either. Make sure a sign bit
742 exists. */
743 unsigned char msb = *(p - pincr);
744 int sign_bit_set = msb >= 0x80;
745 assert(accumbits == 0);
746 if (sign_bit_set == do_twos_comp)
747 return 0;
748 else
749 goto Overflow;
750 }
Tim Peters05607ad2001-06-13 21:01:27 +0000751
Antoine Pitrouc83ea132010-05-09 14:46:46 +0000752 /* Fill remaining bytes with copies of the sign bit. */
753 {
754 unsigned char signbyte = do_twos_comp ? 0xffU : 0U;
755 for ( ; j < n; ++j, p += pincr)
756 *p = signbyte;
757 }
Tim Peters05607ad2001-06-13 21:01:27 +0000758
Antoine Pitrouc83ea132010-05-09 14:46:46 +0000759 return 0;
Tim Peters2a9b3672001-06-11 21:23:58 +0000760
Mark Dickinsonfda8d112010-05-09 20:30:29 +0000761 Overflow:
Antoine Pitrouc83ea132010-05-09 14:46:46 +0000762 PyErr_SetString(PyExc_OverflowError, "long too big to convert");
763 return -1;
Tim Peters5af4e6c2002-08-12 02:31:19 +0000764
Tim Peters2a9b3672001-06-11 21:23:58 +0000765}
766
Guido van Rossum78694d91998-09-18 14:14:13 +0000767/* Create a new long (or int) object from a C pointer */
768
769PyObject *
Tim Peters9f688bf2000-07-07 15:53:28 +0000770PyLong_FromVoidPtr(void *p)
Guido van Rossum78694d91998-09-18 14:14:13 +0000771{
Tim Peters70128a12001-06-16 08:48:40 +0000772#if SIZEOF_VOID_P <= SIZEOF_LONG
Antoine Pitrouc83ea132010-05-09 14:46:46 +0000773 if ((long)p < 0)
774 return PyLong_FromUnsignedLong((unsigned long)p);
775 return PyInt_FromLong((long)p);
Guido van Rossum78694d91998-09-18 14:14:13 +0000776#else
Guido van Rossum78694d91998-09-18 14:14:13 +0000777
Tim Peters70128a12001-06-16 08:48:40 +0000778#ifndef HAVE_LONG_LONG
779# error "PyLong_FromVoidPtr: sizeof(void*) > sizeof(long), but no long long"
780#endif
781#if SIZEOF_LONG_LONG < SIZEOF_VOID_P
Martin v. Löwisb9a0f912003-03-29 10:06:18 +0000782# error "PyLong_FromVoidPtr: sizeof(PY_LONG_LONG) < sizeof(void*)"
Tim Peters70128a12001-06-16 08:48:40 +0000783#endif
Antoine Pitrouc83ea132010-05-09 14:46:46 +0000784 /* optimize null pointers */
785 if (p == NULL)
786 return PyInt_FromLong(0);
787 return PyLong_FromUnsignedLongLong((unsigned PY_LONG_LONG)p);
Tim Peters70128a12001-06-16 08:48:40 +0000788
789#endif /* SIZEOF_VOID_P <= SIZEOF_LONG */
Guido van Rossum78694d91998-09-18 14:14:13 +0000790}
791
792/* Get a C pointer from a long object (or an int object in some cases) */
793
794void *
Tim Peters9f688bf2000-07-07 15:53:28 +0000795PyLong_AsVoidPtr(PyObject *vv)
Guido van Rossum78694d91998-09-18 14:14:13 +0000796{
Antoine Pitrouc83ea132010-05-09 14:46:46 +0000797 /* This function will allow int or long objects. If vv is neither,
798 then the PyLong_AsLong*() functions will raise the exception:
799 PyExc_SystemError, "bad argument to internal function"
800 */
Tim Peters70128a12001-06-16 08:48:40 +0000801#if SIZEOF_VOID_P <= SIZEOF_LONG
Antoine Pitrouc83ea132010-05-09 14:46:46 +0000802 long x;
Guido van Rossum78694d91998-09-18 14:14:13 +0000803
Antoine Pitrouc83ea132010-05-09 14:46:46 +0000804 if (PyInt_Check(vv))
805 x = PyInt_AS_LONG(vv);
806 else if (PyLong_Check(vv) && _PyLong_Sign(vv) < 0)
807 x = PyLong_AsLong(vv);
808 else
809 x = PyLong_AsUnsignedLong(vv);
Guido van Rossum78694d91998-09-18 14:14:13 +0000810#else
Tim Peters70128a12001-06-16 08:48:40 +0000811
812#ifndef HAVE_LONG_LONG
813# error "PyLong_AsVoidPtr: sizeof(void*) > sizeof(long), but no long long"
814#endif
815#if SIZEOF_LONG_LONG < SIZEOF_VOID_P
Martin v. Löwisb9a0f912003-03-29 10:06:18 +0000816# error "PyLong_AsVoidPtr: sizeof(PY_LONG_LONG) < sizeof(void*)"
Tim Peters70128a12001-06-16 08:48:40 +0000817#endif
Antoine Pitrouc83ea132010-05-09 14:46:46 +0000818 PY_LONG_LONG x;
Guido van Rossum78694d91998-09-18 14:14:13 +0000819
Antoine Pitrouc83ea132010-05-09 14:46:46 +0000820 if (PyInt_Check(vv))
821 x = PyInt_AS_LONG(vv);
822 else if (PyLong_Check(vv) && _PyLong_Sign(vv) < 0)
823 x = PyLong_AsLongLong(vv);
824 else
825 x = PyLong_AsUnsignedLongLong(vv);
Tim Peters70128a12001-06-16 08:48:40 +0000826
827#endif /* SIZEOF_VOID_P <= SIZEOF_LONG */
Guido van Rossum78694d91998-09-18 14:14:13 +0000828
Antoine Pitrouc83ea132010-05-09 14:46:46 +0000829 if (x == -1 && PyErr_Occurred())
830 return NULL;
831 return (void *)x;
Guido van Rossum78694d91998-09-18 14:14:13 +0000832}
833
Guido van Rossum1a8791e1998-08-04 22:46:29 +0000834#ifdef HAVE_LONG_LONG
Tim Petersd1a7da62001-06-13 00:35:57 +0000835
Martin v. Löwisb9a0f912003-03-29 10:06:18 +0000836/* Initial PY_LONG_LONG support by Chris Herborth (chrish@qnx.com), later
Tim Petersd1a7da62001-06-13 00:35:57 +0000837 * rewritten to use the newer PyLong_{As,From}ByteArray API.
Guido van Rossum1a8791e1998-08-04 22:46:29 +0000838 */
839
Tim Peterscf37dfc2001-06-14 18:42:50 +0000840#define IS_LITTLE_ENDIAN (int)*(unsigned char*)&one
Mark Dickinsonfda8d112010-05-09 20:30:29 +0000841#define PY_ABS_LLONG_MIN (0-(unsigned PY_LONG_LONG)PY_LLONG_MIN)
Tim Petersd1a7da62001-06-13 00:35:57 +0000842
Martin v. Löwisb9a0f912003-03-29 10:06:18 +0000843/* Create a new long int object from a C PY_LONG_LONG int. */
Guido van Rossum1a8791e1998-08-04 22:46:29 +0000844
845PyObject *
Martin v. Löwisb9a0f912003-03-29 10:06:18 +0000846PyLong_FromLongLong(PY_LONG_LONG ival)
Guido van Rossum1a8791e1998-08-04 22:46:29 +0000847{
Antoine Pitrouc83ea132010-05-09 14:46:46 +0000848 PyLongObject *v;
849 unsigned PY_LONG_LONG abs_ival;
850 unsigned PY_LONG_LONG t; /* unsigned so >> doesn't propagate sign bit */
851 int ndigits = 0;
852 int negative = 0;
Bob Ippolitoa85bf202006-05-25 18:20:23 +0000853
Antoine Pitrouc83ea132010-05-09 14:46:46 +0000854 if (ival < 0) {
855 /* avoid signed overflow on negation; see comments
856 in PyLong_FromLong above. */
857 abs_ival = (unsigned PY_LONG_LONG)(-1-ival) + 1;
858 negative = 1;
859 }
860 else {
861 abs_ival = (unsigned PY_LONG_LONG)ival;
862 }
Bob Ippolitoa85bf202006-05-25 18:20:23 +0000863
Antoine Pitrouc83ea132010-05-09 14:46:46 +0000864 /* Count the number of Python digits.
865 We used to pick 5 ("big enough for anything"), but that's a
866 waste of time and space given that 5*15 = 75 bits are rarely
867 needed. */
868 t = abs_ival;
869 while (t) {
870 ++ndigits;
871 t >>= PyLong_SHIFT;
872 }
873 v = _PyLong_New(ndigits);
874 if (v != NULL) {
875 digit *p = v->ob_digit;
876 Py_SIZE(v) = negative ? -ndigits : ndigits;
877 t = abs_ival;
878 while (t) {
879 *p++ = (digit)(t & PyLong_MASK);
880 t >>= PyLong_SHIFT;
881 }
882 }
883 return (PyObject *)v;
Guido van Rossum1a8791e1998-08-04 22:46:29 +0000884}
885
Martin v. Löwisb9a0f912003-03-29 10:06:18 +0000886/* Create a new long int object from a C unsigned PY_LONG_LONG int. */
Tim Petersd1a7da62001-06-13 00:35:57 +0000887
Guido van Rossum1a8791e1998-08-04 22:46:29 +0000888PyObject *
Martin v. Löwisb9a0f912003-03-29 10:06:18 +0000889PyLong_FromUnsignedLongLong(unsigned PY_LONG_LONG ival)
Guido van Rossum1a8791e1998-08-04 22:46:29 +0000890{
Antoine Pitrouc83ea132010-05-09 14:46:46 +0000891 PyLongObject *v;
892 unsigned PY_LONG_LONG t;
893 int ndigits = 0;
Bob Ippolitoa85bf202006-05-25 18:20:23 +0000894
Antoine Pitrouc83ea132010-05-09 14:46:46 +0000895 /* Count the number of Python digits. */
896 t = (unsigned PY_LONG_LONG)ival;
897 while (t) {
898 ++ndigits;
899 t >>= PyLong_SHIFT;
900 }
901 v = _PyLong_New(ndigits);
902 if (v != NULL) {
903 digit *p = v->ob_digit;
904 Py_SIZE(v) = ndigits;
905 while (ival) {
906 *p++ = (digit)(ival & PyLong_MASK);
907 ival >>= PyLong_SHIFT;
908 }
909 }
910 return (PyObject *)v;
Guido van Rossum1a8791e1998-08-04 22:46:29 +0000911}
912
Martin v. Löwis18e16552006-02-15 17:27:45 +0000913/* Create a new long int object from a C Py_ssize_t. */
914
915PyObject *
Christian Heimes7f39c9f2008-01-25 12:18:43 +0000916PyLong_FromSsize_t(Py_ssize_t ival)
Martin v. Löwis18e16552006-02-15 17:27:45 +0000917{
Antoine Pitrouc83ea132010-05-09 14:46:46 +0000918 Py_ssize_t bytes = ival;
919 int one = 1;
Mark Dickinsonfda8d112010-05-09 20:30:29 +0000920 return _PyLong_FromByteArray((unsigned char *)&bytes,
921 SIZEOF_SIZE_T, IS_LITTLE_ENDIAN, 1);
Martin v. Löwis18e16552006-02-15 17:27:45 +0000922}
923
924/* Create a new long int object from a C size_t. */
925
926PyObject *
Christian Heimes7f39c9f2008-01-25 12:18:43 +0000927PyLong_FromSize_t(size_t ival)
Martin v. Löwis18e16552006-02-15 17:27:45 +0000928{
Antoine Pitrouc83ea132010-05-09 14:46:46 +0000929 size_t bytes = ival;
930 int one = 1;
Mark Dickinsonfda8d112010-05-09 20:30:29 +0000931 return _PyLong_FromByteArray((unsigned char *)&bytes,
932 SIZEOF_SIZE_T, IS_LITTLE_ENDIAN, 0);
Martin v. Löwis18e16552006-02-15 17:27:45 +0000933}
934
Martin v. Löwisb9a0f912003-03-29 10:06:18 +0000935/* Get a C PY_LONG_LONG int from a long int object.
Tim Petersd1a7da62001-06-13 00:35:57 +0000936 Return -1 and set an error if overflow occurs. */
Guido van Rossum1a8791e1998-08-04 22:46:29 +0000937
Martin v. Löwisb9a0f912003-03-29 10:06:18 +0000938PY_LONG_LONG
Tim Peters9f688bf2000-07-07 15:53:28 +0000939PyLong_AsLongLong(PyObject *vv)
Guido van Rossum1a8791e1998-08-04 22:46:29 +0000940{
Antoine Pitrouc83ea132010-05-09 14:46:46 +0000941 PY_LONG_LONG bytes;
942 int one = 1;
943 int res;
Tim Petersd1a7da62001-06-13 00:35:57 +0000944
Antoine Pitrouc83ea132010-05-09 14:46:46 +0000945 if (vv == NULL) {
946 PyErr_BadInternalCall();
947 return -1;
948 }
949 if (!PyLong_Check(vv)) {
950 PyNumberMethods *nb;
951 PyObject *io;
952 if (PyInt_Check(vv))
953 return (PY_LONG_LONG)PyInt_AsLong(vv);
954 if ((nb = vv->ob_type->tp_as_number) == NULL ||
955 nb->nb_int == NULL) {
956 PyErr_SetString(PyExc_TypeError, "an integer is required");
957 return -1;
958 }
959 io = (*nb->nb_int) (vv);
960 if (io == NULL)
961 return -1;
962 if (PyInt_Check(io)) {
963 bytes = PyInt_AsLong(io);
964 Py_DECREF(io);
965 return bytes;
966 }
967 if (PyLong_Check(io)) {
968 bytes = PyLong_AsLongLong(io);
969 Py_DECREF(io);
970 return bytes;
971 }
972 Py_DECREF(io);
973 PyErr_SetString(PyExc_TypeError, "integer conversion failed");
974 return -1;
975 }
Guido van Rossum1a8791e1998-08-04 22:46:29 +0000976
Mark Dickinsonfda8d112010-05-09 20:30:29 +0000977 res = _PyLong_AsByteArray((PyLongObject *)vv, (unsigned char *)&bytes,
978 SIZEOF_LONG_LONG, IS_LITTLE_ENDIAN, 1);
Guido van Rossum1a8791e1998-08-04 22:46:29 +0000979
Antoine Pitrouc83ea132010-05-09 14:46:46 +0000980 /* Plan 9 can't handle PY_LONG_LONG in ? : expressions */
981 if (res < 0)
982 return (PY_LONG_LONG)-1;
983 else
984 return bytes;
Guido van Rossum1a8791e1998-08-04 22:46:29 +0000985}
986
Martin v. Löwisb9a0f912003-03-29 10:06:18 +0000987/* Get a C unsigned PY_LONG_LONG int from a long int object.
Tim Petersd1a7da62001-06-13 00:35:57 +0000988 Return -1 and set an error if overflow occurs. */
989
Martin v. Löwisb9a0f912003-03-29 10:06:18 +0000990unsigned PY_LONG_LONG
Tim Peters9f688bf2000-07-07 15:53:28 +0000991PyLong_AsUnsignedLongLong(PyObject *vv)
Guido van Rossum1a8791e1998-08-04 22:46:29 +0000992{
Antoine Pitrouc83ea132010-05-09 14:46:46 +0000993 unsigned PY_LONG_LONG bytes;
994 int one = 1;
995 int res;
Tim Petersd1a7da62001-06-13 00:35:57 +0000996
Antoine Pitrouc83ea132010-05-09 14:46:46 +0000997 if (vv == NULL || !PyLong_Check(vv)) {
998 PyErr_BadInternalCall();
999 return (unsigned PY_LONG_LONG)-1;
1000 }
Guido van Rossum1a8791e1998-08-04 22:46:29 +00001001
Mark Dickinsonfda8d112010-05-09 20:30:29 +00001002 res = _PyLong_AsByteArray((PyLongObject *)vv, (unsigned char *)&bytes,
1003 SIZEOF_LONG_LONG, IS_LITTLE_ENDIAN, 0);
Guido van Rossum1a8791e1998-08-04 22:46:29 +00001004
Antoine Pitrouc83ea132010-05-09 14:46:46 +00001005 /* Plan 9 can't handle PY_LONG_LONG in ? : expressions */
1006 if (res < 0)
1007 return (unsigned PY_LONG_LONG)res;
1008 else
1009 return bytes;
Guido van Rossum1a8791e1998-08-04 22:46:29 +00001010}
Tim Petersd1a7da62001-06-13 00:35:57 +00001011
Thomas Hellera4ea6032003-04-17 18:55:45 +00001012/* Get a C unsigned long int from a long int object, ignoring the high bits.
1013 Returns -1 and sets an error condition if an error occurs. */
1014
1015unsigned PY_LONG_LONG
1016PyLong_AsUnsignedLongLongMask(PyObject *vv)
1017{
Antoine Pitrouc83ea132010-05-09 14:46:46 +00001018 register PyLongObject *v;
1019 unsigned PY_LONG_LONG x;
1020 Py_ssize_t i;
1021 int sign;
Thomas Hellera4ea6032003-04-17 18:55:45 +00001022
Antoine Pitrouc83ea132010-05-09 14:46:46 +00001023 if (vv == NULL || !PyLong_Check(vv)) {
1024 PyErr_BadInternalCall();
1025 return (unsigned long) -1;
1026 }
1027 v = (PyLongObject *)vv;
1028 i = v->ob_size;
1029 sign = 1;
1030 x = 0;
1031 if (i < 0) {
1032 sign = -1;
1033 i = -i;
1034 }
1035 while (--i >= 0) {
1036 x = (x << PyLong_SHIFT) | v->ob_digit[i];
1037 }
1038 return x * sign;
Thomas Hellera4ea6032003-04-17 18:55:45 +00001039}
Mark Dickinsona36507c2010-01-30 10:08:33 +00001040
1041/* Get a C long long int from a Python long or Python int object.
1042 On overflow, returns -1 and sets *overflow to 1 or -1 depending
1043 on the sign of the result. Otherwise *overflow is 0.
1044
1045 For other errors (e.g., type error), returns -1 and sets an error
1046 condition.
1047*/
1048
1049PY_LONG_LONG
1050PyLong_AsLongLongAndOverflow(PyObject *vv, int *overflow)
1051{
Antoine Pitrouc83ea132010-05-09 14:46:46 +00001052 /* This version by Tim Peters */
1053 register PyLongObject *v;
1054 unsigned PY_LONG_LONG x, prev;
1055 PY_LONG_LONG res;
1056 Py_ssize_t i;
1057 int sign;
1058 int do_decref = 0; /* if nb_int was called */
Mark Dickinsona36507c2010-01-30 10:08:33 +00001059
Antoine Pitrouc83ea132010-05-09 14:46:46 +00001060 *overflow = 0;
1061 if (vv == NULL) {
1062 PyErr_BadInternalCall();
1063 return -1;
1064 }
Mark Dickinsona36507c2010-01-30 10:08:33 +00001065
Antoine Pitrouc83ea132010-05-09 14:46:46 +00001066 if (PyInt_Check(vv))
1067 return PyInt_AsLong(vv);
Mark Dickinsona36507c2010-01-30 10:08:33 +00001068
Antoine Pitrouc83ea132010-05-09 14:46:46 +00001069 if (!PyLong_Check(vv)) {
1070 PyNumberMethods *nb;
1071 nb = vv->ob_type->tp_as_number;
1072 if (nb == NULL || nb->nb_int == NULL) {
1073 PyErr_SetString(PyExc_TypeError,
1074 "an integer is required");
1075 return -1;
1076 }
1077 vv = (*nb->nb_int) (vv);
1078 if (vv == NULL)
1079 return -1;
1080 do_decref = 1;
1081 if(PyInt_Check(vv)) {
1082 res = PyInt_AsLong(vv);
1083 goto exit;
1084 }
1085 if (!PyLong_Check(vv)) {
1086 Py_DECREF(vv);
1087 PyErr_SetString(PyExc_TypeError,
1088 "nb_int should return int object");
1089 return -1;
1090 }
1091 }
Mark Dickinsona36507c2010-01-30 10:08:33 +00001092
Antoine Pitrouc83ea132010-05-09 14:46:46 +00001093 res = -1;
1094 v = (PyLongObject *)vv;
1095 i = Py_SIZE(v);
Mark Dickinsona36507c2010-01-30 10:08:33 +00001096
Antoine Pitrouc83ea132010-05-09 14:46:46 +00001097 switch (i) {
1098 case -1:
1099 res = -(sdigit)v->ob_digit[0];
1100 break;
1101 case 0:
1102 res = 0;
1103 break;
1104 case 1:
1105 res = v->ob_digit[0];
1106 break;
1107 default:
1108 sign = 1;
1109 x = 0;
1110 if (i < 0) {
1111 sign = -1;
1112 i = -(i);
1113 }
1114 while (--i >= 0) {
1115 prev = x;
1116 x = (x << PyLong_SHIFT) + v->ob_digit[i];
1117 if ((x >> PyLong_SHIFT) != prev) {
1118 *overflow = sign;
1119 goto exit;
1120 }
1121 }
1122 /* Haven't lost any bits, but casting to long requires extra
1123 * care (see comment above).
1124 */
1125 if (x <= (unsigned PY_LONG_LONG)PY_LLONG_MAX) {
1126 res = (PY_LONG_LONG)x * sign;
1127 }
1128 else if (sign < 0 && x == PY_ABS_LLONG_MIN) {
1129 res = PY_LLONG_MIN;
1130 }
1131 else {
1132 *overflow = sign;
1133 /* res is already set to -1 */
1134 }
1135 }
Mark Dickinsonfda8d112010-05-09 20:30:29 +00001136 exit:
Antoine Pitrouc83ea132010-05-09 14:46:46 +00001137 if (do_decref) {
1138 Py_DECREF(vv);
1139 }
1140 return res;
Mark Dickinsona36507c2010-01-30 10:08:33 +00001141}
1142
Tim Petersd1a7da62001-06-13 00:35:57 +00001143#undef IS_LITTLE_ENDIAN
1144
Guido van Rossum1a8791e1998-08-04 22:46:29 +00001145#endif /* HAVE_LONG_LONG */
1146
Neil Schemenauerba872e22001-01-04 01:46:03 +00001147
1148static int
1149convert_binop(PyObject *v, PyObject *w, PyLongObject **a, PyLongObject **b) {
Antoine Pitrouc83ea132010-05-09 14:46:46 +00001150 if (PyLong_Check(v)) {
1151 *a = (PyLongObject *) v;
1152 Py_INCREF(v);
1153 }
1154 else if (PyInt_Check(v)) {
1155 *a = (PyLongObject *) PyLong_FromLong(PyInt_AS_LONG(v));
1156 }
1157 else {
1158 return 0;
1159 }
1160 if (PyLong_Check(w)) {
1161 *b = (PyLongObject *) w;
1162 Py_INCREF(w);
1163 }
1164 else if (PyInt_Check(w)) {
1165 *b = (PyLongObject *) PyLong_FromLong(PyInt_AS_LONG(w));
1166 }
1167 else {
1168 Py_DECREF(*a);
1169 return 0;
1170 }
1171 return 1;
Neil Schemenauerba872e22001-01-04 01:46:03 +00001172}
1173
Mark Dickinson43ca3772010-05-09 20:42:09 +00001174#define CONVERT_BINOP(v, w, a, b) \
1175 do { \
1176 if (!convert_binop(v, w, a, b)) { \
1177 Py_INCREF(Py_NotImplemented); \
1178 return Py_NotImplemented; \
1179 } \
1180 } while(0) \
Neil Schemenauerba872e22001-01-04 01:46:03 +00001181
Mark Dickinson0b666bf2009-03-23 18:25:13 +00001182/* bits_in_digit(d) returns the unique integer k such that 2**(k-1) <= d <
1183 2**k if d is nonzero, else 0. */
1184
1185static const unsigned char BitLengthTable[32] = {
Antoine Pitrouc83ea132010-05-09 14:46:46 +00001186 0, 1, 2, 2, 3, 3, 3, 3, 4, 4, 4, 4, 4, 4, 4, 4,
1187 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5
Mark Dickinson0b666bf2009-03-23 18:25:13 +00001188};
1189
1190static int
1191bits_in_digit(digit d)
1192{
Antoine Pitrouc83ea132010-05-09 14:46:46 +00001193 int d_bits = 0;
1194 while (d >= 32) {
1195 d_bits += 6;
1196 d >>= 6;
1197 }
1198 d_bits += (int)BitLengthTable[d];
1199 return d_bits;
Mark Dickinson0b666bf2009-03-23 18:25:13 +00001200}
1201
Tim Peters877a2122002-08-12 05:09:36 +00001202/* x[0:m] and y[0:n] are digit vectors, LSD first, m >= n required. x[0:n]
1203 * is modified in place, by adding y to it. Carries are propagated as far as
1204 * x[m-1], and the remaining carry (0 or 1) is returned.
1205 */
1206static digit
Martin v. Löwis18e16552006-02-15 17:27:45 +00001207v_iadd(digit *x, Py_ssize_t m, digit *y, Py_ssize_t n)
Tim Peters877a2122002-08-12 05:09:36 +00001208{
Antoine Pitrouc83ea132010-05-09 14:46:46 +00001209 Py_ssize_t i;
1210 digit carry = 0;
Tim Peters877a2122002-08-12 05:09:36 +00001211
Antoine Pitrouc83ea132010-05-09 14:46:46 +00001212 assert(m >= n);
1213 for (i = 0; i < n; ++i) {
1214 carry += x[i] + y[i];
1215 x[i] = carry & PyLong_MASK;
1216 carry >>= PyLong_SHIFT;
1217 assert((carry & 1) == carry);
1218 }
1219 for (; carry && i < m; ++i) {
1220 carry += x[i];
1221 x[i] = carry & PyLong_MASK;
1222 carry >>= PyLong_SHIFT;
1223 assert((carry & 1) == carry);
1224 }
1225 return carry;
Tim Peters877a2122002-08-12 05:09:36 +00001226}
1227
1228/* x[0:m] and y[0:n] are digit vectors, LSD first, m >= n required. x[0:n]
1229 * is modified in place, by subtracting y from it. Borrows are propagated as
1230 * far as x[m-1], and the remaining borrow (0 or 1) is returned.
1231 */
1232static digit
Martin v. Löwis18e16552006-02-15 17:27:45 +00001233v_isub(digit *x, Py_ssize_t m, digit *y, Py_ssize_t n)
Tim Peters877a2122002-08-12 05:09:36 +00001234{
Antoine Pitrouc83ea132010-05-09 14:46:46 +00001235 Py_ssize_t i;
1236 digit borrow = 0;
Tim Peters877a2122002-08-12 05:09:36 +00001237
Antoine Pitrouc83ea132010-05-09 14:46:46 +00001238 assert(m >= n);
1239 for (i = 0; i < n; ++i) {
1240 borrow = x[i] - y[i] - borrow;
1241 x[i] = borrow & PyLong_MASK;
1242 borrow >>= PyLong_SHIFT;
1243 borrow &= 1; /* keep only 1 sign bit */
1244 }
1245 for (; borrow && i < m; ++i) {
1246 borrow = x[i] - borrow;
1247 x[i] = borrow & PyLong_MASK;
1248 borrow >>= PyLong_SHIFT;
1249 borrow &= 1;
1250 }
1251 return borrow;
Tim Peters877a2122002-08-12 05:09:36 +00001252}
Neil Schemenauerba872e22001-01-04 01:46:03 +00001253
Mark Dickinson0b666bf2009-03-23 18:25:13 +00001254/* Shift digit vector a[0:m] d bits left, with 0 <= d < PyLong_SHIFT. Put
1255 * result in z[0:m], and return the d bits shifted out of the top.
1256 */
1257static digit
1258v_lshift(digit *z, digit *a, Py_ssize_t m, int d)
Guido van Rossumedcc38a1991-05-05 20:09:44 +00001259{
Antoine Pitrouc83ea132010-05-09 14:46:46 +00001260 Py_ssize_t i;
1261 digit carry = 0;
Tim Peters5af4e6c2002-08-12 02:31:19 +00001262
Antoine Pitrouc83ea132010-05-09 14:46:46 +00001263 assert(0 <= d && d < PyLong_SHIFT);
1264 for (i=0; i < m; i++) {
1265 twodigits acc = (twodigits)a[i] << d | carry;
1266 z[i] = (digit)acc & PyLong_MASK;
1267 carry = (digit)(acc >> PyLong_SHIFT);
1268 }
1269 return carry;
Mark Dickinson0b666bf2009-03-23 18:25:13 +00001270}
1271
1272/* Shift digit vector a[0:m] d bits right, with 0 <= d < PyLong_SHIFT. Put
1273 * result in z[0:m], and return the d bits shifted out of the bottom.
1274 */
1275static digit
1276v_rshift(digit *z, digit *a, Py_ssize_t m, int d)
1277{
Antoine Pitrouc83ea132010-05-09 14:46:46 +00001278 Py_ssize_t i;
1279 digit carry = 0;
1280 digit mask = ((digit)1 << d) - 1U;
Mark Dickinson0b666bf2009-03-23 18:25:13 +00001281
Antoine Pitrouc83ea132010-05-09 14:46:46 +00001282 assert(0 <= d && d < PyLong_SHIFT);
1283 for (i=m; i-- > 0;) {
1284 twodigits acc = (twodigits)carry << PyLong_SHIFT | a[i];
1285 carry = (digit)acc & mask;
1286 z[i] = (digit)(acc >> d);
1287 }
1288 return carry;
Guido van Rossumedcc38a1991-05-05 20:09:44 +00001289}
1290
Tim Peters212e6142001-07-14 12:23:19 +00001291/* Divide long pin, w/ size digits, by non-zero digit n, storing quotient
1292 in pout, and returning the remainder. pin and pout point at the LSD.
1293 It's OK for pin == pout on entry, which saves oodles of mallocs/frees in
Eric Smith5e527eb2008-02-10 01:36:53 +00001294 _PyLong_Format, but that should be done with great care since longs are
Tim Peters212e6142001-07-14 12:23:19 +00001295 immutable. */
1296
1297static digit
Martin v. Löwis18e16552006-02-15 17:27:45 +00001298inplace_divrem1(digit *pout, digit *pin, Py_ssize_t size, digit n)
Tim Peters212e6142001-07-14 12:23:19 +00001299{
Antoine Pitrouc83ea132010-05-09 14:46:46 +00001300 twodigits rem = 0;
Tim Peters212e6142001-07-14 12:23:19 +00001301
Antoine Pitrouc83ea132010-05-09 14:46:46 +00001302 assert(n > 0 && n <= PyLong_MASK);
1303 pin += size;
1304 pout += size;
1305 while (--size >= 0) {
1306 digit hi;
1307 rem = (rem << PyLong_SHIFT) | *--pin;
1308 *--pout = hi = (digit)(rem / n);
1309 rem -= (twodigits)hi * n;
1310 }
1311 return (digit)rem;
Tim Peters212e6142001-07-14 12:23:19 +00001312}
1313
Guido van Rossumedcc38a1991-05-05 20:09:44 +00001314/* Divide a long integer by a digit, returning both the quotient
1315 (as function result) and the remainder (through *prem).
1316 The sign of a is ignored; n should not be zero. */
1317
Guido van Rossumc0b618a1997-05-02 03:12:38 +00001318static PyLongObject *
Tim Peters212e6142001-07-14 12:23:19 +00001319divrem1(PyLongObject *a, digit n, digit *prem)
Guido van Rossumedcc38a1991-05-05 20:09:44 +00001320{
Antoine Pitrouc83ea132010-05-09 14:46:46 +00001321 const Py_ssize_t size = ABS(Py_SIZE(a));
1322 PyLongObject *z;
Tim Peters5af4e6c2002-08-12 02:31:19 +00001323
Antoine Pitrouc83ea132010-05-09 14:46:46 +00001324 assert(n > 0 && n <= PyLong_MASK);
1325 z = _PyLong_New(size);
1326 if (z == NULL)
1327 return NULL;
1328 *prem = inplace_divrem1(z->ob_digit, a->ob_digit, size, n);
1329 return long_normalize(z);
Guido van Rossumedcc38a1991-05-05 20:09:44 +00001330}
1331
Mark Dickinsonaa2adc82009-09-16 22:10:56 +00001332/* Convert a long integer to a base 10 string. Returns a new non-shared
1333 string. (Return value is non-shared so that callers can modify the
1334 returned value if necessary.) */
1335
1336static PyObject *
1337long_to_decimal_string(PyObject *aa, int addL)
1338{
Antoine Pitrouc83ea132010-05-09 14:46:46 +00001339 PyLongObject *scratch, *a;
1340 PyObject *str;
1341 Py_ssize_t size, strlen, size_a, i, j;
1342 digit *pout, *pin, rem, tenpow;
1343 char *p;
1344 int negative;
Mark Dickinsonaa2adc82009-09-16 22:10:56 +00001345
Antoine Pitrouc83ea132010-05-09 14:46:46 +00001346 a = (PyLongObject *)aa;
1347 if (a == NULL || !PyLong_Check(a)) {
1348 PyErr_BadInternalCall();
1349 return NULL;
1350 }
1351 size_a = ABS(Py_SIZE(a));
1352 negative = Py_SIZE(a) < 0;
Mark Dickinsonaa2adc82009-09-16 22:10:56 +00001353
Antoine Pitrouc83ea132010-05-09 14:46:46 +00001354 /* quick and dirty upper bound for the number of digits
1355 required to express a in base _PyLong_DECIMAL_BASE:
Mark Dickinsonaa2adc82009-09-16 22:10:56 +00001356
Antoine Pitrouc83ea132010-05-09 14:46:46 +00001357 #digits = 1 + floor(log2(a) / log2(_PyLong_DECIMAL_BASE))
Mark Dickinsonaa2adc82009-09-16 22:10:56 +00001358
Antoine Pitrouc83ea132010-05-09 14:46:46 +00001359 But log2(a) < size_a * PyLong_SHIFT, and
1360 log2(_PyLong_DECIMAL_BASE) = log2(10) * _PyLong_DECIMAL_SHIFT
1361 > 3 * _PyLong_DECIMAL_SHIFT
1362 */
1363 if (size_a > PY_SSIZE_T_MAX / PyLong_SHIFT) {
1364 PyErr_SetString(PyExc_OverflowError,
1365 "long is too large to format");
1366 return NULL;
1367 }
1368 /* the expression size_a * PyLong_SHIFT is now safe from overflow */
1369 size = 1 + size_a * PyLong_SHIFT / (3 * _PyLong_DECIMAL_SHIFT);
1370 scratch = _PyLong_New(size);
1371 if (scratch == NULL)
1372 return NULL;
Mark Dickinsonaa2adc82009-09-16 22:10:56 +00001373
Antoine Pitrouc83ea132010-05-09 14:46:46 +00001374 /* convert array of base _PyLong_BASE digits in pin to an array of
1375 base _PyLong_DECIMAL_BASE digits in pout, following Knuth (TAOCP,
1376 Volume 2 (3rd edn), section 4.4, Method 1b). */
1377 pin = a->ob_digit;
1378 pout = scratch->ob_digit;
1379 size = 0;
1380 for (i = size_a; --i >= 0; ) {
1381 digit hi = pin[i];
1382 for (j = 0; j < size; j++) {
1383 twodigits z = (twodigits)pout[j] << PyLong_SHIFT | hi;
1384 hi = (digit)(z / _PyLong_DECIMAL_BASE);
1385 pout[j] = (digit)(z - (twodigits)hi *
1386 _PyLong_DECIMAL_BASE);
1387 }
1388 while (hi) {
1389 pout[size++] = hi % _PyLong_DECIMAL_BASE;
1390 hi /= _PyLong_DECIMAL_BASE;
1391 }
1392 /* check for keyboard interrupt */
1393 SIGCHECK({
Mark Dickinsonfda8d112010-05-09 20:30:29 +00001394 Py_DECREF(scratch);
1395 return NULL;
Mark Dickinson43ca3772010-05-09 20:42:09 +00001396 });
Antoine Pitrouc83ea132010-05-09 14:46:46 +00001397 }
1398 /* pout should have at least one digit, so that the case when a = 0
1399 works correctly */
1400 if (size == 0)
1401 pout[size++] = 0;
Mark Dickinsonaa2adc82009-09-16 22:10:56 +00001402
Antoine Pitrouc83ea132010-05-09 14:46:46 +00001403 /* calculate exact length of output string, and allocate */
1404 strlen = (addL != 0) + negative +
1405 1 + (size - 1) * _PyLong_DECIMAL_SHIFT;
1406 tenpow = 10;
1407 rem = pout[size-1];
1408 while (rem >= tenpow) {
1409 tenpow *= 10;
1410 strlen++;
1411 }
1412 str = PyString_FromStringAndSize(NULL, strlen);
1413 if (str == NULL) {
1414 Py_DECREF(scratch);
1415 return NULL;
1416 }
Mark Dickinsonaa2adc82009-09-16 22:10:56 +00001417
Antoine Pitrouc83ea132010-05-09 14:46:46 +00001418 /* fill the string right-to-left */
1419 p = PyString_AS_STRING(str) + strlen;
1420 *p = '\0';
1421 if (addL)
1422 *--p = 'L';
1423 /* pout[0] through pout[size-2] contribute exactly
1424 _PyLong_DECIMAL_SHIFT digits each */
1425 for (i=0; i < size - 1; i++) {
1426 rem = pout[i];
1427 for (j = 0; j < _PyLong_DECIMAL_SHIFT; j++) {
1428 *--p = '0' + rem % 10;
1429 rem /= 10;
1430 }
1431 }
1432 /* pout[size-1]: always produce at least one decimal digit */
1433 rem = pout[i];
1434 do {
1435 *--p = '0' + rem % 10;
1436 rem /= 10;
1437 } while (rem != 0);
Mark Dickinsonaa2adc82009-09-16 22:10:56 +00001438
Antoine Pitrouc83ea132010-05-09 14:46:46 +00001439 /* and sign */
1440 if (negative)
1441 *--p = '-';
Mark Dickinsonaa2adc82009-09-16 22:10:56 +00001442
Antoine Pitrouc83ea132010-05-09 14:46:46 +00001443 /* check we've counted correctly */
1444 assert(p == PyString_AS_STRING(str));
1445 Py_DECREF(scratch);
1446 return (PyObject *)str;
Mark Dickinsonaa2adc82009-09-16 22:10:56 +00001447}
1448
Eric Smith5e527eb2008-02-10 01:36:53 +00001449/* Convert the long to a string object with given base,
1450 appending a base prefix of 0[box] if base is 2, 8 or 16.
1451 Add a trailing "L" if addL is non-zero.
1452 If newstyle is zero, then use the pre-2.6 behavior of octal having
1453 a leading "0", instead of the prefix "0o" */
1454PyAPI_FUNC(PyObject *)
1455_PyLong_Format(PyObject *aa, int base, int addL, int newstyle)
Guido van Rossumedcc38a1991-05-05 20:09:44 +00001456{
Antoine Pitrouc83ea132010-05-09 14:46:46 +00001457 register PyLongObject *a = (PyLongObject *)aa;
1458 PyStringObject *str;
1459 Py_ssize_t i, sz;
1460 Py_ssize_t size_a;
1461 char *p;
1462 int bits;
1463 char sign = '\0';
Guido van Rossume32e0141992-01-19 16:31:05 +00001464
Antoine Pitrouc83ea132010-05-09 14:46:46 +00001465 if (base == 10)
1466 return long_to_decimal_string((PyObject *)a, addL);
Mark Dickinsonaa2adc82009-09-16 22:10:56 +00001467
Antoine Pitrouc83ea132010-05-09 14:46:46 +00001468 if (a == NULL || !PyLong_Check(a)) {
1469 PyErr_BadInternalCall();
1470 return NULL;
1471 }
1472 assert(base >= 2 && base <= 36);
1473 size_a = ABS(Py_SIZE(a));
Tim Peters5af4e6c2002-08-12 02:31:19 +00001474
Antoine Pitrouc83ea132010-05-09 14:46:46 +00001475 /* Compute a rough upper bound for the length of the string */
1476 i = base;
1477 bits = 0;
1478 while (i > 1) {
1479 ++bits;
1480 i >>= 1;
1481 }
1482 i = 5 + (addL ? 1 : 0);
1483 /* ensure we don't get signed overflow in sz calculation */
1484 if (size_a > (PY_SSIZE_T_MAX - i) / PyLong_SHIFT) {
1485 PyErr_SetString(PyExc_OverflowError,
1486 "long is too large to format");
1487 return NULL;
1488 }
1489 sz = i + 1 + (size_a * PyLong_SHIFT - 1) / bits;
1490 assert(sz >= 0);
1491 str = (PyStringObject *) PyString_FromStringAndSize((char *)0, sz);
1492 if (str == NULL)
1493 return NULL;
1494 p = PyString_AS_STRING(str) + sz;
1495 *p = '\0';
1496 if (addL)
1497 *--p = 'L';
1498 if (a->ob_size < 0)
1499 sign = '-';
Tim Peters5af4e6c2002-08-12 02:31:19 +00001500
Antoine Pitrouc83ea132010-05-09 14:46:46 +00001501 if (a->ob_size == 0) {
1502 *--p = '0';
1503 }
1504 else if ((base & (base - 1)) == 0) {
1505 /* JRH: special case for power-of-2 bases */
1506 twodigits accum = 0;
1507 int accumbits = 0; /* # of bits in accum */
1508 int basebits = 1; /* # of bits in base-1 */
1509 i = base;
1510 while ((i >>= 1) > 1)
1511 ++basebits;
Tim Peters586b2e32001-07-15 09:11:14 +00001512
Antoine Pitrouc83ea132010-05-09 14:46:46 +00001513 for (i = 0; i < size_a; ++i) {
1514 accum |= (twodigits)a->ob_digit[i] << accumbits;
1515 accumbits += PyLong_SHIFT;
1516 assert(accumbits >= basebits);
1517 do {
1518 char cdigit = (char)(accum & (base - 1));
1519 cdigit += (cdigit < 10) ? '0' : 'a'-10;
1520 assert(p > PyString_AS_STRING(str));
1521 *--p = cdigit;
1522 accumbits -= basebits;
1523 accum >>= basebits;
Mark Dickinsonfda8d112010-05-09 20:30:29 +00001524 } while (i < size_a-1 ? accumbits >= basebits : accum > 0);
Antoine Pitrouc83ea132010-05-09 14:46:46 +00001525 }
1526 }
1527 else {
1528 /* Not 0, and base not a power of 2. Divide repeatedly by
1529 base, but for speed use the highest power of base that
1530 fits in a digit. */
1531 Py_ssize_t size = size_a;
1532 digit *pin = a->ob_digit;
1533 PyLongObject *scratch;
1534 /* powbasw <- largest power of base that fits in a digit. */
1535 digit powbase = base; /* powbase == base ** power */
1536 int power = 1;
1537 for (;;) {
1538 twodigits newpow = powbase * (twodigits)base;
1539 if (newpow >> PyLong_SHIFT)
1540 /* doesn't fit in a digit */
1541 break;
1542 powbase = (digit)newpow;
1543 ++power;
1544 }
Tim Peters212e6142001-07-14 12:23:19 +00001545
Antoine Pitrouc83ea132010-05-09 14:46:46 +00001546 /* Get a scratch area for repeated division. */
1547 scratch = _PyLong_New(size);
1548 if (scratch == NULL) {
1549 Py_DECREF(str);
1550 return NULL;
1551 }
Tim Peters212e6142001-07-14 12:23:19 +00001552
Antoine Pitrouc83ea132010-05-09 14:46:46 +00001553 /* Repeatedly divide by powbase. */
1554 do {
1555 int ntostore = power;
1556 digit rem = inplace_divrem1(scratch->ob_digit,
Mark Dickinsonfda8d112010-05-09 20:30:29 +00001557 pin, size, powbase);
Antoine Pitrouc83ea132010-05-09 14:46:46 +00001558 pin = scratch->ob_digit; /* no need to use a again */
1559 if (pin[size - 1] == 0)
1560 --size;
1561 SIGCHECK({
Mark Dickinsonfda8d112010-05-09 20:30:29 +00001562 Py_DECREF(scratch);
1563 Py_DECREF(str);
1564 return NULL;
Mark Dickinson43ca3772010-05-09 20:42:09 +00001565 });
Tim Peters212e6142001-07-14 12:23:19 +00001566
Antoine Pitrouc83ea132010-05-09 14:46:46 +00001567 /* Break rem into digits. */
1568 assert(ntostore > 0);
1569 do {
1570 digit nextrem = (digit)(rem / base);
1571 char c = (char)(rem - nextrem * base);
1572 assert(p > PyString_AS_STRING(str));
1573 c += (c < 10) ? '0' : 'a'-10;
1574 *--p = c;
1575 rem = nextrem;
1576 --ntostore;
1577 /* Termination is a bit delicate: must not
1578 store leading zeroes, so must get out if
1579 remaining quotient and rem are both 0. */
1580 } while (ntostore && (size || rem));
1581 } while (size != 0);
1582 Py_DECREF(scratch);
1583 }
Guido van Rossumbd3a5271998-08-11 15:04:47 +00001584
Antoine Pitrouc83ea132010-05-09 14:46:46 +00001585 if (base == 2) {
1586 *--p = 'b';
1587 *--p = '0';
1588 }
1589 else if (base == 8) {
1590 if (newstyle) {
1591 *--p = 'o';
1592 *--p = '0';
1593 }
1594 else
1595 if (size_a != 0)
1596 *--p = '0';
1597 }
1598 else if (base == 16) {
1599 *--p = 'x';
1600 *--p = '0';
1601 }
1602 else if (base != 10) {
1603 *--p = '#';
1604 *--p = '0' + base%10;
1605 if (base > 10)
1606 *--p = '0' + base/10;
1607 }
1608 if (sign)
1609 *--p = sign;
1610 if (p != PyString_AS_STRING(str)) {
1611 char *q = PyString_AS_STRING(str);
1612 assert(p > q);
1613 do {
1614 } while ((*q++ = *p++) != '\0');
1615 q--;
1616 _PyString_Resize((PyObject **)&str,
1617 (Py_ssize_t) (q - PyString_AS_STRING(str)));
1618 }
1619 return (PyObject *)str;
Guido van Rossumedcc38a1991-05-05 20:09:44 +00001620}
1621
Tim Petersda53afa2006-05-25 17:34:03 +00001622/* Table of digit values for 8-bit string -> integer conversion.
1623 * '0' maps to 0, ..., '9' maps to 9.
1624 * 'a' and 'A' map to 10, ..., 'z' and 'Z' map to 35.
1625 * All other indices map to 37.
1626 * Note that when converting a base B string, a char c is a legitimate
1627 * base B digit iff _PyLong_DigitValue[Py_CHARMASK(c)] < B.
1628 */
1629int _PyLong_DigitValue[256] = {
Antoine Pitrouc83ea132010-05-09 14:46:46 +00001630 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37,
1631 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37,
1632 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37,
1633 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 37, 37, 37, 37, 37, 37,
1634 37, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24,
1635 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 37, 37, 37, 37, 37,
1636 37, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24,
1637 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 37, 37, 37, 37, 37,
1638 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37,
1639 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37,
1640 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37,
1641 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37,
1642 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37,
1643 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37,
1644 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37,
1645 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37,
Tim Peters696cf432006-05-24 21:10:40 +00001646};
1647
1648/* *str points to the first digit in a string of base `base` digits. base
Tim Petersbf2674b2003-02-02 07:51:32 +00001649 * is a power of 2 (2, 4, 8, 16, or 32). *str is set to point to the first
1650 * non-digit (which may be *str!). A normalized long is returned.
1651 * The point to this routine is that it takes time linear in the number of
1652 * string characters.
1653 */
1654static PyLongObject *
1655long_from_binary_base(char **str, int base)
1656{
Antoine Pitrouc83ea132010-05-09 14:46:46 +00001657 char *p = *str;
1658 char *start = p;
1659 int bits_per_char;
1660 Py_ssize_t n;
1661 PyLongObject *z;
1662 twodigits accum;
1663 int bits_in_accum;
1664 digit *pdigit;
Tim Petersbf2674b2003-02-02 07:51:32 +00001665
Antoine Pitrouc83ea132010-05-09 14:46:46 +00001666 assert(base >= 2 && base <= 32 && (base & (base - 1)) == 0);
1667 n = base;
1668 for (bits_per_char = -1; n; ++bits_per_char)
1669 n >>= 1;
1670 /* n <- total # of bits needed, while setting p to end-of-string */
1671 while (_PyLong_DigitValue[Py_CHARMASK(*p)] < base)
1672 ++p;
1673 *str = p;
1674 /* n <- # of Python digits needed, = ceiling(n/PyLong_SHIFT). */
1675 n = (p - start) * bits_per_char + PyLong_SHIFT - 1;
1676 if (n / bits_per_char < p - start) {
1677 PyErr_SetString(PyExc_ValueError,
1678 "long string too large to convert");
1679 return NULL;
1680 }
1681 n = n / PyLong_SHIFT;
1682 z = _PyLong_New(n);
1683 if (z == NULL)
1684 return NULL;
1685 /* Read string from right, and fill in long from left; i.e.,
1686 * from least to most significant in both.
1687 */
1688 accum = 0;
1689 bits_in_accum = 0;
1690 pdigit = z->ob_digit;
1691 while (--p >= start) {
1692 int k = _PyLong_DigitValue[Py_CHARMASK(*p)];
1693 assert(k >= 0 && k < base);
1694 accum |= (twodigits)k << bits_in_accum;
1695 bits_in_accum += bits_per_char;
1696 if (bits_in_accum >= PyLong_SHIFT) {
1697 *pdigit++ = (digit)(accum & PyLong_MASK);
1698 assert(pdigit - z->ob_digit <= n);
1699 accum >>= PyLong_SHIFT;
1700 bits_in_accum -= PyLong_SHIFT;
1701 assert(bits_in_accum < PyLong_SHIFT);
1702 }
1703 }
1704 if (bits_in_accum) {
1705 assert(bits_in_accum <= PyLong_SHIFT);
1706 *pdigit++ = (digit)accum;
1707 assert(pdigit - z->ob_digit <= n);
1708 }
1709 while (pdigit - z->ob_digit < n)
1710 *pdigit++ = 0;
1711 return long_normalize(z);
Tim Petersbf2674b2003-02-02 07:51:32 +00001712}
1713
Guido van Rossumc0b618a1997-05-02 03:12:38 +00001714PyObject *
Tim Peters9f688bf2000-07-07 15:53:28 +00001715PyLong_FromString(char *str, char **pend, int base)
Guido van Rossumeb1fafc1994-08-29 12:47:19 +00001716{
Antoine Pitrouc83ea132010-05-09 14:46:46 +00001717 int sign = 1;
1718 char *start, *orig_str = str;
1719 PyLongObject *z;
1720 PyObject *strobj, *strrepr;
1721 Py_ssize_t slen;
Tim Peters5af4e6c2002-08-12 02:31:19 +00001722
Antoine Pitrouc83ea132010-05-09 14:46:46 +00001723 if ((base != 0 && base < 2) || base > 36) {
1724 PyErr_SetString(PyExc_ValueError,
1725 "long() arg 2 must be >= 2 and <= 36");
1726 return NULL;
1727 }
1728 while (*str != '\0' && isspace(Py_CHARMASK(*str)))
1729 str++;
1730 if (*str == '+')
1731 ++str;
1732 else if (*str == '-') {
1733 ++str;
1734 sign = -1;
1735 }
1736 while (*str != '\0' && isspace(Py_CHARMASK(*str)))
1737 str++;
1738 if (base == 0) {
1739 /* No base given. Deduce the base from the contents
1740 of the string */
1741 if (str[0] != '0')
1742 base = 10;
1743 else if (str[1] == 'x' || str[1] == 'X')
1744 base = 16;
1745 else if (str[1] == 'o' || str[1] == 'O')
1746 base = 8;
1747 else if (str[1] == 'b' || str[1] == 'B')
1748 base = 2;
1749 else
1750 /* "old" (C-style) octal literal, still valid in
1751 2.x, although illegal in 3.x */
1752 base = 8;
1753 }
1754 /* Whether or not we were deducing the base, skip leading chars
1755 as needed */
1756 if (str[0] == '0' &&
1757 ((base == 16 && (str[1] == 'x' || str[1] == 'X')) ||
1758 (base == 8 && (str[1] == 'o' || str[1] == 'O')) ||
1759 (base == 2 && (str[1] == 'b' || str[1] == 'B'))))
1760 str += 2;
Tim Peters696cf432006-05-24 21:10:40 +00001761
Antoine Pitrouc83ea132010-05-09 14:46:46 +00001762 start = str;
1763 if ((base & (base - 1)) == 0)
1764 z = long_from_binary_base(&str, base);
1765 else {
Tim Peters696cf432006-05-24 21:10:40 +00001766/***
1767Binary bases can be converted in time linear in the number of digits, because
1768Python's representation base is binary. Other bases (including decimal!) use
1769the simple quadratic-time algorithm below, complicated by some speed tricks.
Tim Peters5af4e6c2002-08-12 02:31:19 +00001770
Tim Peters696cf432006-05-24 21:10:40 +00001771First some math: the largest integer that can be expressed in N base-B digits
1772is B**N-1. Consequently, if we have an N-digit input in base B, the worst-
1773case number of Python digits needed to hold it is the smallest integer n s.t.
1774
Christian Heimes7f39c9f2008-01-25 12:18:43 +00001775 PyLong_BASE**n-1 >= B**N-1 [or, adding 1 to both sides]
1776 PyLong_BASE**n >= B**N [taking logs to base PyLong_BASE]
1777 n >= log(B**N)/log(PyLong_BASE) = N * log(B)/log(PyLong_BASE)
Tim Peters696cf432006-05-24 21:10:40 +00001778
Mark Dickinsonfda8d112010-05-09 20:30:29 +00001779The static array log_base_PyLong_BASE[base] == log(base)/log(PyLong_BASE) so
1780we can compute this quickly. A Python long with that much space is reserved
1781near the start, and the result is computed into it.
Tim Peters696cf432006-05-24 21:10:40 +00001782
1783The input string is actually treated as being in base base**i (i.e., i digits
1784are processed at a time), where two more static arrays hold:
1785
Mark Dickinsonfda8d112010-05-09 20:30:29 +00001786 convwidth_base[base] = the largest integer i such that
1787 base**i <= PyLong_BASE
Tim Peters696cf432006-05-24 21:10:40 +00001788 convmultmax_base[base] = base ** convwidth_base[base]
1789
1790The first of these is the largest i such that i consecutive input digits
1791must fit in a single Python digit. The second is effectively the input
1792base we're really using.
1793
1794Viewing the input as a sequence <c0, c1, ..., c_n-1> of digits in base
1795convmultmax_base[base], the result is "simply"
1796
1797 (((c0*B + c1)*B + c2)*B + c3)*B + ... ))) + c_n-1
1798
1799where B = convmultmax_base[base].
Tim Peters9faa3ed2006-05-30 15:53:34 +00001800
1801Error analysis: as above, the number of Python digits `n` needed is worst-
1802case
1803
Christian Heimes7f39c9f2008-01-25 12:18:43 +00001804 n >= N * log(B)/log(PyLong_BASE)
Tim Peters9faa3ed2006-05-30 15:53:34 +00001805
1806where `N` is the number of input digits in base `B`. This is computed via
1807
Christian Heimes7f39c9f2008-01-25 12:18:43 +00001808 size_z = (Py_ssize_t)((scan - str) * log_base_PyLong_BASE[base]) + 1;
Tim Peters9faa3ed2006-05-30 15:53:34 +00001809
1810below. Two numeric concerns are how much space this can waste, and whether
Mark Dickinsonfda8d112010-05-09 20:30:29 +00001811the computed result can be too small. To be concrete, assume PyLong_BASE =
18122**15, which is the default (and it's unlikely anyone changes that).
Tim Peters9faa3ed2006-05-30 15:53:34 +00001813
Mark Dickinsonfda8d112010-05-09 20:30:29 +00001814Waste isn't a problem: provided the first input digit isn't 0, the difference
Tim Peters9faa3ed2006-05-30 15:53:34 +00001815between the worst-case input with N digits and the smallest input with N
Mark Dickinsonfda8d112010-05-09 20:30:29 +00001816digits is about a factor of B, but B is small compared to PyLong_BASE so at
1817most one allocated Python digit can remain unused on that count. If
1818N*log(B)/log(PyLong_BASE) is mathematically an exact integer, then truncating
1819that and adding 1 returns a result 1 larger than necessary. However, that
1820can't happen: whenever B is a power of 2, long_from_binary_base() is called
1821instead, and it's impossible for B**i to be an integer power of 2**15 when B
1822is not a power of 2 (i.e., it's impossible for N*log(B)/log(PyLong_BASE) to be
Tim Peters9faa3ed2006-05-30 15:53:34 +00001823an exact integer when B is not a power of 2, since B**i has a prime factor
1824other than 2 in that case, but (2**15)**j's only prime factor is 2).
1825
Mark Dickinsonfda8d112010-05-09 20:30:29 +00001826The computed result can be too small if the true value of
1827N*log(B)/log(PyLong_BASE) is a little bit larger than an exact integer, but
1828due to roundoff errors (in computing log(B), log(PyLong_BASE), their quotient,
1829and/or multiplying that by N) yields a numeric result a little less than that
1830integer. Unfortunately, "how close can a transcendental function get to an
1831integer over some range?" questions are generally theoretically intractable.
1832Computer analysis via continued fractions is practical: expand
1833log(B)/log(PyLong_BASE) via continued fractions, giving a sequence i/j of "the
1834best" rational approximations. Then j*log(B)/log(PyLong_BASE) is
1835approximately equal to (the integer) i. This shows that we can get very close
1836to being in trouble, but very rarely. For example, 76573 is a denominator in
1837one of the continued-fraction approximations to log(10)/log(2**15), and
1838indeed:
Tim Peters9faa3ed2006-05-30 15:53:34 +00001839
1840 >>> log(10)/log(2**15)*76573
1841 16958.000000654003
1842
1843is very close to an integer. If we were working with IEEE single-precision,
1844rounding errors could kill us. Finding worst cases in IEEE double-precision
1845requires better-than-double-precision log() functions, and Tim didn't bother.
1846Instead the code checks to see whether the allocated space is enough as each
1847new Python digit is added, and copies the whole thing to a larger long if not.
1848This should happen extremely rarely, and in fact I don't have a test case
1849that triggers it(!). Instead the code was tested by artificially allocating
1850just 1 digit at the start, so that the copying code was exercised for every
1851digit beyond the first.
Tim Peters696cf432006-05-24 21:10:40 +00001852***/
Antoine Pitrouc83ea132010-05-09 14:46:46 +00001853 register twodigits c; /* current input character */
1854 Py_ssize_t size_z;
1855 int i;
1856 int convwidth;
1857 twodigits convmultmax, convmult;
1858 digit *pz, *pzstop;
1859 char* scan;
Tim Peters696cf432006-05-24 21:10:40 +00001860
Antoine Pitrouc83ea132010-05-09 14:46:46 +00001861 static double log_base_PyLong_BASE[37] = {0.0e0,};
1862 static int convwidth_base[37] = {0,};
1863 static twodigits convmultmax_base[37] = {0,};
Tim Peters696cf432006-05-24 21:10:40 +00001864
Antoine Pitrouc83ea132010-05-09 14:46:46 +00001865 if (log_base_PyLong_BASE[base] == 0.0) {
1866 twodigits convmax = base;
1867 int i = 1;
Tim Peters696cf432006-05-24 21:10:40 +00001868
Mark Dickinsonfda8d112010-05-09 20:30:29 +00001869 log_base_PyLong_BASE[base] = (log((double)base) /
1870 log((double)PyLong_BASE));
Antoine Pitrouc83ea132010-05-09 14:46:46 +00001871 for (;;) {
1872 twodigits next = convmax * base;
1873 if (next > PyLong_BASE)
1874 break;
1875 convmax = next;
1876 ++i;
1877 }
1878 convmultmax_base[base] = convmax;
1879 assert(i > 0);
1880 convwidth_base[base] = i;
1881 }
Tim Peters696cf432006-05-24 21:10:40 +00001882
Antoine Pitrouc83ea132010-05-09 14:46:46 +00001883 /* Find length of the string of numeric characters. */
1884 scan = str;
1885 while (_PyLong_DigitValue[Py_CHARMASK(*scan)] < base)
1886 ++scan;
Tim Peters696cf432006-05-24 21:10:40 +00001887
Antoine Pitrouc83ea132010-05-09 14:46:46 +00001888 /* Create a long object that can contain the largest possible
1889 * integer with this base and length. Note that there's no
1890 * need to initialize z->ob_digit -- no slot is read up before
1891 * being stored into.
1892 */
1893 size_z = (Py_ssize_t)((scan - str) * log_base_PyLong_BASE[base]) + 1;
1894 /* Uncomment next line to test exceedingly rare copy code */
1895 /* size_z = 1; */
1896 assert(size_z > 0);
1897 z = _PyLong_New(size_z);
1898 if (z == NULL)
1899 return NULL;
1900 Py_SIZE(z) = 0;
Tim Peters696cf432006-05-24 21:10:40 +00001901
Antoine Pitrouc83ea132010-05-09 14:46:46 +00001902 /* `convwidth` consecutive input digits are treated as a single
1903 * digit in base `convmultmax`.
1904 */
1905 convwidth = convwidth_base[base];
1906 convmultmax = convmultmax_base[base];
Tim Peters696cf432006-05-24 21:10:40 +00001907
Antoine Pitrouc83ea132010-05-09 14:46:46 +00001908 /* Work ;-) */
1909 while (str < scan) {
1910 /* grab up to convwidth digits from the input string */
1911 c = (digit)_PyLong_DigitValue[Py_CHARMASK(*str++)];
1912 for (i = 1; i < convwidth && str != scan; ++i, ++str) {
1913 c = (twodigits)(c * base +
Mark Dickinsonfda8d112010-05-09 20:30:29 +00001914 _PyLong_DigitValue[Py_CHARMASK(*str)]);
Antoine Pitrouc83ea132010-05-09 14:46:46 +00001915 assert(c < PyLong_BASE);
1916 }
Tim Peters696cf432006-05-24 21:10:40 +00001917
Antoine Pitrouc83ea132010-05-09 14:46:46 +00001918 convmult = convmultmax;
1919 /* Calculate the shift only if we couldn't get
1920 * convwidth digits.
1921 */
1922 if (i != convwidth) {
1923 convmult = base;
1924 for ( ; i > 1; --i)
1925 convmult *= base;
1926 }
Tim Peters696cf432006-05-24 21:10:40 +00001927
Antoine Pitrouc83ea132010-05-09 14:46:46 +00001928 /* Multiply z by convmult, and add c. */
1929 pz = z->ob_digit;
1930 pzstop = pz + Py_SIZE(z);
1931 for (; pz < pzstop; ++pz) {
1932 c += (twodigits)*pz * convmult;
1933 *pz = (digit)(c & PyLong_MASK);
1934 c >>= PyLong_SHIFT;
1935 }
1936 /* carry off the current end? */
1937 if (c) {
1938 assert(c < PyLong_BASE);
1939 if (Py_SIZE(z) < size_z) {
1940 *pz = (digit)c;
1941 ++Py_SIZE(z);
1942 }
1943 else {
1944 PyLongObject *tmp;
1945 /* Extremely rare. Get more space. */
1946 assert(Py_SIZE(z) == size_z);
1947 tmp = _PyLong_New(size_z + 1);
1948 if (tmp == NULL) {
1949 Py_DECREF(z);
1950 return NULL;
1951 }
1952 memcpy(tmp->ob_digit,
1953 z->ob_digit,
1954 sizeof(digit) * size_z);
1955 Py_DECREF(z);
1956 z = tmp;
1957 z->ob_digit[size_z] = (digit)c;
1958 ++size_z;
1959 }
1960 }
1961 }
1962 }
1963 if (z == NULL)
1964 return NULL;
1965 if (str == start)
1966 goto onError;
1967 if (sign < 0)
1968 Py_SIZE(z) = -(Py_SIZE(z));
1969 if (*str == 'L' || *str == 'l')
1970 str++;
1971 while (*str && isspace(Py_CHARMASK(*str)))
1972 str++;
1973 if (*str != '\0')
1974 goto onError;
1975 if (pend)
1976 *pend = str;
1977 return (PyObject *) z;
Guido van Rossum9e896b32000-04-05 20:11:21 +00001978
Mark Dickinsonfda8d112010-05-09 20:30:29 +00001979 onError:
Antoine Pitrouc83ea132010-05-09 14:46:46 +00001980 Py_XDECREF(z);
1981 slen = strlen(orig_str) < 200 ? strlen(orig_str) : 200;
1982 strobj = PyString_FromStringAndSize(orig_str, slen);
1983 if (strobj == NULL)
1984 return NULL;
1985 strrepr = PyObject_Repr(strobj);
1986 Py_DECREF(strobj);
1987 if (strrepr == NULL)
1988 return NULL;
1989 PyErr_Format(PyExc_ValueError,
1990 "invalid literal for long() with base %d: %s",
1991 base, PyString_AS_STRING(strrepr));
1992 Py_DECREF(strrepr);
1993 return NULL;
Guido van Rossum9e896b32000-04-05 20:11:21 +00001994}
1995
Martin v. Löwis339d0f72001-08-17 18:39:25 +00001996#ifdef Py_USING_UNICODE
Guido van Rossum9e896b32000-04-05 20:11:21 +00001997PyObject *
Martin v. Löwis18e16552006-02-15 17:27:45 +00001998PyLong_FromUnicode(Py_UNICODE *u, Py_ssize_t length, int base)
Guido van Rossum9e896b32000-04-05 20:11:21 +00001999{
Antoine Pitrouc83ea132010-05-09 14:46:46 +00002000 PyObject *result;
2001 char *buffer = (char *)PyMem_MALLOC(length+1);
Guido van Rossum9e896b32000-04-05 20:11:21 +00002002
Antoine Pitrouc83ea132010-05-09 14:46:46 +00002003 if (buffer == NULL)
2004 return NULL;
Walter Dörwald07e14762002-11-06 16:15:14 +00002005
Antoine Pitrouc83ea132010-05-09 14:46:46 +00002006 if (PyUnicode_EncodeDecimal(u, length, buffer, NULL)) {
2007 PyMem_FREE(buffer);
2008 return NULL;
2009 }
2010 result = PyLong_FromString(buffer, NULL, base);
2011 PyMem_FREE(buffer);
2012 return result;
Guido van Rossumedcc38a1991-05-05 20:09:44 +00002013}
Martin v. Löwis339d0f72001-08-17 18:39:25 +00002014#endif
Guido van Rossumedcc38a1991-05-05 20:09:44 +00002015
Tim Peters9f688bf2000-07-07 15:53:28 +00002016/* forward */
Guido van Rossumc0b618a1997-05-02 03:12:38 +00002017static PyLongObject *x_divrem
Antoine Pitrouc83ea132010-05-09 14:46:46 +00002018 (PyLongObject *, PyLongObject *, PyLongObject **);
Jeffrey Yasskin2f3c16b2008-01-03 02:21:52 +00002019static PyObject *long_long(PyObject *v);
Guido van Rossumedcc38a1991-05-05 20:09:44 +00002020
2021/* Long division with remainder, top-level routine */
2022
Guido van Rossume32e0141992-01-19 16:31:05 +00002023static int
Tim Peters9f688bf2000-07-07 15:53:28 +00002024long_divrem(PyLongObject *a, PyLongObject *b,
Antoine Pitrouc83ea132010-05-09 14:46:46 +00002025 PyLongObject **pdiv, PyLongObject **prem)
Guido van Rossumedcc38a1991-05-05 20:09:44 +00002026{
Antoine Pitrouc83ea132010-05-09 14:46:46 +00002027 Py_ssize_t size_a = ABS(Py_SIZE(a)), size_b = ABS(Py_SIZE(b));
2028 PyLongObject *z;
Tim Peters5af4e6c2002-08-12 02:31:19 +00002029
Antoine Pitrouc83ea132010-05-09 14:46:46 +00002030 if (size_b == 0) {
2031 PyErr_SetString(PyExc_ZeroDivisionError,
2032 "long division or modulo by zero");
2033 return -1;
2034 }
2035 if (size_a < size_b ||
2036 (size_a == size_b &&
2037 a->ob_digit[size_a-1] < b->ob_digit[size_b-1])) {
2038 /* |a| < |b|. */
2039 *pdiv = _PyLong_New(0);
2040 if (*pdiv == NULL)
2041 return -1;
2042 Py_INCREF(a);
2043 *prem = (PyLongObject *) a;
2044 return 0;
2045 }
2046 if (size_b == 1) {
2047 digit rem = 0;
2048 z = divrem1(a, b->ob_digit[0], &rem);
2049 if (z == NULL)
2050 return -1;
2051 *prem = (PyLongObject *) PyLong_FromLong((long)rem);
2052 if (*prem == NULL) {
2053 Py_DECREF(z);
2054 return -1;
2055 }
2056 }
2057 else {
2058 z = x_divrem(a, b, prem);
2059 if (z == NULL)
2060 return -1;
2061 }
2062 /* Set the signs.
2063 The quotient z has the sign of a*b;
2064 the remainder r has the sign of a,
2065 so a = b*z + r. */
2066 if ((a->ob_size < 0) != (b->ob_size < 0))
2067 z->ob_size = -(z->ob_size);
2068 if (a->ob_size < 0 && (*prem)->ob_size != 0)
2069 (*prem)->ob_size = -((*prem)->ob_size);
2070 *pdiv = z;
2071 return 0;
Guido van Rossumedcc38a1991-05-05 20:09:44 +00002072}
2073
Mark Dickinson0b666bf2009-03-23 18:25:13 +00002074/* Unsigned long division with remainder -- the algorithm. The arguments v1
2075 and w1 should satisfy 2 <= ABS(Py_SIZE(w1)) <= ABS(Py_SIZE(v1)). */
Guido van Rossumedcc38a1991-05-05 20:09:44 +00002076
Guido van Rossumc0b618a1997-05-02 03:12:38 +00002077static PyLongObject *
Tim Peters9f688bf2000-07-07 15:53:28 +00002078x_divrem(PyLongObject *v1, PyLongObject *w1, PyLongObject **prem)
Guido van Rossumedcc38a1991-05-05 20:09:44 +00002079{
Antoine Pitrouc83ea132010-05-09 14:46:46 +00002080 PyLongObject *v, *w, *a;
2081 Py_ssize_t i, k, size_v, size_w;
2082 int d;
2083 digit wm1, wm2, carry, q, r, vtop, *v0, *vk, *w0, *ak;
2084 twodigits vv;
2085 sdigit zhi;
2086 stwodigits z;
Tim Peters5af4e6c2002-08-12 02:31:19 +00002087
Antoine Pitrouc83ea132010-05-09 14:46:46 +00002088 /* We follow Knuth [The Art of Computer Programming, Vol. 2 (3rd
2089 edn.), section 4.3.1, Algorithm D], except that we don't explicitly
2090 handle the special case when the initial estimate q for a quotient
2091 digit is >= PyLong_BASE: the max value for q is PyLong_BASE+1, and
2092 that won't overflow a digit. */
Mark Dickinson0b666bf2009-03-23 18:25:13 +00002093
Antoine Pitrouc83ea132010-05-09 14:46:46 +00002094 /* allocate space; w will also be used to hold the final remainder */
2095 size_v = ABS(Py_SIZE(v1));
2096 size_w = ABS(Py_SIZE(w1));
2097 assert(size_v >= size_w && size_w >= 2); /* Assert checks by div() */
2098 v = _PyLong_New(size_v+1);
2099 if (v == NULL) {
2100 *prem = NULL;
2101 return NULL;
2102 }
2103 w = _PyLong_New(size_w);
2104 if (w == NULL) {
2105 Py_DECREF(v);
2106 *prem = NULL;
2107 return NULL;
2108 }
Tim Peters5af4e6c2002-08-12 02:31:19 +00002109
Antoine Pitrouc83ea132010-05-09 14:46:46 +00002110 /* normalize: shift w1 left so that its top digit is >= PyLong_BASE/2.
2111 shift v1 left by the same amount. Results go into w and v. */
2112 d = PyLong_SHIFT - bits_in_digit(w1->ob_digit[size_w-1]);
2113 carry = v_lshift(w->ob_digit, w1->ob_digit, size_w, d);
2114 assert(carry == 0);
2115 carry = v_lshift(v->ob_digit, v1->ob_digit, size_v, d);
2116 if (carry != 0 || v->ob_digit[size_v-1] >= w->ob_digit[size_w-1]) {
2117 v->ob_digit[size_v] = carry;
2118 size_v++;
2119 }
Tim Peters5af4e6c2002-08-12 02:31:19 +00002120
Antoine Pitrouc83ea132010-05-09 14:46:46 +00002121 /* Now v->ob_digit[size_v-1] < w->ob_digit[size_w-1], so quotient has
2122 at most (and usually exactly) k = size_v - size_w digits. */
2123 k = size_v - size_w;
2124 assert(k >= 0);
2125 a = _PyLong_New(k);
2126 if (a == NULL) {
2127 Py_DECREF(w);
2128 Py_DECREF(v);
2129 *prem = NULL;
2130 return NULL;
2131 }
2132 v0 = v->ob_digit;
2133 w0 = w->ob_digit;
2134 wm1 = w0[size_w-1];
2135 wm2 = w0[size_w-2];
2136 for (vk = v0+k, ak = a->ob_digit + k; vk-- > v0;) {
2137 /* inner loop: divide vk[0:size_w+1] by w0[0:size_w], giving
2138 single-digit quotient q, remainder in vk[0:size_w]. */
Tim Peters5af4e6c2002-08-12 02:31:19 +00002139
Antoine Pitrouc83ea132010-05-09 14:46:46 +00002140 SIGCHECK({
Mark Dickinsonfda8d112010-05-09 20:30:29 +00002141 Py_DECREF(a);
2142 Py_DECREF(w);
2143 Py_DECREF(v);
2144 *prem = NULL;
2145 return NULL;
Mark Dickinson43ca3772010-05-09 20:42:09 +00002146 });
Tim Peters5af4e6c2002-08-12 02:31:19 +00002147
Antoine Pitrouc83ea132010-05-09 14:46:46 +00002148 /* estimate quotient digit q; may overestimate by 1 (rare) */
2149 vtop = vk[size_w];
2150 assert(vtop <= wm1);
2151 vv = ((twodigits)vtop << PyLong_SHIFT) | vk[size_w-1];
2152 q = (digit)(vv / wm1);
2153 r = (digit)(vv - (twodigits)wm1 * q); /* r = vv % wm1 */
2154 while ((twodigits)wm2 * q > (((twodigits)r << PyLong_SHIFT)
2155 | vk[size_w-2])) {
2156 --q;
2157 r += wm1;
2158 if (r >= PyLong_BASE)
2159 break;
2160 }
2161 assert(q <= PyLong_BASE);
Tim Peters5af4e6c2002-08-12 02:31:19 +00002162
Antoine Pitrouc83ea132010-05-09 14:46:46 +00002163 /* subtract q*w0[0:size_w] from vk[0:size_w+1] */
2164 zhi = 0;
2165 for (i = 0; i < size_w; ++i) {
2166 /* invariants: -PyLong_BASE <= -q <= zhi <= 0;
2167 -PyLong_BASE * q <= z < PyLong_BASE */
2168 z = (sdigit)vk[i] + zhi -
2169 (stwodigits)q * (stwodigits)w0[i];
2170 vk[i] = (digit)z & PyLong_MASK;
2171 zhi = (sdigit)Py_ARITHMETIC_RIGHT_SHIFT(stwodigits,
Mark Dickinsonfda8d112010-05-09 20:30:29 +00002172 z, PyLong_SHIFT);
Antoine Pitrouc83ea132010-05-09 14:46:46 +00002173 }
Tim Peters5af4e6c2002-08-12 02:31:19 +00002174
Antoine Pitrouc83ea132010-05-09 14:46:46 +00002175 /* add w back if q was too large (this branch taken rarely) */
2176 assert((sdigit)vtop + zhi == -1 || (sdigit)vtop + zhi == 0);
2177 if ((sdigit)vtop + zhi < 0) {
2178 carry = 0;
2179 for (i = 0; i < size_w; ++i) {
2180 carry += vk[i] + w0[i];
2181 vk[i] = carry & PyLong_MASK;
2182 carry >>= PyLong_SHIFT;
2183 }
2184 --q;
2185 }
Tim Peters5af4e6c2002-08-12 02:31:19 +00002186
Antoine Pitrouc83ea132010-05-09 14:46:46 +00002187 /* store quotient digit */
2188 assert(q < PyLong_BASE);
2189 *--ak = q;
2190 }
Mark Dickinson0b666bf2009-03-23 18:25:13 +00002191
Antoine Pitrouc83ea132010-05-09 14:46:46 +00002192 /* unshift remainder; we reuse w to store the result */
2193 carry = v_rshift(w0, v0, size_w, d);
2194 assert(carry==0);
2195 Py_DECREF(v);
Mark Dickinson0b666bf2009-03-23 18:25:13 +00002196
Antoine Pitrouc83ea132010-05-09 14:46:46 +00002197 *prem = long_normalize(w);
2198 return long_normalize(a);
Guido van Rossumedcc38a1991-05-05 20:09:44 +00002199}
2200
Mark Dickinsond3e32322010-01-02 14:45:40 +00002201/* For a nonzero PyLong a, express a in the form x * 2**e, with 0.5 <=
2202 abs(x) < 1.0 and e >= 0; return x and put e in *e. Here x is
2203 rounded to DBL_MANT_DIG significant bits using round-half-to-even.
2204 If a == 0, return 0.0 and set *e = 0. If the resulting exponent
2205 e is larger than PY_SSIZE_T_MAX, raise OverflowError and return
2206 -1.0. */
2207
2208/* attempt to define 2.0**DBL_MANT_DIG as a compile-time constant */
2209#if DBL_MANT_DIG == 53
2210#define EXP2_DBL_MANT_DIG 9007199254740992.0
2211#else
2212#define EXP2_DBL_MANT_DIG (ldexp(1.0, DBL_MANT_DIG))
2213#endif
2214
2215double
2216_PyLong_Frexp(PyLongObject *a, Py_ssize_t *e)
2217{
Antoine Pitrouc83ea132010-05-09 14:46:46 +00002218 Py_ssize_t a_size, a_bits, shift_digits, shift_bits, x_size;
2219 /* See below for why x_digits is always large enough. */
2220 digit rem, x_digits[2 + (DBL_MANT_DIG + 1) / PyLong_SHIFT];
2221 double dx;
2222 /* Correction term for round-half-to-even rounding. For a digit x,
2223 "x + half_even_correction[x & 7]" gives x rounded to the nearest
2224 multiple of 4, rounding ties to a multiple of 8. */
2225 static const int half_even_correction[8] = {0, -1, -2, 1, 0, -1, 2, 1};
Mark Dickinsond3e32322010-01-02 14:45:40 +00002226
Antoine Pitrouc83ea132010-05-09 14:46:46 +00002227 a_size = ABS(Py_SIZE(a));
2228 if (a_size == 0) {
2229 /* Special case for 0: significand 0.0, exponent 0. */
2230 *e = 0;
2231 return 0.0;
2232 }
2233 a_bits = bits_in_digit(a->ob_digit[a_size-1]);
2234 /* The following is an overflow-free version of the check
2235 "if ((a_size - 1) * PyLong_SHIFT + a_bits > PY_SSIZE_T_MAX) ..." */
2236 if (a_size >= (PY_SSIZE_T_MAX - 1) / PyLong_SHIFT + 1 &&
2237 (a_size > (PY_SSIZE_T_MAX - 1) / PyLong_SHIFT + 1 ||
2238 a_bits > (PY_SSIZE_T_MAX - 1) % PyLong_SHIFT + 1))
Mark Dickinsonfda8d112010-05-09 20:30:29 +00002239 goto overflow;
Antoine Pitrouc83ea132010-05-09 14:46:46 +00002240 a_bits = (a_size - 1) * PyLong_SHIFT + a_bits;
Mark Dickinsond3e32322010-01-02 14:45:40 +00002241
Antoine Pitrouc83ea132010-05-09 14:46:46 +00002242 /* Shift the first DBL_MANT_DIG + 2 bits of a into x_digits[0:x_size]
2243 (shifting left if a_bits <= DBL_MANT_DIG + 2).
Mark Dickinsond3e32322010-01-02 14:45:40 +00002244
Antoine Pitrouc83ea132010-05-09 14:46:46 +00002245 Number of digits needed for result: write // for floor division.
2246 Then if shifting left, we end up using
Mark Dickinsond3e32322010-01-02 14:45:40 +00002247
Antoine Pitrouc83ea132010-05-09 14:46:46 +00002248 1 + a_size + (DBL_MANT_DIG + 2 - a_bits) // PyLong_SHIFT
Mark Dickinsond3e32322010-01-02 14:45:40 +00002249
Antoine Pitrouc83ea132010-05-09 14:46:46 +00002250 digits. If shifting right, we use
Mark Dickinsond3e32322010-01-02 14:45:40 +00002251
Antoine Pitrouc83ea132010-05-09 14:46:46 +00002252 a_size - (a_bits - DBL_MANT_DIG - 2) // PyLong_SHIFT
Mark Dickinsond3e32322010-01-02 14:45:40 +00002253
Antoine Pitrouc83ea132010-05-09 14:46:46 +00002254 digits. Using a_size = 1 + (a_bits - 1) // PyLong_SHIFT along with
2255 the inequalities
Mark Dickinsond3e32322010-01-02 14:45:40 +00002256
Antoine Pitrouc83ea132010-05-09 14:46:46 +00002257 m // PyLong_SHIFT + n // PyLong_SHIFT <= (m + n) // PyLong_SHIFT
2258 m // PyLong_SHIFT - n // PyLong_SHIFT <=
2259 1 + (m - n - 1) // PyLong_SHIFT,
Mark Dickinsond3e32322010-01-02 14:45:40 +00002260
Antoine Pitrouc83ea132010-05-09 14:46:46 +00002261 valid for any integers m and n, we find that x_size satisfies
Mark Dickinsond3e32322010-01-02 14:45:40 +00002262
Antoine Pitrouc83ea132010-05-09 14:46:46 +00002263 x_size <= 2 + (DBL_MANT_DIG + 1) // PyLong_SHIFT
Mark Dickinsond3e32322010-01-02 14:45:40 +00002264
Antoine Pitrouc83ea132010-05-09 14:46:46 +00002265 in both cases.
2266 */
2267 if (a_bits <= DBL_MANT_DIG + 2) {
2268 shift_digits = (DBL_MANT_DIG + 2 - a_bits) / PyLong_SHIFT;
2269 shift_bits = (DBL_MANT_DIG + 2 - a_bits) % PyLong_SHIFT;
2270 x_size = 0;
2271 while (x_size < shift_digits)
2272 x_digits[x_size++] = 0;
2273 rem = v_lshift(x_digits + x_size, a->ob_digit, a_size,
2274 (int)shift_bits);
2275 x_size += a_size;
2276 x_digits[x_size++] = rem;
2277 }
2278 else {
2279 shift_digits = (a_bits - DBL_MANT_DIG - 2) / PyLong_SHIFT;
2280 shift_bits = (a_bits - DBL_MANT_DIG - 2) % PyLong_SHIFT;
2281 rem = v_rshift(x_digits, a->ob_digit + shift_digits,
2282 a_size - shift_digits, (int)shift_bits);
2283 x_size = a_size - shift_digits;
2284 /* For correct rounding below, we need the least significant
2285 bit of x to be 'sticky' for this shift: if any of the bits
2286 shifted out was nonzero, we set the least significant bit
2287 of x. */
2288 if (rem)
2289 x_digits[0] |= 1;
2290 else
2291 while (shift_digits > 0)
2292 if (a->ob_digit[--shift_digits]) {
2293 x_digits[0] |= 1;
2294 break;
2295 }
2296 }
Mark Dickinsonfda8d112010-05-09 20:30:29 +00002297 assert(1 <= x_size &&
2298 x_size <= (Py_ssize_t)(sizeof(x_digits)/sizeof(digit)));
Mark Dickinsond3e32322010-01-02 14:45:40 +00002299
Antoine Pitrouc83ea132010-05-09 14:46:46 +00002300 /* Round, and convert to double. */
2301 x_digits[0] += half_even_correction[x_digits[0] & 7];
2302 dx = x_digits[--x_size];
2303 while (x_size > 0)
2304 dx = dx * PyLong_BASE + x_digits[--x_size];
Mark Dickinsond3e32322010-01-02 14:45:40 +00002305
Antoine Pitrouc83ea132010-05-09 14:46:46 +00002306 /* Rescale; make correction if result is 1.0. */
2307 dx /= 4.0 * EXP2_DBL_MANT_DIG;
2308 if (dx == 1.0) {
2309 if (a_bits == PY_SSIZE_T_MAX)
2310 goto overflow;
2311 dx = 0.5;
2312 a_bits += 1;
2313 }
Mark Dickinsond3e32322010-01-02 14:45:40 +00002314
Antoine Pitrouc83ea132010-05-09 14:46:46 +00002315 *e = a_bits;
2316 return Py_SIZE(a) < 0 ? -dx : dx;
Mark Dickinsond3e32322010-01-02 14:45:40 +00002317
2318 overflow:
Antoine Pitrouc83ea132010-05-09 14:46:46 +00002319 /* exponent > PY_SSIZE_T_MAX */
2320 PyErr_SetString(PyExc_OverflowError,
2321 "huge integer: number of bits overflows a Py_ssize_t");
2322 *e = 0;
2323 return -1.0;
Mark Dickinsond3e32322010-01-02 14:45:40 +00002324}
2325
2326/* Get a C double from a long int object. Rounds to the nearest double,
2327 using the round-half-to-even rule in the case of a tie. */
2328
2329double
2330PyLong_AsDouble(PyObject *v)
2331{
Antoine Pitrouc83ea132010-05-09 14:46:46 +00002332 Py_ssize_t exponent;
2333 double x;
Mark Dickinsond3e32322010-01-02 14:45:40 +00002334
Antoine Pitrouc83ea132010-05-09 14:46:46 +00002335 if (v == NULL || !PyLong_Check(v)) {
2336 PyErr_BadInternalCall();
2337 return -1.0;
2338 }
2339 x = _PyLong_Frexp((PyLongObject *)v, &exponent);
2340 if ((x == -1.0 && PyErr_Occurred()) || exponent > DBL_MAX_EXP) {
2341 PyErr_SetString(PyExc_OverflowError,
2342 "long int too large to convert to float");
2343 return -1.0;
2344 }
2345 return ldexp(x, (int)exponent);
Mark Dickinsond3e32322010-01-02 14:45:40 +00002346}
2347
Guido van Rossumedcc38a1991-05-05 20:09:44 +00002348/* Methods */
2349
2350static void
Tim Peters9f688bf2000-07-07 15:53:28 +00002351long_dealloc(PyObject *v)
Guido van Rossumedcc38a1991-05-05 20:09:44 +00002352{
Antoine Pitrouc83ea132010-05-09 14:46:46 +00002353 Py_TYPE(v)->tp_free(v);
Guido van Rossumedcc38a1991-05-05 20:09:44 +00002354}
2355
Guido van Rossumc0b618a1997-05-02 03:12:38 +00002356static PyObject *
Tim Peters9f688bf2000-07-07 15:53:28 +00002357long_repr(PyObject *v)
Guido van Rossumedcc38a1991-05-05 20:09:44 +00002358{
Antoine Pitrouc83ea132010-05-09 14:46:46 +00002359 return _PyLong_Format(v, 10, 1, 0);
Fred Drake121ee271999-12-23 15:41:28 +00002360}
2361
2362static PyObject *
Tim Peters9f688bf2000-07-07 15:53:28 +00002363long_str(PyObject *v)
Fred Drake121ee271999-12-23 15:41:28 +00002364{
Antoine Pitrouc83ea132010-05-09 14:46:46 +00002365 return _PyLong_Format(v, 10, 0, 0);
Guido van Rossumedcc38a1991-05-05 20:09:44 +00002366}
2367
2368static int
Tim Peters9f688bf2000-07-07 15:53:28 +00002369long_compare(PyLongObject *a, PyLongObject *b)
Guido van Rossumedcc38a1991-05-05 20:09:44 +00002370{
Antoine Pitrouc83ea132010-05-09 14:46:46 +00002371 Py_ssize_t sign;
Tim Peters5af4e6c2002-08-12 02:31:19 +00002372
Antoine Pitrouc83ea132010-05-09 14:46:46 +00002373 if (Py_SIZE(a) != Py_SIZE(b)) {
2374 sign = Py_SIZE(a) - Py_SIZE(b);
2375 }
2376 else {
2377 Py_ssize_t i = ABS(Py_SIZE(a));
2378 while (--i >= 0 && a->ob_digit[i] == b->ob_digit[i])
2379 ;
2380 if (i < 0)
2381 sign = 0;
2382 else {
2383 sign = (sdigit)a->ob_digit[i] - (sdigit)b->ob_digit[i];
2384 if (Py_SIZE(a) < 0)
2385 sign = -sign;
2386 }
2387 }
2388 return sign < 0 ? -1 : sign > 0 ? 1 : 0;
Guido van Rossumedcc38a1991-05-05 20:09:44 +00002389}
2390
Guido van Rossum9bfef441993-03-29 10:43:31 +00002391static long
Tim Peters9f688bf2000-07-07 15:53:28 +00002392long_hash(PyLongObject *v)
Guido van Rossum9bfef441993-03-29 10:43:31 +00002393{
Antoine Pitrouc83ea132010-05-09 14:46:46 +00002394 unsigned long x;
2395 Py_ssize_t i;
2396 int sign;
Guido van Rossum9bfef441993-03-29 10:43:31 +00002397
Antoine Pitrouc83ea132010-05-09 14:46:46 +00002398 /* This is designed so that Python ints and longs with the
2399 same value hash to the same value, otherwise comparisons
2400 of mapping keys will turn out weird */
2401 i = v->ob_size;
2402 sign = 1;
2403 x = 0;
2404 if (i < 0) {
2405 sign = -1;
2406 i = -(i);
2407 }
2408 /* The following loop produces a C unsigned long x such that x is
2409 congruent to the absolute value of v modulo ULONG_MAX. The
2410 resulting x is nonzero if and only if v is. */
2411 while (--i >= 0) {
2412 /* Force a native long #-bits (32 or 64) circular shift */
2413 x = (x >> (8*SIZEOF_LONG-PyLong_SHIFT)) | (x << PyLong_SHIFT);
2414 x += v->ob_digit[i];
2415 /* If the addition above overflowed we compensate by
2416 incrementing. This preserves the value modulo
2417 ULONG_MAX. */
2418 if (x < v->ob_digit[i])
2419 x++;
2420 }
2421 x = x * sign;
2422 if (x == (unsigned long)-1)
2423 x = (unsigned long)-2;
2424 return (long)x;
Guido van Rossum9bfef441993-03-29 10:43:31 +00002425}
2426
2427
Guido van Rossumedcc38a1991-05-05 20:09:44 +00002428/* Add the absolute values of two long integers. */
2429
Guido van Rossumc0b618a1997-05-02 03:12:38 +00002430static PyLongObject *
Tim Peters9f688bf2000-07-07 15:53:28 +00002431x_add(PyLongObject *a, PyLongObject *b)
Guido van Rossumedcc38a1991-05-05 20:09:44 +00002432{
Antoine Pitrouc83ea132010-05-09 14:46:46 +00002433 Py_ssize_t size_a = ABS(Py_SIZE(a)), size_b = ABS(Py_SIZE(b));
2434 PyLongObject *z;
2435 Py_ssize_t i;
2436 digit carry = 0;
Tim Peters69c2de32001-09-11 22:31:33 +00002437
Antoine Pitrouc83ea132010-05-09 14:46:46 +00002438 /* Ensure a is the larger of the two: */
2439 if (size_a < size_b) {
2440 { PyLongObject *temp = a; a = b; b = temp; }
2441 { Py_ssize_t size_temp = size_a;
Mark Dickinsonfda8d112010-05-09 20:30:29 +00002442 size_a = size_b;
2443 size_b = size_temp; }
Antoine Pitrouc83ea132010-05-09 14:46:46 +00002444 }
2445 z = _PyLong_New(size_a+1);
2446 if (z == NULL)
2447 return NULL;
2448 for (i = 0; i < size_b; ++i) {
2449 carry += a->ob_digit[i] + b->ob_digit[i];
2450 z->ob_digit[i] = carry & PyLong_MASK;
2451 carry >>= PyLong_SHIFT;
2452 }
2453 for (; i < size_a; ++i) {
2454 carry += a->ob_digit[i];
2455 z->ob_digit[i] = carry & PyLong_MASK;
2456 carry >>= PyLong_SHIFT;
2457 }
2458 z->ob_digit[i] = carry;
2459 return long_normalize(z);
Guido van Rossumedcc38a1991-05-05 20:09:44 +00002460}
2461
2462/* Subtract the absolute values of two integers. */
2463
Guido van Rossumc0b618a1997-05-02 03:12:38 +00002464static PyLongObject *
Tim Peters9f688bf2000-07-07 15:53:28 +00002465x_sub(PyLongObject *a, PyLongObject *b)
Guido van Rossumedcc38a1991-05-05 20:09:44 +00002466{
Antoine Pitrouc83ea132010-05-09 14:46:46 +00002467 Py_ssize_t size_a = ABS(Py_SIZE(a)), size_b = ABS(Py_SIZE(b));
2468 PyLongObject *z;
2469 Py_ssize_t i;
2470 int sign = 1;
2471 digit borrow = 0;
Tim Peters69c2de32001-09-11 22:31:33 +00002472
Antoine Pitrouc83ea132010-05-09 14:46:46 +00002473 /* Ensure a is the larger of the two: */
2474 if (size_a < size_b) {
2475 sign = -1;
2476 { PyLongObject *temp = a; a = b; b = temp; }
2477 { Py_ssize_t size_temp = size_a;
Mark Dickinsonfda8d112010-05-09 20:30:29 +00002478 size_a = size_b;
2479 size_b = size_temp; }
Antoine Pitrouc83ea132010-05-09 14:46:46 +00002480 }
2481 else if (size_a == size_b) {
2482 /* Find highest digit where a and b differ: */
2483 i = size_a;
2484 while (--i >= 0 && a->ob_digit[i] == b->ob_digit[i])
2485 ;
2486 if (i < 0)
2487 return _PyLong_New(0);
2488 if (a->ob_digit[i] < b->ob_digit[i]) {
2489 sign = -1;
2490 { PyLongObject *temp = a; a = b; b = temp; }
2491 }
2492 size_a = size_b = i+1;
2493 }
2494 z = _PyLong_New(size_a);
2495 if (z == NULL)
2496 return NULL;
2497 for (i = 0; i < size_b; ++i) {
2498 /* The following assumes unsigned arithmetic
2499 works module 2**N for some N>PyLong_SHIFT. */
2500 borrow = a->ob_digit[i] - b->ob_digit[i] - borrow;
2501 z->ob_digit[i] = borrow & PyLong_MASK;
2502 borrow >>= PyLong_SHIFT;
2503 borrow &= 1; /* Keep only one sign bit */
2504 }
2505 for (; i < size_a; ++i) {
2506 borrow = a->ob_digit[i] - borrow;
2507 z->ob_digit[i] = borrow & PyLong_MASK;
2508 borrow >>= PyLong_SHIFT;
2509 borrow &= 1; /* Keep only one sign bit */
2510 }
2511 assert(borrow == 0);
2512 if (sign < 0)
2513 z->ob_size = -(z->ob_size);
2514 return long_normalize(z);
Guido van Rossumedcc38a1991-05-05 20:09:44 +00002515}
2516
Guido van Rossumc0b618a1997-05-02 03:12:38 +00002517static PyObject *
Neil Schemenauerba872e22001-01-04 01:46:03 +00002518long_add(PyLongObject *v, PyLongObject *w)
Guido van Rossum4c260ff1992-01-14 18:36:43 +00002519{
Antoine Pitrouc83ea132010-05-09 14:46:46 +00002520 PyLongObject *a, *b, *z;
Tim Peters69c2de32001-09-11 22:31:33 +00002521
Antoine Pitrouc83ea132010-05-09 14:46:46 +00002522 CONVERT_BINOP((PyObject *)v, (PyObject *)w, &a, &b);
Neil Schemenauerba872e22001-01-04 01:46:03 +00002523
Antoine Pitrouc83ea132010-05-09 14:46:46 +00002524 if (a->ob_size < 0) {
2525 if (b->ob_size < 0) {
2526 z = x_add(a, b);
2527 if (z != NULL && z->ob_size != 0)
2528 z->ob_size = -(z->ob_size);
2529 }
2530 else
2531 z = x_sub(b, a);
2532 }
2533 else {
2534 if (b->ob_size < 0)
2535 z = x_sub(a, b);
2536 else
2537 z = x_add(a, b);
2538 }
2539 Py_DECREF(a);
2540 Py_DECREF(b);
2541 return (PyObject *)z;
Guido van Rossumedcc38a1991-05-05 20:09:44 +00002542}
2543
Guido van Rossumc0b618a1997-05-02 03:12:38 +00002544static PyObject *
Neil Schemenauerba872e22001-01-04 01:46:03 +00002545long_sub(PyLongObject *v, PyLongObject *w)
Guido van Rossum4c260ff1992-01-14 18:36:43 +00002546{
Antoine Pitrouc83ea132010-05-09 14:46:46 +00002547 PyLongObject *a, *b, *z;
Tim Peters5af4e6c2002-08-12 02:31:19 +00002548
Antoine Pitrouc83ea132010-05-09 14:46:46 +00002549 CONVERT_BINOP((PyObject *)v, (PyObject *)w, &a, &b);
Neil Schemenauerba872e22001-01-04 01:46:03 +00002550
Antoine Pitrouc83ea132010-05-09 14:46:46 +00002551 if (a->ob_size < 0) {
2552 if (b->ob_size < 0)
2553 z = x_sub(a, b);
2554 else
2555 z = x_add(a, b);
2556 if (z != NULL && z->ob_size != 0)
2557 z->ob_size = -(z->ob_size);
2558 }
2559 else {
2560 if (b->ob_size < 0)
2561 z = x_add(a, b);
2562 else
2563 z = x_sub(a, b);
2564 }
2565 Py_DECREF(a);
2566 Py_DECREF(b);
2567 return (PyObject *)z;
Guido van Rossumedcc38a1991-05-05 20:09:44 +00002568}
2569
Tim Peters5af4e6c2002-08-12 02:31:19 +00002570/* Grade school multiplication, ignoring the signs.
2571 * Returns the absolute value of the product, or NULL if error.
2572 */
2573static PyLongObject *
2574x_mul(PyLongObject *a, PyLongObject *b)
Neil Schemenauerba872e22001-01-04 01:46:03 +00002575{
Antoine Pitrouc83ea132010-05-09 14:46:46 +00002576 PyLongObject *z;
2577 Py_ssize_t size_a = ABS(Py_SIZE(a));
2578 Py_ssize_t size_b = ABS(Py_SIZE(b));
2579 Py_ssize_t i;
Neil Schemenauerba872e22001-01-04 01:46:03 +00002580
Antoine Pitrouc83ea132010-05-09 14:46:46 +00002581 z = _PyLong_New(size_a + size_b);
2582 if (z == NULL)
2583 return NULL;
Tim Peters5af4e6c2002-08-12 02:31:19 +00002584
Antoine Pitrouc83ea132010-05-09 14:46:46 +00002585 memset(z->ob_digit, 0, Py_SIZE(z) * sizeof(digit));
2586 if (a == b) {
2587 /* Efficient squaring per HAC, Algorithm 14.16:
2588 * http://www.cacr.math.uwaterloo.ca/hac/about/chap14.pdf
2589 * Gives slightly less than a 2x speedup when a == b,
2590 * via exploiting that each entry in the multiplication
2591 * pyramid appears twice (except for the size_a squares).
2592 */
2593 for (i = 0; i < size_a; ++i) {
2594 twodigits carry;
2595 twodigits f = a->ob_digit[i];
2596 digit *pz = z->ob_digit + (i << 1);
2597 digit *pa = a->ob_digit + i + 1;
2598 digit *paend = a->ob_digit + size_a;
Tim Peters5af4e6c2002-08-12 02:31:19 +00002599
Antoine Pitrouc83ea132010-05-09 14:46:46 +00002600 SIGCHECK({
Mark Dickinsonfda8d112010-05-09 20:30:29 +00002601 Py_DECREF(z);
2602 return NULL;
Mark Dickinson43ca3772010-05-09 20:42:09 +00002603 });
Tim Peters0973b992004-08-29 22:16:50 +00002604
Antoine Pitrouc83ea132010-05-09 14:46:46 +00002605 carry = *pz + f * f;
2606 *pz++ = (digit)(carry & PyLong_MASK);
2607 carry >>= PyLong_SHIFT;
2608 assert(carry <= PyLong_MASK);
Tim Peters0973b992004-08-29 22:16:50 +00002609
Antoine Pitrouc83ea132010-05-09 14:46:46 +00002610 /* Now f is added in twice in each column of the
2611 * pyramid it appears. Same as adding f<<1 once.
2612 */
2613 f <<= 1;
2614 while (pa < paend) {
2615 carry += *pz + *pa++ * f;
2616 *pz++ = (digit)(carry & PyLong_MASK);
2617 carry >>= PyLong_SHIFT;
2618 assert(carry <= (PyLong_MASK << 1));
2619 }
2620 if (carry) {
2621 carry += *pz;
2622 *pz++ = (digit)(carry & PyLong_MASK);
2623 carry >>= PyLong_SHIFT;
2624 }
2625 if (carry)
2626 *pz += (digit)(carry & PyLong_MASK);
2627 assert((carry >> PyLong_SHIFT) == 0);
2628 }
2629 }
2630 else { /* a is not the same as b -- gradeschool long mult */
2631 for (i = 0; i < size_a; ++i) {
2632 twodigits carry = 0;
2633 twodigits f = a->ob_digit[i];
2634 digit *pz = z->ob_digit + i;
2635 digit *pb = b->ob_digit;
2636 digit *pbend = b->ob_digit + size_b;
Tim Peters0973b992004-08-29 22:16:50 +00002637
Antoine Pitrouc83ea132010-05-09 14:46:46 +00002638 SIGCHECK({
Mark Dickinsonfda8d112010-05-09 20:30:29 +00002639 Py_DECREF(z);
2640 return NULL;
Mark Dickinson43ca3772010-05-09 20:42:09 +00002641 });
Tim Peters0973b992004-08-29 22:16:50 +00002642
Antoine Pitrouc83ea132010-05-09 14:46:46 +00002643 while (pb < pbend) {
2644 carry += *pz + *pb++ * f;
2645 *pz++ = (digit)(carry & PyLong_MASK);
2646 carry >>= PyLong_SHIFT;
2647 assert(carry <= PyLong_MASK);
2648 }
2649 if (carry)
2650 *pz += (digit)(carry & PyLong_MASK);
2651 assert((carry >> PyLong_SHIFT) == 0);
2652 }
2653 }
2654 return long_normalize(z);
Tim Peters5af4e6c2002-08-12 02:31:19 +00002655}
2656
2657/* A helper for Karatsuba multiplication (k_mul).
2658 Takes a long "n" and an integer "size" representing the place to
2659 split, and sets low and high such that abs(n) == (high << size) + low,
2660 viewing the shift as being by digits. The sign bit is ignored, and
2661 the return values are >= 0.
2662 Returns 0 on success, -1 on failure.
2663*/
2664static int
Mark Dickinsonfda8d112010-05-09 20:30:29 +00002665kmul_split(PyLongObject *n,
2666 Py_ssize_t size,
2667 PyLongObject **high,
2668 PyLongObject **low)
Tim Peters5af4e6c2002-08-12 02:31:19 +00002669{
Antoine Pitrouc83ea132010-05-09 14:46:46 +00002670 PyLongObject *hi, *lo;
2671 Py_ssize_t size_lo, size_hi;
2672 const Py_ssize_t size_n = ABS(Py_SIZE(n));
Tim Peters5af4e6c2002-08-12 02:31:19 +00002673
Antoine Pitrouc83ea132010-05-09 14:46:46 +00002674 size_lo = MIN(size_n, size);
2675 size_hi = size_n - size_lo;
Tim Peters5af4e6c2002-08-12 02:31:19 +00002676
Antoine Pitrouc83ea132010-05-09 14:46:46 +00002677 if ((hi = _PyLong_New(size_hi)) == NULL)
2678 return -1;
2679 if ((lo = _PyLong_New(size_lo)) == NULL) {
2680 Py_DECREF(hi);
2681 return -1;
2682 }
Tim Peters5af4e6c2002-08-12 02:31:19 +00002683
Antoine Pitrouc83ea132010-05-09 14:46:46 +00002684 memcpy(lo->ob_digit, n->ob_digit, size_lo * sizeof(digit));
2685 memcpy(hi->ob_digit, n->ob_digit + size_lo, size_hi * sizeof(digit));
Tim Peters5af4e6c2002-08-12 02:31:19 +00002686
Antoine Pitrouc83ea132010-05-09 14:46:46 +00002687 *high = long_normalize(hi);
2688 *low = long_normalize(lo);
2689 return 0;
Tim Peters5af4e6c2002-08-12 02:31:19 +00002690}
2691
Tim Peters60004642002-08-12 22:01:34 +00002692static PyLongObject *k_lopsided_mul(PyLongObject *a, PyLongObject *b);
2693
Tim Peters5af4e6c2002-08-12 02:31:19 +00002694/* Karatsuba multiplication. Ignores the input signs, and returns the
2695 * absolute value of the product (or NULL if error).
2696 * See Knuth Vol. 2 Chapter 4.3.3 (Pp. 294-295).
2697 */
2698static PyLongObject *
2699k_mul(PyLongObject *a, PyLongObject *b)
2700{
Antoine Pitrouc83ea132010-05-09 14:46:46 +00002701 Py_ssize_t asize = ABS(Py_SIZE(a));
2702 Py_ssize_t bsize = ABS(Py_SIZE(b));
2703 PyLongObject *ah = NULL;
2704 PyLongObject *al = NULL;
2705 PyLongObject *bh = NULL;
2706 PyLongObject *bl = NULL;
2707 PyLongObject *ret = NULL;
2708 PyLongObject *t1, *t2, *t3;
2709 Py_ssize_t shift; /* the number of digits we split off */
2710 Py_ssize_t i;
Tim Peters738eda72002-08-12 15:08:20 +00002711
Antoine Pitrouc83ea132010-05-09 14:46:46 +00002712 /* (ah*X+al)(bh*X+bl) = ah*bh*X*X + (ah*bl + al*bh)*X + al*bl
2713 * Let k = (ah+al)*(bh+bl) = ah*bl + al*bh + ah*bh + al*bl
2714 * Then the original product is
2715 * ah*bh*X*X + (k - ah*bh - al*bl)*X + al*bl
2716 * By picking X to be a power of 2, "*X" is just shifting, and it's
2717 * been reduced to 3 multiplies on numbers half the size.
2718 */
Tim Peters5af4e6c2002-08-12 02:31:19 +00002719
Antoine Pitrouc83ea132010-05-09 14:46:46 +00002720 /* We want to split based on the larger number; fiddle so that b
2721 * is largest.
2722 */
2723 if (asize > bsize) {
2724 t1 = a;
2725 a = b;
2726 b = t1;
Tim Peters738eda72002-08-12 15:08:20 +00002727
Antoine Pitrouc83ea132010-05-09 14:46:46 +00002728 i = asize;
2729 asize = bsize;
2730 bsize = i;
2731 }
Tim Peters5af4e6c2002-08-12 02:31:19 +00002732
Antoine Pitrouc83ea132010-05-09 14:46:46 +00002733 /* Use gradeschool math when either number is too small. */
2734 i = a == b ? KARATSUBA_SQUARE_CUTOFF : KARATSUBA_CUTOFF;
2735 if (asize <= i) {
2736 if (asize == 0)
2737 return _PyLong_New(0);
2738 else
2739 return x_mul(a, b);
2740 }
Tim Peters5af4e6c2002-08-12 02:31:19 +00002741
Antoine Pitrouc83ea132010-05-09 14:46:46 +00002742 /* If a is small compared to b, splitting on b gives a degenerate
2743 * case with ah==0, and Karatsuba may be (even much) less efficient
2744 * than "grade school" then. However, we can still win, by viewing
2745 * b as a string of "big digits", each of width a->ob_size. That
2746 * leads to a sequence of balanced calls to k_mul.
2747 */
2748 if (2 * asize <= bsize)
2749 return k_lopsided_mul(a, b);
Tim Peters60004642002-08-12 22:01:34 +00002750
Antoine Pitrouc83ea132010-05-09 14:46:46 +00002751 /* Split a & b into hi & lo pieces. */
2752 shift = bsize >> 1;
2753 if (kmul_split(a, shift, &ah, &al) < 0) goto fail;
2754 assert(Py_SIZE(ah) > 0); /* the split isn't degenerate */
Tim Petersd6974a52002-08-13 20:37:51 +00002755
Antoine Pitrouc83ea132010-05-09 14:46:46 +00002756 if (a == b) {
2757 bh = ah;
2758 bl = al;
2759 Py_INCREF(bh);
2760 Py_INCREF(bl);
2761 }
2762 else if (kmul_split(b, shift, &bh, &bl) < 0) goto fail;
Tim Peters5af4e6c2002-08-12 02:31:19 +00002763
Antoine Pitrouc83ea132010-05-09 14:46:46 +00002764 /* The plan:
2765 * 1. Allocate result space (asize + bsize digits: that's always
2766 * enough).
2767 * 2. Compute ah*bh, and copy into result at 2*shift.
2768 * 3. Compute al*bl, and copy into result at 0. Note that this
2769 * can't overlap with #2.
2770 * 4. Subtract al*bl from the result, starting at shift. This may
2771 * underflow (borrow out of the high digit), but we don't care:
2772 * we're effectively doing unsigned arithmetic mod
2773 * PyLong_BASE**(sizea + sizeb), and so long as the *final* result fits,
2774 * borrows and carries out of the high digit can be ignored.
2775 * 5. Subtract ah*bh from the result, starting at shift.
2776 * 6. Compute (ah+al)*(bh+bl), and add it into the result starting
2777 * at shift.
2778 */
Tim Petersd64c1de2002-08-12 17:36:03 +00002779
Antoine Pitrouc83ea132010-05-09 14:46:46 +00002780 /* 1. Allocate result space. */
2781 ret = _PyLong_New(asize + bsize);
2782 if (ret == NULL) goto fail;
Tim Peters5af4e6c2002-08-12 02:31:19 +00002783#ifdef Py_DEBUG
Antoine Pitrouc83ea132010-05-09 14:46:46 +00002784 /* Fill with trash, to catch reference to uninitialized digits. */
2785 memset(ret->ob_digit, 0xDF, Py_SIZE(ret) * sizeof(digit));
Tim Peters5af4e6c2002-08-12 02:31:19 +00002786#endif
Tim Peters44121a62002-08-12 06:17:58 +00002787
Antoine Pitrouc83ea132010-05-09 14:46:46 +00002788 /* 2. t1 <- ah*bh, and copy into high digits of result. */
2789 if ((t1 = k_mul(ah, bh)) == NULL) goto fail;
2790 assert(Py_SIZE(t1) >= 0);
2791 assert(2*shift + Py_SIZE(t1) <= Py_SIZE(ret));
2792 memcpy(ret->ob_digit + 2*shift, t1->ob_digit,
2793 Py_SIZE(t1) * sizeof(digit));
Tim Peters738eda72002-08-12 15:08:20 +00002794
Antoine Pitrouc83ea132010-05-09 14:46:46 +00002795 /* Zero-out the digits higher than the ah*bh copy. */
2796 i = Py_SIZE(ret) - 2*shift - Py_SIZE(t1);
2797 if (i)
2798 memset(ret->ob_digit + 2*shift + Py_SIZE(t1), 0,
2799 i * sizeof(digit));
Tim Peters5af4e6c2002-08-12 02:31:19 +00002800
Antoine Pitrouc83ea132010-05-09 14:46:46 +00002801 /* 3. t2 <- al*bl, and copy into the low digits. */
2802 if ((t2 = k_mul(al, bl)) == NULL) {
2803 Py_DECREF(t1);
2804 goto fail;
2805 }
2806 assert(Py_SIZE(t2) >= 0);
2807 assert(Py_SIZE(t2) <= 2*shift); /* no overlap with high digits */
2808 memcpy(ret->ob_digit, t2->ob_digit, Py_SIZE(t2) * sizeof(digit));
Tim Peters5af4e6c2002-08-12 02:31:19 +00002809
Antoine Pitrouc83ea132010-05-09 14:46:46 +00002810 /* Zero out remaining digits. */
2811 i = 2*shift - Py_SIZE(t2); /* number of uninitialized digits */
2812 if (i)
2813 memset(ret->ob_digit + Py_SIZE(t2), 0, i * sizeof(digit));
Tim Peters5af4e6c2002-08-12 02:31:19 +00002814
Antoine Pitrouc83ea132010-05-09 14:46:46 +00002815 /* 4 & 5. Subtract ah*bh (t1) and al*bl (t2). We do al*bl first
2816 * because it's fresher in cache.
2817 */
2818 i = Py_SIZE(ret) - shift; /* # digits after shift */
2819 (void)v_isub(ret->ob_digit + shift, i, t2->ob_digit, Py_SIZE(t2));
2820 Py_DECREF(t2);
Tim Peters738eda72002-08-12 15:08:20 +00002821
Antoine Pitrouc83ea132010-05-09 14:46:46 +00002822 (void)v_isub(ret->ob_digit + shift, i, t1->ob_digit, Py_SIZE(t1));
2823 Py_DECREF(t1);
Tim Peters738eda72002-08-12 15:08:20 +00002824
Antoine Pitrouc83ea132010-05-09 14:46:46 +00002825 /* 6. t3 <- (ah+al)(bh+bl), and add into result. */
2826 if ((t1 = x_add(ah, al)) == NULL) goto fail;
2827 Py_DECREF(ah);
2828 Py_DECREF(al);
2829 ah = al = NULL;
Tim Peters5af4e6c2002-08-12 02:31:19 +00002830
Antoine Pitrouc83ea132010-05-09 14:46:46 +00002831 if (a == b) {
2832 t2 = t1;
2833 Py_INCREF(t2);
2834 }
2835 else if ((t2 = x_add(bh, bl)) == NULL) {
2836 Py_DECREF(t1);
2837 goto fail;
2838 }
2839 Py_DECREF(bh);
2840 Py_DECREF(bl);
2841 bh = bl = NULL;
Tim Peters5af4e6c2002-08-12 02:31:19 +00002842
Antoine Pitrouc83ea132010-05-09 14:46:46 +00002843 t3 = k_mul(t1, t2);
2844 Py_DECREF(t1);
2845 Py_DECREF(t2);
2846 if (t3 == NULL) goto fail;
2847 assert(Py_SIZE(t3) >= 0);
Tim Peters5af4e6c2002-08-12 02:31:19 +00002848
Antoine Pitrouc83ea132010-05-09 14:46:46 +00002849 /* Add t3. It's not obvious why we can't run out of room here.
2850 * See the (*) comment after this function.
2851 */
2852 (void)v_iadd(ret->ob_digit + shift, i, t3->ob_digit, Py_SIZE(t3));
2853 Py_DECREF(t3);
Tim Peters5af4e6c2002-08-12 02:31:19 +00002854
Antoine Pitrouc83ea132010-05-09 14:46:46 +00002855 return long_normalize(ret);
Tim Peters5af4e6c2002-08-12 02:31:19 +00002856
Mark Dickinsonfda8d112010-05-09 20:30:29 +00002857 fail:
Antoine Pitrouc83ea132010-05-09 14:46:46 +00002858 Py_XDECREF(ret);
2859 Py_XDECREF(ah);
2860 Py_XDECREF(al);
2861 Py_XDECREF(bh);
2862 Py_XDECREF(bl);
2863 return NULL;
Tim Peters5af4e6c2002-08-12 02:31:19 +00002864}
2865
Tim Petersd6974a52002-08-13 20:37:51 +00002866/* (*) Why adding t3 can't "run out of room" above.
2867
Tim Petersab86c2b2002-08-15 20:06:00 +00002868Let f(x) mean the floor of x and c(x) mean the ceiling of x. Some facts
2869to start with:
Tim Petersd6974a52002-08-13 20:37:51 +00002870
Tim Petersab86c2b2002-08-15 20:06:00 +000028711. For any integer i, i = c(i/2) + f(i/2). In particular,
2872 bsize = c(bsize/2) + f(bsize/2).
28732. shift = f(bsize/2)
28743. asize <= bsize
28754. Since we call k_lopsided_mul if asize*2 <= bsize, asize*2 > bsize in this
2876 routine, so asize > bsize/2 >= f(bsize/2) in this routine.
Tim Petersd6974a52002-08-13 20:37:51 +00002877
Tim Petersab86c2b2002-08-15 20:06:00 +00002878We allocated asize + bsize result digits, and add t3 into them at an offset
2879of shift. This leaves asize+bsize-shift allocated digit positions for t3
2880to fit into, = (by #1 and #2) asize + f(bsize/2) + c(bsize/2) - f(bsize/2) =
2881asize + c(bsize/2) available digit positions.
Tim Petersd6974a52002-08-13 20:37:51 +00002882
Tim Petersab86c2b2002-08-15 20:06:00 +00002883bh has c(bsize/2) digits, and bl at most f(size/2) digits. So bh+hl has
2884at most c(bsize/2) digits + 1 bit.
Tim Petersd6974a52002-08-13 20:37:51 +00002885
Tim Petersab86c2b2002-08-15 20:06:00 +00002886If asize == bsize, ah has c(bsize/2) digits, else ah has at most f(bsize/2)
2887digits, and al has at most f(bsize/2) digits in any case. So ah+al has at
2888most (asize == bsize ? c(bsize/2) : f(bsize/2)) digits + 1 bit.
Tim Petersd6974a52002-08-13 20:37:51 +00002889
Tim Petersab86c2b2002-08-15 20:06:00 +00002890The product (ah+al)*(bh+bl) therefore has at most
Tim Petersd6974a52002-08-13 20:37:51 +00002891
Tim Petersab86c2b2002-08-15 20:06:00 +00002892 c(bsize/2) + (asize == bsize ? c(bsize/2) : f(bsize/2)) digits + 2 bits
Tim Petersd6974a52002-08-13 20:37:51 +00002893
Tim Petersab86c2b2002-08-15 20:06:00 +00002894and we have asize + c(bsize/2) available digit positions. We need to show
2895this is always enough. An instance of c(bsize/2) cancels out in both, so
2896the question reduces to whether asize digits is enough to hold
2897(asize == bsize ? c(bsize/2) : f(bsize/2)) digits + 2 bits. If asize < bsize,
2898then we're asking whether asize digits >= f(bsize/2) digits + 2 bits. By #4,
2899asize is at least f(bsize/2)+1 digits, so this in turn reduces to whether 1
Christian Heimes7f39c9f2008-01-25 12:18:43 +00002900digit is enough to hold 2 bits. This is so since PyLong_SHIFT=15 >= 2. If
Tim Petersab86c2b2002-08-15 20:06:00 +00002901asize == bsize, then we're asking whether bsize digits is enough to hold
Tim Peterse417de02002-08-15 20:10:45 +00002902c(bsize/2) digits + 2 bits, or equivalently (by #1) whether f(bsize/2) digits
2903is enough to hold 2 bits. This is so if bsize >= 2, which holds because
2904bsize >= KARATSUBA_CUTOFF >= 2.
Tim Peters8e966ee2002-08-14 16:36:23 +00002905
Tim Peters48d52c02002-08-14 17:07:32 +00002906Note that since there's always enough room for (ah+al)*(bh+bl), and that's
2907clearly >= each of ah*bh and al*bl, there's always enough room to subtract
2908ah*bh and al*bl too.
Tim Petersd6974a52002-08-13 20:37:51 +00002909*/
2910
Tim Peters60004642002-08-12 22:01:34 +00002911/* b has at least twice the digits of a, and a is big enough that Karatsuba
2912 * would pay off *if* the inputs had balanced sizes. View b as a sequence
2913 * of slices, each with a->ob_size digits, and multiply the slices by a,
2914 * one at a time. This gives k_mul balanced inputs to work with, and is
2915 * also cache-friendly (we compute one double-width slice of the result
Ezio Melotti24b07bc2011-03-15 18:55:01 +02002916 * at a time, then move on, never backtracking except for the helpful
Tim Peters60004642002-08-12 22:01:34 +00002917 * single-width slice overlap between successive partial sums).
2918 */
2919static PyLongObject *
2920k_lopsided_mul(PyLongObject *a, PyLongObject *b)
2921{
Antoine Pitrouc83ea132010-05-09 14:46:46 +00002922 const Py_ssize_t asize = ABS(Py_SIZE(a));
2923 Py_ssize_t bsize = ABS(Py_SIZE(b));
2924 Py_ssize_t nbdone; /* # of b digits already multiplied */
2925 PyLongObject *ret;
2926 PyLongObject *bslice = NULL;
Tim Peters60004642002-08-12 22:01:34 +00002927
Antoine Pitrouc83ea132010-05-09 14:46:46 +00002928 assert(asize > KARATSUBA_CUTOFF);
2929 assert(2 * asize <= bsize);
Tim Peters60004642002-08-12 22:01:34 +00002930
Antoine Pitrouc83ea132010-05-09 14:46:46 +00002931 /* Allocate result space, and zero it out. */
2932 ret = _PyLong_New(asize + bsize);
2933 if (ret == NULL)
2934 return NULL;
2935 memset(ret->ob_digit, 0, Py_SIZE(ret) * sizeof(digit));
Tim Peters60004642002-08-12 22:01:34 +00002936
Antoine Pitrouc83ea132010-05-09 14:46:46 +00002937 /* Successive slices of b are copied into bslice. */
2938 bslice = _PyLong_New(asize);
2939 if (bslice == NULL)
2940 goto fail;
Tim Peters60004642002-08-12 22:01:34 +00002941
Antoine Pitrouc83ea132010-05-09 14:46:46 +00002942 nbdone = 0;
2943 while (bsize > 0) {
2944 PyLongObject *product;
2945 const Py_ssize_t nbtouse = MIN(bsize, asize);
Tim Peters60004642002-08-12 22:01:34 +00002946
Antoine Pitrouc83ea132010-05-09 14:46:46 +00002947 /* Multiply the next slice of b by a. */
2948 memcpy(bslice->ob_digit, b->ob_digit + nbdone,
2949 nbtouse * sizeof(digit));
2950 Py_SIZE(bslice) = nbtouse;
2951 product = k_mul(a, bslice);
2952 if (product == NULL)
2953 goto fail;
Tim Peters60004642002-08-12 22:01:34 +00002954
Antoine Pitrouc83ea132010-05-09 14:46:46 +00002955 /* Add into result. */
2956 (void)v_iadd(ret->ob_digit + nbdone, Py_SIZE(ret) - nbdone,
2957 product->ob_digit, Py_SIZE(product));
2958 Py_DECREF(product);
Tim Peters60004642002-08-12 22:01:34 +00002959
Antoine Pitrouc83ea132010-05-09 14:46:46 +00002960 bsize -= nbtouse;
2961 nbdone += nbtouse;
2962 }
Tim Peters60004642002-08-12 22:01:34 +00002963
Antoine Pitrouc83ea132010-05-09 14:46:46 +00002964 Py_DECREF(bslice);
2965 return long_normalize(ret);
Tim Peters60004642002-08-12 22:01:34 +00002966
Mark Dickinsonfda8d112010-05-09 20:30:29 +00002967 fail:
Antoine Pitrouc83ea132010-05-09 14:46:46 +00002968 Py_DECREF(ret);
2969 Py_XDECREF(bslice);
2970 return NULL;
Tim Peters60004642002-08-12 22:01:34 +00002971}
Tim Peters5af4e6c2002-08-12 02:31:19 +00002972
2973static PyObject *
2974long_mul(PyLongObject *v, PyLongObject *w)
2975{
Antoine Pitrouc83ea132010-05-09 14:46:46 +00002976 PyLongObject *a, *b, *z;
Tim Peters5af4e6c2002-08-12 02:31:19 +00002977
Antoine Pitrouc83ea132010-05-09 14:46:46 +00002978 if (!convert_binop((PyObject *)v, (PyObject *)w, &a, &b)) {
2979 Py_INCREF(Py_NotImplemented);
2980 return Py_NotImplemented;
2981 }
Tim Peters5af4e6c2002-08-12 02:31:19 +00002982
Antoine Pitrouc83ea132010-05-09 14:46:46 +00002983 z = k_mul(a, b);
2984 /* Negate if exactly one of the inputs is negative. */
2985 if (((a->ob_size ^ b->ob_size) < 0) && z)
2986 z->ob_size = -(z->ob_size);
2987 Py_DECREF(a);
2988 Py_DECREF(b);
2989 return (PyObject *)z;
Guido van Rossumedcc38a1991-05-05 20:09:44 +00002990}
2991
Guido van Rossume32e0141992-01-19 16:31:05 +00002992/* The / and % operators are now defined in terms of divmod().
2993 The expression a mod b has the value a - b*floor(a/b).
2994 The long_divrem function gives the remainder after division of
Guido van Rossumedcc38a1991-05-05 20:09:44 +00002995 |a| by |b|, with the sign of a. This is also expressed
2996 as a - b*trunc(a/b), if trunc truncates towards zero.
2997 Some examples:
Antoine Pitrouc83ea132010-05-09 14:46:46 +00002998 a b a rem b a mod b
2999 13 10 3 3
3000 -13 10 -3 7
3001 13 -10 3 -7
3002 -13 -10 -3 -3
Guido van Rossumedcc38a1991-05-05 20:09:44 +00003003 So, to get from rem to mod, we have to add b if a and b
Guido van Rossum23d6f0e1991-05-14 12:06:49 +00003004 have different signs. We then subtract one from the 'div'
3005 part of the outcome to keep the invariant intact. */
Guido van Rossumedcc38a1991-05-05 20:09:44 +00003006
Tim Peters47e52ee2004-08-30 02:44:38 +00003007/* Compute
3008 * *pdiv, *pmod = divmod(v, w)
3009 * NULL can be passed for pdiv or pmod, in which case that part of
3010 * the result is simply thrown away. The caller owns a reference to
3011 * each of these it requests (does not pass NULL for).
3012 */
Guido van Rossume32e0141992-01-19 16:31:05 +00003013static int
Tim Peters5af4e6c2002-08-12 02:31:19 +00003014l_divmod(PyLongObject *v, PyLongObject *w,
Antoine Pitrouc83ea132010-05-09 14:46:46 +00003015 PyLongObject **pdiv, PyLongObject **pmod)
Guido van Rossume32e0141992-01-19 16:31:05 +00003016{
Antoine Pitrouc83ea132010-05-09 14:46:46 +00003017 PyLongObject *div, *mod;
Tim Peters5af4e6c2002-08-12 02:31:19 +00003018
Antoine Pitrouc83ea132010-05-09 14:46:46 +00003019 if (long_divrem(v, w, &div, &mod) < 0)
3020 return -1;
3021 if ((Py_SIZE(mod) < 0 && Py_SIZE(w) > 0) ||
3022 (Py_SIZE(mod) > 0 && Py_SIZE(w) < 0)) {
3023 PyLongObject *temp;
3024 PyLongObject *one;
3025 temp = (PyLongObject *) long_add(mod, w);
3026 Py_DECREF(mod);
3027 mod = temp;
3028 if (mod == NULL) {
3029 Py_DECREF(div);
3030 return -1;
3031 }
3032 one = (PyLongObject *) PyLong_FromLong(1L);
3033 if (one == NULL ||
3034 (temp = (PyLongObject *) long_sub(div, one)) == NULL) {
3035 Py_DECREF(mod);
3036 Py_DECREF(div);
3037 Py_XDECREF(one);
3038 return -1;
3039 }
3040 Py_DECREF(one);
3041 Py_DECREF(div);
3042 div = temp;
3043 }
3044 if (pdiv != NULL)
3045 *pdiv = div;
3046 else
3047 Py_DECREF(div);
Tim Peters47e52ee2004-08-30 02:44:38 +00003048
Antoine Pitrouc83ea132010-05-09 14:46:46 +00003049 if (pmod != NULL)
3050 *pmod = mod;
3051 else
3052 Py_DECREF(mod);
Tim Peters47e52ee2004-08-30 02:44:38 +00003053
Antoine Pitrouc83ea132010-05-09 14:46:46 +00003054 return 0;
Guido van Rossume32e0141992-01-19 16:31:05 +00003055}
3056
Guido van Rossumc0b618a1997-05-02 03:12:38 +00003057static PyObject *
Neil Schemenauerba872e22001-01-04 01:46:03 +00003058long_div(PyObject *v, PyObject *w)
Guido van Rossume32e0141992-01-19 16:31:05 +00003059{
Antoine Pitrouc83ea132010-05-09 14:46:46 +00003060 PyLongObject *a, *b, *div;
Neil Schemenauerba872e22001-01-04 01:46:03 +00003061
Antoine Pitrouc83ea132010-05-09 14:46:46 +00003062 CONVERT_BINOP(v, w, &a, &b);
3063 if (l_divmod(a, b, &div, NULL) < 0)
3064 div = NULL;
3065 Py_DECREF(a);
3066 Py_DECREF(b);
3067 return (PyObject *)div;
Guido van Rossume32e0141992-01-19 16:31:05 +00003068}
3069
Guido van Rossumc0b618a1997-05-02 03:12:38 +00003070static PyObject *
Guido van Rossum393661d2001-08-31 17:40:15 +00003071long_classic_div(PyObject *v, PyObject *w)
3072{
Antoine Pitrouc83ea132010-05-09 14:46:46 +00003073 PyLongObject *a, *b, *div;
Guido van Rossum393661d2001-08-31 17:40:15 +00003074
Antoine Pitrouc83ea132010-05-09 14:46:46 +00003075 CONVERT_BINOP(v, w, &a, &b);
3076 if (Py_DivisionWarningFlag &&
3077 PyErr_Warn(PyExc_DeprecationWarning, "classic long division") < 0)
3078 div = NULL;
3079 else if (l_divmod(a, b, &div, NULL) < 0)
3080 div = NULL;
3081 Py_DECREF(a);
3082 Py_DECREF(b);
3083 return (PyObject *)div;
Guido van Rossum393661d2001-08-31 17:40:15 +00003084}
3085
Mark Dickinson46572832009-12-27 14:55:57 +00003086/* PyLong/PyLong -> float, with correctly rounded result. */
3087
3088#define MANT_DIG_DIGITS (DBL_MANT_DIG / PyLong_SHIFT)
3089#define MANT_DIG_BITS (DBL_MANT_DIG % PyLong_SHIFT)
3090
Guido van Rossum393661d2001-08-31 17:40:15 +00003091static PyObject *
Tim Peters20dab9f2001-09-04 05:31:47 +00003092long_true_divide(PyObject *v, PyObject *w)
3093{
Antoine Pitrouc83ea132010-05-09 14:46:46 +00003094 PyLongObject *a, *b, *x;
3095 Py_ssize_t a_size, b_size, shift, extra_bits, diff, x_size, x_bits;
3096 digit mask, low;
3097 int inexact, negate, a_is_small, b_is_small;
3098 double dx, result;
Tim Peterse2a60002001-09-04 06:17:36 +00003099
Antoine Pitrouc83ea132010-05-09 14:46:46 +00003100 CONVERT_BINOP(v, w, &a, &b);
Tim Peterse2a60002001-09-04 06:17:36 +00003101
Antoine Pitrouc83ea132010-05-09 14:46:46 +00003102 /*
3103 Method in a nutshell:
Mark Dickinson46572832009-12-27 14:55:57 +00003104
Antoine Pitrouc83ea132010-05-09 14:46:46 +00003105 0. reduce to case a, b > 0; filter out obvious underflow/overflow
3106 1. choose a suitable integer 'shift'
3107 2. use integer arithmetic to compute x = floor(2**-shift*a/b)
3108 3. adjust x for correct rounding
3109 4. convert x to a double dx with the same value
3110 5. return ldexp(dx, shift).
Mark Dickinson46572832009-12-27 14:55:57 +00003111
Antoine Pitrouc83ea132010-05-09 14:46:46 +00003112 In more detail:
Mark Dickinson46572832009-12-27 14:55:57 +00003113
Antoine Pitrouc83ea132010-05-09 14:46:46 +00003114 0. For any a, a/0 raises ZeroDivisionError; for nonzero b, 0/b
3115 returns either 0.0 or -0.0, depending on the sign of b. For a and
3116 b both nonzero, ignore signs of a and b, and add the sign back in
3117 at the end. Now write a_bits and b_bits for the bit lengths of a
3118 and b respectively (that is, a_bits = 1 + floor(log_2(a)); likewise
3119 for b). Then
Mark Dickinson46572832009-12-27 14:55:57 +00003120
Antoine Pitrouc83ea132010-05-09 14:46:46 +00003121 2**(a_bits - b_bits - 1) < a/b < 2**(a_bits - b_bits + 1).
Mark Dickinson46572832009-12-27 14:55:57 +00003122
Antoine Pitrouc83ea132010-05-09 14:46:46 +00003123 So if a_bits - b_bits > DBL_MAX_EXP then a/b > 2**DBL_MAX_EXP and
3124 so overflows. Similarly, if a_bits - b_bits < DBL_MIN_EXP -
3125 DBL_MANT_DIG - 1 then a/b underflows to 0. With these cases out of
3126 the way, we can assume that
Mark Dickinson46572832009-12-27 14:55:57 +00003127
Antoine Pitrouc83ea132010-05-09 14:46:46 +00003128 DBL_MIN_EXP - DBL_MANT_DIG - 1 <= a_bits - b_bits <= DBL_MAX_EXP.
Mark Dickinson46572832009-12-27 14:55:57 +00003129
Antoine Pitrouc83ea132010-05-09 14:46:46 +00003130 1. The integer 'shift' is chosen so that x has the right number of
3131 bits for a double, plus two or three extra bits that will be used
3132 in the rounding decisions. Writing a_bits and b_bits for the
3133 number of significant bits in a and b respectively, a
3134 straightforward formula for shift is:
Mark Dickinson46572832009-12-27 14:55:57 +00003135
Antoine Pitrouc83ea132010-05-09 14:46:46 +00003136 shift = a_bits - b_bits - DBL_MANT_DIG - 2
Mark Dickinson46572832009-12-27 14:55:57 +00003137
Antoine Pitrouc83ea132010-05-09 14:46:46 +00003138 This is fine in the usual case, but if a/b is smaller than the
3139 smallest normal float then it can lead to double rounding on an
3140 IEEE 754 platform, giving incorrectly rounded results. So we
3141 adjust the formula slightly. The actual formula used is:
Mark Dickinson46572832009-12-27 14:55:57 +00003142
Antoine Pitrouc83ea132010-05-09 14:46:46 +00003143 shift = MAX(a_bits - b_bits, DBL_MIN_EXP) - DBL_MANT_DIG - 2
Mark Dickinson46572832009-12-27 14:55:57 +00003144
Antoine Pitrouc83ea132010-05-09 14:46:46 +00003145 2. The quantity x is computed by first shifting a (left -shift bits
3146 if shift <= 0, right shift bits if shift > 0) and then dividing by
3147 b. For both the shift and the division, we keep track of whether
3148 the result is inexact, in a flag 'inexact'; this information is
3149 needed at the rounding stage.
Mark Dickinson46572832009-12-27 14:55:57 +00003150
Antoine Pitrouc83ea132010-05-09 14:46:46 +00003151 With the choice of shift above, together with our assumption that
3152 a_bits - b_bits >= DBL_MIN_EXP - DBL_MANT_DIG - 1, it follows
3153 that x >= 1.
Mark Dickinson46572832009-12-27 14:55:57 +00003154
Antoine Pitrouc83ea132010-05-09 14:46:46 +00003155 3. Now x * 2**shift <= a/b < (x+1) * 2**shift. We want to replace
3156 this with an exactly representable float of the form
Mark Dickinson46572832009-12-27 14:55:57 +00003157
Antoine Pitrouc83ea132010-05-09 14:46:46 +00003158 round(x/2**extra_bits) * 2**(extra_bits+shift).
Mark Dickinson46572832009-12-27 14:55:57 +00003159
Antoine Pitrouc83ea132010-05-09 14:46:46 +00003160 For float representability, we need x/2**extra_bits <
3161 2**DBL_MANT_DIG and extra_bits + shift >= DBL_MIN_EXP -
3162 DBL_MANT_DIG. This translates to the condition:
Mark Dickinson46572832009-12-27 14:55:57 +00003163
Antoine Pitrouc83ea132010-05-09 14:46:46 +00003164 extra_bits >= MAX(x_bits, DBL_MIN_EXP - shift) - DBL_MANT_DIG
Mark Dickinson46572832009-12-27 14:55:57 +00003165
Antoine Pitrouc83ea132010-05-09 14:46:46 +00003166 To round, we just modify the bottom digit of x in-place; this can
3167 end up giving a digit with value > PyLONG_MASK, but that's not a
3168 problem since digits can hold values up to 2*PyLONG_MASK+1.
Mark Dickinson46572832009-12-27 14:55:57 +00003169
Antoine Pitrouc83ea132010-05-09 14:46:46 +00003170 With the original choices for shift above, extra_bits will always
3171 be 2 or 3. Then rounding under the round-half-to-even rule, we
3172 round up iff the most significant of the extra bits is 1, and
3173 either: (a) the computation of x in step 2 had an inexact result,
3174 or (b) at least one other of the extra bits is 1, or (c) the least
3175 significant bit of x (above those to be rounded) is 1.
Mark Dickinson46572832009-12-27 14:55:57 +00003176
Antoine Pitrouc83ea132010-05-09 14:46:46 +00003177 4. Conversion to a double is straightforward; all floating-point
3178 operations involved in the conversion are exact, so there's no
3179 danger of rounding errors.
Mark Dickinson46572832009-12-27 14:55:57 +00003180
Antoine Pitrouc83ea132010-05-09 14:46:46 +00003181 5. Use ldexp(x, shift) to compute x*2**shift, the final result.
3182 The result will always be exactly representable as a double, except
3183 in the case that it overflows. To avoid dependence on the exact
3184 behaviour of ldexp on overflow, we check for overflow before
3185 applying ldexp. The result of ldexp is adjusted for sign before
3186 returning.
3187 */
Mark Dickinson46572832009-12-27 14:55:57 +00003188
Antoine Pitrouc83ea132010-05-09 14:46:46 +00003189 /* Reduce to case where a and b are both positive. */
3190 a_size = ABS(Py_SIZE(a));
3191 b_size = ABS(Py_SIZE(b));
3192 negate = (Py_SIZE(a) < 0) ^ (Py_SIZE(b) < 0);
3193 if (b_size == 0) {
3194 PyErr_SetString(PyExc_ZeroDivisionError,
3195 "division by zero");
3196 goto error;
3197 }
3198 if (a_size == 0)
3199 goto underflow_or_zero;
Mark Dickinson46572832009-12-27 14:55:57 +00003200
Antoine Pitrouc83ea132010-05-09 14:46:46 +00003201 /* Fast path for a and b small (exactly representable in a double).
3202 Relies on floating-point division being correctly rounded; results
3203 may be subject to double rounding on x86 machines that operate with
3204 the x87 FPU set to 64-bit precision. */
3205 a_is_small = a_size <= MANT_DIG_DIGITS ||
3206 (a_size == MANT_DIG_DIGITS+1 &&
3207 a->ob_digit[MANT_DIG_DIGITS] >> MANT_DIG_BITS == 0);
3208 b_is_small = b_size <= MANT_DIG_DIGITS ||
3209 (b_size == MANT_DIG_DIGITS+1 &&
3210 b->ob_digit[MANT_DIG_DIGITS] >> MANT_DIG_BITS == 0);
3211 if (a_is_small && b_is_small) {
3212 double da, db;
3213 da = a->ob_digit[--a_size];
3214 while (a_size > 0)
3215 da = da * PyLong_BASE + a->ob_digit[--a_size];
3216 db = b->ob_digit[--b_size];
3217 while (b_size > 0)
3218 db = db * PyLong_BASE + b->ob_digit[--b_size];
3219 result = da / db;
3220 goto success;
3221 }
Tim Peterse2a60002001-09-04 06:17:36 +00003222
Antoine Pitrouc83ea132010-05-09 14:46:46 +00003223 /* Catch obvious cases of underflow and overflow */
3224 diff = a_size - b_size;
3225 if (diff > PY_SSIZE_T_MAX/PyLong_SHIFT - 1)
3226 /* Extreme overflow */
3227 goto overflow;
3228 else if (diff < 1 - PY_SSIZE_T_MAX/PyLong_SHIFT)
3229 /* Extreme underflow */
3230 goto underflow_or_zero;
3231 /* Next line is now safe from overflowing a Py_ssize_t */
3232 diff = diff * PyLong_SHIFT + bits_in_digit(a->ob_digit[a_size - 1]) -
3233 bits_in_digit(b->ob_digit[b_size - 1]);
3234 /* Now diff = a_bits - b_bits. */
3235 if (diff > DBL_MAX_EXP)
3236 goto overflow;
3237 else if (diff < DBL_MIN_EXP - DBL_MANT_DIG - 1)
3238 goto underflow_or_zero;
Tim Peterse2a60002001-09-04 06:17:36 +00003239
Antoine Pitrouc83ea132010-05-09 14:46:46 +00003240 /* Choose value for shift; see comments for step 1 above. */
3241 shift = MAX(diff, DBL_MIN_EXP) - DBL_MANT_DIG - 2;
Mark Dickinson46572832009-12-27 14:55:57 +00003242
Antoine Pitrouc83ea132010-05-09 14:46:46 +00003243 inexact = 0;
Mark Dickinson46572832009-12-27 14:55:57 +00003244
Antoine Pitrouc83ea132010-05-09 14:46:46 +00003245 /* x = abs(a * 2**-shift) */
3246 if (shift <= 0) {
3247 Py_ssize_t i, shift_digits = -shift / PyLong_SHIFT;
3248 digit rem;
3249 /* x = a << -shift */
3250 if (a_size >= PY_SSIZE_T_MAX - 1 - shift_digits) {
3251 /* In practice, it's probably impossible to end up
3252 here. Both a and b would have to be enormous,
3253 using close to SIZE_T_MAX bytes of memory each. */
3254 PyErr_SetString(PyExc_OverflowError,
Mark Dickinsonfda8d112010-05-09 20:30:29 +00003255 "intermediate overflow during division");
Antoine Pitrouc83ea132010-05-09 14:46:46 +00003256 goto error;
3257 }
3258 x = _PyLong_New(a_size + shift_digits + 1);
3259 if (x == NULL)
3260 goto error;
3261 for (i = 0; i < shift_digits; i++)
3262 x->ob_digit[i] = 0;
3263 rem = v_lshift(x->ob_digit + shift_digits, a->ob_digit,
3264 a_size, -shift % PyLong_SHIFT);
3265 x->ob_digit[a_size + shift_digits] = rem;
3266 }
3267 else {
3268 Py_ssize_t shift_digits = shift / PyLong_SHIFT;
3269 digit rem;
3270 /* x = a >> shift */
3271 assert(a_size >= shift_digits);
3272 x = _PyLong_New(a_size - shift_digits);
3273 if (x == NULL)
3274 goto error;
3275 rem = v_rshift(x->ob_digit, a->ob_digit + shift_digits,
3276 a_size - shift_digits, shift % PyLong_SHIFT);
3277 /* set inexact if any of the bits shifted out is nonzero */
3278 if (rem)
3279 inexact = 1;
3280 while (!inexact && shift_digits > 0)
3281 if (a->ob_digit[--shift_digits])
3282 inexact = 1;
3283 }
3284 long_normalize(x);
3285 x_size = Py_SIZE(x);
Mark Dickinson46572832009-12-27 14:55:57 +00003286
Antoine Pitrouc83ea132010-05-09 14:46:46 +00003287 /* x //= b. If the remainder is nonzero, set inexact. We own the only
3288 reference to x, so it's safe to modify it in-place. */
3289 if (b_size == 1) {
3290 digit rem = inplace_divrem1(x->ob_digit, x->ob_digit, x_size,
3291 b->ob_digit[0]);
3292 long_normalize(x);
3293 if (rem)
3294 inexact = 1;
3295 }
3296 else {
3297 PyLongObject *div, *rem;
3298 div = x_divrem(x, b, &rem);
3299 Py_DECREF(x);
3300 x = div;
3301 if (x == NULL)
3302 goto error;
3303 if (Py_SIZE(rem))
3304 inexact = 1;
3305 Py_DECREF(rem);
3306 }
3307 x_size = ABS(Py_SIZE(x));
3308 assert(x_size > 0); /* result of division is never zero */
3309 x_bits = (x_size-1)*PyLong_SHIFT+bits_in_digit(x->ob_digit[x_size-1]);
Mark Dickinson46572832009-12-27 14:55:57 +00003310
Antoine Pitrouc83ea132010-05-09 14:46:46 +00003311 /* The number of extra bits that have to be rounded away. */
3312 extra_bits = MAX(x_bits, DBL_MIN_EXP - shift) - DBL_MANT_DIG;
3313 assert(extra_bits == 2 || extra_bits == 3);
Mark Dickinson46572832009-12-27 14:55:57 +00003314
Antoine Pitrouc83ea132010-05-09 14:46:46 +00003315 /* Round by directly modifying the low digit of x. */
3316 mask = (digit)1 << (extra_bits - 1);
3317 low = x->ob_digit[0] | inexact;
Mark Dickinson89446b22016-08-21 10:59:48 +01003318 if ((low & mask) && (low & (3U*mask-1U)))
Antoine Pitrouc83ea132010-05-09 14:46:46 +00003319 low += mask;
Mark Dickinson89446b22016-08-21 10:59:48 +01003320 x->ob_digit[0] = low & ~(2U*mask-1U);
Mark Dickinson46572832009-12-27 14:55:57 +00003321
Antoine Pitrouc83ea132010-05-09 14:46:46 +00003322 /* Convert x to a double dx; the conversion is exact. */
3323 dx = x->ob_digit[--x_size];
3324 while (x_size > 0)
3325 dx = dx * PyLong_BASE + x->ob_digit[--x_size];
3326 Py_DECREF(x);
Mark Dickinson46572832009-12-27 14:55:57 +00003327
Antoine Pitrouc83ea132010-05-09 14:46:46 +00003328 /* Check whether ldexp result will overflow a double. */
3329 if (shift + x_bits >= DBL_MAX_EXP &&
3330 (shift + x_bits > DBL_MAX_EXP || dx == ldexp(1.0, (int)x_bits)))
3331 goto overflow;
3332 result = ldexp(dx, (int)shift);
Mark Dickinson46572832009-12-27 14:55:57 +00003333
3334 success:
Antoine Pitrouc83ea132010-05-09 14:46:46 +00003335 Py_DECREF(a);
3336 Py_DECREF(b);
3337 return PyFloat_FromDouble(negate ? -result : result);
Mark Dickinson46572832009-12-27 14:55:57 +00003338
3339 underflow_or_zero:
Antoine Pitrouc83ea132010-05-09 14:46:46 +00003340 Py_DECREF(a);
3341 Py_DECREF(b);
3342 return PyFloat_FromDouble(negate ? -0.0 : 0.0);
Mark Dickinson46572832009-12-27 14:55:57 +00003343
3344 overflow:
Antoine Pitrouc83ea132010-05-09 14:46:46 +00003345 PyErr_SetString(PyExc_OverflowError,
3346 "integer division result too large for a float");
Mark Dickinson46572832009-12-27 14:55:57 +00003347 error:
Antoine Pitrouc83ea132010-05-09 14:46:46 +00003348 Py_DECREF(a);
3349 Py_DECREF(b);
3350 return NULL;
Tim Peters20dab9f2001-09-04 05:31:47 +00003351}
3352
3353static PyObject *
Neil Schemenauerba872e22001-01-04 01:46:03 +00003354long_mod(PyObject *v, PyObject *w)
Guido van Rossume32e0141992-01-19 16:31:05 +00003355{
Antoine Pitrouc83ea132010-05-09 14:46:46 +00003356 PyLongObject *a, *b, *mod;
Neil Schemenauerba872e22001-01-04 01:46:03 +00003357
Antoine Pitrouc83ea132010-05-09 14:46:46 +00003358 CONVERT_BINOP(v, w, &a, &b);
Neil Schemenauerba872e22001-01-04 01:46:03 +00003359
Antoine Pitrouc83ea132010-05-09 14:46:46 +00003360 if (l_divmod(a, b, NULL, &mod) < 0)
3361 mod = NULL;
3362 Py_DECREF(a);
3363 Py_DECREF(b);
3364 return (PyObject *)mod;
Guido van Rossume32e0141992-01-19 16:31:05 +00003365}
3366
Guido van Rossumc0b618a1997-05-02 03:12:38 +00003367static PyObject *
Neil Schemenauerba872e22001-01-04 01:46:03 +00003368long_divmod(PyObject *v, PyObject *w)
Guido van Rossumedcc38a1991-05-05 20:09:44 +00003369{
Antoine Pitrouc83ea132010-05-09 14:46:46 +00003370 PyLongObject *a, *b, *div, *mod;
3371 PyObject *z;
Neil Schemenauerba872e22001-01-04 01:46:03 +00003372
Antoine Pitrouc83ea132010-05-09 14:46:46 +00003373 CONVERT_BINOP(v, w, &a, &b);
Neil Schemenauerba872e22001-01-04 01:46:03 +00003374
Antoine Pitrouc83ea132010-05-09 14:46:46 +00003375 if (l_divmod(a, b, &div, &mod) < 0) {
3376 Py_DECREF(a);
3377 Py_DECREF(b);
3378 return NULL;
3379 }
3380 z = PyTuple_New(2);
3381 if (z != NULL) {
3382 PyTuple_SetItem(z, 0, (PyObject *) div);
3383 PyTuple_SetItem(z, 1, (PyObject *) mod);
3384 }
3385 else {
3386 Py_DECREF(div);
3387 Py_DECREF(mod);
3388 }
3389 Py_DECREF(a);
3390 Py_DECREF(b);
3391 return z;
Guido van Rossumedcc38a1991-05-05 20:09:44 +00003392}
3393
Tim Peters47e52ee2004-08-30 02:44:38 +00003394/* pow(v, w, x) */
Guido van Rossumc0b618a1997-05-02 03:12:38 +00003395static PyObject *
Neil Schemenauerba872e22001-01-04 01:46:03 +00003396long_pow(PyObject *v, PyObject *w, PyObject *x)
Guido van Rossumedcc38a1991-05-05 20:09:44 +00003397{
Antoine Pitrouc83ea132010-05-09 14:46:46 +00003398 PyLongObject *a, *b, *c; /* a,b,c = v,w,x */
3399 int negativeOutput = 0; /* if x<0 return negative output */
Neil Schemenauerba872e22001-01-04 01:46:03 +00003400
Antoine Pitrouc83ea132010-05-09 14:46:46 +00003401 PyLongObject *z = NULL; /* accumulated result */
3402 Py_ssize_t i, j, k; /* counters */
3403 PyLongObject *temp = NULL;
Tim Peters47e52ee2004-08-30 02:44:38 +00003404
Antoine Pitrouc83ea132010-05-09 14:46:46 +00003405 /* 5-ary values. If the exponent is large enough, table is
3406 * precomputed so that table[i] == a**i % c for i in range(32).
3407 */
3408 PyLongObject *table[32] = {0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
3409 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0};
Tim Peters47e52ee2004-08-30 02:44:38 +00003410
Antoine Pitrouc83ea132010-05-09 14:46:46 +00003411 /* a, b, c = v, w, x */
3412 CONVERT_BINOP(v, w, &a, &b);
3413 if (PyLong_Check(x)) {
3414 c = (PyLongObject *)x;
3415 Py_INCREF(x);
3416 }
3417 else if (PyInt_Check(x)) {
3418 c = (PyLongObject *)PyLong_FromLong(PyInt_AS_LONG(x));
3419 if (c == NULL)
3420 goto Error;
3421 }
3422 else if (x == Py_None)
3423 c = NULL;
3424 else {
3425 Py_DECREF(a);
3426 Py_DECREF(b);
3427 Py_INCREF(Py_NotImplemented);
3428 return Py_NotImplemented;
3429 }
Tim Peters4c483c42001-09-05 06:24:58 +00003430
Antoine Pitrouc83ea132010-05-09 14:46:46 +00003431 if (Py_SIZE(b) < 0) { /* if exponent is negative */
3432 if (c) {
3433 PyErr_SetString(PyExc_TypeError, "pow() 2nd argument "
Mark Dickinsonfda8d112010-05-09 20:30:29 +00003434 "cannot be negative when 3rd argument specified");
Antoine Pitrouc83ea132010-05-09 14:46:46 +00003435 goto Error;
3436 }
3437 else {
3438 /* else return a float. This works because we know
3439 that this calls float_pow() which converts its
3440 arguments to double. */
3441 Py_DECREF(a);
3442 Py_DECREF(b);
3443 return PyFloat_Type.tp_as_number->nb_power(v, w, x);
3444 }
3445 }
Tim Peters47e52ee2004-08-30 02:44:38 +00003446
Antoine Pitrouc83ea132010-05-09 14:46:46 +00003447 if (c) {
3448 /* if modulus == 0:
3449 raise ValueError() */
3450 if (Py_SIZE(c) == 0) {
3451 PyErr_SetString(PyExc_ValueError,
3452 "pow() 3rd argument cannot be 0");
3453 goto Error;
3454 }
Tim Peters47e52ee2004-08-30 02:44:38 +00003455
Antoine Pitrouc83ea132010-05-09 14:46:46 +00003456 /* if modulus < 0:
3457 negativeOutput = True
3458 modulus = -modulus */
3459 if (Py_SIZE(c) < 0) {
3460 negativeOutput = 1;
3461 temp = (PyLongObject *)_PyLong_Copy(c);
3462 if (temp == NULL)
3463 goto Error;
3464 Py_DECREF(c);
3465 c = temp;
3466 temp = NULL;
3467 c->ob_size = - c->ob_size;
3468 }
Tim Peters47e52ee2004-08-30 02:44:38 +00003469
Antoine Pitrouc83ea132010-05-09 14:46:46 +00003470 /* if modulus == 1:
3471 return 0 */
3472 if ((Py_SIZE(c) == 1) && (c->ob_digit[0] == 1)) {
3473 z = (PyLongObject *)PyLong_FromLong(0L);
3474 goto Done;
3475 }
Tim Peters47e52ee2004-08-30 02:44:38 +00003476
Tim Peters61e9ffa2013-10-05 16:53:52 -05003477 /* Reduce base by modulus in some cases:
3478 1. If base < 0. Forcing the base non-negative makes things easier.
3479 2. If base is obviously larger than the modulus. The "small
3480 exponent" case later can multiply directly by base repeatedly,
3481 while the "large exponent" case multiplies directly by base 31
3482 times. It can be unboundedly faster to multiply by
3483 base % modulus instead.
3484 We could _always_ do this reduction, but l_divmod() isn't cheap,
3485 so we only do it when it buys something. */
3486 if (Py_SIZE(a) < 0 || Py_SIZE(a) > Py_SIZE(c)) {
Antoine Pitrouc83ea132010-05-09 14:46:46 +00003487 if (l_divmod(a, c, NULL, &temp) < 0)
3488 goto Error;
3489 Py_DECREF(a);
3490 a = temp;
3491 temp = NULL;
3492 }
3493 }
Tim Peters47e52ee2004-08-30 02:44:38 +00003494
Antoine Pitrouc83ea132010-05-09 14:46:46 +00003495 /* At this point a, b, and c are guaranteed non-negative UNLESS
3496 c is NULL, in which case a may be negative. */
Tim Peters47e52ee2004-08-30 02:44:38 +00003497
Antoine Pitrouc83ea132010-05-09 14:46:46 +00003498 z = (PyLongObject *)PyLong_FromLong(1L);
3499 if (z == NULL)
3500 goto Error;
Tim Peters47e52ee2004-08-30 02:44:38 +00003501
Antoine Pitrouc83ea132010-05-09 14:46:46 +00003502 /* Perform a modular reduction, X = X % c, but leave X alone if c
3503 * is NULL.
3504 */
3505#define REDUCE(X) \
Mark Dickinson43ca3772010-05-09 20:42:09 +00003506 do { \
3507 if (c != NULL) { \
3508 if (l_divmod(X, c, NULL, &temp) < 0) \
3509 goto Error; \
3510 Py_XDECREF(X); \
3511 X = temp; \
3512 temp = NULL; \
3513 } \
3514 } while(0)
Tim Peters47e52ee2004-08-30 02:44:38 +00003515
Antoine Pitrouc83ea132010-05-09 14:46:46 +00003516 /* Multiply two values, then reduce the result:
3517 result = X*Y % c. If c is NULL, skip the mod. */
Mark Dickinson43ca3772010-05-09 20:42:09 +00003518#define MULT(X, Y, result) \
3519 do { \
3520 temp = (PyLongObject *)long_mul(X, Y); \
3521 if (temp == NULL) \
3522 goto Error; \
3523 Py_XDECREF(result); \
3524 result = temp; \
3525 temp = NULL; \
3526 REDUCE(result); \
3527 } while(0)
Tim Peters47e52ee2004-08-30 02:44:38 +00003528
Antoine Pitrouc83ea132010-05-09 14:46:46 +00003529 if (Py_SIZE(b) <= FIVEARY_CUTOFF) {
3530 /* Left-to-right binary exponentiation (HAC Algorithm 14.79) */
3531 /* http://www.cacr.math.uwaterloo.ca/hac/about/chap14.pdf */
3532 for (i = Py_SIZE(b) - 1; i >= 0; --i) {
3533 digit bi = b->ob_digit[i];
Tim Peters47e52ee2004-08-30 02:44:38 +00003534
Antoine Pitrouc83ea132010-05-09 14:46:46 +00003535 for (j = (digit)1 << (PyLong_SHIFT-1); j != 0; j >>= 1) {
Mark Dickinson43ca3772010-05-09 20:42:09 +00003536 MULT(z, z, z);
Antoine Pitrouc83ea132010-05-09 14:46:46 +00003537 if (bi & j)
Mark Dickinson43ca3772010-05-09 20:42:09 +00003538 MULT(z, a, z);
Antoine Pitrouc83ea132010-05-09 14:46:46 +00003539 }
3540 }
3541 }
3542 else {
3543 /* Left-to-right 5-ary exponentiation (HAC Algorithm 14.82) */
3544 Py_INCREF(z); /* still holds 1L */
3545 table[0] = z;
3546 for (i = 1; i < 32; ++i)
Mark Dickinson43ca3772010-05-09 20:42:09 +00003547 MULT(table[i-1], a, table[i]);
Tim Peters47e52ee2004-08-30 02:44:38 +00003548
Antoine Pitrouc83ea132010-05-09 14:46:46 +00003549 for (i = Py_SIZE(b) - 1; i >= 0; --i) {
3550 const digit bi = b->ob_digit[i];
Tim Peters47e52ee2004-08-30 02:44:38 +00003551
Antoine Pitrouc83ea132010-05-09 14:46:46 +00003552 for (j = PyLong_SHIFT - 5; j >= 0; j -= 5) {
3553 const int index = (bi >> j) & 0x1f;
3554 for (k = 0; k < 5; ++k)
Mark Dickinson43ca3772010-05-09 20:42:09 +00003555 MULT(z, z, z);
Antoine Pitrouc83ea132010-05-09 14:46:46 +00003556 if (index)
Mark Dickinson43ca3772010-05-09 20:42:09 +00003557 MULT(z, table[index], z);
Antoine Pitrouc83ea132010-05-09 14:46:46 +00003558 }
3559 }
3560 }
Tim Peters47e52ee2004-08-30 02:44:38 +00003561
Antoine Pitrouc83ea132010-05-09 14:46:46 +00003562 if (negativeOutput && (Py_SIZE(z) != 0)) {
3563 temp = (PyLongObject *)long_sub(z, c);
3564 if (temp == NULL)
3565 goto Error;
3566 Py_DECREF(z);
3567 z = temp;
3568 temp = NULL;
3569 }
3570 goto Done;
Tim Peters47e52ee2004-08-30 02:44:38 +00003571
Mark Dickinsonfda8d112010-05-09 20:30:29 +00003572 Error:
Antoine Pitrouc83ea132010-05-09 14:46:46 +00003573 if (z != NULL) {
3574 Py_DECREF(z);
3575 z = NULL;
3576 }
3577 /* fall through */
Mark Dickinsonfda8d112010-05-09 20:30:29 +00003578 Done:
Antoine Pitrouc83ea132010-05-09 14:46:46 +00003579 if (Py_SIZE(b) > FIVEARY_CUTOFF) {
3580 for (i = 0; i < 32; ++i)
3581 Py_XDECREF(table[i]);
3582 }
3583 Py_DECREF(a);
3584 Py_DECREF(b);
3585 Py_XDECREF(c);
3586 Py_XDECREF(temp);
3587 return (PyObject *)z;
Guido van Rossumedcc38a1991-05-05 20:09:44 +00003588}
3589
Guido van Rossumc0b618a1997-05-02 03:12:38 +00003590static PyObject *
Tim Peters9f688bf2000-07-07 15:53:28 +00003591long_invert(PyLongObject *v)
Guido van Rossumedcc38a1991-05-05 20:09:44 +00003592{
Antoine Pitrouc83ea132010-05-09 14:46:46 +00003593 /* Implement ~x as -(x+1) */
3594 PyLongObject *x;
3595 PyLongObject *w;
3596 w = (PyLongObject *)PyLong_FromLong(1L);
3597 if (w == NULL)
3598 return NULL;
3599 x = (PyLongObject *) long_add(v, w);
3600 Py_DECREF(w);
3601 if (x == NULL)
3602 return NULL;
3603 Py_SIZE(x) = -(Py_SIZE(x));
3604 return (PyObject *)x;
Guido van Rossumedcc38a1991-05-05 20:09:44 +00003605}
3606
Guido van Rossumc0b618a1997-05-02 03:12:38 +00003607static PyObject *
Tim Peters9f688bf2000-07-07 15:53:28 +00003608long_neg(PyLongObject *v)
Guido van Rossumc6913e71991-11-19 20:26:46 +00003609{
Antoine Pitrouc83ea132010-05-09 14:46:46 +00003610 PyLongObject *z;
3611 if (v->ob_size == 0 && PyLong_CheckExact(v)) {
3612 /* -0 == 0 */
3613 Py_INCREF(v);
3614 return (PyObject *) v;
3615 }
3616 z = (PyLongObject *)_PyLong_Copy(v);
3617 if (z != NULL)
3618 z->ob_size = -(v->ob_size);
3619 return (PyObject *)z;
Guido van Rossumc6913e71991-11-19 20:26:46 +00003620}
3621
Guido van Rossumc0b618a1997-05-02 03:12:38 +00003622static PyObject *
Tim Peters9f688bf2000-07-07 15:53:28 +00003623long_abs(PyLongObject *v)
Guido van Rossumedcc38a1991-05-05 20:09:44 +00003624{
Antoine Pitrouc83ea132010-05-09 14:46:46 +00003625 if (v->ob_size < 0)
3626 return long_neg(v);
3627 else
3628 return long_long((PyObject *)v);
Guido van Rossumedcc38a1991-05-05 20:09:44 +00003629}
3630
Guido van Rossum23d6f0e1991-05-14 12:06:49 +00003631static int
Tim Peters9f688bf2000-07-07 15:53:28 +00003632long_nonzero(PyLongObject *v)
Guido van Rossum23d6f0e1991-05-14 12:06:49 +00003633{
Antoine Pitrouc83ea132010-05-09 14:46:46 +00003634 return Py_SIZE(v) != 0;
Guido van Rossumc6913e71991-11-19 20:26:46 +00003635}
3636
Guido van Rossumc0b618a1997-05-02 03:12:38 +00003637static PyObject *
Neil Schemenauerba872e22001-01-04 01:46:03 +00003638long_rshift(PyLongObject *v, PyLongObject *w)
Guido van Rossumc6913e71991-11-19 20:26:46 +00003639{
Antoine Pitrouc83ea132010-05-09 14:46:46 +00003640 PyLongObject *a, *b;
3641 PyLongObject *z = NULL;
3642 Py_ssize_t shiftby, newsize, wordshift, loshift, hishift, i, j;
3643 digit lomask, himask;
Tim Peters5af4e6c2002-08-12 02:31:19 +00003644
Antoine Pitrouc83ea132010-05-09 14:46:46 +00003645 CONVERT_BINOP((PyObject *)v, (PyObject *)w, &a, &b);
Neil Schemenauerba872e22001-01-04 01:46:03 +00003646
Antoine Pitrouc83ea132010-05-09 14:46:46 +00003647 if (Py_SIZE(a) < 0) {
3648 /* Right shifting negative numbers is harder */
3649 PyLongObject *a1, *a2;
3650 a1 = (PyLongObject *) long_invert(a);
3651 if (a1 == NULL)
3652 goto rshift_error;
3653 a2 = (PyLongObject *) long_rshift(a1, b);
3654 Py_DECREF(a1);
3655 if (a2 == NULL)
3656 goto rshift_error;
3657 z = (PyLongObject *) long_invert(a2);
3658 Py_DECREF(a2);
3659 }
3660 else {
3661 shiftby = PyLong_AsSsize_t((PyObject *)b);
3662 if (shiftby == -1L && PyErr_Occurred())
3663 goto rshift_error;
3664 if (shiftby < 0) {
3665 PyErr_SetString(PyExc_ValueError,
3666 "negative shift count");
3667 goto rshift_error;
3668 }
3669 wordshift = shiftby / PyLong_SHIFT;
3670 newsize = ABS(Py_SIZE(a)) - wordshift;
3671 if (newsize <= 0) {
3672 z = _PyLong_New(0);
3673 Py_DECREF(a);
3674 Py_DECREF(b);
3675 return (PyObject *)z;
3676 }
3677 loshift = shiftby % PyLong_SHIFT;
3678 hishift = PyLong_SHIFT - loshift;
3679 lomask = ((digit)1 << hishift) - 1;
3680 himask = PyLong_MASK ^ lomask;
3681 z = _PyLong_New(newsize);
3682 if (z == NULL)
3683 goto rshift_error;
3684 if (Py_SIZE(a) < 0)
3685 Py_SIZE(z) = -(Py_SIZE(z));
3686 for (i = 0, j = wordshift; i < newsize; i++, j++) {
3687 z->ob_digit[i] = (a->ob_digit[j] >> loshift) & lomask;
3688 if (i+1 < newsize)
Mark Dickinsonfda8d112010-05-09 20:30:29 +00003689 z->ob_digit[i] |= (a->ob_digit[j+1] << hishift) & himask;
Antoine Pitrouc83ea132010-05-09 14:46:46 +00003690 }
3691 z = long_normalize(z);
3692 }
Mark Dickinsonfda8d112010-05-09 20:30:29 +00003693 rshift_error:
Antoine Pitrouc83ea132010-05-09 14:46:46 +00003694 Py_DECREF(a);
3695 Py_DECREF(b);
3696 return (PyObject *) z;
Neil Schemenauerba872e22001-01-04 01:46:03 +00003697
Guido van Rossumc6913e71991-11-19 20:26:46 +00003698}
3699
Guido van Rossumc0b618a1997-05-02 03:12:38 +00003700static PyObject *
Neil Schemenauerba872e22001-01-04 01:46:03 +00003701long_lshift(PyObject *v, PyObject *w)
Guido van Rossumc6913e71991-11-19 20:26:46 +00003702{
Antoine Pitrouc83ea132010-05-09 14:46:46 +00003703 /* This version due to Tim Peters */
3704 PyLongObject *a, *b;
3705 PyLongObject *z = NULL;
3706 Py_ssize_t shiftby, oldsize, newsize, wordshift, remshift, i, j;
3707 twodigits accum;
Tim Peters5af4e6c2002-08-12 02:31:19 +00003708
Antoine Pitrouc83ea132010-05-09 14:46:46 +00003709 CONVERT_BINOP(v, w, &a, &b);
Neil Schemenauerba872e22001-01-04 01:46:03 +00003710
Antoine Pitrouc83ea132010-05-09 14:46:46 +00003711 shiftby = PyLong_AsSsize_t((PyObject *)b);
3712 if (shiftby == -1L && PyErr_Occurred())
3713 goto lshift_error;
3714 if (shiftby < 0) {
3715 PyErr_SetString(PyExc_ValueError, "negative shift count");
3716 goto lshift_error;
3717 }
3718 /* wordshift, remshift = divmod(shiftby, PyLong_SHIFT) */
3719 wordshift = shiftby / PyLong_SHIFT;
3720 remshift = shiftby - wordshift * PyLong_SHIFT;
Guido van Rossumf2e499b1997-03-16 00:37:59 +00003721
Antoine Pitrouc83ea132010-05-09 14:46:46 +00003722 oldsize = ABS(a->ob_size);
3723 newsize = oldsize + wordshift;
3724 if (remshift)
3725 ++newsize;
3726 z = _PyLong_New(newsize);
3727 if (z == NULL)
3728 goto lshift_error;
3729 if (a->ob_size < 0)
3730 z->ob_size = -(z->ob_size);
3731 for (i = 0; i < wordshift; i++)
3732 z->ob_digit[i] = 0;
3733 accum = 0;
3734 for (i = wordshift, j = 0; j < oldsize; i++, j++) {
3735 accum |= (twodigits)a->ob_digit[j] << remshift;
3736 z->ob_digit[i] = (digit)(accum & PyLong_MASK);
3737 accum >>= PyLong_SHIFT;
3738 }
3739 if (remshift)
3740 z->ob_digit[newsize-1] = (digit)accum;
3741 else
3742 assert(!accum);
3743 z = long_normalize(z);
Mark Dickinsonfda8d112010-05-09 20:30:29 +00003744 lshift_error:
Antoine Pitrouc83ea132010-05-09 14:46:46 +00003745 Py_DECREF(a);
3746 Py_DECREF(b);
3747 return (PyObject *) z;
Guido van Rossumc6913e71991-11-19 20:26:46 +00003748}
3749
Mark Dickinson8d87dc02009-10-25 20:39:06 +00003750/* Compute two's complement of digit vector a[0:m], writing result to
3751 z[0:m]. The digit vector a need not be normalized, but should not
3752 be entirely zero. a and z may point to the same digit vector. */
3753
3754static void
3755v_complement(digit *z, digit *a, Py_ssize_t m)
3756{
Antoine Pitrouc83ea132010-05-09 14:46:46 +00003757 Py_ssize_t i;
3758 digit carry = 1;
3759 for (i = 0; i < m; ++i) {
3760 carry += a[i] ^ PyLong_MASK;
3761 z[i] = carry & PyLong_MASK;
3762 carry >>= PyLong_SHIFT;
3763 }
3764 assert(carry == 0);
Mark Dickinson8d87dc02009-10-25 20:39:06 +00003765}
Guido van Rossum4c260ff1992-01-14 18:36:43 +00003766
3767/* Bitwise and/xor/or operations */
3768
Guido van Rossumc0b618a1997-05-02 03:12:38 +00003769static PyObject *
Tim Peters9f688bf2000-07-07 15:53:28 +00003770long_bitwise(PyLongObject *a,
Antoine Pitrouc83ea132010-05-09 14:46:46 +00003771 int op, /* '&', '|', '^' */
Mark Dickinsonfda8d112010-05-09 20:30:29 +00003772 PyLongObject *b)
Guido van Rossumc6913e71991-11-19 20:26:46 +00003773{
Antoine Pitrouc83ea132010-05-09 14:46:46 +00003774 int nega, negb, negz;
3775 Py_ssize_t size_a, size_b, size_z, i;
3776 PyLongObject *z;
Tim Peters5af4e6c2002-08-12 02:31:19 +00003777
Antoine Pitrouc83ea132010-05-09 14:46:46 +00003778 /* Bitwise operations for negative numbers operate as though
3779 on a two's complement representation. So convert arguments
3780 from sign-magnitude to two's complement, and convert the
3781 result back to sign-magnitude at the end. */
Mark Dickinson8d87dc02009-10-25 20:39:06 +00003782
Antoine Pitrouc83ea132010-05-09 14:46:46 +00003783 /* If a is negative, replace it by its two's complement. */
3784 size_a = ABS(Py_SIZE(a));
3785 nega = Py_SIZE(a) < 0;
3786 if (nega) {
3787 z = _PyLong_New(size_a);
3788 if (z == NULL)
3789 return NULL;
3790 v_complement(z->ob_digit, a->ob_digit, size_a);
3791 a = z;
3792 }
3793 else
3794 /* Keep reference count consistent. */
3795 Py_INCREF(a);
Mark Dickinson8d87dc02009-10-25 20:39:06 +00003796
Antoine Pitrouc83ea132010-05-09 14:46:46 +00003797 /* Same for b. */
3798 size_b = ABS(Py_SIZE(b));
3799 negb = Py_SIZE(b) < 0;
3800 if (negb) {
3801 z = _PyLong_New(size_b);
3802 if (z == NULL) {
3803 Py_DECREF(a);
3804 return NULL;
3805 }
3806 v_complement(z->ob_digit, b->ob_digit, size_b);
3807 b = z;
3808 }
3809 else
3810 Py_INCREF(b);
Tim Peters5af4e6c2002-08-12 02:31:19 +00003811
Antoine Pitrouc83ea132010-05-09 14:46:46 +00003812 /* Swap a and b if necessary to ensure size_a >= size_b. */
3813 if (size_a < size_b) {
3814 z = a; a = b; b = z;
3815 size_z = size_a; size_a = size_b; size_b = size_z;
3816 negz = nega; nega = negb; negb = negz;
3817 }
Tim Peters5af4e6c2002-08-12 02:31:19 +00003818
Antoine Pitrouc83ea132010-05-09 14:46:46 +00003819 /* JRH: The original logic here was to allocate the result value (z)
3820 as the longer of the two operands. However, there are some cases
3821 where the result is guaranteed to be shorter than that: AND of two
3822 positives, OR of two negatives: use the shorter number. AND with
3823 mixed signs: use the positive number. OR with mixed signs: use the
3824 negative number.
3825 */
3826 switch (op) {
3827 case '^':
3828 negz = nega ^ negb;
3829 size_z = size_a;
3830 break;
3831 case '&':
3832 negz = nega & negb;
3833 size_z = negb ? size_a : size_b;
3834 break;
3835 case '|':
3836 negz = nega | negb;
3837 size_z = negb ? size_b : size_a;
3838 break;
3839 default:
3840 PyErr_BadArgument();
3841 return NULL;
3842 }
Guido van Rossumbd3a5271998-08-11 15:04:47 +00003843
Antoine Pitrouc83ea132010-05-09 14:46:46 +00003844 /* We allow an extra digit if z is negative, to make sure that
3845 the final two's complement of z doesn't overflow. */
3846 z = _PyLong_New(size_z + negz);
3847 if (z == NULL) {
3848 Py_DECREF(a);
3849 Py_DECREF(b);
3850 return NULL;
3851 }
Tim Peters5af4e6c2002-08-12 02:31:19 +00003852
Antoine Pitrouc83ea132010-05-09 14:46:46 +00003853 /* Compute digits for overlap of a and b. */
3854 switch(op) {
3855 case '&':
3856 for (i = 0; i < size_b; ++i)
3857 z->ob_digit[i] = a->ob_digit[i] & b->ob_digit[i];
3858 break;
3859 case '|':
3860 for (i = 0; i < size_b; ++i)
3861 z->ob_digit[i] = a->ob_digit[i] | b->ob_digit[i];
3862 break;
3863 case '^':
3864 for (i = 0; i < size_b; ++i)
3865 z->ob_digit[i] = a->ob_digit[i] ^ b->ob_digit[i];
3866 break;
3867 default:
3868 PyErr_BadArgument();
3869 return NULL;
3870 }
Mark Dickinson8d87dc02009-10-25 20:39:06 +00003871
Antoine Pitrouc83ea132010-05-09 14:46:46 +00003872 /* Copy any remaining digits of a, inverting if necessary. */
3873 if (op == '^' && negb)
3874 for (; i < size_z; ++i)
3875 z->ob_digit[i] = a->ob_digit[i] ^ PyLong_MASK;
3876 else if (i < size_z)
3877 memcpy(&z->ob_digit[i], &a->ob_digit[i],
3878 (size_z-i)*sizeof(digit));
Mark Dickinson8d87dc02009-10-25 20:39:06 +00003879
Antoine Pitrouc83ea132010-05-09 14:46:46 +00003880 /* Complement result if negative. */
3881 if (negz) {
3882 Py_SIZE(z) = -(Py_SIZE(z));
3883 z->ob_digit[size_z] = PyLong_MASK;
3884 v_complement(z->ob_digit, z->ob_digit, size_z+1);
3885 }
Tim Peters5af4e6c2002-08-12 02:31:19 +00003886
Antoine Pitrouc83ea132010-05-09 14:46:46 +00003887 Py_DECREF(a);
3888 Py_DECREF(b);
3889 return (PyObject *)long_normalize(z);
Guido van Rossumc6913e71991-11-19 20:26:46 +00003890}
3891
Guido van Rossumc0b618a1997-05-02 03:12:38 +00003892static PyObject *
Neil Schemenauerba872e22001-01-04 01:46:03 +00003893long_and(PyObject *v, PyObject *w)
Guido van Rossumc6913e71991-11-19 20:26:46 +00003894{
Antoine Pitrouc83ea132010-05-09 14:46:46 +00003895 PyLongObject *a, *b;
3896 PyObject *c;
3897 CONVERT_BINOP(v, w, &a, &b);
3898 c = long_bitwise(a, '&', b);
3899 Py_DECREF(a);
3900 Py_DECREF(b);
3901 return c;
Guido van Rossumc6913e71991-11-19 20:26:46 +00003902}
3903
Guido van Rossumc0b618a1997-05-02 03:12:38 +00003904static PyObject *
Neil Schemenauerba872e22001-01-04 01:46:03 +00003905long_xor(PyObject *v, PyObject *w)
Guido van Rossumc6913e71991-11-19 20:26:46 +00003906{
Antoine Pitrouc83ea132010-05-09 14:46:46 +00003907 PyLongObject *a, *b;
3908 PyObject *c;
3909 CONVERT_BINOP(v, w, &a, &b);
3910 c = long_bitwise(a, '^', b);
3911 Py_DECREF(a);
3912 Py_DECREF(b);
3913 return c;
Guido van Rossumc6913e71991-11-19 20:26:46 +00003914}
3915
Guido van Rossumc0b618a1997-05-02 03:12:38 +00003916static PyObject *
Neil Schemenauerba872e22001-01-04 01:46:03 +00003917long_or(PyObject *v, PyObject *w)
Guido van Rossumc6913e71991-11-19 20:26:46 +00003918{
Antoine Pitrouc83ea132010-05-09 14:46:46 +00003919 PyLongObject *a, *b;
3920 PyObject *c;
3921 CONVERT_BINOP(v, w, &a, &b);
3922 c = long_bitwise(a, '|', b);
3923 Py_DECREF(a);
3924 Py_DECREF(b);
3925 return c;
Guido van Rossum23d6f0e1991-05-14 12:06:49 +00003926}
3927
Guido van Rossum234f9421993-06-17 12:35:49 +00003928static int
Tim Peters9f688bf2000-07-07 15:53:28 +00003929long_coerce(PyObject **pv, PyObject **pw)
Guido van Rossume6eefc21992-08-14 12:06:52 +00003930{
Antoine Pitrouc83ea132010-05-09 14:46:46 +00003931 if (PyInt_Check(*pw)) {
3932 *pw = PyLong_FromLong(PyInt_AS_LONG(*pw));
3933 if (*pw == NULL)
3934 return -1;
3935 Py_INCREF(*pv);
3936 return 0;
3937 }
3938 else if (PyLong_Check(*pw)) {
3939 Py_INCREF(*pv);
3940 Py_INCREF(*pw);
3941 return 0;
3942 }
3943 return 1; /* Can't do it */
Guido van Rossume6eefc21992-08-14 12:06:52 +00003944}
3945
Guido van Rossumc0b618a1997-05-02 03:12:38 +00003946static PyObject *
Tim Peters9f688bf2000-07-07 15:53:28 +00003947long_long(PyObject *v)
Guido van Rossum1899c2e1992-09-12 11:09:23 +00003948{
Antoine Pitrouc83ea132010-05-09 14:46:46 +00003949 if (PyLong_CheckExact(v))
3950 Py_INCREF(v);
3951 else
3952 v = _PyLong_Copy((PyLongObject *)v);
3953 return v;
Guido van Rossum1899c2e1992-09-12 11:09:23 +00003954}
3955
Guido van Rossumc0b618a1997-05-02 03:12:38 +00003956static PyObject *
Walter Dörwaldf1715402002-11-19 20:49:15 +00003957long_int(PyObject *v)
3958{
Antoine Pitrouc83ea132010-05-09 14:46:46 +00003959 long x;
3960 x = PyLong_AsLong(v);
3961 if (PyErr_Occurred()) {
3962 if (PyErr_ExceptionMatches(PyExc_OverflowError)) {
Mark Dickinsonfda8d112010-05-09 20:30:29 +00003963 PyErr_Clear();
3964 if (PyLong_CheckExact(v)) {
3965 Py_INCREF(v);
3966 return v;
3967 }
3968 else
3969 return _PyLong_Copy((PyLongObject *)v);
Antoine Pitrouc83ea132010-05-09 14:46:46 +00003970 }
3971 else
3972 return NULL;
3973 }
3974 return PyInt_FromLong(x);
Walter Dörwaldf1715402002-11-19 20:49:15 +00003975}
3976
3977static PyObject *
Tim Peters9f688bf2000-07-07 15:53:28 +00003978long_float(PyObject *v)
Guido van Rossum1899c2e1992-09-12 11:09:23 +00003979{
Antoine Pitrouc83ea132010-05-09 14:46:46 +00003980 double result;
3981 result = PyLong_AsDouble(v);
3982 if (result == -1.0 && PyErr_Occurred())
3983 return NULL;
3984 return PyFloat_FromDouble(result);
Guido van Rossum1899c2e1992-09-12 11:09:23 +00003985}
3986
Guido van Rossumc0b618a1997-05-02 03:12:38 +00003987static PyObject *
Tim Peters9f688bf2000-07-07 15:53:28 +00003988long_oct(PyObject *v)
Guido van Rossum1899c2e1992-09-12 11:09:23 +00003989{
Antoine Pitrouc83ea132010-05-09 14:46:46 +00003990 return _PyLong_Format(v, 8, 1, 0);
Guido van Rossum1899c2e1992-09-12 11:09:23 +00003991}
3992
Guido van Rossumc0b618a1997-05-02 03:12:38 +00003993static PyObject *
Tim Peters9f688bf2000-07-07 15:53:28 +00003994long_hex(PyObject *v)
Guido van Rossum1899c2e1992-09-12 11:09:23 +00003995{
Antoine Pitrouc83ea132010-05-09 14:46:46 +00003996 return _PyLong_Format(v, 16, 1, 0);
Guido van Rossum1899c2e1992-09-12 11:09:23 +00003997}
Jeremy Hylton938ace62002-07-17 16:30:39 +00003998
3999static PyObject *
Guido van Rossumbef14172001-08-29 15:47:46 +00004000long_subtype_new(PyTypeObject *type, PyObject *args, PyObject *kwds);
Guido van Rossum1899c2e1992-09-12 11:09:23 +00004001
Tim Peters6d6c1a32001-08-02 04:15:00 +00004002static PyObject *
4003long_new(PyTypeObject *type, PyObject *args, PyObject *kwds)
4004{
Antoine Pitrouc83ea132010-05-09 14:46:46 +00004005 PyObject *x = NULL;
4006 int base = -909; /* unlikely! */
4007 static char *kwlist[] = {"x", "base", 0};
Tim Peters6d6c1a32001-08-02 04:15:00 +00004008
Antoine Pitrouc83ea132010-05-09 14:46:46 +00004009 if (type != &PyLong_Type)
4010 return long_subtype_new(type, args, kwds); /* Wimp out */
4011 if (!PyArg_ParseTupleAndKeywords(args, kwds, "|Oi:long", kwlist,
4012 &x, &base))
4013 return NULL;
Serhiy Storchakacf095f82012-12-28 09:31:59 +02004014 if (x == NULL) {
4015 if (base != -909) {
4016 PyErr_SetString(PyExc_TypeError,
4017 "long() missing string argument");
4018 return NULL;
4019 }
Antoine Pitrouc83ea132010-05-09 14:46:46 +00004020 return PyLong_FromLong(0L);
Serhiy Storchakacf095f82012-12-28 09:31:59 +02004021 }
Antoine Pitrouc83ea132010-05-09 14:46:46 +00004022 if (base == -909)
4023 return PyNumber_Long(x);
4024 else if (PyString_Check(x)) {
4025 /* Since PyLong_FromString doesn't have a length parameter,
4026 * check here for possible NULs in the string. */
4027 char *string = PyString_AS_STRING(x);
4028 if (strlen(string) != (size_t)PyString_Size(x)) {
4029 /* create a repr() of the input string,
4030 * just like PyLong_FromString does. */
4031 PyObject *srepr;
4032 srepr = PyObject_Repr(x);
4033 if (srepr == NULL)
4034 return NULL;
4035 PyErr_Format(PyExc_ValueError,
Mark Dickinsonfda8d112010-05-09 20:30:29 +00004036 "invalid literal for long() with base %d: %s",
4037 base, PyString_AS_STRING(srepr));
Antoine Pitrouc83ea132010-05-09 14:46:46 +00004038 Py_DECREF(srepr);
4039 return NULL;
4040 }
4041 return PyLong_FromString(PyString_AS_STRING(x), NULL, base);
4042 }
Martin v. Löwis339d0f72001-08-17 18:39:25 +00004043#ifdef Py_USING_UNICODE
Antoine Pitrouc83ea132010-05-09 14:46:46 +00004044 else if (PyUnicode_Check(x))
4045 return PyLong_FromUnicode(PyUnicode_AS_UNICODE(x),
4046 PyUnicode_GET_SIZE(x),
4047 base);
Martin v. Löwis339d0f72001-08-17 18:39:25 +00004048#endif
Antoine Pitrouc83ea132010-05-09 14:46:46 +00004049 else {
4050 PyErr_SetString(PyExc_TypeError,
Mark Dickinsonfda8d112010-05-09 20:30:29 +00004051 "long() can't convert non-string with explicit base");
Antoine Pitrouc83ea132010-05-09 14:46:46 +00004052 return NULL;
4053 }
Tim Peters6d6c1a32001-08-02 04:15:00 +00004054}
4055
Guido van Rossumbef14172001-08-29 15:47:46 +00004056/* Wimpy, slow approach to tp_new calls for subtypes of long:
4057 first create a regular long from whatever arguments we got,
4058 then allocate a subtype instance and initialize it from
4059 the regular long. The regular long is then thrown away.
4060*/
4061static PyObject *
4062long_subtype_new(PyTypeObject *type, PyObject *args, PyObject *kwds)
4063{
Antoine Pitrouc83ea132010-05-09 14:46:46 +00004064 PyLongObject *tmp, *newobj;
4065 Py_ssize_t i, n;
Guido van Rossumbef14172001-08-29 15:47:46 +00004066
Antoine Pitrouc83ea132010-05-09 14:46:46 +00004067 assert(PyType_IsSubtype(type, &PyLong_Type));
4068 tmp = (PyLongObject *)long_new(&PyLong_Type, args, kwds);
4069 if (tmp == NULL)
4070 return NULL;
Serhiy Storchaka8d30ad72015-11-25 15:55:54 +02004071 assert(PyLong_Check(tmp));
Antoine Pitrouc83ea132010-05-09 14:46:46 +00004072 n = Py_SIZE(tmp);
4073 if (n < 0)
4074 n = -n;
4075 newobj = (PyLongObject *)type->tp_alloc(type, n);
4076 if (newobj == NULL) {
4077 Py_DECREF(tmp);
4078 return NULL;
4079 }
4080 assert(PyLong_Check(newobj));
4081 Py_SIZE(newobj) = Py_SIZE(tmp);
4082 for (i = 0; i < n; i++)
4083 newobj->ob_digit[i] = tmp->ob_digit[i];
4084 Py_DECREF(tmp);
4085 return (PyObject *)newobj;
Guido van Rossumbef14172001-08-29 15:47:46 +00004086}
4087
Guido van Rossum5d9113d2003-01-29 17:58:45 +00004088static PyObject *
4089long_getnewargs(PyLongObject *v)
4090{
Antoine Pitrouc83ea132010-05-09 14:46:46 +00004091 return Py_BuildValue("(N)", _PyLong_Copy(v));
Guido van Rossum5d9113d2003-01-29 17:58:45 +00004092}
4093
Jeffrey Yasskin2f3c16b2008-01-03 02:21:52 +00004094static PyObject *
Mark Dickinsond4b5c982009-05-02 17:55:01 +00004095long_get0(PyLongObject *v, void *context) {
Antoine Pitrouc83ea132010-05-09 14:46:46 +00004096 return PyLong_FromLong(0L);
Mark Dickinsond4b5c982009-05-02 17:55:01 +00004097}
4098
4099static PyObject *
4100long_get1(PyLongObject *v, void *context) {
Antoine Pitrouc83ea132010-05-09 14:46:46 +00004101 return PyLong_FromLong(1L);
Jeffrey Yasskin2f3c16b2008-01-03 02:21:52 +00004102}
4103
Eric Smitha9f7d622008-02-17 19:46:49 +00004104static PyObject *
4105long__format__(PyObject *self, PyObject *args)
4106{
Antoine Pitrouc83ea132010-05-09 14:46:46 +00004107 PyObject *format_spec;
Eric Smitha9f7d622008-02-17 19:46:49 +00004108
Antoine Pitrouc83ea132010-05-09 14:46:46 +00004109 if (!PyArg_ParseTuple(args, "O:__format__", &format_spec))
4110 return NULL;
4111 if (PyBytes_Check(format_spec))
4112 return _PyLong_FormatAdvanced(self,
4113 PyBytes_AS_STRING(format_spec),
4114 PyBytes_GET_SIZE(format_spec));
4115 if (PyUnicode_Check(format_spec)) {
4116 /* Convert format_spec to a str */
4117 PyObject *result;
4118 PyObject *str_spec = PyObject_Str(format_spec);
Eric Smitha9f7d622008-02-17 19:46:49 +00004119
Antoine Pitrouc83ea132010-05-09 14:46:46 +00004120 if (str_spec == NULL)
4121 return NULL;
Eric Smitha9f7d622008-02-17 19:46:49 +00004122
Antoine Pitrouc83ea132010-05-09 14:46:46 +00004123 result = _PyLong_FormatAdvanced(self,
4124 PyBytes_AS_STRING(str_spec),
4125 PyBytes_GET_SIZE(str_spec));
Eric Smitha9f7d622008-02-17 19:46:49 +00004126
Antoine Pitrouc83ea132010-05-09 14:46:46 +00004127 Py_DECREF(str_spec);
4128 return result;
4129 }
4130 PyErr_SetString(PyExc_TypeError, "__format__ requires str or unicode");
4131 return NULL;
Eric Smitha9f7d622008-02-17 19:46:49 +00004132}
4133
Robert Schuppenies51df0642008-06-01 16:16:17 +00004134static PyObject *
4135long_sizeof(PyLongObject *v)
4136{
Antoine Pitrouc83ea132010-05-09 14:46:46 +00004137 Py_ssize_t res;
Robert Schuppenies51df0642008-06-01 16:16:17 +00004138
Antoine Pitrouc83ea132010-05-09 14:46:46 +00004139 res = v->ob_type->tp_basicsize + ABS(Py_SIZE(v))*sizeof(digit);
4140 return PyInt_FromSsize_t(res);
Robert Schuppenies51df0642008-06-01 16:16:17 +00004141}
4142
Mark Dickinson1a707982008-12-17 16:14:37 +00004143static PyObject *
4144long_bit_length(PyLongObject *v)
4145{
Antoine Pitrouc83ea132010-05-09 14:46:46 +00004146 PyLongObject *result, *x, *y;
4147 Py_ssize_t ndigits, msd_bits = 0;
4148 digit msd;
Mark Dickinson1a707982008-12-17 16:14:37 +00004149
Antoine Pitrouc83ea132010-05-09 14:46:46 +00004150 assert(v != NULL);
4151 assert(PyLong_Check(v));
Mark Dickinson1a707982008-12-17 16:14:37 +00004152
Antoine Pitrouc83ea132010-05-09 14:46:46 +00004153 ndigits = ABS(Py_SIZE(v));
4154 if (ndigits == 0)
4155 return PyInt_FromLong(0);
Mark Dickinson1a707982008-12-17 16:14:37 +00004156
Antoine Pitrouc83ea132010-05-09 14:46:46 +00004157 msd = v->ob_digit[ndigits-1];
4158 while (msd >= 32) {
4159 msd_bits += 6;
4160 msd >>= 6;
4161 }
4162 msd_bits += (long)(BitLengthTable[msd]);
Mark Dickinson1a707982008-12-17 16:14:37 +00004163
Antoine Pitrouc83ea132010-05-09 14:46:46 +00004164 if (ndigits <= PY_SSIZE_T_MAX/PyLong_SHIFT)
4165 return PyInt_FromSsize_t((ndigits-1)*PyLong_SHIFT + msd_bits);
Mark Dickinson1a707982008-12-17 16:14:37 +00004166
Antoine Pitrouc83ea132010-05-09 14:46:46 +00004167 /* expression above may overflow; use Python integers instead */
4168 result = (PyLongObject *)PyLong_FromSsize_t(ndigits - 1);
4169 if (result == NULL)
4170 return NULL;
4171 x = (PyLongObject *)PyLong_FromLong(PyLong_SHIFT);
4172 if (x == NULL)
4173 goto error;
4174 y = (PyLongObject *)long_mul(result, x);
4175 Py_DECREF(x);
4176 if (y == NULL)
4177 goto error;
4178 Py_DECREF(result);
4179 result = y;
Mark Dickinson1a707982008-12-17 16:14:37 +00004180
Antoine Pitrouc83ea132010-05-09 14:46:46 +00004181 x = (PyLongObject *)PyLong_FromLong((long)msd_bits);
4182 if (x == NULL)
4183 goto error;
4184 y = (PyLongObject *)long_add(result, x);
4185 Py_DECREF(x);
4186 if (y == NULL)
4187 goto error;
4188 Py_DECREF(result);
4189 result = y;
Mark Dickinson1a707982008-12-17 16:14:37 +00004190
Antoine Pitrouc83ea132010-05-09 14:46:46 +00004191 return (PyObject *)result;
Mark Dickinson1a707982008-12-17 16:14:37 +00004192
Mark Dickinsonfda8d112010-05-09 20:30:29 +00004193 error:
Antoine Pitrouc83ea132010-05-09 14:46:46 +00004194 Py_DECREF(result);
4195 return NULL;
Mark Dickinson1a707982008-12-17 16:14:37 +00004196}
4197
4198PyDoc_STRVAR(long_bit_length_doc,
4199"long.bit_length() -> int or long\n\
4200\n\
4201Number of bits necessary to represent self in binary.\n\
4202>>> bin(37L)\n\
4203'0b100101'\n\
4204>>> (37L).bit_length()\n\
42056");
4206
Christian Heimes6f341092008-04-18 23:13:07 +00004207#if 0
4208static PyObject *
4209long_is_finite(PyObject *v)
4210{
Antoine Pitrouc83ea132010-05-09 14:46:46 +00004211 Py_RETURN_TRUE;
Christian Heimes6f341092008-04-18 23:13:07 +00004212}
4213#endif
4214
Guido van Rossum5d9113d2003-01-29 17:58:45 +00004215static PyMethodDef long_methods[] = {
Antoine Pitrouc83ea132010-05-09 14:46:46 +00004216 {"conjugate", (PyCFunction)long_long, METH_NOARGS,
4217 "Returns self, the complex conjugate of any long."},
4218 {"bit_length", (PyCFunction)long_bit_length, METH_NOARGS,
4219 long_bit_length_doc},
Christian Heimes6f341092008-04-18 23:13:07 +00004220#if 0
Antoine Pitrouc83ea132010-05-09 14:46:46 +00004221 {"is_finite", (PyCFunction)long_is_finite, METH_NOARGS,
4222 "Returns always True."},
Christian Heimes6f341092008-04-18 23:13:07 +00004223#endif
Antoine Pitrouc83ea132010-05-09 14:46:46 +00004224 {"__trunc__", (PyCFunction)long_long, METH_NOARGS,
4225 "Truncating an Integral returns itself."},
4226 {"__getnewargs__", (PyCFunction)long_getnewargs, METH_NOARGS},
4227 {"__format__", (PyCFunction)long__format__, METH_VARARGS},
4228 {"__sizeof__", (PyCFunction)long_sizeof, METH_NOARGS,
4229 "Returns size in memory, in bytes"},
4230 {NULL, NULL} /* sentinel */
Guido van Rossum5d9113d2003-01-29 17:58:45 +00004231};
4232
Jeffrey Yasskin2f3c16b2008-01-03 02:21:52 +00004233static PyGetSetDef long_getset[] = {
Mark Dickinsond4b5c982009-05-02 17:55:01 +00004234 {"real",
Jeffrey Yasskin2f3c16b2008-01-03 02:21:52 +00004235 (getter)long_long, (setter)NULL,
4236 "the real part of a complex number",
4237 NULL},
Mark Dickinsond4b5c982009-05-02 17:55:01 +00004238 {"imag",
4239 (getter)long_get0, (setter)NULL,
Jeffrey Yasskin2f3c16b2008-01-03 02:21:52 +00004240 "the imaginary part of a complex number",
Mark Dickinsond4b5c982009-05-02 17:55:01 +00004241 NULL},
4242 {"numerator",
Jeffrey Yasskin2f3c16b2008-01-03 02:21:52 +00004243 (getter)long_long, (setter)NULL,
4244 "the numerator of a rational number in lowest terms",
4245 NULL},
Mark Dickinsond4b5c982009-05-02 17:55:01 +00004246 {"denominator",
4247 (getter)long_get1, (setter)NULL,
Jeffrey Yasskin2f3c16b2008-01-03 02:21:52 +00004248 "the denominator of a rational number in lowest terms",
Mark Dickinsond4b5c982009-05-02 17:55:01 +00004249 NULL},
Jeffrey Yasskin2f3c16b2008-01-03 02:21:52 +00004250 {NULL} /* Sentinel */
4251};
4252
Martin v. Löwis14f8b4c2002-06-13 20:33:02 +00004253PyDoc_STRVAR(long_doc,
Chris Jerdonekad4b0002012-10-07 20:37:54 -07004254"long(x=0) -> long\n\
4255long(x, base=10) -> long\n\
Tim Peters6d6c1a32001-08-02 04:15:00 +00004256\n\
Chris Jerdonekad4b0002012-10-07 20:37:54 -07004257Convert a number or string to a long integer, or return 0L if no arguments\n\
4258are given. If x is floating point, the conversion truncates towards zero.\n\
4259\n\
4260If x is not a number or if base is given, then x must be a string or\n\
4261Unicode object representing an integer literal in the given base. The\n\
4262literal can be preceded by '+' or '-' and be surrounded by whitespace.\n\
4263The base defaults to 10. Valid bases are 0 and 2-36. Base 0 means to\n\
4264interpret the base from the string as an integer literal.\n\
4265>>> int('0b100', base=0)\n\
42664L");
Tim Peters6d6c1a32001-08-02 04:15:00 +00004267
Guido van Rossumc0b618a1997-05-02 03:12:38 +00004268static PyNumberMethods long_as_number = {
Mark Dickinsonfda8d112010-05-09 20:30:29 +00004269 (binaryfunc)long_add, /*nb_add*/
4270 (binaryfunc)long_sub, /*nb_subtract*/
4271 (binaryfunc)long_mul, /*nb_multiply*/
4272 long_classic_div, /*nb_divide*/
4273 long_mod, /*nb_remainder*/
4274 long_divmod, /*nb_divmod*/
4275 long_pow, /*nb_power*/
4276 (unaryfunc)long_neg, /*nb_negative*/
4277 (unaryfunc)long_long, /*tp_positive*/
4278 (unaryfunc)long_abs, /*tp_absolute*/
4279 (inquiry)long_nonzero, /*tp_nonzero*/
4280 (unaryfunc)long_invert, /*nb_invert*/
4281 long_lshift, /*nb_lshift*/
4282 (binaryfunc)long_rshift, /*nb_rshift*/
4283 long_and, /*nb_and*/
4284 long_xor, /*nb_xor*/
4285 long_or, /*nb_or*/
4286 long_coerce, /*nb_coerce*/
4287 long_int, /*nb_int*/
4288 long_long, /*nb_long*/
4289 long_float, /*nb_float*/
4290 long_oct, /*nb_oct*/
4291 long_hex, /*nb_hex*/
4292 0, /* nb_inplace_add */
4293 0, /* nb_inplace_subtract */
4294 0, /* nb_inplace_multiply */
4295 0, /* nb_inplace_divide */
4296 0, /* nb_inplace_remainder */
4297 0, /* nb_inplace_power */
4298 0, /* nb_inplace_lshift */
4299 0, /* nb_inplace_rshift */
4300 0, /* nb_inplace_and */
4301 0, /* nb_inplace_xor */
4302 0, /* nb_inplace_or */
4303 long_div, /* nb_floor_divide */
4304 long_true_divide, /* nb_true_divide */
4305 0, /* nb_inplace_floor_divide */
4306 0, /* nb_inplace_true_divide */
4307 long_long, /* nb_index */
Guido van Rossumedcc38a1991-05-05 20:09:44 +00004308};
4309
Guido van Rossumc0b618a1997-05-02 03:12:38 +00004310PyTypeObject PyLong_Type = {
Antoine Pitrouc83ea132010-05-09 14:46:46 +00004311 PyObject_HEAD_INIT(&PyType_Type)
4312 0, /* ob_size */
4313 "long", /* tp_name */
4314 offsetof(PyLongObject, ob_digit), /* tp_basicsize */
4315 sizeof(digit), /* tp_itemsize */
4316 long_dealloc, /* tp_dealloc */
4317 0, /* tp_print */
4318 0, /* tp_getattr */
4319 0, /* tp_setattr */
4320 (cmpfunc)long_compare, /* tp_compare */
4321 long_repr, /* tp_repr */
4322 &long_as_number, /* tp_as_number */
4323 0, /* tp_as_sequence */
4324 0, /* tp_as_mapping */
4325 (hashfunc)long_hash, /* tp_hash */
4326 0, /* tp_call */
4327 long_str, /* tp_str */
4328 PyObject_GenericGetAttr, /* tp_getattro */
4329 0, /* tp_setattro */
4330 0, /* tp_as_buffer */
4331 Py_TPFLAGS_DEFAULT | Py_TPFLAGS_CHECKTYPES |
Mark Dickinsonfda8d112010-05-09 20:30:29 +00004332 Py_TPFLAGS_BASETYPE | Py_TPFLAGS_LONG_SUBCLASS, /* tp_flags */
Antoine Pitrouc83ea132010-05-09 14:46:46 +00004333 long_doc, /* tp_doc */
4334 0, /* tp_traverse */
4335 0, /* tp_clear */
4336 0, /* tp_richcompare */
4337 0, /* tp_weaklistoffset */
4338 0, /* tp_iter */
4339 0, /* tp_iternext */
4340 long_methods, /* tp_methods */
4341 0, /* tp_members */
4342 long_getset, /* tp_getset */
4343 0, /* tp_base */
4344 0, /* tp_dict */
4345 0, /* tp_descr_get */
4346 0, /* tp_descr_set */
4347 0, /* tp_dictoffset */
4348 0, /* tp_init */
4349 0, /* tp_alloc */
4350 long_new, /* tp_new */
Mark Dickinsonfda8d112010-05-09 20:30:29 +00004351 PyObject_Del, /* tp_free */
Guido van Rossumedcc38a1991-05-05 20:09:44 +00004352};
Mark Dickinsonefc82f72009-03-20 15:51:55 +00004353
4354static PyTypeObject Long_InfoType;
4355
4356PyDoc_STRVAR(long_info__doc__,
4357"sys.long_info\n\
4358\n\
4359A struct sequence that holds information about Python's\n\
4360internal representation of integers. The attributes are read only.");
4361
4362static PyStructSequence_Field long_info_fields[] = {
Antoine Pitrouc83ea132010-05-09 14:46:46 +00004363 {"bits_per_digit", "size of a digit in bits"},
Mark Dickinsonfda8d112010-05-09 20:30:29 +00004364 {"sizeof_digit", "size in bytes of the C type used to represent a digit"},
Antoine Pitrouc83ea132010-05-09 14:46:46 +00004365 {NULL, NULL}
Mark Dickinsonefc82f72009-03-20 15:51:55 +00004366};
4367
4368static PyStructSequence_Desc long_info_desc = {
Antoine Pitrouc83ea132010-05-09 14:46:46 +00004369 "sys.long_info", /* name */
4370 long_info__doc__, /* doc */
4371 long_info_fields, /* fields */
Mark Dickinsonfda8d112010-05-09 20:30:29 +00004372 2 /* number of fields */
Mark Dickinsonefc82f72009-03-20 15:51:55 +00004373};
4374
4375PyObject *
4376PyLong_GetInfo(void)
4377{
Antoine Pitrouc83ea132010-05-09 14:46:46 +00004378 PyObject* long_info;
4379 int field = 0;
4380 long_info = PyStructSequence_New(&Long_InfoType);
4381 if (long_info == NULL)
4382 return NULL;
4383 PyStructSequence_SET_ITEM(long_info, field++,
4384 PyInt_FromLong(PyLong_SHIFT));
4385 PyStructSequence_SET_ITEM(long_info, field++,
4386 PyInt_FromLong(sizeof(digit)));
4387 if (PyErr_Occurred()) {
4388 Py_CLEAR(long_info);
4389 return NULL;
4390 }
4391 return long_info;
Mark Dickinsonefc82f72009-03-20 15:51:55 +00004392}
4393
4394int
4395_PyLong_Init(void)
4396{
Antoine Pitrouc83ea132010-05-09 14:46:46 +00004397 /* initialize long_info */
4398 if (Long_InfoType.tp_name == 0)
4399 PyStructSequence_InitType(&Long_InfoType, &long_info_desc);
4400 return 1;
Mark Dickinsonefc82f72009-03-20 15:51:55 +00004401}