29 Jul
2013
29 Jul
'13
5:43 p.m.
I was playing with this simple function to compute uint/3. It does not (afaict) directly allocate any memory, but when run it rapidly consumes all memory (32GB): def divu3(n): q = (n >> 2) + (n >> 4) # q = n*0.0101 (approx). q = q + (q >> 4) # q = n*0.01010101. q = q + (q >> 8) # q = n*0.01010101. q = q + (q >> 16) # q = n*0.01010101. r = n - q*3 # 0 <= r <= 15. return q + (11*r >> 5) # Returning q + r/3. for i in range(2**31): assert(divu3(i) == i/3) Python 2.7.3 (daf1b0412bfbd0666c19d567e37b29e4a3be5734, Jul 12 2013, 19:10:57) [PyPy 2.1.0-beta1 with GCC 4.7.2] on linux2 is it being over eager to specialise? njh