Steven D'Aprano wrote: > Mok-Kong Shen wrote: > >> >> I like to compute log base 2 of a fairly large integer n but >> with math.log(n,2) I got: >> >> OverflowError: long int too large to convert to float. >> >> Is there any feasible work-around for that? > > If you want the integer log2, that is, the floor of log2, the simplest way > is calculate it like this: > > def log2(n): > """Return the floor of log2(n).""" > if n <= 0: raise ValueError > i = -1 > while n: > n //= 2 > i += 1 > return i > > log2(511) > => returns 8 > log2(512) > => returns 9 > log2(513) > => returns 9
For base 2 there is also the bit_length() method: >>> 511 .bit_length() 9 >>> 512 .bit_length() 10 >>> 513 .bit_length() 10 -- https://mail.python.org/mailman/listinfo/python-list