一様乱数,ガウス性乱数生成. このライブラリの登録時に使ったプログラム:Demo_GaussRand

Dependents:   Demo_GaussRand F746_SinWithNoiseGenerator F446_FunctionGenerator

Committer:
MikamiUitOpen
Date:
Mon Jun 25 12:54:50 2018 +0000
Revision:
0:9a89ea736473
1

Who changed what in which revision?

UserRevisionLine numberNew contents of line
MikamiUitOpen 0:9a89ea736473 1 //---------------------------------------------------------
MikamiUitOpen 0:9a89ea736473 2 // 線形合同法による一様乱数を使い,中心極限定理を利用する正規乱数発生
MikamiUitOpen 0:9a89ea736473 3 // <文献>
MikamiUitOpen 0:9a89ea736473 4 // 三上直樹:「アルゴリズム教科書」,第11章,CQ出版,1996年.
MikamiUitOpen 0:9a89ea736473 5 //
MikamiUitOpen 0:9a89ea736473 6 // 2018/06/25, Copyright (c) 2018 MIKAMI, Naoki
MikamiUitOpen 0:9a89ea736473 7 //---------------------------------------------------------
MikamiUitOpen 0:9a89ea736473 8
MikamiUitOpen 0:9a89ea736473 9 #include "Random.hpp"
MikamiUitOpen 0:9a89ea736473 10
MikamiUitOpen 0:9a89ea736473 11 namespace Mikami
MikamiUitOpen 0:9a89ea736473 12 {
MikamiUitOpen 0:9a89ea736473 13 class GaussRand
MikamiUitOpen 0:9a89ea736473 14 {
MikamiUitOpen 0:9a89ea736473 15 public:
MikamiUitOpen 0:9a89ea736473 16 // sigma 標準偏差
MikamiUitOpen 0:9a89ea736473 17 // av 平均値
MikamiUitOpen 0:9a89ea736473 18 // x 乱数の種
MikamiUitOpen 0:9a89ea736473 19 GaussRand(float sigma, float av, uint32_t x = 901253)
MikamiUitOpen 0:9a89ea736473 20 : sigma_(sigma), av_(av), rd_(x) {}
MikamiUitOpen 0:9a89ea736473 21
MikamiUitOpen 0:9a89ea736473 22 // 中心極限定理を利用する正規乱数発生
MikamiUitOpen 0:9a89ea736473 23 float Next()
MikamiUitOpen 0:9a89ea736473 24 {
MikamiUitOpen 0:9a89ea736473 25 float gauss = 0;
MikamiUitOpen 0:9a89ea736473 26 for (int n=0; n<12; n++) gauss += rd_.Next();
MikamiUitOpen 0:9a89ea736473 27 return sigma_*(gauss - 6.0f) + av_;
MikamiUitOpen 0:9a89ea736473 28 }
MikamiUitOpen 0:9a89ea736473 29
MikamiUitOpen 0:9a89ea736473 30 private:
MikamiUitOpen 0:9a89ea736473 31 float sigma_;
MikamiUitOpen 0:9a89ea736473 32 float av_;
MikamiUitOpen 0:9a89ea736473 33 Random rd_;
MikamiUitOpen 0:9a89ea736473 34 };
MikamiUitOpen 0:9a89ea736473 35 }