楽しんだ者勝ち~就活を終えて伝えたいこと~

MENU

【C言語】srandの使用例②

【スポンサーリンク】

はじめに

 【C言語】srandの使用例①の続きです。このページでは、分散を考慮したコードを貼り付けています。


『分散』とは

 分散とは、「偏差2乗の平均」と定義されています。



 例えば、{2,3,4,5,6,7}と数値をおいたとき、平均は、4.5となります。次に、各数値から平均を引くことで偏差を求めます。その結果が{-2.5,-1.5,0,0.5,1.5,2.5}となります。
 これらの値の2乗平均、2.875が分散値となります。



 ここで注意してほしいのは、単位は、偏差の2乗ということです。


コード

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <math.h>
#include <unistd.h>
#include <time.h>

/*****define*****/
#define count  1024//回数

typedef struct complex{
	int out;
	double average;
}comp;

void rand_num0(comp rand_0[],double dispersion[0]);
void rand_num1(comp rand_1[],double dispersion1[0]);

int main(int argc, char const *argv[]) {


  int i;
  double average,dispersion[0],dispersion1[0];
  comp rand_0[count];
  comp rand_1[count];
  rand_num0(rand_0,dispersion);
  rand_num1(rand_1,dispersion1);
 
  FILE *fp;
      if((fp=fopen("test.csv","w"))==NULL){
                printf("FILE not open\n");
        return -1;
      }
      for ( i = 0; i < count; i++) {
        fprintf(fp,"%d,%d\n", rand_0[i].out,rand_1[i].out);
      }
      fprintf(fp,"\nAverage,%lf,Dispesion,%lf,Average,%lf,Dispesion,%lf\n", rand_0[0].average,dispersion[0],rand_1[0].average,dispersion1[0]);
      printf("End\n");
      fclose(fp);
      return 0;
}

void rand_num0(comp rand_0[],double dispersion[0]) {

  int i,rand_sum;
  double dispersion_sum;

  /* initialization */
  srand(time(NULL));

  /* 1 〜 43 のランダムな数値 */
  for ( i = 0; i < count; i++) {
    rand_0[i].out = rand() % 43 + 1;
    rand_sum  += rand_0[i].out;
  }

    rand_0[0].average = rand_sum/count;

    for ( i = 0; i < count; i++) {
     dispersion_sum += pow(rand_0[i].out - rand_0[0].average,2);
     }
     dispersion[0] = dispersion_sum/count;
}

void rand_num1(comp rand_1[],double dispersion1[0]) {

  int i,rand_sum;
  double dispersion_sum;

  /* initialization */
  srand(time(NULL)/3);
  rand_sum = 0;
  dispersion_sum = 0.0;
  dispersion1[0] = 0.0;
 
  /* 1 〜 43 のランダムな数値 */
  for ( i = 0; i < count; i++) {
    rand_1[i].out = rand() % 43 + 1;
    rand_sum  += rand_1[i].out;
  }
 
   rand_1[0].average = rand_sum/count;

  for ( i = 0; i < count; i++) {
   dispersion_sum += pow(rand_1[i].out - rand_1[0].average,2);
    }
   dispersion1[0] = dispersion_sum/count;
}