2.4 浮点数

2.4 浮点数

2.4.1 二进制小数

类似形如\(b_mb_{m-1}\cdots{}b_1b_0.b_{-1}b_{-2}\cdots{}b_{-n-1}b_{-n}\)的表示法,其中\(b_i\)的取值范围为0或1,该表示法所表示的数定义如下:

\[\begin{equation} b=\sum_{i=-n}^{m}2^{i}\times b_{i} \end{equation} \]

符号\(“.”\)为二进制小数点,点左边的位的权是2的正幂,点右边的位的权是2的负幂。

2.4.2 IEEE浮点数表示

IEEE浮点数标准用\(V=(-1)^s\times M \times 2^E\)的形式来表示一个数:

  • 符号:s决定这个数是负数(s=1)还是正数(s=0),对于数值0的符号位解释作为特殊情况处理。

  • 尾数:M是一个二进制小数,它的范围是\(1\thicksim 2-\varepsilon\)(规格化的),\(0\thicksim 1-\varepsilon\)(非规格化的)。

  • 阶码:E的作用是对浮点数加权,这个权重是2的\(E\)次幂(可能为负)。

  • 阶码字段:exp;小数字段:frac。

  • 根据阶码字段exp的值,被编码的值可以分为四种不同的情况:

    • 规格化的:exp不全为0同时也不全为1;
    • 非规格化的:exp全为0;
    • 无穷大:exp全为1,且frac全为0;
    • NaN:exp全为1,frac不全为0;
情况1:规格化的浮点数计算方法

阶码字段exp:

\[E=e-Bias,\quad e是无符号数,其位表示为e_{k-1}\cdots e_2e_1 \\ Bias=2^{k-1}-1 \]

注意此时e不能全为0也不能全为1,对于单精度E的取值范围为:\(-126\thicksim +127\),而双精度是\(-1022 \thicksim +1023\)

小数字段frac:

\[M=1+f \\ f=0.f_{n-1}\cdots f_2f_1 \\ 可以看出二进制小数点在frac字段最高有效位左边 \]

情况2:非规格化的浮点数计算方法

阶码字段exp:

\[E=1-Bias \]

小数字段frac:

\[M=f=0.f_{n-1}\cdots f_2f_1 \]

情况3:特殊值

当阶码exp全为1,小数域全为0时,若\(s=0\)时是\(+\infty\),若\(s=1\)时是\(-\infty\)

当阶码exp全为1,小数域不全为0时,结果值为\(NaN\),即“Not a Number”。

2.4.3 数字示例

浮点数能够使用整数排序函数来排序,将浮点数位模式解释为无符号数时,大小顺序不变。

2.4.4 舍入

由于浮点运算只能近似地表示实数运算,所以在很多情况下需要进行舍入

  • 向偶数舍入:也称为最接近值舍入,eg: 1.4舍入为1,1.6舍入为2,1.5舍入为2。
  • 向0舍入
  • 向下舍入
  • 向上舍入
2.4.5 浮点运算

把浮点值\(x\)\(y\)看成实数,而某个运算\(\bigodot\)定义在实数上,则浮点运算为:

\[Round(x\odot y) \]

这是对实际运算的精确结果进行舍入后的结果

浮点加法
  • \(x+^{f}y\)定义为\(Round(x+y)\),对于所有x和y的值,加法运算是可交换的,但不可结合。
  • 浮点加法满足单调属性:若\(a\geq b\),对于任何\(x\),都有\(x + a \geq x + b\),无符号加法或补码加法不具有这个属性。
浮点乘法
  • \(x*^fy\)定义为\(Round(x\times y)\),可交换不可结合,不可分配。
  • 满足单调性
posted @ 2021-03-01 16:42  马里奥本奥  阅读(205)  评论(0编辑  收藏  举报