Generate a random number exclusive on both sides: smaller# < x < larger#?

How can I generate a random real number between -3 and 3 that is exclusive on both sides?
Thank you.

rand()*(3.0 - (-3.0)) + (-3.0)

That doesn’t exclude -3.0, because rand() is uniform in [0,1).

See this answer: How to create a random Uniform Distribution between (but excluding) 0 and 10? - #21 by Elrod, which leads to the analogous solution:

prevfloat(6.0) * (1 - rand()) - 3

for generating random numbers uniformly for floating-point values in the open interval (-3,3).


Thank you, Marc!
That would have taken me at least forever to figure out. :grin:
Gonna go with Steven’s solution; thank you nonetheless!

Thank you, Steven.
I didn’t see your answer before thanking Marc for a solution, lol.
I’m going to go with your solution on faith for now, until I am more adept with Julia.
Thank you.
EDIT: Actually, I recall reading about prevfloat() somewhere and your solution makes clear sense now.
Thanks again.

How to get random number between

small < x < large

julia> small=-3.0

julia> large=3.0

julia> prevfloat(large - small) * (1 - rand()) + small
1 Like

Thank you, StevenSiew.
From stevengj’s answer, my perspective was: excluding the minimum via (1-rand()) and excluding the maximum via prevfloat(6.0) and then adjusting the final output by subtracting the midway value.
However I do appreciate your formulaic presentation for it’s clarity, so I will mark your response as the solution for future seekers…