Jan. 29, 2019
2:29 a.m.
On Tue, 29 Jan 2019 10:15:00 +0200, Matti Picus wrote:
2000*2000*2000 overflows a 32 bit signed integer, so it wraps around to a negative value.
I was curious about what happens, bit-wise, in this case. We are dealing with a signed integer, so I presume of the 33 bits in 2000**3, only 32 are kept: In [60]: len("{0:b}".format(1999**3)) Out [60]: 33 In [61]: "{0:b}".format(1999**3) Out [61]: '111011100000111110100110001101111' In [62]: "{0:b}".format(1999**3)[-32:] Out [62]: '11011100000111110100110001101111' The first of the 32 bits indicates sign, so converting back to integer would give: 1 * np.iinfo(np.int32).min + int('1011100000111110100110001101111', 2) == -601928593 Best regards, Stéfan