为什么这个泊松分布实现在msvc上返回0

时间:2017-01-28 18:49:08

标签: c visual-studio

我很好奇为什么以下实现总是使用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;
}

示例here(vc)和here(gcc)

1 个答案:

答案 0 :(得分:3)

在MSVC中,rand()的范围不同。在所有版本中,RAND_MAX都由stdlib.h指定。

如果您乘以p的值应该在0..1范围内,那么请尝试

p *= (double)rand() / RAND_MAX;