SSブログ

random1.cpp [C++]

// Random
//
//  2012.03.03 coded by 心如

#include <iostream>
#include <ctime>
using namespace std;

// 乱数
class Random{
  int sd1, sd2, sd3;
  void SetSeed(int);
public:
  Random(){ SetSeed( time(NULL)); }
  Random(int seed){ SetSeed( seed); }
  float rand_f();
  // 0以上n未満の整数の乱数
  int rand_i(int n){ return (int )(rand_f() * n); }
};
// 乱数の初期値の設定
void Random::SetSeed(int seed){
  sd1 = seed % 30269 + 1;
  sd2 = seed % 30307 + 1;
  sd3 = seed % 30323 + 1;
}
// 実数(0以上1.0未満)の一様乱数の発生
float Random::rand_f(){
  float f;
  sd1 = (sd1 % 177) * 171 - (sd1 / 177) * 2;
  if(sd1 < 0) sd1 += 30269;
  sd2 = (sd2 % 176) * 172 - (sd2 / 176) * 35;
  if(sd2 < 0) sd2 += 30307;
  sd3 = (sd3 % 178) * 170 - (sd3 / 178) * 63;
  if(sd3 < 0) sd3 += 30323;
  f = sd1 / 30269.0 + sd2 / 30307.0 + sd3 / 30323.0;
  while( f >= 1.0){
    f -= 1.0;
  }
  return f;
}

// 経過時間
class Timer{
  clock_t stime;
public:
  Timer(){ stime = clock(); }
  float GetTime(){
    return (float )(clock() - stime) / CLOCKS_PER_SEC;
  }
};

const Mxn = 200;
const Kai = 1000000;

int main(){
  int i, n, max, min;
  int da[Mxn] = { 0};
  Random a((int)time(NULL));
  float fv;
  Timer st;
 
  for( i = 0; i < Mxn * Kai; i++){
    n = a.rand_i( Mxn);
    da[ n] += 1;
  }
  max = Kai;
  min = Kai;
  for(i = 0; i < Mxn; i++){
    printf("%7d,", n = da[ i]);
    if( max < n) max = n;
    if( min > n) min = n;
  }
  cout << "Max=" << max << " Min="<< min << endl;
  fv = st.GetTime();
  cout << fv << "秒 "<< Mxn * Kai / fv << "回/秒";
}
─────

CPP random1.jpg


タグ:乱数
nice!(0)  コメント(0)  トラックバック(0) 

nice! 0

コメント 0

コメントを書く

お名前:
URL:
コメント:
画像認証:
下の画像に表示されている文字を入力してください。

Facebook コメント

トラックバック 0

random.cppcd141.cpp ブログトップ

この広告は前回の更新から一定期間経過したブログに表示されています。更新すると自動で解除されます。