Bootstrap

浮点数 IEEE754表示

1. a = m × b^e

m:尾数(即定点数) b:基数    e:阶码

2. 表示结构:

 

3. IEEE754单精度浮点数---->十进制(以float为例)

1)公式:

s阶符,E阶码,M尾数,对应位数:1+8+23

 2)例子1:41A4C000

step1: 转换成二进制:1000001101001001100000000000000 

step2: S=0,E=10000011=131,M=01001001100000000000000 

step3: 131-127=4,1.010010011右移4位--->10100.10011得到10100.10011=20.59375

step4: 20.59375 * 2^4

参考链接:【计算机组成原理】IEEE754单精度浮点数转十进制_哔哩哔哩_bilibili

4. 十进制 ----> IEEE754单精度浮点数格式(以float为例)

1)与上面的公式相反,阶码E要加上127

2)例子:263.3

step1:100000111.010011001...

step2:符号位为正数,S=0

step3:计算E, 100000111转换成1.M的形式得到1.M*2^8,127+8=135,转换成二进制10000111,则E=10000111

step4: 计算M,去掉1.M中的1,M=00000111010011001

step5: 得到0 10000111 00000111010011001

参考:【计算机组成原理】十进制转IEEE754单精度浮点数格式_哔哩哔哩_bilibili

5. python中的math.frexp:用于获取给定数字的尾数和指数

scalar = 2.3008604
flt_exponent0 = math.frexp(scalar)[0]
print(flt_exponent0)  # 尾数 0.5752151
flt_exponent = math.frexp(scalar)[1]
print(flt_exponent) # 阶码 2

注:math.frexp的尾数部分为0

step1:2.3008604转换成 IEEE 754标准十进制为: 1.1504302 * 2^1

step2:由于math.frexp指定尾部部分为0,所以尾数对应的二进制表示需要右移一位,对应阶码+1

step3:0.5752151* 2^2,即尾数为0.5752151,阶码为2

6.  python中的sys.float_info.mant_dig  浮点数的精度=53

参考链接:单精度与双精度是什么意思,有什么区别? - 知乎

【在线工具】

在线进制转换:在线进制转换-IEE754浮点数16进制转换

在线IEEE 754计算器:IEEE 754 Calculator

;