将该数字乘以2,取出整数部分作为二进制表示的第1位;然后再将小数部分乘以2,将得到的整数部分作为二进制表示的第2位;以此类推,直到小数部分为0。
0.7 * 2 = 1.4 ——————- 1
0.4 * 2 = 0.8 ——————- 0
0.8 * 2 = 1.6 ——————- 1
0.6 * 2 = 1.2 ——————- 1
0.2 * 2 = 0.4 ——————- 0
0.4 * 2 = 0.8 ——————- 0
0.8 * 2 = 1.6 ——————- 1
0.6 * 2 = 1.2 ——————- 1
0.2 * 2 = 0.4 ——————- 0
…………
0.
7
10
=
0.1011
0
˙
0
˙
1
˙
1
˙
2
0.7_{10}=0.1 0 1 1 \dot 0 \dot 0 \dot 1 \dot 1_{2}
0.710=0.10110˙0˙1˙1˙2
浮点数在计算机中表示
计算机内存是有限的,也就是说无法准确的表示无理数以及无限循环小数(可以用分数的形式来表示).
浮点的意思是小数点的位置是可以变化的
I E E E 浮 点 标 准 用 V = ( − 1 ) s × M × 2 E , 表 示 一 个 数 IEEE浮点标准用 V = (-1)^s \times M \times 2^E,表示一个数 IEEE浮点标准用V=(−1)s×M×2E,表示一个数
s:符号位
M:尾数
E:阶码
Bias:偏置值,用来计算阶码
B
i
a
s
=
2
e
x
p
位
数
−
1
−
1
Bias = 2^{exp位数 - 1} - 1
Bias=2exp位数−1−1,下面例子
B
i
a
s
=
2
2
−
1
−
1
=
1
Bias = 2 ^{2-1} - 1=1
Bias=22−1−1=1
假设浮点数只有5位(1位符号位,2位exp,2位尾数)
1 | 2 | 3 | 4 | 5 |
---|---|---|---|---|
s | 0 | 0 | 0 | 0 |
第1位 为符号位, 0 表示 +, 1 表示 -
第2-3位 为exp
第4-5位 为尾数(这是实际的数据,位数越多,越精确,这是罪恶之源)
float ,32位, 由 1位符号位 8位exp 23位尾数 组成
2
23
=
8
,
388
,
608
2^{23} = 8,388,608
223=8,388,608,所以最多只能精确表示7位的十进制
double, 64位, 由1位符号位 11位exp 52位尾数 组成
2
52
=
4
,
503
,
599
,
627
,
370
,
496
2^{52} = 4,503,599,627,370,496
252=4,503,599,627,370,496,所以最多只能精确表示16位的十进制
1.非规格化: 阶码全0
1 | 2 | 3 | 4 | 5 |
---|---|---|---|---|
s | 0 | 0 | x | x |
E
=
1
−
B
i
a
s
E = 1 - Bias
E=1−Bias
只有小数
2.规格化: exp在 全0 与 全1 之间(不包括全0,1)
E
=
e
−
B
i
a
s
E = e - Bias
E=e−Bias
隐含1
3.无穷大: exp全1,并且尾数全0
1 | 2 | 3 | 4 | 5 |
---|---|---|---|---|
s | 1 | 1 | 0 | 0 |
4.NaN:exp全1,并且尾数不全是0
下面是浮点数的计算
e: exp 对应的数值(无符号数)
f:小数值
1 | 2 | 3 | 4 | 5 | e | E | 2 E 2^E 2E | f | M | V | 十进制 |
---|---|---|---|---|---|---|---|---|---|---|---|
0 | 0 | 0 | 0 | 0 | 0 | 0 | 1 | 0 | 0 | 0 | 0 |
0 | 0 | 0 | 0 | 1 | 0 | 0 | 1 | 1 4 \cfrac{1}{4} 41 | 1 4 \cfrac{1}{4} 41 | 1 4 \cfrac{1}{4} 41 | 0.25 |
0 | 0 | 0 | 1 | 0 | 0 | 0 | 1 | 1 2 \cfrac{1}{2} 21 | 1 2 \cfrac{1}{2} 21 | 1 2 \cfrac{1}{2} 21 | 0.5 |
0 | 0 | 0 | 1 | 1 | 0 | 0 | 1 | 3 4 \cfrac{3}{4} 43 | 3 4 \cfrac{3}{4} 43 | 3 4 \cfrac{3}{4} 43 | 0.75 |
0 | 0 | 1 | 0 | 0 | 1 | 0 | 1 | 0 | 1 | 1 | 1 |
0 | 0 | 1 | 0 | 1 | 1 | 0 | 1 | 1 4 \cfrac{1}{4} 41 | 5 4 \cfrac{5}{4} 45 | 5 4 \cfrac{5}{4} 45 | 1.25 |
…