夏天即将到来,我和一群朋友正在为此做好准备:)
我们决定构建一个编译时任意精度的无符号整数。我们想为库提供一组整数算法(函数)。我们已经看到了对此类库(SoC2010,C++0x Standard Library wishlist)的一些请求。此外,通常会请求常规运行时bigint
,但我们不想进入内存管理的麻烦。这个想法来自一个名为TTMath的库,不幸的是这个库只适用于特定平台,因为Assembly在库中被广泛使用。我们想编写一个标准库,具体取决于C ++标准库和Boost。此外,我们希望在当前编译器中使用可用的C ++ 0x工具,如用户定义的文字和其他。这在技术上会使图书馆暂时不标准,但我们认为新标准是官方的是时间问题。
您对整个过程的提示,包括设计,实施,文档,图书馆的可维护性,都非常受欢迎。我们是一群学生和应届毕业生,他们在夏天寻找有趣的东西,但我们看到Boost充满了大师,我们不想忘记太明显的事情。我们正在线上进行通信,因此没有共享的白板:(
以下是使用此类库的示例:
typedef our_namespace::uint<512> uint512_t;
// declaring an unsigned int with 512 bits width.
// After that the user is supposed to deal with it just like the native types.
谢谢,
答案 0 :(得分:5)
另外两个提示:
a)在Boost环境中,规划纯C ++ 0x库似乎不是一个好主意。 Boost的目标之一是提供跨平台/交叉编译库。通常对使用C ++ 0x功能感兴趣的Boost作者在使用C ++ 0x编译器时作为替代方案。为此,Boost预定义了一整套预处理器宏,每个宏对应一个C ++ 0x特性。
b)请考虑使用您的想法写入Boost开发列表,概述您计划的库的功能集。你可以在那里问同样的问题,顺便说一下。如果你这样做,我相信你会得到很多有用的答案和建议。
答案 1 :(得分:4)
答案 2 :(得分:2)
我的提示:访问提升网站并按照回答确切问题的说明进行操作。
答案 3 :(得分:2)
这个想法来自图书馆 不幸的是,这称为TTMath 图书馆仅适用于特定的 平台因为使用了Assembly 广泛地在图书馆。
您是否计划实施完整的algebric运营支持? (加法,乘法,平方根等)。
如果你这样做,也请查看CryptoPP::Integer class。它是一个功能齐全的任意精度整数类,支持完整的算术运算。它也是跨平台的。
它的问题在于它考虑了复杂的代数(用于加密操作),所以它不仅仅是一个通用的整数类。
它还支持BER / DER和OpenPGP编码和解码作为类的一部分,以及许多其他操作,这些操作可能不应该是通用整数实现的一部分。
您对整个过程的暗示 包括设计,实施, 文档,可维护 图书馆不仅仅是欢迎光临。
您还可以研究开发一个十进制类(类似于c# decimal),类似于float / double,但不会在溢出时失去精度。数学部分至少会简单得多。
答案 4 :(得分:2)
请实施高效的modpow
功能。类似于Java的[BigInteger.modPow] [1]
当您开始使用时,RSA加密非常简单。两个素数和一些常规数学运算符。使用标准C ++实现&lt; 32位加密是微不足道的。
这些操作中的一对操作可能非常耗费CPU,然后是一个模数。由于RSA被广泛使用,因此进行了大量研究,并且可以有效地组合这两个操作。新操作称为modpow
。
因此,给定一个具有高效modpow的高效的abitrary精度迭代库,可以简单地实现全强度RSA。完整的加密解决方案还需要生成一些随机素数,但这是一个更大的范围。
[1]:http://java.sun.com/j2se/1.4.2/docs/api/java/math/BigInteger.html#modPow(java.math.BigInteger,java.math.BigInteger)
答案 5 :(得分:1)
从这种事情的动机开始。我很好奇有什么应用程序。通过“编译时”我假设你的意思是模板元编程解决方案,对吗?
这听起来像是一个有趣的项目,但可能没有用作提升的一部分(或者可能有用......你必须提供那些重要的细节。)