通常、複数の単語を使用してbignumが実装されていますが、可能な限り移植可能なサイズの単語を選択したいと考えています。多くの32ビットコンパイラではstd::uint64_t
が利用可能ですが、std::uint32_t
はおそらく32ビットマシンではより良い選択になるでしょう。例えば、the new x32 Linux ABIstd::size_t
のように、std::size_t
が最も効率的な算術演算の型であるという保証はありませんが、std::uint64_t
は依然として最良の選択です。C++ 11でbignumsを実装するための最も効率的な単語サイズの決定
C++ 11には、さまざまなサイズの高速/最小タイプが定義されていますが、それらの相対的なパフォーマンスを照会する方法はありません。私は最高のポータブルな答えがないかもしれないことを認識しています。私の推測では、デフォルトでstd::size_t
にデフォルト設定し、設定時に例外的なアーキテクチャを検出します。しかし、もっと良い方法があるかもしれませんか?
してコンパイルします。少なくとも、データ型には32/64ビット以上の速度が必要です。それはおそらく彼らが意味するものです。 – Morwenn
"* C++ 11では、std :: uint64_tが存在することを要求しています。たとえば、「いいえ、そうではありません。オプションです。また、 "* std :: uint32_tはおそらく64ビットマシン上でより良い選択になるでしょう*"私はあなたが "** 32-bit ** machine"を意味すると仮定します。 –
@NicolBolas:あなたは両方の数が正しいです。 –