我在生成函数的C ++实现方面存在一些问题 具有固定分布的随机整数。为此,我实施了 一个函数urand(),它生成一个在0和1之间均匀分布的double(包含) 由函数random_integer()[使用标准算法,我认为它在Knuth的bool之一中描述]使用。 这些功能实现如下:
double urand(){
int r =rand(); ;
return ((double) r)/RAND_MAX ;
} ; // uniform random number between 0 and 1 (included);
int random_integer(std::vector<double> &p_vec) {
unsigned int n_events=p_vec.size();
double u;
double initu;
do{
u=urand();
}while(u<=0 && u >=1);
// chose a random number uniformly distributed between 0 and 1 (excluded)
initu=u;
for (unsigned int i=0; i<n_events; i++){
if (u<=p_vec[i]) return i;
u-=p_vec[i];
}
cout << "Warning: get_random_event() [utilities.cpp] could not find a suitable event. Returning -1 instead.\n";
cout << "p_vec=[" ; print(p_vec); cout << "]; "; // print is just a function that displays the elements in a vector;
cout << "initu=" << initu << "; u=" << u << endl;
return -1 ;
}
现在大部分时间一切正常,但是例如我收到了这样的警告:
警告:get_random_event()[utilities.cpp]无法找到合适的事件。 返回-1而不是。 p_vec = [0.08; 0.42; 0.42; 0.08 [; initu = 1; U = 2.77556e-17
现在有两件事我不明白:initu应该严格小于1(看看while循环的条件)。但即使假设它我
答案 0 :(得分:4)
我认为你的意思是
}while(u<=0 || u >=1);
不
}while(u<=0 && u >=1);
u
不能小于或等于零且大于或等于一。