16位浮点数
来源:互联网 发布:天猫推荐算法大赛 编辑:程序博客网 时间:2024/05/17 09:21
地球人都知道现在的dx内部都开始支持16位的浮点了, also known as float16(half)
这种类型本身并不是标准IEEE里的,不同的平台也有不同的实现方法。
就偶这几天hardcore Xenon的程序来看,dx内部的16位float结构如下:
|0100 0010 0010 0100|
s
|exp|
| mantissa |
假设0100 0010 0010 0100是一个16位的浮点数,那么从高位的第一位仍然是sign位
然后有4位的exp和11位的mantissa。
4位的exp是直接截低4位就ok了
mantissa则是截高11位,这点需要注意,模拟的c/c++ code如下:
u16 tofloat16(float f)
{
u32 *i = (u32 *)&f;
u32 sign = (*i >> 31) & 0x1;
u32 exponent = ((*i >> 23) & 0xff) - 0x7f;
u32 mantissa = (*i) & 0x7fffff;
exponent += 0x7;
u16 ret = ((sign & 0x1) << 15);
ret |= (exponent & 0xf) << 11;
ret |= (mantissa >> 13) & 0x7ff;
return ret;
}
这种类型本身并不是标准IEEE里的,不同的平台也有不同的实现方法。
就偶这几天hardcore Xenon的程序来看,dx内部的16位float结构如下:
|0100 0010 0010 0100|
s
|exp|
| mantissa |
假设0100 0010 0010 0100是一个16位的浮点数,那么从高位的第一位仍然是sign位
然后有4位的exp和11位的mantissa。
4位的exp是直接截低4位就ok了
mantissa则是截高11位,这点需要注意,模拟的c/c++ code如下:
u16 tofloat16(float f)
{
u32 *i = (u32 *)&f;
u32 sign = (*i >> 31) & 0x1;
u32 exponent = ((*i >> 23) & 0xff) - 0x7f;
u32 mantissa = (*i) & 0x7fffff;
exponent += 0x7;
u16 ret = ((sign & 0x1) << 15);
ret |= (exponent & 0xf) << 11;
ret |= (mantissa >> 13) & 0x7ff;
return ret;
}
u32 tofloat32(u16 f)
{
u16 *i = (u16 *)&f;
u32 sign = (*i >> 15) & 0x1;
u32 exponent = ((*i >> 11) & 0xf) - 0x7;
u32 mantissa = (*i) & 0x7ff;
exponent += 0x7f;
u32 ret = ((sign & 0x1) << 31);
ret |= (exponent & 0xff) << 23;
ret |= (mantissa << 13) & 0x7fffff;
return ret;
}
- 16位浮点数
- 浮点数,编译器位扩展
- ModelBus协议中使用16位传输float浮点数
- 浮点数保留小数后2位
- 深入理解浮点数有效位
- 浮点数四舍五入保留2位小数
- java modbus 32位浮点数解析
- Guess(精确2位浮点数)
- 保留浮点数的两位小数点
- 浮点数保留两位小数
- 32位浮点数转十进制
- 32位短浮点数计算
- 16进制转浮点数
- 浮点数(单精度、双精度数)的有效位
- 发挥缓存的威力,提高代码效率,及如何实现16位浮点数
- IEEE 754 16进制编码转为64位双精度浮点数
- 16进制浮点数
- 浮点数相等比较和64位整数
- 批处理启动服务
- 能力越强,责任越重!——朱学恒和他主持的OOPS计划!
- 买了个游戏手柄
- 五元钱查一次身份证可以,错就错在"垄断"上面
- 業务QQ,謝絶閑聊.若要强聊,每字六毛
- 16位浮点数
- 博客技巧---在首页头部加上自己banner的方法
- linux0.11源码学习
- 在网站开发中经常用到的javascript技术
- vi简单命令
- 该怎样去读历史
- 图形化组件JGraph
- 双核技术资料
- 如何使表单中输入的数据居右