包含大小元素的float数组的总和

时间:2011-06-12 19:58:58

标签: java arrays floating-point sum precision

我在java采访中被问到这个问题:我被要求弄清楚浮点数组中元素的总和。然而,这些元素包括非常大和非常小的数字,问题是,我如何保证摘要的准确性?

我想这需要对Java中的Float实现有一些体面的理解,我不幸的是缺乏,或者这是一个合理的问题?

4 个答案:

答案 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类型。