タグ付けされた質問 「integers」

整数のプロパティ、操作、アルゴリズムに関する質問。

2
合計でのオーバーフローの検出
私はの配列を指定していたとの固定幅の整数を(彼らは幅のレジスタに収まるすなわち)、。2の補数演算を備えたマシンで合計を計算します。これは、ラップアラウンドセマンティクスでを法とする加算を実行します。それは簡単ですが、合計がレジスタサイズをオーバーフローする可能性があり、オーバーフローすると、結果が不正になります。nnnwwwa1,a2,…ana1,a2,…ana_1, a_2, \dots a_nS=a1+…+anS=a1+…+anS = a_1 + \ldots + a_n2w2w2^w 合計がオーバーフローしない場合は、それを計算し、オーバーフローがないことをできるだけ早く確認したいと考えています。合計がオーバーフローした場合、それがオーバーフローしていることだけを知りたいので、値は気にしません。 部分的な合計がオーバーフローする可能性があるため、単純に順番に数値を追加することはできません。たとえば、8ビットレジスタでは、は有効であり、合計がですが、部分合計がレジスタ範囲オーバーフローします。(120,120,−115)(120,120,−115)(120, 120, -115)125125125120+120120+120120+120[−128,127][−128,127][-128,127] 明らかに、より大きなレジスタをアキュムレータとして使用することもできますが、可能な限り最大のレジスタサイズをすでに使用している興味深いケースを想定してみましょう。 現在の部分合計とは逆の符号を持つ数値を追加するよく知られた手法があります。この手法は、キャッシュに優しくなく、分岐予測や投機的実行をあまり活用しないという犠牲を払って、すべてのステップでオーバーフローを回避します。 おそらく部分合計をオーバーフローする権限を利用し、オーバーフローフラグ、キャッシュ、分岐予測子、および投機的実行とロードを備えた一般的なマシンでより高速な手法はありますか? (これは、オーバーフローの安全な合計のフォローアップです)

2
既約多項式を法として多項式を減らすIntelのアルゴリズムを理解する
キャリーレス乗算に関するこのIntelホワイトペーパーを読んでいます。の多項式の乗算について説明し。高レベルでは、これは2つのステップで実行されます:(1)上の多項式の乗算、および(2)既約多項式を法として結果を削減します。多項式の「標準」ビット文字列表現、つまります。GF (2ん)GF(2ん)\text{GF}(2^n)GF (2 )GF(2)\text{GF}(2)バツ3+ x + 1 = [ 1011 ]バツ3+バツ+1=[1011]x^3+x+1 = [1011] この論文では、アルゴリズム3の16ページの剰余多項式の計算アルゴリズムを示しています。しかし、16〜17ページの削減アルゴリズム(アルゴリズム4)を理解できません。基本的に、私たちの結果または部分的な結果が128ビットに適合しない場合、より大きなフィールドにはアルゴリズム4が必要だと思います。の2つの多項式の乗算の例を示し。GF (2128)GF(2128)\text{GF}(2^{128}) 右シフトの「マジック定数」63、62、57と、左シフトの「マジック定数」1、2、7はどこから来るのですか? たとえば、\ text {GF}(2 ^ {32})のように、より小さなフィールドのアルゴリズムを一般化するにはどうすればよいGF (232)GF(232)\text{GF}(2^{32})ですか?次に、対応するシフト値は15、14、9および1、2、7になりますか? 最後のステップ4で、アルゴリズムは「XOR [E1:E0][E1:E0][E_1:E_0]、[F1:F0][F1:F0][F_1:F_0]、および[G1:G0][G1:G0][G_1:G_0]と[X_3:D]との相互関係[バツ3:D ][バツ3:D][X_3:D]」を示します。 なぜこれを行うのですか?私の知る限り、このXOR演算の結果はどこにも保存されず、どこでも使用されません。[H_1:H_0]の計算に何らかの形で使用されてい[H1:H0][H1:H0][H_1 : H_0]ますか?
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.