浮点数格式以及非规则化格式

浮点数格式网上介绍很多, 基本都是规格化的方式, 非规则化很少有具体的描述

浮点存储格式

	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;
	}
posted @ 2022-05-03 13:32  Yofoo  阅读(167)  评论(0)    收藏  举报