一様乱数,ガウス性乱数生成. このライブラリの登録時に使ったプログラム:Demo_GaussRand
Dependents: Demo_GaussRand F746_SinWithNoiseGenerator F446_FunctionGenerator
Random.hpp@0:9a89ea736473, 2018-06-25 (annotated)
- Committer:
- MikamiUitOpen
- Date:
- Mon Jun 25 12:54:50 2018 +0000
- Revision:
- 0:9a89ea736473
1
Who changed what in which revision?
User | Revision | Line number | New 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 |