首页 > 试题广场 >

规格化float16浮点数,有1位符号位,5位阶码,10位尾

[问答题]
规格化float16浮点数,有1位符号位,5位阶码,10位尾数。请问fp16精确能表示数字 -2048和-2049么?fp16所表示的十进制数的有效数字大约是多少位?
f16的表示方式应该是(1+f)*(2^e-15),其中f为10位尾数除以2^10,e为阶码部分数值(正值)
则-2048为 1 11010 0000000000
它能表示的下一个数是 1 11010 0000000001 即-2050
有效位数应该为 1/2^10
发表于 2019-07-25 12:20:54 回复(0)
f16 表示,共 16 位 ,其中符号位 S (Sign)  1 ,阶码 E (Exponent) ,尾数 Sig (Significand) 10 

在浮点表示法中,需要注意区分以下几个概念:
1. : 真正得指数次幂,比如 2048 = 2^11,此时阶为 11 (十进制)
2. 阶码 E: 浮点数中表示阶的方法,用 移码(二进制) 表示,E = 阶 + 偏置
3. 偏置 Bias: IEEE 745 中偏置规定为 2^(E - 1) - 1。此处 2^(5-1) -1 = 15,Bias = 15
4. 尾数 Sig:原码表示,小数点之后的数字。注意: 规格化的表示中,小数点前的 1 默认存在,不包含在尾数表示中。(非规格化的表示中,小数点前的 0 默认存在,不包含在尾数表示中)

真值 =   (-1)^S *  (1+Sig)  *  2^(E - Bias)
-2048 =  (-1)^(1) * (1 + 0)   *   2^(26 - 15)

三部分组成浮点数的表示。对应可求得:
S = 1
E = 26 = 11010
Sig = 0000000000

-2048 的 fp16 浮点数表示为 
-2048 = 1 11010 0000000000

可得
-2048 的 “下个” 可表示的机器数为尾数加 1,即
1 11010 0000000001
尾数 sig = 0.00000000011 * 2^(-10) = 0.5*10
此时可得出浮点数表示得 分辨率为 0.5*10
带入上述真值公式求职得三部分可得

 (-1)^(1) *  1 + 0.5^10  *  2^(26 - 15) 
= -  ( 1 + 2^(-10) ) * 2^11
= -  (2048 + 2) 
= -2050

答案:
规格化 float16 浮点数可以表示 -2048,下一个可表示得数为 -2050,无法精确表示 -2049
fp16 所表示的十进制数的有效数字长度,即为分辨率 0.5^(尾数的位数),此题为 0.5^(10)

以下为 IEEE 754 单精度 float 32 的分析


编辑于 2020-09-11 16:02:01 回复(0)