2017-01-26 11 views
1

基本的な数学では、(128/8 = 16)異なっ話します。私はちょっとがっかりしているといくつかの回答をしたい - 私はその表記(type_num_of_bytes_t)に使用されてきたものがちょうどあなたが変数に入れることができるデータの量が、また、クロスプラットフォームは、固定可変サイズではない記述からので、であり、後者はさらに重要です。私は間違って何をしていますか?ブースト::多倍精度:: uint128_tのsizeofは24

#include "boost/multiprecision/cpp_int.hpp" 
using boost::multiprecision::uint128_t; 

... 

qDebug() << sizeof(uint128_t); 

出力:24

私はWindows上でvs2013でコンパイルし、標準のx86/64アーキテクチャのCPUを使用しています。

UPDATE:ブーストバージョン1.61です。

+0

へぇのサイズ24になり、編集のためのおかげで、[ことはできません、私はあまりにも感情的な書き込みを行ってきたように、これはD –

+3

を=思えます(http://melpon.org/wandbox/permlink/oSB8GpK75qUDH6D6)、[ABIは](https://software.intel.com/sites/default/files/article/402129/mpx-linux64-abi)を参照してください。 pdf)それは16でなければなりません。私の64ビットLinuxでも試しましたが、まだ16になっています。あなたのプラットフォームに関する十分な情報を追加して、問題を再現可能にしてください。 –

+0

vs2013のコンパイラを使って実行したときとまったく同じ正確なコードが表示されます。 –

答えて

8

cpp_int 1.6.1

固定精度で使用される場合、このタイプのサイズは常に1つの機械あなたはNビット整数ために予想よりも大きい単語である:余分単語記憶の両方記号、及び整数中の機械語が実際どれくらい使用されているか。後者は、より大きな固定精度整数の最適化であるため、1024ビット整数は、加算に4倍遅く、乗算には16倍遅くなるのではなく、128ビット整数とほぼ同じパフォーマンス特性を持ちます(関係する値を仮定すると、常に128ビットに収まる)。通常、これは、実際にはより狭い型で算術演算を行うことができたとしても、ほとんどの場合パフォーマンスが低下するだけで、「最悪のシナリオ」に十分広い整数型を使用できることを意味します。

x86/648バイトの)余分な機械語ではなく、予想される16

+0

ありがとう!しかし、あまり意味がありません...彼らはcpp_int.hppの中にコメントとして入れておくべきです。 –

+0

非常に大きな整数の最適化のように、私の答えを編集しました。 – lcs