饱和运算

编辑
本词条由“匿名用户” 建档。

饱和运算是算术的一个版本,其中所有运算(例如加法和乘法)都限制在最小值和最大值之间的固定范围内。 如果操作的结果大于最大值,则将其设置(固定)为最大值;如果低于最小值,则将其限制在最小值。这个名字来自于值达到极值后如何变得饱和;进一步增加最大值或减去最小值不会改变结果。 例如,如果值的有效范围是从−100到100,则以下饱和算术运算会产生以下值: 60+30→90。 60+43→100。(不是预期...

饱和运算

编辑

饱和运算是算术的一个版本,其中所有运算(例如加法和乘法)都限制在最小值和xxx值之间的固定范围内。

如果操作的结果大于xxx值,则将其设置(固定)为xxx值; 如果低于最小值,则将其限制在最小值。 这个名字来自于值达到极值后如何变得饱和; 进一步增加xxx值或减去最小值不会改变结果。

例如,如果值的有效范围是从 −100 到 100,则以下饱和算术运算会产生以下值:

  • 60 + 30 → 90。
  • 60 + 43 → 100。(不是预期的 103。)
  • (60 + 43) − (75 + 25) → 0.(不是预期的 3.)(100 − 100 → 0.)
  • 10 × 11 → 100。(不是预期的 110。)
  • 99 × 99 → 100。(不是预期的 9801。)
  • 30 × (5 − 1) → 100。(不是预期的 120。)(30 × 4 → 100。)
  • (30 × 5) − (30 × 1) → 70。(不是预期的 120。不是之前的 100。)(100 − 30 → 70。)

这是另一个在有效范围为 0 到 100 时饱和减法的示例:

  • 30 - 60 → 0。(不是预期的 -30。)

从这些例子中可以看出,结合律和分配律等熟悉的属性在饱和算法中可能会失败。 这使得在抽象数学中处理起来很不愉快,但它在数值具有最大和最小可表示范围的数字硬件和算法中发挥着重要作用。

现代使用

编辑

通常,通用微处理器不使用饱和算法实现整数算术运算; 相反,他们使用更容易实现的模块化算法,其中超过xxx值的值环绕到最小值,就像时钟上的小时数从 12 变为 1。在硬件中,模块化算法的最小值为零和 rn − 1 的xxx值,其中 r 是基数,可以通过简单地丢弃除最低 n 位以外的所有数字来实现。 对于绝大多数现代硬件都是二进制硬件,基数是 2,数字是位。

然而,尽管更难实现,但饱和算法具有许多实际优点。 结果在数值上尽可能接近真实答案; 对于 8 位二进制有符号算术,当正确答案是 130 时,从饱和算术中得到 127 的答案比从模算术中得到 −126 的答案要少得多。 同样,对于 8 位二进制无符号算术,当正确答案为 258 时,从饱和算术中得到 255 的答案比从模算术中得到 2 的答案更令人惊讶。

通过与xxx值或最小值的简单比较(前提是数据不允许采用这些值),富和运算还可以在没有溢出位或过度计算的情况下一致地检测加法和乘法的溢出。

此外,饱和算法可以为许多问题提供高效的算法,特别是在数字信号处理中。 例如,调整声音信号的音量级别可能会导致溢出,而饱和度导致的声音失真比环绕式要小得多。 用研究人员 G. A. Constantinides 等人的话来说:

当使用二进制补码表示法将两个数字相加时,溢出会导致环绕现象。 结果可能是 DSP 系统信噪比的灾难性损失。 因此,DSP 设计中的信号通常要么适当缩放以避免除最极端的输入向量外的所有信号溢出,要么使用饱和运算组件生成。

实施

编辑

饱和运算运算可在许多现代平台上使用,尤其是英特MMX 平台的扩展之一,专门用于此类信号处理应用程序。 此功能在 SSE2 和 AVX2 整数指令集中的更广泛版本中也可用。

整数的计算和运算也已经在许多编程语言软件中实现,包括 C、C++,例如 GNU Compiler Collection、LLVM IR 和 Eiffel。 这有助于程序员更好地预测和理解溢出的影响,并且在编译器的情况下通常会选择最佳解决方案。

饱和运算

饱和度很难在仅具有模块化算术运算的机器上的软件中有效实现,因为简单的实现需要会产生巨大流水线延迟的分支。 然而,可以在没有分支的软件中实现饱和加法和减法,仅使用所有现代 CPU 及其前身(包括所有 x86 CPU(回到最初的 Intel 8086)和一些流行的 8 位 CPU(其中一些,例如 Zilog Z80,仍在生产中)。

内容由匿名用户提供,本内容不代表vibaike.com立场,内容投诉举报请联系vibaike.com客服。如若转载,请注明出处:https://vibaike.com/195935/

(2)
词条目录
  1. 饱和运算
  2. 现代使用
  3. 实施

轻触这里

关闭目录

目录