Chapter 9 Arithmetic(8)

这一章是很难的,不过我打的就是精锐。😎

Contents of this lecture

English Chinese
Fixed Point Representation 定点表示
Floating Point Representation 浮点表示
IEEE 754 Standard IEEE 754 标准
Integer Representation 整数表示
Fractional Part 小数部分
Integer Part 整数部分
Normalized Representation 标准化表示
Exponent 指数
Mantissa (Significand) 尾数(有效数字)
Bias 偏移量
IEEE 754 Single Precision IEEE 754 单精度
IEEE 754 Double Precision IEEE 754 双精度
Precision 精度
Mantissa Width 尾数宽度
Exponent Width 指数宽度
Sign Bit 符号位
Scientific Notation 科学计数法
Normalized Number 标准化数值
Overflow 溢出
Underflow 下溢
Denormalized Number 非标准化数值
Infinity 无穷
NaN (Not a Number) 非数值(NaN)

数字格式

根据二进制点的位置是否固定,数字可以分为两种格式:

  1. 定点数(Fixed Point Numbers)
    • 例如:整数,默认二进制点位于数字的最右端。
  2. 浮点数(Floating Point Numbers)
    • 浮点数的二进制点位置是可变的,通常表示为一个基数(尾数)乘以一个固定的指数。

定点表示法

(1)

  • 定点表示法是指小数点位置固定的数值表示方法,二进制点右侧的位数是不变的。
    • 无符号整数:没有二进制点右侧的位。
    • 有符号整数:没有二进制点右侧的位。
    • 有符号分数:二进制点位于符号位右侧。

(2)

  • 设 $ X = x_n x_0 $ 为一个定点数:
    • 如果 $ X $ 是一个整数:
      • 二进制点位于 $ x_0 $ 右侧。
      • 范围:有符号整数的表示范围为 $ -2^{n} X ^{n} - 1 $。
    • 如果 $ X $ 是一个纯分数:
      • 二进制点位于 $ x_n $ 和 $ x_{n-1} $ 之间。
      • 范围:有符号分数的表示范围为 $ -1 X -2^{-n} $。

(3)

  • 局限性
    • 非常大的整数和非常小的分数无法表示。
    • 例如,考虑在 32 位有符号定点格式下能够表示的数值范围:
      • 作为整数表示时,范围为 $ -2^{31} X ^{31} - 1 $。
      • 作为分数表示时,范围为 $ [-2.15 ^9, 0] $ 和 $ [0, 2.15 ^9] $。

(4)

  • 局限性(续)
    • 例如,在 32 位有符号定点格式下,表示范围仍有限。
    • 在科学计算中:
      • 阿伏加德罗常数:$ 6.02214076 ^{23} , ^{-1} = 0.602214076 ^{24} , ^{-1} $
      • 普朗克常数:$ 6.62607015 ^{34} , = 0.62607015 ^{33} , $

浮点表示法

(1)

  • 浮点表示法
    • 二进制点的位置是可变的,并且会随着计算的进行自动调整。
    • 浮点表示法需要显式地给出二进制点的位置。
    • 浮点表示法类似于科学计数法。

(2)

  • 计算机中的浮点数

    • 编码
    • 数值形式
      • $ (-1)^S M ^e $
      • 符号位 S:确定数值是正数还是负数。
      • 尾数 M:一个分数,以符号-大小表示或二进制补码表示,包含有效数字。
      • 指数 E
        • 在二进制补码或偏置表示法中,指数表示的是基数的幂。
        • 实际指数 $ e $ 与偏置后的指数 E 之间存在关系。
    image-20241122174505381

(3)

  • 计算机中的浮点数(续)
    • 偏置表示法(Excess or Biased Notation)
      • 在二进制补码中,负指数看起来像一个很大的指数。
      • 为了得到实际的指数,需要从指数域减去一个固定的值。
      • 公式: $ E = e + (2^{k-1} - 1) $
        • 其中,$ e $ 为实际指数,$ k $ 为指数域的位数。
    • 注意
      • 当将偏置表示法的位看作无符号整数时,数字的相对大小不会改变。
image-20241122174759003

(4)

  • 归一化
    • 按照惯例,当小数点位于第一个(非零)有效数字的右侧时,该数字称为“归一化”。
      • 例如:$ 1.0 ^9 $ 为归一化的科学计数法。
      • $ 0.1 ^{10} $ 不是归一化形式。
    • 在归一化的二进制表示中,尾数的最有效位(MSB)总是等于 1。
      • 例如:$ 0.0110 ^6 $ 归一化为 $ 0.110 ^5 $。

IEEE 754 标准

介绍

  • IEEE(Institute of Electrical and Electronics Engineers):电气和电子工程师学会。
  • 最常见的浮点数表示标准
  • 1985年确立,作为浮点运算的统一标准。
  • 该标准的制定旨在促进程序从一个处理器到另一个处理器的可移植性,并鼓励开发复杂的数值程序。
  • 被所有主要的 CPU 支持。

单精度浮点数格式(IEEE 754 标准)

  • 单精度浮点数通常使用 32 位表示,其中:

    • 1 位表示符号(S)。
    • 8 位表示指数(E),采用偏置表示法(bias)。
    • 23 位表示尾数(M)。
    image-20241122183507796

