相关疑难解决方法(0)

32位至16位浮点转换

我需要一个跨平台的库/算法,它将在32位和16位浮点数之间进行转换.我不需要使用16位数进行数学运算; 我只需要减小32位浮点数的大小,以便它们可以通过网络发送.我在C++工作.

我理解我会失去多少精确度,但这对我的应用来说是可以的.

IEEE 16位格式会很棒.

c++ networking ieee-754

37
推荐指数
6
解决办法
6万
查看次数

Float32到Float16

有人可以向我解释如何将32位浮点值转换为16位浮点值吗?

(s =符号e =指数,m =尾数)

如果32位浮点数是1s7e24m
而16位浮点数是1s5e10m

那么这么简单吗?

int     fltInt32;
short   fltInt16;
memcpy( &fltInt32, &flt, sizeof( float ) );

fltInt16 = (fltInt32 & 0x00FFFFFF) >> 14;
fltInt16 |= ((fltInt32 & 0x7f000000) >> 26) << 10;
fltInt16 |= ((fltInt32 & 0x80000000) >> 16);
Run Code Online (Sandbox Code Playgroud)

我假设它不是那么简单......所以有人能告诉我你需要做什么吗?

编辑:我看到我的指针转移错误了...所以这会更好吗?

fltInt16 =  (fltInt32 & 0x007FFFFF) >> 13;
fltInt16 |= (fltInt32 & 0x7c000000) >> 13;
fltInt16 |= (fltInt32 & 0x80000000) >> 16;
Run Code Online (Sandbox Code Playgroud)

我希望这是正确的.如果我遗漏了一些明显的话,我会道歉.它在星期五晚上几乎是午夜......所以我不是"完全"清醒;)

编辑2:哎呀.又把它弄错了.我想失去前3位而不是更低!那怎么样:

fltInt16 =  (fltInt32 & 0x007FFFFF) >> 13;
fltInt16 |= (fltInt32 & 0x0f800000) >> …
Run Code Online (Sandbox Code Playgroud)

c floating-point

8
推荐指数
2
解决办法
1万
查看次数

标签 统计

c ×1

c++ ×1

floating-point ×1

ieee-754 ×1

networking ×1