我想知道是否有任何人可以推荐一个好的轻量级固定大小整数类型(128位甚至256位,甚至可能是模板参数化)库。
我看过GMP和co,他们关心的很好,但是对我来说有点太大了,我现在对简单的标题解决方案感兴趣。性能很重要,目标架构将是x86和x86-64,也是一个合理的许可证(也就是GPL或LGPL)。
答案 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库,我希望能及时解决性能问题。
所以我试试看:Code,Documentation。
答案 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_t
和uint256_t
的首选命名可以在SHOGUN中找到,SHOGUN是一个“专注于支持向量机(SVM)的大型机器学习工具箱”
答案 3 :(得分:0)
根据您的要求,STL类bitset
可能符合您的需求。它响应整数类型执行的所有位操作运算符(<<
,|
等),但遗憾的是不会像+
或*
这样的算术运算符。它的大小在编译时通过模板参数固定。另一个不幸的事情是,API无法获取底层二进制表示(例如,用于流式传输),这可能严重限制其有用性。
(我知道这是一个老问题,但这个答案可能对其他人有帮助。)