scv_bagを使ってランダムの確率分布を指定することが出来ます。
サンプルコード
1|#include <scv.h> 2| 3|int sc_main( int argc, char* argv[] ) { 4| 5| scv_bag<int> dist; 6| dist.add(0,15); // 50% 7| dist.add(1,8); // 27% 8| dist.add(2,4); // 14% 9| dist.add(3,2); // 6% 10| dist.add(4,1); // 3% 11| 12| scv_smart_ptr<int> data_p( "data" ); 13| data_p->keep_only( 0, 5 ); 14| data_p->set_mode(dist); 15| for (int i=0; i<30; i++) { 16| data_p->next(); 17| printf( "[SCV] data = %d\n", data_p->read() ); 18| } 19| 20| return 0; 21|}
実行結果
$> ./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 = 0 [SCV] data = 0 [SCV] data = 2 [SCV] data = 1 [SCV] data = 0 [SCV] data = 0 [SCV] data = 0 [SCV] data = 1 [SCV] data = 0 [SCV] data = 2 [SCV] data = 0 [SCV] data = 3 [SCV] data = 0 [SCV] data = 2 [SCV] data = 4 [SCV] data = 0 [SCV] data = 4 [SCV] data = 2 [SCV] data = 4 [SCV] data = 0 [SCV] data = 1 [SCV] data = 3 [SCV] data = 0 [SCV] data = 2 [SCV] data = 1 [SCV] data = 0 [SCV] data = 1 [SCV] data = 0 [SCV] data = 0
さて、実際の結果は。。。
値 | 発生数 | 割合 |
---|---|---|
0 | 15 | 50% |
1 | 5 | 17% |
2 | 5 | 17% |
3 | 2 | 7% |
4 | 3 | 16% |
あ〜れ〜(笑)
- 関連記事
-
- SCV:制約付ランダムデータ生成(その1)
- SCV:重み付けランダムデータ生成(値の範囲)
- SCV:重み付けランダムデータ生成(値)
- SCV:分布を指定したランダムデータ生成
- SCV使用時の役立つ?gccオプション