仲間のSOが、優れた軽量の固定サイズ整数型(128ビットまたは256ビット、場合によってはテンプレートのパラメーター化)ライブラリーを推奨できるかどうか疑問に思いました。
私はGMPと共同を見てきましたが、彼らは大事にしていますが、私の目的には少し大きすぎます。現時点では、単純なヘッダーのみのソリューションに興味があります。パフォーマンスは重要であり、ターゲットアーキテクチャはx86およびx86-64であり、これも妥当なライセンスです(GPLまたはLGPLは何もありません)。
ライブラリには、ライブラリBoost
の一部としてmultiprecision
、128 ~ 1024 ビットの範囲の型のデータ型があります。
#include <boost/multiprecision/cpp_int.hpp>
using namespace boost::multiprecision;
int128_t mySignedInt128 = -1;
uint128_t myUnsignedInt128 = 2;
int256_t mySignedInt256 = -3;
uint256_t myUnsignedInt256 = 4;
int512_t mySignedInt512 = -5;
uint512_t myUnsignedInt512 = 6;
int1024_t mySignedInt1024 = -7;
uint1024_t myUnsignedInt1024 = 8;
Xintライブラリは現在、Boost の一部になるように検討中です。かなり議論の余地があり、レビューの結果はまだ明らかではありませんが、ライブラリはいくつかの要件を満たしています。
ただし、レビュー中に議論されるポイントの 1 つはパフォーマンスです。公式の Boost ライブラリとして受け入れられれば、パフォーマンスの問題がすぐに解決されることを期待しています。
だから私はそれを試してみます:Code、Documentation。
要件によっては、STL クラスbitset
がニーズに合う場合があります。整数型が行うすべてのビット操作演算子 ( など) には応答します<<
が|
、残念ながら+
orのような算術演算子には応答しません*
。そのサイズは、テンプレート パラメーターを介してコンパイル時に固定されます。もう 1 つの不幸な点は、API が基礎となるバイナリ表現 (たとえば、ストリーミング) を取得する方法を提供しないことです。これにより、API の有用性が大幅に制限される可能性があります。
(これは古い質問ですが、この回答は他の人に役立つかもしれません。)
一部のネイティブ 128 ビット型は特定のプラットフォームで使用できますが、アーキテクチャによって制限される傾向があります。たとえば__m128
、SSE2 で使用できますか?
http://msdn.microsoft.com/en-us/library/ayeb3ayc.aspx
__int128
この ABI にも記載されています。
http://www.x86-64.org/documentation/abi-0.99.pdf
ただし、 「特にサポート ベクター マシン (SVM) に重点を置いた大規模な機械学習ツールボックス」である SHOGUN には、uint128_t
との好ましい命名が見られます。uint256_t