我目前正在编写一个包含大量数学计算的应用程序。在某些情况下,这些计算需要快速完成,我们可以处理少量精度损失以尽快完成数学运算。另一方面,有时我们需要非常精确地完成计算(并且在两者之间有一些用例,我们将实现我们自己的乘法/除法/加法/减法/幂等方法,它比 float 更精确* float(或 double * double,我知道 float 是一个糟糕的选择),但比 BigDecimal.multiply(BigDecimal)... 甚至比 apfloat 而不是 BigDecimal 更快。
是否有任何现有库允许对此类数字格式进行抽象,以便抽象出不同的数学计算方式,还是我必须创建自己的库?
我已经开始编写一些代码,这似乎工作没问题,但我认为拥有一个经过良好测试的库比重新发明轮子要好得多。
已编辑以通过以下评论的内容澄清情况:
问题是 BigDecimal 比 double * double 等慢得多。我们需要能够在精度和速度之间切换。这背后的原因是我们需要能够运行快速测试以进行调试并与真实世界的数据进行交叉检查(不需要非常准确),但最终的模拟(通常需要几天到几周的时间:对于调试)将需要高精度。因此需要能够随意切换。
最佳答案
double
的精度是 float
的两倍多,而且速度通常不超过 10%。恕我直言,很少有充分理由使用 float
,使用 double
或 BigDecimal
通常更好。
关于Java 数字/数学抽象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8091083/