processingで平均値を求める

フォーラム(掲示板)ルール
フォーラム(掲示板)ルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら
kosei
記事: 15
登録日時: 11年前

processingで平均値を求める

#1

投稿記事 by kosei » 11年前

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);
    }
    }
}

N.R

Re: processingで平均値を求める

#2

投稿記事 by N.R » 11年前

x の初期化が見当たりませんが

kosei
記事: 15
登録日時: 11年前

Re: processingで平均値を求める

#3

投稿記事 by kosei » 11年前

大変申し訳ありません、コピーミスをしました。
先ほど上げたコードの一番上に

double x = 0.0;

と書いてあります。

白い時空
記事: 18
登録日時: 14年前
住所: 埼玉県さいたま市

Re: processingで平均値を求める

#4

投稿記事 by 白い時空 » 11年前

double x = 0.0;はavgrand関数内ではないのですか?

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

kosei
記事: 15
登録日時: 11年前

Re: processingで平均値を求める

#5

投稿記事 by kosei » 11年前

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

閉鎖

“C言語何でも質問掲示板” へ戻る