我必须运行一个模拟,其中每个事件 E_i 都有一定的概率 P_i 发生(i=1..4,sum_i P_i = 1)。
我想编写一个函数,将四个不同的概率(它们取决于我的模拟中发生的其他事情)作为输入,返回所选事件的整数 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;
}
但我不确定这是否是最好的方法。有什么建议吗?提前非常感谢。