c/c++语言开发共享生成指数分布的随机数

#include  #include  #include  double ran_expo(lambda){ double u; u = rand() / (RAND_MAX + 1.0); return -log(1- u) / lambda; } 

我正在使用它(我没有在这里放置代码的其他部分)来生成指数分布lambda = 0.05随机数。 (概率密度函数是lambda * exp(-lambda * x) )。

但是,我总是得到非常小的数字,例如0.000041 ,或类似1.#INF00 (这是什么?)。

事实上,对于lambda = 0.05指数分布,生成的数字应该非常大,即大多数都不是30。我的结果非常奇怪。 另外,精度不尽如人意,仅为10 ^( – 6)。 我尝试了long double ,但它仍然是这样的。

我在windows下使用DEV C ++。

    这是因为您没有声明lambda的类型,更正了结果在您寻找的范围内。 如果未声明,旧的编译器会认为它是int

     #include  #include  #include  #include  double ran_expo(double lambda){ double u; u = rand() / (RAND_MAX + 1.0); return -log(1- u) / lambda; } int main(void) { int i; srand((unsigned)time(NULL)); for (i=0; i<20; i++) printf("%fn", ran_expo(0.05)); return 0; } 

    节目输出:

     0.025040 16.582459 4.296027 33.079902 17.589123 13.073084 8.624299 45.254803 34.611211 27.454302 3.825699 39.168172 24.790600 14.411160 7.247698 0.301951 1.917010 9.065004 3.187146 3.627885 

    我把你的代码逐字地抛给代码厨师 ,看起来它工作得很好。 编译器是gcc c ++ 4.9.2。 此代码打印出36.6751

     #include  #include  #include  #include  using namespace std; double ran_expo(double lambda){ double u; u = rand() / (RAND_MAX + 1.0); return -log(1- u) / lambda; } int main() { cout << ran_expo(0.05); return 0; } 

    在C中也以相同的方式工作(同样,gcc 4.9.2):

     #include  #include  double ran_expo(double lambda){ double u; u = rand() / (RAND_MAX + 1.0); return -log(1- u) / lambda; } int main() { printf("%fn", ran_expo(0.05)); return 0; } 

    必须是你的编译器/库?

      以上就是c/c++开发分享生成指数分布的随机数相关内容,想了解更多C/C++开发(异常处理)及C/C++游戏开发关注计算机技术网(www.ctvol.com)!)。

      本文来自网络收集,不代表计算机技术网立场,如涉及侵权请联系管理员删除。

      ctvol管理联系方式QQ:251552304

      本文章地址:https://www.ctvol.com/c-cdevelopment/544837.html

      (0)
      上一篇 2021年1月9日
      下一篇 2021年1月9日

      精彩推荐