c++ - 具有小整数有效加法的 Bignum 实现

标签 c++ python bignum gmp arbitrary-precision

我一直在使用 python 的 native bignums 作为算法,并决定通过将其转换为 C++ 来尝试加速它。当我使用 long longs 时,C++ 比 python 快大约 100 倍,但是当我在 C++ 中使用 GMP 绑定(bind)时,它只比 python 快 10 倍(对于适合 long longs 的相同情况)。

是否有更好的 bignum 实现来进行大量的小加法?例如,我们有一个大数 N,我们将添加很多小的 +1、+21、+1 等,并且每隔一段时间添加另一个大数 M?

最佳答案

GMP 库本身有一个 fast short integer add to MPZ routine

void mpz_add_ui (mpz_t rop, mpz_t op1, unsigned long int op2)

我不知道 gmpy 是否使用它,但如果它确实使用它,请尝试将普通 python int 添加到 mpz 与将 mpz 添加到 mpz 并查看它是否更快。

编辑

我尝试了一些基准测试,发现它没有任何区别

$ python -m timeit -c 'from gmpy import mpz
> a=mpz(10**1000)' 'a+1'
100000 loops, best of 3: 5.4 usec per loop

$ python -m timeit -c 'from gmpy import mpz
a=mpz(10**1000); b=mpz(1)' 'a+b'
100000 loops, best of 3: 5.5 usec per loop

所以我猜 gmpy 不使用 mpz_add_ui 因为我真的希望它快得多。

关于c++ - 具有小整数有效加法的 Bignum 实现,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1831212/

相关文章:

c++ - 如何将 int 数组转换为 OpenSSL BIGNUM?

c - C 中的大数减法

c++ - 调试代码的运行时间比发布代码长几个数量级

c++ - QTableWidget 到多个文件

c++ - 以非多态方式调用虚函数的成本是多少?

c++ - 是否可以重新定义析构函数?

python - 如何加快大字典的迭代速度

python - TypeError : tuple indices must be integers, not str

python - 检查数据框中列的字符串值是否以元组的字符串元素开头(除了 str.startswith)

php - Unix 时间戳和 JavaScript 时间;太大!