我想用一系列(无符号)整数编写一个简单的bignum类。我可以松散地看到加法和减法是如何工作的,但除法和乘法是另一个故事。我知道32位编译器可以通过在两个int32中分割int64来模拟64位int。我正在寻找一种有效的方法来做到这一点。
我想要C ++代码,而不是汇编代码。速度不是主要考虑因素,但没有组装的最有效解决方案总是很好。
答案 0 :(得分:4)
也许this可以作为起点。它使用base-65,536表示实现多达2,048位无符号整数。这意味着每个数字都适合16位,我们可以通过简单地使用32位来检测溢出(即使在乘法时)。
然而,这是C代码,但是移植到C ++应该是微不足道的,或者只是用作灵感。它非常适合于可读性而非速度,因为这不是我擅长的那种东西。 :)
答案 1 :(得分:1)
你最好看一下arbitrary precision arithmetic,它将解释模拟高精度处理器的过程背后的思考,而不是运行代码的过程。
答案 2 :(得分:0)
使用long long
有什么问题?这保证是在
至少64位。否则,你的Knuth(第2卷)应该提供基本的
算法。
答案 3 :(得分:0)
使用简单的字节数组。无论你想要什么,你都可以得到整数大小*。你只需要操作二进制并考虑结束(你的位将是7-6-5-4-3-2-1-0-15-14-13 ...)
* RAM有限
答案 4 :(得分:0)
对于任意大小,给GMP一个旋转,如果由于某种原因你不能依赖编译器为你做这个,它也适用于32位的64位数学运算。
答案 5 :(得分:0)
购买一本名为NUMERICAL RECIPES IN C ++的精装书,你会在20.6页p916到p925的页面上找到你想要的东西