SCV:重み付けランダムデータ生成(値の範囲)
scv_bagを使ってランダムの確率分布を指定することが出来ます。
前回は値に対してですが、値の範囲に対しても同じことが可能です。
- サンプルコード
#include <scv.h> int sc_main( int argc, char* argv[] ) { scv_bag<pair<int,int> > dist; dist.add(pair<int, int>(0,4), 15); // 50% dist.add(pair<int, int>(5,9), 8); // 27% dist.add(pair<int, int>(10,14), 4); // 14% dist.add(pair<int, int>(15,19), 2); // 6% dist.add(pair<int, int>(20,24), 1); // 3% scv_smart_ptr<int> data_p( "data" ); data_p->keep_only( 0, 24 ); data_p->set_mode(dist); for (int i=0; i<50; i++) { data_p->next(); printf( "[SCV] data = %d\n", data_p->read() ); } return 0; }
- 実行結果
$> ./main SystemC 2.2.0 --- Jan 15 2012 14:19:56 Copyright (c) 1996-2006 by all Contributors ALL RIGHTS RESERVED [SCV] data = 0 [SCV] data = 1 [SCV] data = 8 [SCV] data = 3 [SCV] data = 5 [SCV] data = 12 [SCV] data = 17 [SCV] data = 12 [SCV] data = 2 [SCV] data = 12 [SCV] data = 0 [SCV] data = 19 [SCV] data = 13 [SCV] data = 2 [SCV] data = 2 [SCV] data = 2 [SCV] data = 3 [SCV] data = 10 [SCV] data = 7 [SCV] data = 5 [SCV] data = 8 [SCV] data = 18 [SCV] data = 7 [SCV] data = 3 [SCV] data = 2 [SCV] data = 3 [SCV] data = 0 [SCV] data = 4 [SCV] data = 7 [SCV] data = 0 [SCV] data = 9 [SCV] data = 4 [SCV] data = 20 [SCV] data = 1 [SCV] data = 1 [SCV] data = 3 [SCV] data = 0 [SCV] data = 9 [SCV] data = 2 [SCV] data = 0 [SCV] data = 8 [SCV] data = 0 [SCV] data = 0 [SCV] data = 7 [SCV] data = 9 [SCV] data = 3 [SCV] data = 7 [SCV] data = 3 [SCV] data = 14 [SCV] data = 3
実際の結果は。。。
値 | 発生数 | 割合 |
---|---|---|
0-4 | 27 | 54% |
5-9 | 12 | 24% |
10-14 | 6 | 12% |
15-19 | 4 | 8% |
20-24 | 1 | 2% |
ふむ。こんなものかも。