SCV:重み付けランダムデータ生成(値)

scv_bagを使ってランダムの確率分布を指定することが出来ます。

  • サンプルコード
#include <scv.h>

int sc_main( int argc, char* argv[] ) {

  scv_bag<int> dist;
  dist.add(0,15); // 50%
  dist.add(1,8);  // 27%
  dist.add(2,4);  // 14%
  dist.add(3,2);  // 6%
  dist.add(4,1);  // 3%

  scv_smart_ptr<int> data_p( "data" );
  data_p->keep_only( 0, 5 );
  data_p->set_mode(dist);
  for (int i=0; i<30; 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 = 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%