双精度浮点数格式(IEEE 754 标准)

  • 双精度浮点数通常使用 64 位表示,其中:

    • 1 位表示符号(S)。
    • 11 位表示指数(E),采用偏置表示法。
    • 52 位表示尾数(M)。
    image-20241122183653847

特殊值(IEEE 754 标准)

  • 零(Zero)
    • 符号位 $ S = 0/1 $,指数 $ E = 0 $,尾数 $ M = 0 $。
    • 这种表示方式的值为零。
    • 当指数域为零时,表示没有隐式的前导 1。
  • 无穷大(Infinity)
    • 表示溢出的结果。
    • 例如,$ 1.0 / 0.0 = $。
    • 符号位 $ S = 0/1 $,指数 $ E = 255 $(单精度)或 $ E = 2047 $(双精度),尾数 $ M = 0 $。
    • 这种表示方式的值为无穷大。
  • NaN(Not a Number)
    • 当无法确定数值时,表示无效的计算结果。
    • 例如,$ $。
    • 符号位 $ S = 0/1 $,指数 $ E = 255 $(单精度)或 $ E = 2047 $(双精度),尾数 $ M $。
    • 这种表示方式的值为 NaN(非数字)。

特殊值总结(IEEE 754 标准)

  • :符号位为 0 或 1,指数位为 0,尾数位为 0,表示值为零。
  • 无穷大:符号位为 0 或 1,指数位为 255 或 2047,尾数位为 0,表示值为无穷大。
  • NaN:符号位为 0 或 1,指数位为 255 或 2047,尾数位非零,表示值为 NaN。
image-20241122183819839

总结

  • 计算机必须至少提供单精度表示以符合 IEEE 标准。
  • 双精度表示是可选的。
  • 扩展单精度(大于 32 位)和 扩展双精度(大于 64 位):
    • 有助于减少在一系列计算中的累积舍入误差。
    • 提高了对基本函数(如正弦、余弦等)计算的精度。
  • 精度与范围之间的权衡
    • 增大尾数的位数可以增强精度。
    • 增大指数的位数可以增加表示的范围。

Quiz

题目1:

在 IEEE 754 标准中,32 位单精度浮点数表示的浮点数的符号位占 1 位,指数位占 8 位,尾数位占 23 位。请问,32 位表示中能够表示的最大正数是多少?

image-20241122184336038

题目2:

在 IEEE 754 标准中,单精度浮点数的格式中,存储在指数域的实际值是什么?

A. $ E = e + 255 $

B. $ E = e + 127 $

C. $ E = e + 256 $

D. $ E = e + 128 $

答案:

B. $ E = e + 127 $

解释:

IEEE 754 单精度浮点数表示中,指数部分使用 偏移量表示法(也称为 "偏置表示法")。具体来说:

  • 单精度浮点数使用 8 位来表示指数部分。
  • 实际存储的指数 $ E $ 是由实际指数 $ e $ 和一个偏移量(127)计算得出的,即: $ E = e + 127 $ 其中,e 是实际的指数,表示为 $ E - 127 $。

为什么使用偏移量表示法? 偏移量表示法的优点是可以使指数值支持正数和负数。通过加上一个偏移量(127),可以使得原本可能为负的指数变成非负整数,这使得计算机处理浮点数更为方便。

结论:

所以,单精度浮点数的指数部分存储的实际值是 $ E = e + 127 $,因此正确答案是 B

题目:

在 IEEE 754 标准中的双精度浮点数格式中,存储在指数域的实际值 $ E $ 是什么?

A. $ E = e + 2047 $

B. $ E = e + 1023 $

C. $ E = e + 2048 $

D. $ E = e + 1024 $

答案:

B. $ E = e + 1023 $

解释:

在 IEEE 754 双精度浮点数表示中,指数部分使用 偏移量表示法(偏置表示法),而且与单精度浮点数格式类似,采用偏移量来表示指数。

  • 双精度浮点数使用 64 位来表示,其中:
    • 符号位:1 位
    • 指数位:11 位
    • 尾数位:52 位

为了支持负指数,双精度浮点数的指数部分采用了 1023 作为偏移量。即: $ E = e + 1023 $ 其中:

  • e 是实际的指数值。
  • E 是存储在指数域的实际值。

为什么是1023? 由于双精度浮点数的指数部分使用了 11 位,所以偏移量为 $ 2^{11-1} - 1 = 1023 $,这使得指数的实际存储值 $ E $ 能够覆盖从 $ -1022 $ 到 $ 1023 $ 的指数范围。

结论:

因此,双精度浮点数的指数部分存储的实际值是 $ E = e + 1023 $,所以正确答案是 B

题目 4:

正确还是错误? 计算机必须至少支持单精度浮点数格式,以符合 IEEE 754 标准。

答案:

正确

解释:

根据 IEEE 754 标准,每个计算机必须至少提供单精度浮点数格式的支持。单精度浮点数格式使用 32 位,包含 1 位符号位,8 位指数部分和23 位尾数部分。这是为确保浮点数运算的可移植性和一致性。

双精度浮点数格式(64 位)是可选的,但单精度格式是最低要求。

因此,计算机必须至少支持单精度浮点数格式,答案是 正确