<分区>
在任意基数上执行基本任意精度算术并具有最佳性能的最佳方法是什么?
我正在考虑切换到二进制,然后使用一些内联汇编,但实际上,我需要最佳性能的方式来做到这一点,但我不确定这是最好的方式。
编辑:除了标准的 C++ 库之外,我不想使用任何库。
<分区>
在任意基数上执行基本任意精度算术并具有最佳性能的最佳方法是什么?
我正在考虑切换到二进制,然后使用一些内联汇编,但实际上,我需要最佳性能的方式来做到这一点,但我不确定这是最好的方式。
编辑:除了标准的 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/