c++ - 如何使用 GMP 有效地添加 3 个大整数
问题描述
我想对 ~2048 位有符号整数执行 x = a + b + c 。目前我的代码看起来像
mpz_add(x, a, b);
mpz_add(x, x, c);
是否有一个函数可以做到这一点?这在我的应用程序中发生了很多次。我已经分析了我的代码,并且 3 路添加步骤占用了运行时的很大一部分。如果有另一种方法可以一次性完成此操作,这可能会有所帮助。
解决方案
我已经广泛使用 MPFR,并且几乎浏览了文档的每个部分。我几乎可以肯定 MPFR 中不存在这样的东西,因此,我几乎可以肯定 GMP 中不存在这样的东西。
一种解决方案可能是切换到 MPFR 并使用Pavel Holoborodko 的 MPFR C++,它为 MPFR 函数添加了运算符。我无法想象这会提高性能(尽管它可能不会对其产生太大影响),它在 GPL 下,您必须安装另一个库,但它会结合操作。
我不知道有什么快速算法可以在添加三个数字时不只是添加其中两个然后在幕后添加最后一个数字。我认为使用任何语言的任何库将这两个操作组合成一个操作不会有助于提高性能。即使使用 GNU MP,任意精度也很慢。如果有帮助,我在Code Review 上比较了速度。
推荐阅读
- bash - bash检查输出中是否存在字符串
- linux - Qemu 引导原始内核映像(不是 ELF)
- laravel - 如何设置到控制器的路由并通过表单访问它?
- google-chrome-extension - Chrome 扩展 - 键盘快捷键在发布到商店时不起作用
- python - 显示滚动文本后其他组件未显示
- .net-core - 等效于不创建二进制依赖项的 ProjectReference
- javascript - 使用 Jquery 使绝对按钮具有粘性动画
- java - 使用递归函数从具有交替负数(0、1、-1、2、-3、5 ...)的斐波那契模式中输出第 N 个数
- java - Spring Boot 配置文件未选择属性文件
- php - 尝试在 PHP 和 Apache 中使用 slim 框架时找不到 URL