half和float两种数据类型之间的转换

half和float两种数据类型之间的转换

Half是用16位表示浮点数的一种数据类型,在IEEE 754中也有规定,这种数据类型在深度学习系统中的应用比较广泛。但是在当前主流cpu上,不支持half类型数据的计算和输出,所以需要half和float两个数据类型之间的转换。
图1是16位浮点表示的标准,其中包括了1个符号位,5个指数位和10个尾数位。对于正常的数值,其结果如下表示。
val=(1)s2e151.m v a l = ( − 1 ) s ∗ 2 e − 15 ∗ 1. m
这里写图片描述
图2是32位浮点数表示的标准,其中包括1个符号位,8个指数位和23个尾数位。对于正常的数值,其结果如下表示。
val=(1)s2e1271.m v a l = ( − 1 ) s ∗ 2 e − 127 ∗ 1. m
这里写图片描述
所以对于half和float之间的转换,除了不同部分的移位之外,还要做注意指数的基数之间的差别(15和127)。例如,要把half类型转换为float类型,主要进行以下几步操作。

  • 符号位左移16位。
  • 指数部分加112(127与15之间的差距),左移13位(右对齐)。
  • 尾数部分左移13位(左对齐)。

Float转换为half的步骤与之相反,不再赘述。
代码可以参考我的github。
https://github.com/ma-xiaodong/float_half_convertion
或者博客右侧github导航。

你可能感兴趣的:(算法,深度学习,半精度,half,浮点,float)