方差计算返回不同的答案

时间:2016-07-17 19:16:32

标签: java

在我的Java文件中,我构建了一种方法来计算文本文件中数字列表的差异。

该功能如下所示

public void varience(File commaSeperated) {
    List<String> dataToSplit = new ArrayList<String>();

    try {
        BufferedReader br = new BufferedReader(new FileReader(commaSeperated));
        String currentLine;
        while ((currentLine = br.readLine()) != null) {
            String[] tempArray = currentLine.split(",");
            for(String s : tempArray) {
                dataToSplit.add(s.replaceAll("\t", "").replaceAll("\n", "").trim());
            }
        }

        br.close();
    } catch(Exception e) {
        e.printStackTrace();
    }

    BigDecimal finalD = new BigDecimal("0");
    int count = 0;

    for(String temp : dataToSplit) {
        finalD = finalD.add(new BigDecimal(temp));
        count++;
    }

    System.out.println("Elements: " + count + ", Sum: " + finalD + ", Average: " + (finalD.divide(new BigDecimal(count))));

    BigDecimal average = finalD.divide(new BigDecimal(count));

    count = 0;
    BigDecimal finalVar = new BigDecimal(0);

    for(String temp : dataToSplit) {
        BigDecimal tempBD = ((new BigDecimal(temp)).subtract(average)).pow(2);
        finalVar = finalVar.add(tempBD);
        count++;
        System.out.println("Original Value: " + temp + ", Pass: " + count + ", Adding: " + tempBD + ", CurrentValue: " + finalVar);
    }

    System.out.println(finalVar.divide(new BigDecimal(count))); //This prints the variance
}

文件中的列表如下

7.1,7.1,7.1,7.1,7.2,7.2,7.2,7.2,7.2,7.2,7.2,7.3,7.3,7.3,7.3,7.3,7.3,7.3,7.3,7.3,7.3,7.3,7.4,7.4,7.4,7.4,7.4,7.4,7.4,7.4,7.4,7.4,7.4,7.4,7.4,7.4,7.4,7.4,7.5,7.5,7.5,7.5,7.5,7.5,7.5,7.5,7.5,7.5,7.5,7.5,7.5,7.5,7.5,7.5,7.5,7.5,7.5,7.5,7.6,7.6,7.6,7.6,7.6,7.6,7.6,7.6,7.6,7.6,7.6,7.6,7.6,7.6,7.6,7.6,7.6,7.6,7.6,7.6,7.7,7.7,7.7,7.7,7.7,7.7,7.7,7.7,7.7,7.7,7.7,7.7,7.7,7.7,7.8,7.8,7.8,7.8,7.8,7.8,7.9,7.9

使用此功能,程序会将方差值打印为0.034899。但是,当我决定通过外部源传递数字列表时,返回了不同的值0.034898999999923。这已经解决了here

所以问题:我的代码在某种程度上是错误的,还是由于某种原因截断了最终值的精度,或者我的代码是否正确以及外部源返回的答案是否错误?

0 个答案:

没有答案