飽和演算

読み:ほうわえんざん
外語:saturation calculation 英語
品詞:名詞

桁溢れした時には、その飽和点を返す演算のこと。

目次

ディジタル量の演算において、演算結果がオーバーフローする場合、自動的に値を最小値〜最大値の範囲に修正する機能をもった演算。

例えば16ビットで考えると、数値は0〜0xFFFFまでありうるが、0xFFFFに1を加えても溢れることはなく飽和点である0xFFFFを返す。このような加算を飽和加算という。

用途

画像処理や音声処理では、加算を続けて飽和時には飽和点に戻すような処理が求められる。この飽和演算は、それを自動的に行なってくれる演算機能である。

たとえば、画面の輝度を上げる(下げる)処理の場合、一定以上の明るさでは真っ白(暗さでは真っ黒)より明るさが変わることはない。そういった上限(下限)付きの処理として、よく使われている。

機能

DSPなどでは一般的な演算である。

最近ではx86系プロセッサーでも、マルチメディア命令セットにこのような演算が存在する。MMXなどがある。

たとえばMMXの飽和加算/減算の場合、次のような命令がある。

  • paddsb/psubsb ‐ 符号付きパックド・バイトの飽和加算/減算

    演算結果が127を超える場合は127に、-128を下回る場合は-128に丸め込む。

  • paddsw/psubsw ‐ 符号付きパックド・ワードの飽和加算/減算

    演算結果が32767を超える場合は32767に、-32768を下回る場合は-32768に丸め込む。

  • paddusb/psubusb ‐ 符号なしパックド・バイトの飽和加算/減算

    演算結果が255を超える場合は255に、0を下回る場合は0に丸め込む。

  • paddusw/psubusw ‐ 符号なしパックド・ワードの飽和加算/減算

    演算結果が65535を超える場合は65535に、0を下回る場合は0に丸め込む。

速度

飽和時には返す値を飽和点に戻す処理が必要となる。

このため、それを行なわない演算(ラップアラウンド)よりも処理が遅くなりがちである。

プログラム

CやC++などの場合、標準では飽和演算の関数や演算子が用意されていないので、マルチメディア命令の飽和演算命令を使うかどうかは、コンパイラー次第である。

全自動で飽和処理を判定するようなコンパイラーもあるが、うまく判定して処理を最適化できるかどうかもまたコンパイラー次第である。

この最適化技術に関連して、飽和演算の計算部分を自動判定するロジックは、特許となっているものもある。

関連する用語
DSP
クランプ
ラップアラウンド

コメントなどを投稿するフォームは、日本語対応時のみ表示されます


KisoDic通信用語の基礎知識検索システム WDIC Explorer Version 7.04a (27-May-2022)
Search System : Copyright © Mirai corporation
Dictionary : Copyright © WDIC Creators club