浮点数阶码表示范围_IEEE浮点表示

IEEE浮点标准用

的形式来表示一个数,符号s,尾数M,阶码E

C语言中,单精度(float)的s为1b,E为8b,M为23b,双精度(double)的s为1b,E为11b,M为52b。

浮点数分类

2a9a86f3ceb3df7de5cbf28c8765440b.png

规格化的值

exp的位模式(E的位模式)既不全为0(数值0),也不全为1(float为255,double为2047)

阶码的值E=e-Bias,e是无符号数,Bias为偏置值,等于

(float为127,double为1023),由此产生指数的取值范围,对于单精度是[-126,+127],双精度是[-1022,+1023]

小数frac的位模式(M的位模式)描述小数f,尾数M=1+f,尾数M在范围1≤M<2之中

非规格化的值

阶码域全为0

阶码值E=1-Bias(float为-126,double为-1022),尾数M=f

阶码定义为1-Bias,而不是定义为直观的-Bias,这样做是为了使得数值从非规格化到规格化的平滑过渡,如下图右侧蓝色圈中所示。

e6f7a8d3dd2619f1a7f17a876b82d67e.png

非规格值可以用来表示0(有+0.0和-0.0的区别)和接近于0.0的值

特殊值

阶码全为1

(1)当小数域全为0时,表示无穷,当s=0时是+∞,当s=1时是-∞,无穷能表示溢出的结果

(2)当小数域为非0时,表示NaN,即不是一个数(Not a Number)

数字示例

e1a0b3c8517b45d05f3374a9870eca77.png
一些重要的单精度和双精度浮点数的表示和数字值

十进制数12345具有二进制[0011 0000 0011 1001](0x3039),通过将二进制小数点左移13位,得到这个数的一个规格化表示

,为了使用IEEE单精度(float)形式来编码,我们丢弃开头的1,并且在末尾增加10个0(单精度的尾数位23位,13+10=23),来构造小数字段,得到二进制[1000000111001
0000000000],为了得到阶码字段,将13加上偏置量127,得到140,二进制表示为[10001100],加上符号位0,得到12345.0的二进制浮点数[0100 0110 0100 0000 1110 0100 0000 0000](0x4640E400),比较整数12345(0x3039)和浮点数12345.0(0x4640E400)的位级表示:

(0x00003039)00000000000000000011000000111001

(0x4640E400)01000110010000001110010000000000

注意到,整数的最高有效位1以外,其余位都在浮点数中,且和浮点表示的小数段高位相匹配。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值