Name: Anonymous 2018-10-20 0:57
Is there any simpler way to write log2?
def log2y(y,d=30):
if d < 1: return 0
z = y
m = 0
while z<2:
z *= z
m += 1
m1 = 1.0/(1<<m)
return m1 + m1*log2y(z/2,d-1)
def log2(x):
n = 0
t = x
while t>0: #count used bits
n += 1
t >>= 1
if x == 1<<n: return n
n -= 1
y = float(x)/(1<<n) #remove integer multiplier
z = log2y(y) #calculate fraction part
return n + z
def exp2(x):
if x == 0: return 1
p = int(x)
p0 = 1<<p
p1 = 1<<(p+1)
return p0 | int((p1-p0)*(x-p))