IEEE754二进制浮点数计算
IEEE754协议定义
IEEE二进制浮点数算术标准(IEEE 754)是20世纪80年代以来最广泛使用的浮点数运算标准,为许多CPU与浮点运算器所采用。这个标准定义了表示浮点数的格式(包括负零-0)与反常值(denormal number)),一些特殊数值(无穷(Inf)与非数值(NaN)),以及这些数值的“浮点数运算符”;它也指明了四种数值舍入规则和五种例外状况(包括例外发生的时机与处理方式)(文本来自百度百科)
IEEE754计算过程
一个浮点数 (Value) 的表示其实可以这样表示:
value=Sign * Exponent * Fraction
也就是浮点数的实际值,等于符号位(sign bit)乘以指数偏移值(exponent bias)再乘以分数值(fraction)。
计算公式如下所示:
(-1)S x 1.M0M1M2…M22 x 2N
以下内容是C/C++语言实现的过程(非科班,语言功底较差,勿喷。如有问题联系邮箱:309234310@qq.com)
/*
* 函数名称: Float_IEEE754(unsigned char* Inputdata)
* 函数功能:单精度浮点数IEEE754转换协议
* 输入参数:Inputdata[]需要转换的数据
* 输出参数:Outdata 转换后的数据
* 修改时间:
*/
float Float_IEEE754(unsigned char* Inputdata)
{
unsigned char s = 0;//符号位
short e = 0;//指数位
int m = 0;//尾数
float tmp = 0;//不带正负号的数据
float tmpz = 0;//整数部分
float tmpf = 0;//负数部分
int count = 0;
int cntz = 0;
//int cntzf = 0;
//int flag = 0;
unsigned int i = 0;
float Outdata = 0;
if(0x80 == (Inputdata[0]&0x80))
{
s = 1;
}
else
{
s = 0;
}
e = (((Inputdata[0]&0x7F)<<8)+(Inputdata[1]&0x80))>>7;//获取指数位(2-9位)
e = e - 127;
m = ((Inputdata[1]&0x7F)<<16)+(Inputdata[2]<<8)+Inputdata[3];//尾数(10-31)
//tmp = pow(2.0,e);
if(e<0)
{
//指数为负数时
count = -e;
tmpf += 1.0/pow(2.0,count);
for(i = 0; i < 23; i++)
{
count++;
if(0 != (m&