16進数の文字列で位置情報を取得しました。 IEEE-754プロトコルで浮動整数に変換する必要があります。指数が-127に達すると、Pythonで仮数を計算するには
だから所与進数のバイナリ表現から指数と仮数を計算し、数値の符号を見つけるために、このコードを書きました。
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
問題があります。 指数が-126より小さく、たとえば-127の場合、結果は正しくありません。私は結果を確認するfrom this address、符号と指数の結果は正しいが、仮数の結果は私のものとは異なります。
私はそのページが言っていることについて何か足りないのです:
結果を 指数は-127(バイナリ00000000)に達した場合は、仮数が1.0と2の間の値を持ち、大手1は、徐々にアンダーフローを可能にするために使用される ではなくなりました。
私は問題がここにある知っている任意の方法が、ため、私は私の不十分な英語で把握することはできません。
を。次に、あなたができることが分かります。 –