从十进制转换为 IEEE 8 位浮点表示
Converting from decimal to IEEE 8-bit floating point representation
我对以下问题的回答与答案不同。问题:我们假设 IEEE 决定添加一个新的 8 位表示,其主要特征与 32/64 位表示一致。考虑以下四个 8 位数字:
甲:11100101
乙:00111001
C:00001100
D: 00011101
以上数字所代表的小数值如下,排名不分先后:3.125、-21、29/32、3/8。
Q1:29/32(A、B、C、D三选一)代表哪个8位浮点数?
A1:D
根据以上信息,得出以下结论:
Q2:指数所需的位数
A2:3
Q3:分数所需的位数:
A3: 4
我同意Q1的答案,但A2和A3的答案不同(A2:2和A3:5)
29/32 = 29 * 2 ^-5 => 二进制 11101 * 2^-5。如果我们移动小数点将其转换为二进制归一化形式:1.1101 * 2^-1。所以 Q1 的答案应该是以 1101 结尾的位模式,因此是 D。回答 Q2:如果答案是 3:0 001 1101,frac = 1101,exp = 001(归一化),bias = 3 => E = exp - 偏见; E = 1 - 3 = -2。如果我们将其全部转换回二进制规范化形式 (1.frac * 2^E),我们将得到:1.1101 * 2^-2 = 11101 * 2^-6 = 29/64(不是规定的 29/32最初)。但是,当我使用以下表示形式 0 00 11101:2 位用于 exp(偏差 = 2^1 - 1 = 1),5 位用于 frac 结果匹配。 exp = 00,因此使用非标准化符号(0.frac * 2^E,其中 E = (exp+1) - bias):E = 0+1-1=0 => 0.11101 * 2^0 = 11101 * 2^-5 = 29/32。我究竟做错了什么?谢谢!
−21 必须用 A,11100101 表示,因为这是唯一设置了符号位的一个。三个位用于指数编码,四个位用于主尾数编码,我们有一个指数偏差 3,所以 1102 = 6 表示指数 3,尾数为 0101字段表示1.01012 = 21/16,所以表示的值为−1 • 23 • 21/16 = −10½,即一半如我们所料,−21.
对于 B,我们有 00111001 → 0 011 1001 → +1 • 23−3 • 1.10012 → +1 • 1 • 25/16 = 1.5625,也是我们预期的一半,3.125.
对于 C,我们有 00001100 → 0 000 1100(次正规)→ +1 • 21−3 • 0.11002 → +1 • 2−2 • 12/16 = 3/16,这又是我们预期的一半,3/8.
所以很明显在构建问题时犯了一个错误;这些值使用 −4 的指数偏差,而不是 IEEE-754 模式中的 −3。 (或者犯了一个等效的错误,例如将带前导位的有效位放在小数点之后而不是之前。)
我对以下问题的回答与答案不同。问题:我们假设 IEEE 决定添加一个新的 8 位表示,其主要特征与 32/64 位表示一致。考虑以下四个 8 位数字:
甲:11100101 乙:00111001 C:00001100 D: 00011101
以上数字所代表的小数值如下,排名不分先后:3.125、-21、29/32、3/8。 Q1:29/32(A、B、C、D三选一)代表哪个8位浮点数? A1:D 根据以上信息,得出以下结论: Q2:指数所需的位数 A2:3 Q3:分数所需的位数: A3: 4
我同意Q1的答案,但A2和A3的答案不同(A2:2和A3:5) 29/32 = 29 * 2 ^-5 => 二进制 11101 * 2^-5。如果我们移动小数点将其转换为二进制归一化形式:1.1101 * 2^-1。所以 Q1 的答案应该是以 1101 结尾的位模式,因此是 D。回答 Q2:如果答案是 3:0 001 1101,frac = 1101,exp = 001(归一化),bias = 3 => E = exp - 偏见; E = 1 - 3 = -2。如果我们将其全部转换回二进制规范化形式 (1.frac * 2^E),我们将得到:1.1101 * 2^-2 = 11101 * 2^-6 = 29/64(不是规定的 29/32最初)。但是,当我使用以下表示形式 0 00 11101:2 位用于 exp(偏差 = 2^1 - 1 = 1),5 位用于 frac 结果匹配。 exp = 00,因此使用非标准化符号(0.frac * 2^E,其中 E = (exp+1) - bias):E = 0+1-1=0 => 0.11101 * 2^0 = 11101 * 2^-5 = 29/32。我究竟做错了什么?谢谢!
−21 必须用 A,11100101 表示,因为这是唯一设置了符号位的一个。三个位用于指数编码,四个位用于主尾数编码,我们有一个指数偏差 3,所以 1102 = 6 表示指数 3,尾数为 0101字段表示1.01012 = 21/16,所以表示的值为−1 • 23 • 21/16 = −10½,即一半如我们所料,−21.
对于 B,我们有 00111001 → 0 011 1001 → +1 • 23−3 • 1.10012 → +1 • 1 • 25/16 = 1.5625,也是我们预期的一半,3.125.
对于 C,我们有 00001100 → 0 000 1100(次正规)→ +1 • 21−3 • 0.11002 → +1 • 2−2 • 12/16 = 3/16,这又是我们预期的一半,3/8.
所以很明显在构建问题时犯了一个错误;这些值使用 −4 的指数偏差,而不是 IEEE-754 模式中的 −3。 (或者犯了一个等效的错误,例如将带前导位的有效位放在小数点之后而不是之前。)