比曼加
我很好奇为什么以下实现总是使用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;
}
此处(vc)和此处(gcc)的示例
风向标
在MSVC中,范围rand()
是不同的。在所有版本中,均由RAND_MAX
中指定stdlib.h
。
如果您乘以的值p
应在范围内,0..1
请尝试
p *= (double)rand() / RAND_MAX;
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
编辑于
我来说两句