跳转到主要内容

浮点数基础

作者:lee

浮点数,是属于有理数中某特定子集的数的数字表示,在计算机中用以近似表示任意某个实数。具体的说,这个实数由一个整数或定点数(即尾数)乘以某个基数(计算机中通常是2)的整数次幂得到,这种表示方法类似于基数为10的科学计数法。

<font size="4" color="red" style="line-height: 45px;"><strong>1 、浮点数基础知识</strong></font>

<center><img src="http://xilinx.eetrend.com/files/2020-02/wen_zhang_/100047585-90295-1.pn…; alt=""></center><br>

浮点数由四部分构成:符号位(Sign Bit)、尾数(Mantissa)、基数(Radix)和指数(Exponent)。根据《IEEE Standard 754 for Binary Floating-Point Arithmetic》的定义–二进制标准浮点数,基数为2。s、m、e分别为符号数、尾数和指数,n为相应的浮点数值。

<center><img src="http://xilinx.eetrend.com/files/2020-02/wen_zhang_/100047585-90296-2.pn…; alt=""></center><br>

IEEE-754规定了三种浮点数:单精度(float)、双精度(double)和扩展精度。

其中单精度为32bit,其中包含1位符号位S,8位指数位E和23位尾数位M。S、E、M为相应的二进制序列。

<center><img src="http://xilinx.eetrend.com/files/2020-02/wen_zhang_/100047585-90297-3.pn…; alt=""></center><br>

S:
正数 0.1xxxxxx
负数 1.1xxxxxx

M:
表示小数点之后的二进制尾数。
M为0110表示:二进制.0110

E:
规格化(normalized)
非规格化(denormalized)

<font size="4" color="red" style="line-height: 45px;"><strong>2 、规格化浮点数</strong></font>

E表示的二进制不全为0也不全为1时该浮点数为规格化浮点数。

<center><img src="http://xilinx.eetrend.com/files/2020-02/wen_zhang_/100047585-90298-4.pn…; alt=""></center><br>

e表示偏置(Biased)
|E|表示E的二进制整数
bias表示偏置
k为指数位宽

对于单精度浮点数来说k为8,所以bias为127。E="10001000"为例,|E|=136,故e为9。

对于规格化浮点数,标准规定尾数位小数点左侧的隐含位为1,所以:

m = |1.M|

例如M="10010…0"则1.M="1.10010…0"所以m=1.5625

<center><img src="http://xilinx.eetrend.com/files/2020-02/wen_zhang_/100047585-90299-5.pn…; alt=""></center><br>

s=0
m = 1.5625
e =9
n =55.5112

单精度浮点数的公式可表示为:

<center><img src="http://xilinx.eetrend.com/files/2020-02/wen_zhang_/100047585-90300-6.pn…; alt=""></center><br>

<font size="4" color="red" style="line-height: 45px;"><strong>3、非规格化浮点数</strong></font>

E的二进制位全为0时该浮点数为非规格化浮点数。
bias=127

<center><img src="http://xilinx.eetrend.com/files/2020-02/wen_zhang_/100047585-90301-7.pn…; alt=""></center><br>

单精度非规格化浮点数公式:

<center><img src="http://xilinx.eetrend.com/files/2020-02/wen_zhang_/100047585-90302-8.pn…; alt=""></center><br>

-0.0 符号位为1,其余位为0.
+0.0全部为0.

<font size="4" color="red" style="line-height: 45px;"><strong>4、特殊数值</strong></font>

E的二进制位全为1时为特殊数值。
M全0,n无穷大
M全1,S为1,n负无穷大
M全1,S为0,n正无穷大
M不全为0和1,n NaN(Not a Number)

<center><img width="600" src="http://xilinx.eetrend.com/files/2020-02/wen_zhang_/100047585-90303-9.pn…; alt=""></center><br>

<font size="4" color="red" style="line-height: 45px;"><strong>5 、双精度浮点数</strong></font>

IEEE-754定义双精度浮点数共64bit 。1位符号位S,11位指数位E和52位尾数位M。同样可以划分为规格化、非规格化和特殊数值。

<center><img src="http://xilinx.eetrend.com/files/2020-02/wen_zhang_/100047585-90304-10.p…; alt=""></center>
<center><img width="600" src="http://xilinx.eetrend.com/files/2020-02/wen_zhang_/100047585-90305-11.p…; alt=""></center><br>

文章转载自: <a href="https://mp.weixin.qq.com/s/d6IFgRWjgAcT8GR09v8BMQ">FPGA开源工作室</a&gt;(leezym0317)
*本文由作者授权转发,如需转载请联系作者本人