diff options
author | Kevin Sheppard <kevin.k.sheppard@gmail.com> | 2021-10-06 09:45:21 +0100 |
---|---|---|
committer | Kevin Sheppard <kevin.sheppard@gmail.com> | 2021-10-06 23:23:14 +0100 |
commit | 401b26e880117ae5bc72b84a7fd267e999f99aa1 (patch) | |
tree | 3d5b3ea5f8aa63e198e2a7c6e1dddeb8ab550601 /numpy/random/src | |
parent | 9d32403470293c102de87b4fa26ce31a6879f361 (diff) | |
download | numpy-401b26e880117ae5bc72b84a7fd267e999f99aa1.tar.gz |
BUG: Correct incorrect advance in PCG with emulated int128
Correct incorrect implemetation of carry in PCG64 and PCG64DXSM
when advancing more than 2**64 steps
closes #20048
Diffstat (limited to 'numpy/random/src')
-rw-r--r-- | numpy/random/src/pcg64/pcg64.c | 3 |
1 files changed, 1 insertions, 2 deletions
diff --git a/numpy/random/src/pcg64/pcg64.c b/numpy/random/src/pcg64/pcg64.c index c623c809b..b9be1e39d 100644 --- a/numpy/random/src/pcg64/pcg64.c +++ b/numpy/random/src/pcg64/pcg64.c @@ -109,8 +109,7 @@ pcg128_t pcg_advance_lcg_128(pcg128_t state, pcg128_t delta, pcg128_t cur_mult, cur_plus = pcg128_mult(pcg128_add(cur_mult, PCG_128BIT_CONSTANT(0u, 1u)), cur_plus); cur_mult = pcg128_mult(cur_mult, cur_mult); - delta.low >>= 1; - delta.low += delta.high & 1; + delta.low = (delta.low >> 1) | (delta.high << 63); delta.high >>= 1; } return pcg128_add(pcg128_mult(acc_mult, state), acc_plus); |