ページ 11

processingで平均値を求める

Posted: 2014年2月27日(木) 18:27
by kosei
Processingを習い始めました。
下記のコードは、0から100の値の乱数をnumber回発生させ、その平均値をウィンドウに表すと言った内容です。

ウィンドウに値は表示されるのですが、平均値が正しくありません。

なぜなら1000000回、0~100の乱数を発生させた時の平均値が103を超えてしまうからです。

下記のコードでどこに問題があるかご教授頂けないでしょうか?
よろしくお願い致します。

コード:

void setup(){
  size(400,400);
  background(245);
  noLoop();
}
double avgrand(double n){
  double i;
  for (i=0;i<n;i++){
    x=x+random(0,100);
  }
  return x/n;
}

void draw(){
    float y;
    double [] number = {12345, 54321, 234567, 765432, 1000000};
    String strn2="";
    for (int p = 0; p < number.length; p++){
        y=(float)avgrand(number[p]);
        strn2=nf(y,1,6);
    
    fill(0,145,0);
    textSize(32);
    if(number[p] == 12345){
    text(strn2,width/4,height/5);
    }else if(number[p] == 54321){
      text(strn2,width/4,height*2/5);
    }else if(number[p] == 234567){
      text(strn2,width/4,height*3/5);
    }else if(number[p] == 765432){
      text(strn2,width/4,height*4/5);
    }else{
      text(strn2,width/4,height*5/5);
    }
    }
}

Re: processingで平均値を求める

Posted: 2014年2月27日(木) 19:00
by N.R
x の初期化が見当たりませんが

Re: processingで平均値を求める

Posted: 2014年2月27日(木) 19:08
by kosei
大変申し訳ありません、コピーミスをしました。
先ほど上げたコードの一番上に

double x = 0.0;

と書いてあります。

Re: processingで平均値を求める

Posted: 2014年2月27日(木) 19:16
by 白い時空
double x = 0.0;はavgrand関数内ではないのですか?

もしグローバル変数だとすると、xの値が関数を再び実行する時に初期化されないことになるのですが‥

Re: processingで平均値を求める

Posted: 2014年2月27日(木) 21:01
by kosei
おっしゃる通りでした。
double x = 0.0 をavgrand関数内で読み込んだところちゃんと平均値が表示されました。
N.Rさん、白い時空さん、アドバイスありがとうございました。
今後とも勉強に励みたいと思います。