一様乱数,ガウス性乱数生成. このライブラリの登録時に使ったプログラム: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 // float 型のビット配置が IEEE の浮動小数点数と同じ場合にのみ有効
MikamiUitOpen 0:9a89ea736473 6 //
MikamiUitOpen 0:9a89ea736473 7 // 2018/02/15, Copyright (c) 2018 MIKAMI, Naoki
MikamiUitOpen 0:9a89ea736473 8 //-------------------------------------------------------------
MikamiUitOpen 0:9a89ea736473 9
MikamiUitOpen 0:9a89ea736473 10 #include "mbed.h"
MikamiUitOpen 0:9a89ea736473 11
MikamiUitOpen 0:9a89ea736473 12 namespace Mikami
MikamiUitOpen 0:9a89ea736473 13 {
MikamiUitOpen 0:9a89ea736473 14 class Random
MikamiUitOpen 0:9a89ea736473 15 {
MikamiUitOpen 0:9a89ea736473 16 public:
MikamiUitOpen 0:9a89ea736473 17 Random() : seed_(901253) {}
MikamiUitOpen 0:9a89ea736473 18 Random(uint32_t x) : seed_(x) {}
MikamiUitOpen 0:9a89ea736473 19
MikamiUitOpen 0:9a89ea736473 20 // 0 以上 1 未満の一様乱数生成
MikamiUitOpen 0:9a89ea736473 21 float Next()
MikamiUitOpen 0:9a89ea736473 22 {
MikamiUitOpen 0:9a89ea736473 23 seed_ = 1664525*seed_ + 1013904223;
MikamiUitOpen 0:9a89ea736473 24 var.usl = seed_ >> 9; // 指数部を 0 にする
MikamiUitOpen 0:9a89ea736473 25 var.usl |= 0x3f800000; // 指数部: 1~2 の値に対応
MikamiUitOpen 0:9a89ea736473 26 return var.flt - 1.0f;
MikamiUitOpen 0:9a89ea736473 27 }
MikamiUitOpen 0:9a89ea736473 28
MikamiUitOpen 0:9a89ea736473 29 private:
MikamiUitOpen 0:9a89ea736473 30 uint32_t seed_; // 乱数の種
MikamiUitOpen 0:9a89ea736473 31 union bit32w { uint32_t usl; float flt; } var;
MikamiUitOpen 0:9a89ea736473 32 };
MikamiUitOpen 0:9a89ea736473 33 }
MikamiUitOpen 0:9a89ea736473 34