Elegant way to generate a random value regarding percentage?
11,157
Solution 1
One way of doing this without calculating values to use is
double d = Math.random() * 100;
if ((d -= 30) < 0) return 1;
if ((d -= 12) < 0) return 2;
if ((d -= 45) < 0) return 3;
return 4;
Solution 2
Proposed algorithm:
- generate a random number (
n
) between0
and1
(assuming your random generator is well distributed) - if
n < 0.30
return value1
- if
n < 0.42
return value2
- else if
n < 0.87
return value3
- else say Hello (your numbers don't add up to 100%)
Author by
nathan
Updated on July 06, 2022Comments
-
nathan over 1 year
I have N values (integer). I'd like to know what is the most elegant way to randomly pick one of those values regarding a percentage. For example, for a 3 values example:
- Value 1 has 30% chance to get picked
- Value 2 has 12% chance to get picked
- Value 3 has 45% chance to get picked
I need this for a program i'm developing with Java but a pseudo code algorithm or a code in any other language would be ok.