各イベントE_iに特定の確率P_iが発生するシミュレーションを実行する必要があります(i = 1..4、sum_i P_i = 1)。
4つの異なる確率(シミュレーションで発生する他の事柄に依存します)を入力として受け取り、選択したイベントの整数iを返す関数を作成したいと思います。
このような関数を作成するための最良の方法はどれですか(おそらく標準ライブラリのみを使用して、新しいライブラリを追加する権限を持っていないクラスターで実行する必要があります)。
私は次のようなものを書くことを考えていました:
int get_event(double p1,double p2, double p3, double p4){
double r=((double) rand())/(RAND_MAX); // alternatively here there can be any function that
// generates a random number uniformly distribute in (0,1);
if (r<=p1) return 1;
else if (r>p1 && r <=(p1+p2)) return 2;
else if (r>(p1+p2) && r <=(p1+p2+p3)) return 3;
else if (r>(p1+p2+p3) && r <=1) return 4;
else return -1; // -1 is an en error code;
}
しかし、これが最善のアプローチかどうかはわかりません。なにか提案を?よろしくお願いします。