2

我一直在编写一些 cython 代码来实现我想在 python 中使用的多精度数组运算(主要是点积和矩阵求逆)。我使用 mpfr 作为底层 C 库,通过在 C 和 Cython 中进行测试,我发现 mpfr(以 200 位精度)比 numpy(以机器精度)慢 50-200 倍(取决于操作)。我知道 mpfr 非常快,但我仍然发现这个开销非常大。由于我的需求非常有限(固定精度,只有基本操作,如加法、乘法等。)我想知道我是否可以手动编写一些多精度操作(不考虑仔细舍入等)。不幸的是,这涉及很多工作,所以我希望在 C 或英特尔汇编中找到一些免费的代码片段,用于进行基本的多精度算术。

更新:我应该提到我已经尝试过 QD 库,它实际上(稍微)慢于类似精度(212 位)的 MPFR。我想这一定是由于 C++ 开销。

4

1 回答 1

4

您可以尝试使用双双四双库。这些库利用现有的双精度硬件来提高速度(我写了一个摘要作为我自己问题的一部分)。后者似乎有代码

这些库要求底层硬件完全按照 IEEE 754 标准的要求运行。如果计算过于精确,它们就会崩溃。如果您以现代桌面处理器为目标,请确保您的编译器为浮点计算生成 SSE2 指令。如果由于某种原因你被 8087 指令卡住,你最好使用双双扩展库(数字表示为两个 80 位数字的总和)。CRlibm中有一个应该不需要太多工作就可以出来。


或者,可能值得尝试 GMP 的 MPF 类型。根据后者的常见问题解答,它可能会更快,因为它不会像 MPFR 那样好。

于 2013-05-08T11:46:47.033 回答