假设浮点表示仅限 7 位:1 个符号位、3 个指数位和 3 个小数位。
首先我将
3/32
转换为二进制 0.00011
,1.1 * 2^(-4)
。
此时我意识到我的指数字段将是
-1
,这是无效的。3/32
表示为 0.11 * 2^(-3)
,这样可以更直观地表示 1 000 110
。-3/16
。
我的问题是:是否有可能在问题的约束范围内精确地表示这个值?
看起来这个方案的最小可表示值是
-15
,所以-3/32
落在这个区间内。使用 1 个符号、3 个指数和 3 个有效位,遵循 IEEE 规则,以下是可以表示的最小有限值:
Bits | Decimal Value
-----------+----------------
0b0000000 | 0
0b0000001 | 0.0312
0b0000010 | 0.0625
0b0000011 | 0.0938
您要查找的值
3/32
等于 0.09375
。从上表可以看出,它并不能完全代表。对于通常的最接近偶数舍入,最好的选择是将其表示为位模式 0b0000011
,误差为 0.00005
。
最接近值的精确表示是:
ENCODED = 0.0938 :: FloatingPoint 3 4
6 543 210
S E3- S3-
Binary layout: 0 000 011
Hex layout: 03
Precision: 3 exponent bits, 3 significand bits
Sign: Positive
Exponent: -2 (Subnormal, with fixed exponent value. Stored: 0, Bias: 3)
Classification: FP_SUBNORMAL
Binary: 0b1.1p-4
Octal: 0o6p-6
Decimal: 0.0938
Hex: 0x1.8p-4