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%

ふむ。こんなものかも。