CSAPP Lecture 03 - Float Point
Lecture 03 - Float Point
课件:https://www.jianguoyun.com/p/DZjK46sQjqmrChjfgrIE
视频:https://www.bilibili.com/video/BV1iW411d7hd?p=4
和定点数不同,浮点数的最大特点是有小数点,怎么来表示这个小数点呢?
1. 浮点数标准:IEEE 754
- 1985年提出,主流计算机都支持的事实标准
- 包括舍入,上溢出、下溢出等情况
- 在硬件上是缓慢的,因为最初设计目的是最大程度保证精度
IEEE 754 规定的浮点数形式是:\((-1)^{s} M 2^{E}\)
其中,s代表符号位,M代表尾数位,E代表指数位
实际的存储形式为:
浮点数一般有32位和64位两种,intel还支持80位的扩展精度浮点数
32位=1+8+23
64位=1+11+52
80位=1+15+64
浮点数所有数值分为三种:
-
普通的浮点数:
当exp不等于000...00和11...11时, exp=E+bias, \(bias= 2 ^{k-1}-1\)
比如:F=15213.0的表示形式为
s=0;
frac=\(1001100_2\);
exp=13+127=140;

-
接近0的浮点数
当exp=000...00;时
此时E=1-Bias(而不是0-Bias),
目的是为了实现平滑过渡;
-
-
无穷与NaN
-
当exp=111...111;
当frac=000...00时,代表无穷
当$frac \neq 000...000 \(时,代表NaN,比如sqrt(-1),\)\infty-\infty$
-

2. 浮点数运算
2.1 乘法
\((-1)^{s 1} \mathrm{M_1} 2^{E 1} \times(-1)^{s 2} \mathrm{M_2} 2^{E 2}\) =\((-1)^{\mathrm{S}} \mathrm{M} 2^{\mathrm{E}}\)
其中:s=s1^s2
\(M=M_1 * M_2\)
E = E1 + E2
2.2 加法
\((-1)^{\mathrm{s_1}} \mathrm{M_1} 2^{\mathrm{E_1}}+(-1)^{\mathrm{s_2}} \mathrm{M_2}2^{\mathrm{E_2}}\) = \((-1)^{\mathrm{S}} \mathrm{M} 2^{\mathrm{E}}\)
先把E1与E2调整成一样,在同一指数下进行尾数的相加减,完成后再调整尾数大小至1到2之间
浮点数加法的性质:
- 封闭性
- 可交换性
- 没有结合律
3 . C语言中的浮点数
float 单精度
double 双精度
浮点数和整型(int)之间的转换会缺失精度

浙公网安备 33010602011771号