首页 > 解决方案 > 如何使用 GMP 有效地添加 3 个大整数

问题描述

我想对 ~2048 位有符号整数执行 x = a + b + c 。目前我的代码看起来像

mpz_add(x, a, b);
mpz_add(x, x, c);

是否有一个函数可以做到这一点?这在我的应用程序中发生了很多次。我已经分析了我的代码,并且 3 路添加步骤占用了运行时的很大一部分。如果有另一种方法可以一次性完成此操作,这可能会有所帮助。

标签: c++performancegmpbignum

解决方案


我已经广泛使用 MPFR,并且几乎浏览了文档的每个部分。我几乎可以肯定 MPFR 中不存在这样的东西,因此,我几乎可以肯定 GMP 中不存在这样的东西。

一种解决方案可能是切换到 MPFR 并使用Pavel Holoborodko 的 MPFR C++,它为 MPFR 函数添加了运算符。我无法想象这会提高性能(尽管它可能不会对其产生太大影响),它在 GPL 下,您必须安装另一个库,但它会结合操作。

我不知道有什么快速算法可以在添加三个数字时不只是添加其中两个然后在幕后添加最后一个数字。我认为使用任何语言的任何库将这两个操作组合成一个操作不会有助于提高性能。即使使用 GNU MP,任意精度也很慢。如果有帮助,我在Code Review 上比较了速度。


推荐阅读