def WriteFloat(self, v):
if v < 0:
neg = (1 << 31)
v *= -1
else:
neg = 0
if v == 0:
e = 0
m = 0
else:
e = int(floor(log2(v/0x1000000))+1 + 150)
if e < 0 or e > 0xff:
print("float off range, assuming zero", file=sys.stderr)
e = 0
m = 0
elif e == 0:
e = e << 23
m = int(v / 2**(-150)) >> 1
else:
e = e << 23
m = int(v/2**(floor(log2(v/0x1000000))+1))
if m < 0x800000 or m >= 0x1000000:
raise ValueError('float dump: bad m value')
m &= 0x7fffff
self.writeDword(neg | e | m)
评论列表
文章目录