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

Half是用16位表示浮点数的一种数据类型,在IEEE 754中也有规定,这种数据类型在深度学习系统中的应用比较广泛。但是在当前主流cpu上,不支持half类型数据的计算和输出,所以需要half和float两个数据类型之间的转换。
图1是16位浮点表示的标准,其中包括了1个符号位,5个指数位和10个尾数位。对于正常的数值,其结果如下表示。
                                                         half和float两种数据类型之间的转换_github

              half和float两种数据类型之间的转换_github_02
图2是32位浮点数表示的标准,其中包括1个符号位,8个指数位和23个尾数位。对于正常的数值,其结果如下表示。
                                                     half和float两种数据类型之间的转换_浮点数_03

       half和float两种数据类型之间的转换_数据类型_04
所以对于half和float之间的转换,除了不同部分的移位之外,还要做注意指数的基数之间的差别(15和127)。例如,要把half类型转换为float类型,主要进行以下几步操作。

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

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