c++ - 具有任意基数的基本任意精度算术的最佳性能

标签 c++ performance math assembly

<分区>

在任意基数上执行基本任意精度算术并具有最佳性能的最佳方法是什么?

我正在考虑切换到二进制,然后使用一些内联汇编,但实际上,我需要最佳性能的方式来做到这一点,但我不确定这是最好的方式。

编辑:除了标准的 C++ 库之外,我不想使用任何库。

最佳答案

问题是,使用多精度数值算法可获得的“最佳”性能在很大程度上取决于您正在处理的数据(例如您可能需要计算的数字的平均顺序)。以 gnu gmp 使用的算法选择的讨论为例:

https://gmplib.org/manual/Algorithms.html

Gnu GMP 代码也在 glibc 中使用(特别是在精确的浮点转换代码中),因此在某种意义上它是“标准 c”库的一部分。

说到个人经验,要击败GMP的性能数据是非常困难的(事实上,在一般情况下甚至很难达到GMP性能的2倍以内,所以如果性能是绝对优先的,你可能想要重新考虑您的设计目标)。多精度计算的性能并不强烈依赖于实现技术(因此,如果您的数字相当长,那么您不会通过使用汇编而不是像 Java 这样的东西来赢得任何东西)- 算法的复杂性必然会占主导地位。事实上,从可用的最高级别语言开始并从那里进行优化是有意义的。

为了以防万一,如果您还没有阅读 Knuth 的 TAoCP 第 4 章第 2 卷,您绝对应该这样做。

我知道这可能不是您要找的答案,但它比评论要长。

关于c++ - 具有任意基数的基本任意精度算术的最佳性能,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20481896/

相关文章:

c++ - 检查 argv[i] 是否存在 C++

Python 字符串连接成语。需要澄清。

sql - ON和WHERE子句的位置和效率表现

python - 如何通过优雅的编码更快地将一些逻辑应用于数据框列

c - 使出现巨大的数字

javascript - 计算倾斜 div 的左 css 值

Android NDK 异常失败 : dlopen failed: cannot locate symbol "_ZN7Tangram11setPositionEdd" referenced by "libtangram.so"

c++ - OpenGL 和 GLFW - 我需要着色器来绘制点吗?

c++ - 将 cv::Mat 转换为 IplImage*

java - 为什么在 Weighted QuickUnion 中联合和查找操作期间的数组访问次数据说是 lg(N) 的顺序?