問題タブ [saturation-arithmetic]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
c - Cで符号なし飽和加算を行うには?
Cで飽和加算を書くための最良の(最もクリーンで効率的な)方法は何ですか?
関数またはマクロは、2 つの符号なし入力 (16 ビット バージョンと 32 ビット バージョンの両方が必要) を追加し、合計がオーバーフローした場合はすべてビット 1 (0xFFFF または 0xFFFFFFFF) を返す必要があります。
ターゲットは、gcc (4.1.2) および Visual Studio を使用する x86 および ARM です (シミュレーションのみのため、フォールバックの実装はそこで OK です)。
c - C でのビットごとの飽和加算 (HW)
私は課題に取り組んでいますが、これを実装する方法がわかりません。sadd(int x, int y)
オーバーフローしない限り、加算された数値を返す関数を作成する必要があります (その後、可能な最大の int を返すだけです)。キャストと条件ステートメントを含むいくつかのソリューションを考え出すことができましたが、それらはソリューションでは許可されていません。演算子~ ! ^ + << >> &
と|
.
assembly - MMXアセンブラ命令を使用したマルチプラス左シフト操作
乗算と(両方とも16ビットの符号付き整数)および乗算結果を算術的に左にシフトする演算shl(mult(var1,var2),1)
を実行することを探しています。結果は飽和している必要があります。つまり、オーバーフローまたはアンダーフローが発生した場合はint32maxまたはint32minであり、。mult
var1
var2
shl
mult(-32768,-32768)=2147483647
MMX / SSE命令セットを使用すると思われる効率的な方法で、複数の値に対してこの操作を行う必要があります。私は作ることについては考えましたがmult(sign_extesion(var1)
、shl(sign_extension(var2)))
MMXmult()
飽和バージョンが存在しないことを発見しました。あなたはそれを手に入れる他の方法を知っていますか?
assembly - 飽和状態の32ビットワードを追加する
MMX / SSEアセンブラ命令を使用して飽和32ビット符号付きワードを追加する方法を知っていますか?8/16ビットバージョンは見つかりましたが、32ビットバージョンは見つかりませんでした。
c - 64ビット整数の符号付き飽和加算?
gcc オプティマイザーを使用して効率的な x86-64 コードにコンパイルする、符号付き飽和 64 ビット加算用の C コードを探しています。移植可能なコードが理想的ですが、必要に応じて asm ソリューションを使用することもできます。
書かれている関数は、いくつかの分岐を持つかなり長いアセンブリ出力を生成します。最適化に関するヒントはありますか? ADD
いくつかの指示だけで実装できるはずCMOV
ですが、私はこのようなものに少し慣れていません。
c++ - 符号なしバイトの飽和減算/加算
2 つの符号なしバイトb
とx
. bsub
asb - x
とbadd
asを計算する必要がありb + x
ます。ただし、これらの操作中にアンダーフロー/オーバーフローが発生することは望ましくありません。例(疑似コード):
と
これを行う明白な方法には、分岐が含まれます。
これを行うためのより良い方法があるかどうか、つまり、ハッキーなビット操作があるかどうか疑問に思っていますか?