IEEE浮点数表示

IEEE浮点数表达法,很久没用,忘了差不多了,重新翻开工具书看看,

整理一下浮点数计算及表示方法.


表达式 V=(-1)s x M x 2 E

S为符号位,决定数值正负

M(尾数significand)为二进制小数

E(阶码exponent)对浮点数进行加权。

 

exp=(ek-1 ek-2 ek-3e1e0 )2

frac=(fk-1 fk-2 fk-3f1f0)2

 

floatdouble在内存分布如下:

 

float

31     30         23  22                                                 0                        

s        

exp             

frac                                                 

 

double

63    62            52 51                                                 32                        

s       

exp              

frac                                                  

31                                                                          0

frac                                                                                 

 

 

E= exp-biasbias=2k-1 – 1, k exp位数,floatdouble来说就是个常量,floatbias

28-1 – 1=127

 

M=1+0.frac=1+0. fk-1 fk-2fk-3f1f0

 

以12.625为例

转成二进制数

1100.1011x23+1x22+0x21+0x20+1x2-1+0x2-2+1x2-3= (1)0X1.100101X23

对比公式V=(-1)s x M x 2 E

得到S=0,

得到M=1.100101,则frac=(100101)2

得到权重E=3,则exp=E+bias=3+127=130=(1000 0010) 2

 

单精度float表示为

s exp    flac  

0 10000010 100101 0 00000000 00000000

内存分布

0x00 0x00 0x4A 0x41


程序验证 正确。


特殊情况:

当exp位全为0时,阶码值E=1-bias,而尾数M=frac,不包含前面1的值

当exp位全为1时,得到的值表示无穷



参考资料 《深入理解计算机系统》

你可能感兴趣的:(C/C++)