浮点数计算

发布时间 2023-06-20 11:47:51作者: 随风而释

根据FPGA IP核手册32位浮点数的格式,1bit符号位+8位指数位+24位小数位。

仿真显示数值为32'h4098c49c,那么该浮点数的值是4.774,换算过程如下:

32'h4098c49c ==>32'b 0, 100 0000 1, 001 1000 1100 0100 1001 1100

///////////////////////////s,  e7............e0/////////////////////////////////////////////

////////////////////////////////////////b0,b1...........................................bf-1////

逗号分隔了符号位,指数位,小数位三个部分。其中小数部分的b0与指数部分的e0是重合的。

e = (2^7 + 2^0) =129(指数部分的第0位和第7位是1,左边是e7,右边是e0)

E=e-(2^7 -1)=2(指数部分的宽度是8,所以此处是7)

小数部分:F = b0.b1b2...bf-1=1*2^0 +1*2^(-3) + 1*2^(-4) + 1*2^(-8) +  1*2^(-9) + 1*2^(-13) + 1*2^(-16) + 1*2^(-19) + 1*2^(-20) + 1*2^(-21) =1.1935(逗号左边是b0,往右依次是b1....bf-1)

最终值:(-1)^s * 2^E * F = 1 * 4 * 1.1935 = 4.774;

反过来说,一个浮点数,首先除以2的E次方,得到小数部分。然后把E进行移码得到e,小数部分乘以2的f次方,得到b0--bf-1,f是小数部分位宽;