SCV:分布を指定したランダムデータ生成
SCVではランダム生成において、モードが存在します。
今回はそれらを試してみました。
モード | 説明 |
---|---|
RAMDAM | 指定分布範囲での一様なランダム生成 |
SCAN | とりうる値で小さいものから大きいものへと生成 |
RANDOM_AVOID_DUPLICATE | 生成可能な数値が出尽くすまで同一の値を生成しない |
DISTRIBUTION | scv_bag<>で確率分布を指定 |
- サンプルコード
#include <scv.h> int sc_main( int argc, char* argv[] ) { scv_smart_ptr<int> data_p( "data" ); data_p->keep_only( -12, 12 ); data_p->keep_out( -2, 2 ); printf( "-----------------------\n"); printf( "--- MODE:RANDOM ---\n"); printf( "-----------------------\n"); data_p->set_mode(scv_extensions_if::RANDOM); for (int i=0; i<20; i++) { data_p->next(); printf( "[SCV] data = %d\n", data_p->read() ); } printf( "-----------------------\n"); printf( "--- MODE:SCAN ---\n"); printf( "-----------------------\n"); data_p->set_mode(scv_extensions_if::SCAN); for (int i=0; i<20; i++) { data_p->next(); printf( "[SCV] data = %d\n", data_p->read() ); } printf( "-----------------------------------\n"); printf( "--- MODE:RANDOM_AVOID_DUPLICATE ---\n"); printf( "-----------------------------------\n"); data_p->set_mode(scv_extensions_if::RANDOM_AVOID_DUPLICATE); for (int i=0; i<20; i++) { data_p->next(); printf( "[SCV] data = %d\n", data_p->read() ); } printf( "-------------------------\n"); printf( "--- MODE:DISTRIBUTION ---\n"); printf( "-------------------------\n"); data_p->set_mode(scv_extensions_if::DISTRIBUTION); for (int i=0; i<20; 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 ----------------------- --- MODE:RANDOM --- ----------------------- [SCV] data = -7 [SCV] data = 3 [SCV] data = 6 [SCV] data = 4 [SCV] data = 11 [SCV] data = 6 [SCV] data = -11 [SCV] data = -9 [SCV] data = -7 [SCV] data = -7 [SCV] data = 4 [SCV] data = 5 [SCV] data = 12 [SCV] data = 5 [SCV] data = -9 [SCV] data = 10 [SCV] data = -10 [SCV] data = -5 [SCV] data = 4 [SCV] data = 10 ----------------------- --- MODE:SCAN --- ----------------------- [SCV] data = -12 [SCV] data = -11 [SCV] data = -10 [SCV] data = -9 [SCV] data = -8 [SCV] data = -7 [SCV] data = -6 [SCV] data = -5 [SCV] data = -4 [SCV] data = -3 [SCV] data = 3 [SCV] data = 4 [SCV] data = 5 [SCV] data = 6 [SCV] data = 7 [SCV] data = 8 [SCV] data = 9 [SCV] data = 10 [SCV] data = 11 [SCV] data = 12 ----------------------------------- --- MODE:RANDOM_AVOID_DUPLICATE --- ----------------------------------- [SCV] data = 4 [SCV] data = 10 [SCV] data = -3 [SCV] data = -5 [SCV] data = 6 [SCV] data = -9 [SCV] data = 9 [SCV] data = 12 [SCV] data = -10 [SCV] data = -4 [SCV] data = 11 [SCV] data = 3 [SCV] data = 8 [SCV] data = -12 [SCV] data = -8 [SCV] data = -11 [SCV] data = -7 [SCV] data = 7 [SCV] data = -6 [SCV] data = 5 ------------------------- --- MODE:DISTRIBUTION --- ------------------------- *** SCV_ERROR: INTROSPECTION_EMPTY_DISTRIBUTION at time 0 s in process Setting mode to DISTRIBUTION for 'data' without adding a scv_bagOR scv_bag > object. The setting will be ignored. [SCV] data = 9 [SCV] data = 3 [SCV] data = -8 [SCV] data = -10 [SCV] data = 5 [SCV] data = 10 [SCV] data = -11 [SCV] data = 11 [SCV] data = -3 [SCV] data = 6 [SCV] data = -4 [SCV] data = 4 [SCV] data = -9 [SCV] data = 12 [SCV] data = -12 [SCV] data = 8 [SCV] data = -6 [SCV] data = 7 [SCV] data = -5 [SCV] data = -7
DISTRIBUTIONモードだけエラーが出ていますが、
これは、scv_bagを指定していないためです。
scv_bagについては次回説明します。