我必须在我的代码中计算一个相当复杂的公式,我想知道如何决定是使用BigDecimal
还是只使用double
来完成它。
功能是:
f(x) = 1.03^(4 - ((1/3) * (x-9)^2))
其中x
是一个双舍入到4个小数点,例如1.2345
使用BigDecimal
与double
的优缺点是什么?如果我使用double
代表所有内容,我可能失去多少精确度?
答案 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?