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代表指数位

实际的存储形式为:

Snipaste_2022-03-13_11-48-09

浮点数一般有32位和64位两种,intel还支持80位的扩展精度浮点数

32位=1+8+23

64位=1+11+52

80位=1+15+64

浮点数所有数值分为三种:

  1. 普通的浮点数:

    当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;

image

  1. 接近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$

image

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)之间的转换会缺失精度

posted @ 2022-03-13 12:39  逍遥一叹s  阅读(121)  评论(0)    收藏  举报