【发布时间】:2016-04-19 08:51:12
【问题描述】:
我有一个十六进制字符串的位置信息。我需要通过 IEEE-754 协议将其转换为浮点整数。
所以我写了这段代码来找到数字的符号,从给定的十六进制数字的二进制表示中计算指数和尾数。
def _calculte_mantissa(bin_number):
val = 1
bit_count = -1
bit_length = 0
while bit_length <= 22:
print bit_count, bit_length
val += int(bin_number[bit_length]) * 2**bit_count
bit_count -= 1
bit_length += 1
print val
return val
def convert_position(pos):
bin_pos = format(int(pos, 16), "0>32b")
sign = (-1)**int(bin_pos[0], 2)
exponent = int(bin_pos[1:9], 2) - 127
mantissa = _calculte_mantissa(bin_pos[9:])
position = sign * 2**exponent * mantissa
return position
问题是;如果 exponent 小于 -126,比如 -127,则结果不正确。我检查结果from this address,符号和指数结果是正确的,但尾数结果与我的不同。
我错过了该页面所说的内容:
因此,尾数的值介于 1.0 和 2 之间。如果 指数达到-127(二进制00000000),前导1不再是 用于启用逐渐下溢。
不管怎样,我知道问题出在这里,但是因为我的英语不够,我想不通。
【问题讨论】:
-
阅读一点关于 IEEE754 和非规范化值的信息。然后你会看到你能做什么。
标签: python floating-point ieee-754 exponent