• 飽和運算

    編輯
    本詞條由“匿名用戶” 建檔。

    飽和運算

    編輯

    飽和運算是算術的一個版本,其中所有運算(例如加法和乘法)都限制在最小值和最大值之間的固定范圍內。

    如果操作的結果大于最大值,則將其設置(固定)為最大值; 如果低于最小值,則將其限制在最小值。 這個名字來自于值達到極值后如何變得飽和; 進一步增加最大值或減去最小值不會改變結果。

    例如,如果值的有效范圍是從 ?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。)

    從這些例子中可以看出,結合律和分配律等熟悉的屬性在飽和算法中可能會失敗。 這使得在抽象數學中處理起來很不愉快,但它在數值具有最大和最小可表示范圍的數字硬件和算法中發揮著重要作用。

    現代使用

    編輯

    通常,通用微處理器不使用飽和算法實現整數算術運算; 相反,他們使用更容易實現的模塊化算法,其中超過最大值的值環繞到最小值,就像時鐘上的小時數從 12 變為 1。在硬件中,模塊化算法的最小值為零和 rn ? 1 的最大值,其中 r 是基數,可以通過簡單地丟棄除最低 n 位以外的所有數字來實現。 對于絕大多數現代硬件都是二進制硬件,基數是 2,數字是位。

    然而,盡管更難實現,但飽和算法具有許多實際優點。 結果在數值上盡可能接近真實答案; 對于 8 位二進制有符號算術,當正確答案是 130 時,從飽和算術中得到 127 的答案比從模算術中得到 ?126 的答案要少得多。 同樣,對于 8 位二進制無符號算術,當正確答案為 258 時,從飽和算術中得到 255 的答案比從模算術中得到 2 的答案更令人驚訝。

    通過與最大值或最小值的簡單比較(前提是數據不允許采用這些值),富和運算還可以在沒有溢出位或過度計算的情況下一致地檢測加法和乘法的溢出。

    此外,飽和算法可以為許多問題提供高效的算法,特別是在數字信號處理中。 例如,調整聲音信號的音量級別可能會導致溢出,而飽和度導致的聲音失真比環繞式要小得多。 用研究人員 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,仍在生產中)。

    內容由匿名用戶提供,本內容不代表www.gelinmeiz.com立場,內容投訴舉報請聯系www.gelinmeiz.com客服。如若轉載,請注明出處:http://www.gelinmeiz.com/195935/

    (1)
    詞條目錄
    1. 飽和運算
    2. 現代使用
    3. 實施

    輕觸這里

    關閉目錄

    目錄
    91麻精品国产91久久久久