C:随机数生成

编程入门 行业动态 更新时间:2024-10-27 14:28:03
C:随机数生成 - 什么(如果有的话)与此错误(C: Random Number Generation - What (If Anything) Is Wrong With This)

对于C中的简单模拟,我需要生成指数随机变量。 我记得在某个地方读过(但我现在找不到,我不记得为什么)使用rand()函数在固定范围内生成随机整数会产生非均匀分布的整数。 正因为如此,我想知道这段代码是否有类似的问题:

//generate u ~ U[0,1] u = ( (double)rand() / ((double)(RAND_MAX)); //inverse of exponential CDF to get exponential random variable expon = -log(1-u) * mean;

谢谢!

For a simple simulation in C, I need to generate exponential random variables. I remember reading somewhere (but I can't find it now, and I don't remember why) that using the rand() function to generate random integers in a fixed range would generate non-uniformly distributed integers. Because of this, I'm wondering if this code might have a similar problem:

//generate u ~ U[0,1] u = ( (double)rand() / ((double)(RAND_MAX)); //inverse of exponential CDF to get exponential random variable expon = -log(1-u) * mean;

Thank you!

最满意答案

随机数在一个固定的范围内的问题是,很多人为100到200之间的数字这样做,例如:

100 + rand() % 100

这是不统一的。 但是通过这样做(或者至少可以达到统一):

u = 100 + 100 * ((double)rand() / ((double)(RAND_MAX));

既然你在做什么,你应该是安全的。

The problem with random numbers in a fixed range is that a lot of people do this for numbers between 100 and 200 for example:

100 + rand() % 100

That is not uniform. But by doing this it is (or is close enough to uniform at least):

u = 100 + 100 * ((double)rand() / ((double)(RAND_MAX));

Since that's what you're doing, you should be safe.

更多推荐

本文发布于:2023-08-05 13:17:00,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/1432306.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:随机数

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!