请教一下大佬们

qq_44945146 2019-04-29 01:35:34
2ˉ2^-23是什么意思,是怎么算出来是这个试子的?
...全文
473 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
tongshou 2019-04-29
  • 打赏
  • 举报
回复
不好意思,上面程序有点错(少了 .s),改造如下:

比如:
double r = 3.14159;
union U;
U.v = r;
U.s.exponent -= 1; // 相当于 除 2 (移1 位)
U.s.exponent -= 3; // 相当于 除 8 (移3 位)
r = U.v;
tongshou 2019-04-29
  • 打赏
  • 举报
回复

union u_double
{
double v;
struct {
unsigned mantissa2 : 32;
unsigned mantissa1 : 20;
unsigned exponent : 11;
unsigned sign : 1;
} s;
};


union u_float
{
float v;
struct {
unsigned mantissa : 23;
unsigned exponent : 8;
unsigned sign : 1;
} s;
};




双精度浮点数double、和单精度浮点数float 可以用上面结构表示。

基于该结构,这类型的数据甚至可以 进行类似 整数的移位运算:

比如:
double r = 3.14159;
union U;
U.v = r;
U.exponent -= 1; // 相当于 除 2 (移1 位)
U.exponent -= 3; // 相当于 除 8 (移3 位)
r = U.v;

除法耗时间,该移位操作非常快速。




GarfieldGCat 2019-04-29
  • 打赏
  • 举报
回复
根据IEEE754标准,单精度浮点数尾数共23位,并约定前一定隐含"1."开头的二进制值,尾数第n位表示2^(-n),第23位能表示的值为2^(-23),因此尾数表示范围为1≤m≤2-2^(-23),一般表述为<2即可。 可以看看 数据表示方式

33,311

社区成员

发帖
与我相关
我的任务
社区描述
C/C++ 新手乐园
社区管理员
  • 新手乐园社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