Welcome to OGeek Q&A Community for programmer and developer-Open, Learning and Share
Welcome To Ask or Share your Answers For Others

Categories

0 votes
314 views
in Technique[技术] by (71.8m points)

c++ - changing probability of getting a random number

I would like to generate a random number between 0 and 3 and I have the following in my code:

int random = rand() % 4;

This works fine but I would like it to generate 1, 2, and 3 most of the time and 0 only occasionally.

What is the best way to go about this? What are the names of common algorithms to address this problem?

See Question&Answers more detail:os

与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
Welcome To Ask or Share your Answers For Others

1 Reply

0 votes
by (71.8m points)

Here's one way. Suppose you want 0, 1, 2, 3 to have a distribution of 5%, 20%, 30%, 45%.
You could do it like this:

double val = (double)rand() / RAND_MAX;

int random;
if (val < 0.05)       //  5%
    random = 0;
else if (val < 0.25)  //  5% + 20%
    random = 1;
else if (val < 0.55)  //  5% + 20% + 30%
    random = 2;
else
    random = 3;

Of course it doesn't have to be done with floating-point. I just did it this way since it's more intuitive.


与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
OGeek|极客中国-欢迎来到极客的世界,一个免费开放的程序员编程交流平台!开放,进步,分享!让技术改变生活,让极客改变未来! Welcome to OGeek Q&A Community for programmer and developer-Open, Learning and Share
Click Here to Ask a Question

...