浮点数格式以及非规则化格式
浮点数格式网上介绍很多, 基本都是规格化的方式, 非规则化很少有具体的描述
浮点存储格式
typedef struct _FLOAT_BIN
{
uint32 m : 23;
uint32 e : 8;
int s : 1;
}FLOAT_BIN;
当e为0时为非规格化, e为最大值时为无穷大(小)
其他为规格化
规格化的算术方式为: (1.0+m)*pow(2, e-127)
非规格化时算术方式为: (m)*pow(2, -126)
测试代码如下:(未处理无穷大小)
static BOOL GetFloatInfo(float fValue)
{
FLOAT_BIN dat;
float fCheck;
double m, ck;
int e;
dat = *(FLOAT_BIN *)&fValue;
m = (double)dat.m / ((1<<23));
if(dat.e)
{
e = dat.e - 127;
ck = ((1.0+m) * pow(2.0, e));
fCheck = (float)(dat.s ? -ck : ck);
}
else
{
e = -126;
ck = ((m) * pow(2.0, e));
fCheck = (float)(dat.s ? -ck : ck);
}
return TRUE;
}

浙公网安备 33010602011771号