0

私の標準偏差はかなり外れています。入力時: 2 4 4 4 5 5 7 9 n

2 が出ません。これが私のコードです。私はすべてがチェックアウトすると信じているので、なぜ 2 ではなく 1.8284791953425266 を取得し続けるのか理解できません:

import java.util.Scanner;

public class stocks {

  public static void main(String[] args) {

     Scanner in = new Scanner(System.in);
     double currentNum = 0;
     double numtotal = 0;
     int count = 0;
     double mean = 0;
     double square = 0, squaretotal = 0, sd = 0;

     System.out.println("Enter a series of double value numbers, ");
     System.out.println("Enter anything other than a number to quit: ");

     while (in.hasNextDouble()) 
     {

         currentNum = in.nextDouble();
         numtotal = numtotal + currentNum;

         count++;
         mean = (double) numtotal / count;
         square = Math.pow(currentNum - mean, 2.0);
         squaretotal = squaretotal + square; 
         sd = Math.pow(squaretotal/count, 1/2.0);
     }

     System.out.println("The mean is: " +mean);
     System.out.println("The standard deviation is: " +sd);

     }


 }
4

2 に答える 2

2

標準偏差を計算する前に、すべての数値の平均を計算する必要があります。現在、あなたの平均は、現在の数値までのすべての数値の平均です。あなたの問題はここにあります

square = Math.pow(currentNum - mean, 2.0);

この時点での平均は、これまでに見た数値の平均です。これは、numtotal がこれまでに見た数値の合計であるためです。これを修正するには、最初にすべての数値を配列リストのようなものに取り込むことができます。次に、すべての数値で平均を計算し、その後、平方差を計算して標準偏差を計算します。

于 2013-03-05T05:07:18.160 に答える
0

countそれで割る場合は、double にする必要があります。

mean = (double) numtotal / count;

-->

mean = (double) numtotal / (double) count;
于 2013-03-05T14:14:57.230 に答える