Java 浮点高精度库 [已关闭]

2022-09-01 22:36:52

有哪些 Java 库具有快速实现浮点或定点运算,精度为数千位?它们的性能如何?

对我来说,一个要求是它实现了一种乘法算法,该算法比朴素乘法算法更好,对于2倍的位数(比较乘法算法),需要4倍的时间。


答案 1

任意精度算术页面上提到了三个库:java.math(包含提到的BigDecimal),ApfloatJScience。我对它们进行了一些速度检查,仅使用加法和乘法。

结果是,对于相对较少的位数,BigDecimal是可以的(对于1000位,它的速度是其他数字的一半),但是如果你使用更多的数字,它就远远不够了 - JScience的速度大约快4倍。但明显的性能赢家是Apfloat。其他库似乎使用朴素的乘法算法,这些算法花费的时间与位数的平方成正比,但Apfloat的时间似乎几乎是线性增长的。在10000位数字上,它的速度是JScience的4倍,但在40000位数字上,它的速度是JScience的16倍。

另一方面:JScience为数学问题提供了出色的功能:矩阵,向量,符号算法,方程组的解等等。因此,我可能会使用JScience,稍后编写一个包装器,将Apfloat集成到JScience的算法中 - 由于良好的设计,这似乎很容易实现。

(更新:我为JScience的数字包编写了一个测试套件,并修复了一些错误。这进入了4.3.1版本。所以我可以推荐看看它。


答案 2

你有没有检查过BigDecimal的性能?我在JavaDoc中看不到任何明显的东西,但它肯定是我的第一个停靠港。