私は最近、ビデオ処理アルゴリズムのSSE最適化に取り組んでいます。アルゴリズムの正確性をクロスチェックするために、Cコードに全く同じアルゴリズムを記述する必要があります。私はこの事実を何度も忘れてしまったので、2つの実装の結果が異なるようになりました。最終結果を計算する前に、SSE整数平均命令(PAVGB/PAVGW)が一時的な合計に1を加算するのはなぜですか?
この違いは問題ではないので、C実装を変更して一致させることができます。しかし、なぜこれらの命令はこのように設計されていますか?それの後ろに数学的な理由はありますか?
「インテル・インストラクション・リファレンス」にはこの動作が記載されているだけで、理由は説明されていません。私もグーグルで試しましたが、それについて何も見つかりませんでした。
UPDATE:Paul's answerへ
感謝。私はそれが丸め/切捨ての問題であることに気付かなかった。しかし、両方のオペランドは整数なので、唯一の端数は0.5になり、2の "最も近い整数"を持ちます。 AFAIKには、この状況のためのいくつかの丸め方法があります。命令が特に切り上げを使用する理由ほとんどの関連アプリケーションは切り上げが必要ですか?