我应该使用BigDecimal还是加倍?

时间:2016-03-09 23:04:34

标签: java floating-point

我必须在我的代码中计算一个相当复杂的公式,我想知道如何决定是使用BigDecimal还是只使用double来完成它。

功能是:

f(x) = 1.03^(4 - ((1/3) * (x-9)^2))

其中x是一个双舍入到4个小数点,例如1.2345

使用BigDecimaldouble的优缺点是什么?如果我使用double代表所有内容,我可能失去多少精确度?

2 个答案:

答案 0 :(得分:1)

使用 BigDecimal 而不是 double 的主要优点是第一个可以在固定数量小数上获得更高的精度。主要的一点是 BigDecimal 需要更多的CPU操作来进行相同的计算。

关于两者的精确度,如果你采用旧货币价值的相同例子(我来自欧洲,然后是欧元),你可以立即看到0,009欧元或更少只是在最小单位时没有任何意义是0,01€。这是一个固定的精度值, BigDecimal 很适合管理它。

如果您的问题的计算是关于需要足够精确的事情(或Jonah所说的平均良好精度)并且没有明确定义的最小单位,那么可以是浮动的点值。

答案 1 :(得分:0)

双人平均可准确存储16位有效数字。我不认为在该公式中使用双精度会导致重大数据丢失。但是,如果速度根本不是问题,那么使用BigDecimal将是我的选择。见How many significant digits have floats and doubles in java?

相关问题