問題タブ [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.

0 投票する
18 に答える
37945 参照

c - Cで符号なし飽和加算を行うには?

Cで飽和加算を書くための最良の(最もクリーンで効率的な)方法は何ですか?

関数またはマクロは、2 つの符号なし入力 (16 ビット バージョンと 32 ビット バージョンの両方が必要) を追加し、合計がオーバーフローした場合はすべてビット 1 (0xFFFF または 0xFFFFFFFF) を返す必要があります。

ターゲットは、gcc (4.1.2) および Visual Studio を使用する x86 および ARM です (シミュレーションのみのため、フォールバックの実装はそこで OK です)。

0 投票する
2 に答える
8939 参照

c - C でのビットごとの飽和加算 (HW)

私は課題に取り組んでいますが、これを実装する方法がわかりません。sadd(int x, int y)オーバーフローしない限り、加算された数値を返す関数を作成する必要があります (その後、可能な最大の int を返すだけです)。キャストと条件ステートメントを含むいくつかのソリューションを考え出すことができましたが、それらはソリューションでは許可されていません。演算子~ ! ^ + << >> &|.

0 投票する
1 に答える
267 参照

assembly - MMXアセンブラ命令を使用したマルチプラス左シフト操作

乗算と(両方とも16ビットの符号付き整数)および乗算結果を算術的に左にシフトする演算shl(mult(var1,var2),1)を実行することを探しています。結果は飽和している必要があります。つまり、オーバーフローまたはアンダーフローが発生した場合はint32maxまたはint32minであり、。multvar1var2shlmult(-32768,-32768)=2147483647

MMX / SSE命令セットを使用すると思われる効率的な方法で、複数の値に対してこの操作を行う必要があります。私は作ることについては考えましたがmult(sign_extesion(var1)shl(sign_extension(var2)))MMXmult()飽和バージョンが存在しないことを発見しました。あなたはそれを手に入れる他の方法を知っていますか?

0 投票する
2 に答える
2425 参照

assembly - 飽和状態の32ビットワードを追加する

MMX / SSEアセンブラ命令を使用して飽和32ビット符号付きワードを追加する方法を知っていますか?8/16ビットバージョンは見つかりましたが、32ビットバージョンは見つかりませんでした。

0 投票する
4 に答える
3181 参照

c - 64ビット整数の符号付き飽和加算?

gcc オプティマイザーを使用して効率的な x86-64 コードにコンパイルする、符号付き飽和 64 ビット加算用の C コードを探しています。移植可能なコードが理想的ですが、必要に応じて asm ソリューションを使用することもできます。

書かれている関数は、いくつかの分岐を持つかなり長いアセンブリ出力を生成します。最適化に関するヒントはありますか? ADDいくつかの指示だけで実装できるはずCMOVですが、私はこのようなものに少し慣れていません。

0 投票する
11 に答える
13742 参照

c++ - 符号なしバイトの飽和減算/加算

2 つの符号なしバイトbx. bsubasb - xbaddasを計算する必要がありb + xます。ただし、これらの操作中にアンダーフロー/オーバーフローが発生することは望ましくありません。例(疑似コード):

これを行う明白な方法には、分岐が含まれます。

これを行うためのより良い方法があるかどうか、つまり、ハッキーなビット操作があるかどうか疑問に思っていますか?