- Oct 11, 2016
-
-
Damien George authored
-
Damien George authored
-
Damien George authored
The check for division by zero is made by the caller of this function.
-
- May 09, 2016
-
-
Damien George authored
Previous to this patch bignum division and modulo would temporarily modify the RHS argument to the operation (eg x/y would modify y), but on return the RHS would be restored to its original value. This is not allowed because arguments to binary operations are const, and in particular might live in ROM. The modification was to normalise the arg (and then unnormalise before returning), and this patch makes it so the normalisation is done on the fly and the arg is now accessed as read-only. This change doesn't increase the order complexity of the operation, and actually reduces code size.
-
- May 08, 2016
-
-
Damien George authored
This patch consolidates the Python logic for division/modulo to one place within the bignum code.
-
Damien George authored
When DIG_SIZE=32, a uint32_t is used to store limbs, and no normalisation is needed because the MSB is already set, then there will be left and right shifts (in C) by 32 of a 32-bit variable, leading to undefined behaviour. This patch fixes this bug.
-
- Feb 03, 2016
-
-
Damien George authored
This function computes (x**y)%z in an efficient way. For large arguments this operation is otherwise not computable by doing x**y and then %z. It's currently not used, but is added in case it's useful one day.
-
Doug Currie authored
For these 3 bitwise operations there are now fast functions for positive-only arguments, and general functions for arbitrary sign arguments (the fast functions are the existing implementation). By default the fast functions are not used (to save space) and instead the general functions are used for all operations. Enable MICROPY_OPT_MPZ_BITWISE to use the fast functions for positive arguments.
-
- Jan 08, 2016
-
-
Damien George authored
-
- Nov 22, 2015
-
-
Paul Sokolovsky authored
-
- Oct 01, 2015
-
-
Damien George authored
-
Damien George authored
Python semantics are that rhs of shift must be non-negative, so there's no need to handle negative values in the underlying mpz implementation.
-
Damien George authored
-
- Apr 25, 2015
-
-
Damien George authored
-
Damien George authored
This gets int.to_bytes working for bignum, and also struct.pack with 'q' and 'Q' args on 32-bit machines. Addresses issue #1155.
-
- Apr 22, 2015
-
-
Damien George authored
-
- Apr 09, 2015
-
-
Damien George authored
-
- Mar 12, 2015
-
-
Damien George authored
-
- Mar 02, 2015
-
-
Damien George authored
-
- Jan 27, 2015
-
-
Damien George authored
-
- Jan 24, 2015
-
-
David Steinberg authored
-
David Steinberg authored
-
- Jan 20, 2015
-
-
Damien George authored
See issue #699.
-
- Jan 16, 2015
-
-
Damien George authored
See issue #699.
-
- Jan 09, 2015
-
-
Damien George authored
-
- Jan 02, 2015
-
-
Damien George authored
-
David Steinberg authored
-
- Jan 01, 2015
-
-
Damien George authored
Addresses issue #1022.
-
- Dec 31, 2014
-
-
Damien George authored
Addresses issue #1027.
-
- Oct 30, 2014
-
-
stijn authored
msvc does not treat 1L a 64bit integer hence all occurences of shifting it left or right result in undefined behaviour since the maximum allowed shift count for 32bit ints is 31. Forcing the correct type explicitely, stored in MPZ_LONG_1, solves this.
-
- Oct 03, 2014
-
-
Damien George authored
Addressing issue #50.
-
- Sep 10, 2014
-
-
Damien George authored
Addresses issue #848.
-
- Sep 06, 2014
-
-
Damien George authored
Previously, mpz was restricted to using at most 15 bits in each digit, where a digit was a uint16_t. With this patch, mpz can use all 16 bits in the uint16_t (improvement to mpn_div was required). This gives small inprovements in speed and RAM usage. It also yields savings in ROM code size because all of the digit masking operations become no-ops. Also, mpz can now use a uint32_t as the digit type, and hence use 32 bits per digit. This will give decent improvements in mpz speed on 64-bit machines. Test for big integer division added.
-
- Sep 05, 2014
-
-
Damien George authored
-
- Aug 29, 2014
-
-
Damien George authored
-
- Aug 07, 2014
-
-
Damien George authored
Before this patch, eg, 1 << 75 (or any large multiple of 15) was setting the MSB in the digits, which is outside the valid range of DIG_MASK.
-
- Jul 31, 2014
-
-
Damien George authored
This removes mpz_as_int, since that was a terrible function (it implemented saturating conversion). Use mpz_as_int_checked and mpz_as_uint_checked. These now work correctly (they previously had wrong overflow checking, eg print(chr(10000000000000)) on 32-bit machine would incorrectly convert this large number to a small int).
-
- Jul 24, 2014
-
-
Damien George authored
Addresses issue #765.
-
- Jul 03, 2014
-
-
Damien George authored
See discussion in issue #50.
-
- Jun 21, 2014
-
-
Paul Sokolovsky authored
It defines types used by all other headers. Fixes #691.
-