How do you use random without the numbers in between

#1

im doing a simple code and i want the variable to be -5 or +5 but i dont understand how you can do that without the numbers in between, for exemple sometimes i get -3,4,2,-1,2 ect…

#2

const rnd = random(1) > .5? 5 : -5;

2 Likes
#3
  1. You want two values
  2. First you need to generate a random heads/tails to pick between those two values – like this: random(1) > .5
  3. …then you need to convert that result into your two values.

This is what the ternary that @GoToLoop shared does – but you can also do this without the ternary operator.

  1. generate a random 0 or 1: (int)random(1)
  2. map that to -5, 5: map((int)random(1), -5, 5);
  3. now if you give the map “0” you get -5, and if you give it “1” you get 5.

Or, you could do it like an equation:

int x = ((int)random(1) * 10 - 5

So, we get a 0 or 1, then it becomes 0 or 10, then it becomes -5 or 5.

1 Like
#4

Personally I prefer to use < (less than) to > (greater than) because it helps when you want one option to be more likely than the other option.

Some examples:

const rnd = random(1) < .3 ? 5 : -5; // 30% of the times you get 5, 70% you get -5
const rnd = random(1) < .5 ? 5 : -5; // both options same probability
const rnd = random(1) < .7 ? 5 : -5; // 70% of the times you get 5, 30% you get -5

or maybe more clear:

const rnd = random(100) < 30 ? 5 : -5; // 30% of the times you get 5, 70% you get -5
const rnd = random(100) < 50 ? 5 : -5; // both options same probability
const rnd = random(100) < 70 ? 5 : -5; // 70% of the times you get 5, 30% you get -5

If you use > the percentages are inverted which may be harder to understand:

const rnd = random(100) > 30 ? 5 : -5; // 70% of the times you get 5, 30% you get -5

Update: I never thought about it like this, but maybe < and > can be equally easy to understand if you think that they point towards the item with the given probability. So > 30 means that the right item has 30% chances, and < 30 means that the left one has 30% chances.

1 Like