Cが2つのn-bits
の整数を乗算するとき、内部で通常のO(n^2)
の乗算アルゴリズムを使用していますか、またはKaratsubaの乗算アルゴリズムのバリエーションを使用していますか?Cは内部的にKaratsubaアルゴリズムを使用して2つの整数を掛けますか?
1
A
答えて
2
いいえ、Karatsubaアルゴリズムの「ブックキープ」オーバヘッドは高すぎ、複雑すぎます。たとえ機械語レベルでブレーク・アウェイ再帰的な深さを達成したとしても、乗算器よりもはるかに多くのシリコンを消費します。ハードウェア暗号アクセラレータやFPGAは、十分に大きな値をとる価値がありますn
。それでも、暗号の必要性に役立つためには、損益分岐点が高すぎるかもしれません。無料のランチはありません。
スペクトルのもう一方の端に、私たちは、漸近的に高速なアルゴリズムが実際に完済し始めるしきい値値を定義GMP libraryでgmp-mparam.h
ファイルで見ることができます。 「Karatsuba」は、より一般的なToom-Cookアルゴリズムの2×2のケースです。 BroadwellやSkylake CPUのようなモンスターでさえ、スレッショルドは約28 'ワード、すなわち1792ビットです。これは、(再帰的に)キャリー伝播を伴う3つの結果を一緒に戻すオーバーヘッドが原因です。これらのスレッショルドは、命令のスループットが増加するにつれて高くなります。
関連する問題
- 1. Karatsubaアルゴリズムを使用した64桁数の積
- 2. Karatsubaアルゴリズムのオーバーフロー
- 3. 2つの整数を掛け合わせるときのNumberFormatException
- 4. ビット単位の演算子を使用して整数に5を掛ける
- 5. floatにCで整数を掛ける方法は?
- 6. C++で2つの64桁の数字を掛ける
- 7. リスト内の整数にリスト内の単語を掛けてください
- 8. c#整数は内部的にどのように管理されますか?
- 9. Pythonの整数で範囲内のアイテムを掛ける
- 10. スプリングは内部的にサーブレットを使用していますか?
- 11. 2つの列を掛け合わせて内部結合で合計します
- 12. 連続して3つの整数を掛けた結果の最初の数を見つけよう
- 13. F# - floatで整数を掛ける
- 14. NSPredicateは内部的に任意の検索アルゴリズムを使用していますか?
- 15. VBSを使用して2行列を掛ける
- 16. 関数に整数を掛ける方法は?
- 17. スカラでテール再帰を使用してリスト内の整数を見つける
- 18. Javascriptを使用して配列内で単一の整数を見つける
- 19. 2角度 - 内部関数の内部コンポーネント変数を使用して
- 20. 2つの整数を使って倍精度整数の整数部分を表現する方法
- 21. Pythonで非整数型と整数型を掛ける
- 22. x86アセンブリに2つの32ビットの数値を掛ける
- 23. Javaで2つの数値を正確に掛ける
- 24. メモリエラー:2つの行列を掛ける
- 25. 2つの値を掛ける
- 26. 2つの行列を掛けるR
- 27. Erlang:2つのリストを掛ける
- 28. Python:2つのリストを掛ける
- 29. numpyを使用して2つのDFを掛け、1行あたりの平均を計算します。
- 30. Cで2つの配列を掛ける
C標準は、それ自体、そのような実装の詳細を指示しません。各コンパイラは、ターゲットアーキテクチャごとに適切な命令を選択するため、その命令セットに依存します。 – StoryTeller
C - no。コンパイラ - おそらくそうではありません。基盤となるHWアーキテクチャ - おそらく。 –
Cにはnビットの整数はありません。 – melpomene