哪些Java库可以快速实现浮点或定点操作,精度为几千位?他们的表现如何?
对我来说,一个要求是它实现了一种乘法算法,该算法优于天真乘法算法,该算法花费4倍于2倍大数字的数字(比较乘法算法).
Arbitrary Precision Arithmetic页面上提到了三个库:java.math(包含提到的BigDecimal),Apfloat和JScience.我对它们运行一点速度检查,它只使用加法和乘法.
结果是,对于相对较少的数字,BigDecimal是可以的(1000个数字的速度是其他数字的一半),但是如果你使用更多的数字,那么它就离开了 - JScience的速度提高了大约4倍.但明显的表现赢家是Apfloat.其他库似乎使用天真的乘法算法,其时间与数字的平方成正比,但Apfloat的时间似乎几乎呈线性增长.在10000位数上,它的速度是JScience的4倍,但在40000位数上,它的速度是JScience的16倍.
另一方面:JScience为数学问题提供了优秀的功能:矩阵,向量,符号算法,方程系统的解决方案以及其他方法.因此,我可能会选择JScience,然后编写一个包装器将Apfloat集成到JScience的算法中 - 由于良好的设计,这似乎很容易实现.
(更新:我为JScience的数字包编写了一个测试套件并修复了一些错误.这进入了4.3.1版本.所以我建议你查看它.)
你检查过BigDecimal的性能吗?我在JavaDoc中看不到任何明显的东西,但它肯定是我的第一个停靠点.