由大小元素组成的浮点数组的总和

| 在Java采访中有人问我这个问题:我被要求找出float数组中元素的总和。但是,元素包含非常大的数字和非常小的数字,问题是,如何保证摘要的准确性? 我想这需要对Java中的Float实现有一些体面的理解,但我很遗憾缺乏这种理解,或者这是一个合理的问题吗?     
已邀请:
        我怀疑面试官所追求的是对浮点取整的基本了解。从最小(最大)到最大(幅度)数字相加得到的舍入误差最小,因此第一步是对数组进行相应排序。然后,您还可以通过推荐使用Kahan求和算法来打动面试官。     
        简单的答案是使用BigDecimal。这种类型可以容纳任意大的值。 如何做这样的总和的基本示例:
public BigDecimal sum(float[] floats) {
    BigDecimal sum = BigDecimal.ZERO;

    for (float aFloat : floats) {
        sum = sum.add(new BigDecimal(aFloat));
    }

    return sum;
}
    
        如果为了牺牲精度而牺牲性能,则可以将浮点数转换为BigDecimals并求和。     
        您可以使用BigDecimal Java类型。     

要回复问题请先登录注册