私は勉強してきましたKaratsuba's algorithm on Wikipedia 私はこのセクションで停止しました。なぜこのアルゴリズムにオーバーフローがありますか?この問題を解決するために彼が行った手順はわかりません。私の問題のスクリーンショットKaratsubaアルゴリズムのオーバーフロー
1
A
答えて
2
LESTのみスターターのために正の数を考慮してください。 8ビットの数字/数字をx0,x1,y0,y1
にすることができます。
x0*y0 -> 8bit * 8bit -> 16 bit
これは、16ビットの結果までを生成します。
は、我々は8ビットの乗算を適用します。トップ値は次のとおりです。
FFh*FFh = FE01h
255*255 = 65025
今、私たちはカラツバに戻る場合
X = x0 + x1<<8
Y = y0 + y1<<8
Z = X*Y = z0 + z1<<8 + z2<<16
今すぐz1
は、17ビットのトップとしてあることをzi
z2 = x1*y1 -> 16 bit
z1 = x1*y0 + x0*y1 -> 17 bit
z0 = x0*y0 -> 16 bit
注意のビット幅を見てみましょうみましょう値は
65025+65025 = 130050
したがって、zi
のそれぞれが8ビットをオーバーフローします。これを処理するには、最低位の8ビットのみを取り、残りの部分を上位桁に追加します(キャリーの伝播など)。したがって、通常は乗算のHW実装はこれを単独で処理し、1つではなく2つの単語として結果を返します。
したがって、16ビット乗算の結果は32ビットです。 8ビットのサブ結果を追加するには、3つの数値を加算するか、9ビット(または8ビット+ 1のキャリー)を1つずつ追加して伝播する必要があるため、少なくとも10ビットが必要です。
これに符号付きの値を追加する場合は、もう1ビットの符号が必要です。これを回避するには、オペランドの兆候を覚えて、abs値を使用して...元の兆候に応じて結果の符号を設定します。詳細については
は、これらを参照してください。私はまだZ1は、17ビットのトップvalue..whereはないです理由を理解いけないmuch..except
関連する問題
- 1. Karatsubaアルゴリズムが多すぎる再帰
- 2. Karatsubaアルゴリズムの実行時間の計算方法は?
- 3. Karatsubaアルゴリズムを使用した64桁数の積
- 4. Java BigDecimalでのKaratsuba乗算の実装
- 5. karatsubaの乗算に関する質問
- 6. Cは内部的にKaratsubaアルゴリズムを使用して2つの整数を掛けますか?
- 7. オーバーフロー
- 8. オーバーフロー
- 9. オーバーフロー:オーバーフローの子に自動:hidden div?
- 10. Karatsubaアルゴリズムは、小さなものではあるが大きなものではなく、なぜかわからない
- 11. divオーバーフローのテーブル
- 12. オーバーフロー時のストレッチレイヤ
- 13. オーバーフローのSQLServer
- 14. オーバーフロー-Xのテキストオーバーフロー
- 15. CSSのオーバーフローと
- 16. fo:データセルのオーバーフロー
- 17. ブートストラップのツールチップ:オーバーフロー?
- 18. Jumbotron divのオーバーフロー
- 19. CSSのオーバーフロー
- 20. Silverlight:キャンバスのオーバーフロー
- 21. Memsetメモリのオーバーフロー
- 22. オーバーフローの処理
- 23. CSSオーバーフロー-y:可視、オーバーフロー-x:隠し
- 24. オーバーフロー `Label`
- 25. NavigationControllerオーバーフロー
- 26. イメージ・オーバーフロー
- 27. strcatオーバーフロー?
- 28. タブバーのタブのオーバーフロー
- 29. fのintのオーバーフロー#
- 30. ディビジョンのコンテンツのオーバーフロー
はとてもありがとう1ビットは〜から来ます..thank u♥ –
@ Kolyxakosあなたが '2bit'の数になる2つの' 1bit'の数字を追加すると、Kolyxakos。今は 'z1 = 16bit + 16bit = 17bit'です。 2つの同様の値を追加すると、その出力が約2倍の大きさなので、保存するビットがもう1つ必要です。 – Spektre