C ++ 128/256位固定大小的整数类型

时间:2011-03-09 07:51:41

标签: c++ types bigint

我想知道是否有任何人可以推荐一个好的轻量级固定大小整数类型(128位甚至256位,甚至可能是模板参数化)库。

我看过GMP和co,他们关心的很好,但是对我来说有点太大了,我现在对简单的标题解决方案感兴趣。性能很重要,目标架构将是x86和x86-64,也是一个合理的许可证(也就是GPL或LGPL)。

4 个答案:

答案 0 :(得分:3)

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;

答案 1 :(得分:2)

Xint库目前在review下,成为Boost的一部分。虽然讨论相当有争议,但审查的结果尚不清楚,但图书馆满足了您的一些要求:

  • 仅限标题
  • 合理许可

审查期间讨论的一点是性能。如果被接受为官方Boost库,我希望能及时解决性能问题。

所以我试试看:CodeDocumentation

答案 2 :(得分:0)

在某些平台上可以使用某些本机128位类型,您往往受到体系结构的限制。例如,__m128可用于SSE2?

http://msdn.microsoft.com/en-us/library/ayeb3ayc.aspx

此ABI中也列为__int128

http://www.x86-64.org/documentation/abi-0.99.pdf

然而,uint128_tuint256_t的首选命名可以在SHOGUN中找到,SHOGUN是一个“专注于支持向量机(SVM)的大型机器学习工具箱”

http://www.shogun-toolbox.org/doc/index.html

答案 3 :(得分:0)

根据您的要求,STL类bitset可能符合您的需求。它响应整数类型执行的所有位操作运算符(<<|等),但遗憾的是不会像+*这样的算术运算符。它的大小在编译时通过模板参数固定。另一个不幸的事情是,API无法获取底层二进制表示(例如,用于流式传输),这可能严重限制其有用性。

(我知道这是一个老问题,但这个答案可能对其他人有帮助。)