根据我所知的双(IEEE标准),有一位用于signus,54位用于尾数,一个基数和一些位用于指数
获得双倍的公式是:(−1)^s × c × b^q
也许我犯了一些错误,但这个想法就在这里。
我只是想知道如何知道在这个公式中放置小数点的位置。 如果我拿号码,我会得到例如:
m = 3
q = 4
s = 2
b = 2
(-1)^2 * 4 * 2^3 = 32
但我不知道在哪里放点基数..
这里有什么问题?
编辑:
也许q总是负面的?
答案 0 :(得分:2)
我想看看维基百科会有所帮助。
事情是,有一个“隐藏的”'1'。在IEEE公式中。
必须对每个IEEE 754号码进行规范化,这意味着编码的数字采用以下格式:
(-1)^(sign) * '1.' (mantissa) * 2^(exponent)
因此,您编码的是1.32,而不是32。
答案 1 :(得分:1)
32 = 1 * 2 ^ 5,因此尾数= 1,指数= 5,符号= 0。在编码指数时我们需要向指数添加1023,所以下面我们有1023 + 5 = 1028。我们还需要在编码尾数时删除数字1,这样1.(无论如何)变成(无论如何)
32位为64位双精度的十六进制表示为4040000000000000,或二进制:
0100 0000 0100 0000 0000 ... and zeros all the way down
^======== start of mantissa (coded 0, interpreted 1.0)
^===========^---------- exponent (coded 1028, interpreted 5)
^----------------------- sign (0)
要验证结果,请访问此page,在第一个字段中输入32,然后单击“圆角”或“未圆角”按钮(无关紧要)。