整数的乘法和除法分为几部分

时间:2011-05-25 21:14:16

标签: c++ math operator-overloading uint

有没有人知道在哪里可以获得关于如何对存储在部件中的整数进行乘法和除法(甚至模数)的说明?我正在建立一个存储uint128_t uint64_t UPPER, LOWER的库。

5 个答案:

答案 0 :(得分:2)

您熟悉GMP库吗?为什么不使用它而不是实现自己的?

从上面的链接,您可以下载基于Unix的操作系统的tar.bz文件。

对于Windows,请参阅此链接:

它有许多MinGW,MSVC ++和CgyWin的信息和安装文件。下载适合您的需求。您还可以看到以下链接:


完成安装和配置后,您想知道如何使用GMP进行编程,以便浏览这些链接:

答案 1 :(得分:1)

以这种方式分割您的号码是Karatsuba multiplication的理想先决条件。考虑:

x = x1 * 2^k + x2
y = y1 * 2^k + y2

使用学校乘法,你需要4次乘法:

x*y = (x1*y1) * 2^(2*k) + (x1*y2 + x2*y1) * 2^k + x2*y2

Karatsuba需要更多的添加,但只需要3次乘法:

p1 = x1 * y1
p2 = x2 * y2
x*y = p1 * 2^(2*k) + ((x1+x2)*(y1+y2) - p1 - p2) * 2^k + p2      

当然问题是如何处理溢出。

答案 2 :(得分:0)

http://en.wikipedia.org/wiki/Arbitrary-precision_arithmetic可能是一个好的开始。已经有很多开源库

答案 3 :(得分:0)

看看各种Big Integer库。这是谷歌找到的https://mattmccutchen.net/bigint/

答案 4 :(得分:0)

我对同一主题感兴趣,我在这里找到了类似的问题:How to implement big int in C++ 我希望它会指出你正确的方向!