我很好奇为什么以下实现总是使用visual studio编译器返回0,但是在使用gcc和clang编译时它可以正常工作
int poissrand(double lambda){
int k=0;
double L=exp(-lambda), p=1;
do {
++k;
p *= rand()/(double)INT_MAX;
} while (p > L);
return --k;
}
答案 0 :(得分:3)
在MSVC中,rand()
的范围不同。在所有版本中,RAND_MAX
都由stdlib.h
指定。
如果您乘以p
的值应该在0..1
范围内,那么请尝试
p *= (double)rand() / RAND_MAX;