IEEE754/854标准
发布网友
发布时间:2022-04-23 13:15
我来回答
共1个回答
热心网友
时间:2023-10-15 04:03
查到的IEEE754标准如下:
IEEE标准754规定了三种浮点数格式:单精度、双精度、扩展精度.本次只讨论前两种,浮点型的表示方法如下:
浮点数中尾数用原码或补码表示,阶码用补码或移码表示。 ★ 单精度:N共32位,其中S占1位,E占8位,M占23位。
★ 双精度:N共64位,其中S占1位,E占11位,M占52位。
******************规格化********************************
在浮点数中,为了在尾数中表示最多的有效数据位,同时使浮点数具有唯一的表示方式,浮点数的编码应当采用一定的规范,规定尾数部分用纯小数给出,而且尾数的绝对值应大于或等于1/R,并小于或等于1,即小数点后的第一位不为零。这种表示的规范称为浮点数的规格化的表示方法。不符合这种规定的数据课通过修改阶码并同时移动尾数的方法使其满足这种规范。
浮点数的规格化形式:
浮点数都是近似表示的,精度由尾数决定,数的表示范围大小由R、E决定。为了提高精度需要使尾数的有效位数尽可能占满可用的位数。这种措施称为浮点数的规格化。规格化要求尾数: 1/R<=|M|<1 将一个浮点数转换为规格化的过程,称为浮点数规格化。
右规:尾数右移一位,阶码+1
左规:尾数左移一位,阶码-1
注:隐藏位 对于规格化浮点数小数点后第一个值是固定的(正数:1,负数:原码1,补码0),所以该位往往缺省,称为隐藏位。
写如下程序:
验证float型时 因为在VC里int 和float 都是4个字节 所以可以按上面的方式读取:
#include<stdio.h>
void main()
{
float a;
Scanf("%d",&a);
int *p;
p=(int*)&a;
printf("%x\n",*p);
}
输入—0.25二进制为-0.01,表示为-1*2-2验证,输出be800000,转化成2进制为:
1 01111101 00000000000000000000000
第一部分1表示负,第二部分01111101阶码-2是用移码表示的,11111110+0111111=01111101
第三部分 因为有隐藏位 1+00000000000000000000000=1
正确
浮点型的表示范围是-3.4*10-38到3.4*1038输入3.5*1038 得出的结果是7f80000,
输入其他的的超过范围的数 得出的结果都是7f800000 换成二进制是0111111110000000000000000000000,根据规则
则为无穷大 正确