我在java采访中被问到这个问题:我被要求弄清楚浮点数组中元素的总和。然而,这些元素包括非常大和非常小的数字,问题是,我如何保证摘要的准确性?
我想这需要对Java中的Float实现有一些体面的理解,我不幸的是缺乏,或者这是一个合理的问题?
答案 0 :(得分:2)
我怀疑采访者所追求的是对浮点数的基本理解。从最小到最大(幅度)数字的添加给出了最小的舍入误差,因此第一步是相应地对数组进行排序。然后,您可以通过推荐使用Kahan summation algorithm来打动面试官。
答案 1 :(得分:1)
简单的答案是使用BigDecimal。这种类型可以容纳任意大的值。
如何做这样的总和的基本例子:
public BigDecimal sum(float[] floats) {
BigDecimal sum = BigDecimal.ZERO;
for (float aFloat : floats) {
sum = sum.add(new BigDecimal(aFloat));
}
return sum;
}
答案 2 :(得分:-2)
如果可以牺牲精度的性能,可以将浮点数转换为BigDecimals并将后者相加。
答案 3 :(得分:-2)
在您的情况下,您可以使用BigDecimal java类型。