IEEE754 FP16

. 实数的表达方法

1.定点数表示法

<整数部分>.<小数部分>

例.  666.66

2.浮点数表示法

  1. 科学计数法:有效数字+基数(base+指数(exponent+正负符号位

规范化表示:±d.ddd*β^e0<=di<=β

例. β=10, d范围[0,9]; β=2, d范围[0,1]

(1001.101)2 = 1*2^3+0*2^2+…+ 1*2^(-1) + 0*2^(-2) + 1*2^(-3) = 9.625

. IEEE754标准的浮点表示法

V = (-1)s × M × 2E

1. 符号位(sign)s

s决定该数是正数(s=0)还是负数(s=1),十进制数0特殊处理

2. 阶码(exponent)

E = e- bias, 15的偏差值

(1)可表示的数据量:2^5=32

(2)表示范围:规格化数据(normal data,E不全为0或者1, 1111100000有其他含义

max_e = 11110 -01111 = 15

min_e = 00001 -01111 = -14

3. 尾数(significand)M

M是一个二进制小数,normal data中有一个隐含的1 1.xxxxx)—— M=1+ M

min_M = 0000 0000 01 = 1 + 2^(-10) = 1.000976525

max_M = 1111 1111 11 = 1 0000 0000 00 – 0000 0000 01 = 1 + 2 ^0 -2^(-10) = 1.9990234375

三.数据表示范围(举例正数范围)

  1. normal value 规格化数
    E不全为0或者1M任意。

    E15M= max S=0
    --> 
    0 11110 1111111111 = -1)^0 * 2^15 * (1 + 1 - 2^-10) = 65504 (FP16 最大值)

    E = -14M = 0 (min), S = 0
    -->
     0 00001 0000000000 = -1)^0 * 2^-14 * (1 +  0) = 2^-14 6.104 E-5 (最小正规格化数)
     
  2. Subnormal value 非规格化数
    E = 00000, M不全为0时,表示subnormal value, 是非常小的数,表示接近0的数。

    E=1-15=-14, 而不是0-15,原因:为了平滑过渡,通过增加1可以弥补subnormal value最高位没有的1,此时小数域最高不是1而是0

    -->  0 00000 0000000001 = -1)^0 * 2^-14 * (0 + 2^-10)  = 2^-24  5.96E-8
     

  3. 0 00000 0000000000 = -1)^0 * 2^-14 * (0 + 0)  = +0
    1 00000 0000000000 = -0
     
  4. 无穷大
    E=11111M全为0
    0 11111 0000000000 = +inf
    1 11111 0000000000 = -inf
     
  5. NaNnot a number 非数值型
    E=11111M不全为0

 四.浮点数舍入方式

结论:浮点数并不能表示所有的实数

比如十进制的2.1没有完全对应的二进制数,浮点数只能近似的表示一些实数,为了尽量精确的表示这个实数就只能尽量增加二进制的位数,但是数据类型的位数是有限的

IEEE浮点格式定义了多种的舍入方式,如:

方式

解释

-2.50

-1.50

1.50

2.50

1.6

1.4

Round half to even

默认模式, 与我们熟悉的“四舍五入”比较的不同只有:对.5的舍入,采用取偶数的方式

-2

-2

2

2

2

1

Round toward 0(截断)

C/C++的类型转换

-2

-1

1

2

1

1

Round toward -

(向下舍入)

C/C++函数floor()

-3

-2

1

2

1

1

Round toward +

(向上舍入)

C/C++函数ceil()

-2

-1

2

3

2

2

猜你喜欢

转载自blog.csdn.net/zmj1582188592/article/details/133904903
今日推荐