Browse Source
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.pull/2059/head
Damien George
9 years ago
3 changed files with 18 additions and 4 deletions
@ -1,3 +1,10 @@ |
|||
for lhs in (1000000000000000000000000, 10000000000100000000000000, 10012003400000000000000007, 12349083434598210349871029923874109871234789): |
|||
for rhs in range(1, 555): |
|||
print(lhs // rhs) |
|||
|
|||
# these check an edge case on 64-bit machines where two mpz limbs |
|||
# are used and the most significant one has the MSB set |
|||
x = 0x8000000000000000 |
|||
print((x + 1) // x) |
|||
x = 0x86c60128feff5330 |
|||
print((x + 1) // x) |
|||
|
Loading…
Reference in new issue