HOW-TO produce random numbers within a range?

Hello,
Thanks for reading this.
I am very new to Ruby and have been learning using a tutorial at
http://pine.fm/LearnToProgram/
by Chris (thanks Chris)
After searching fairly thoroughly in forums and tutorials I found no
answer to my problem.
I have come to a point where i need to generate a random number within a
range.

I have learnt that rand(100) produces random numbers from 0 to 99 but i
need to know how to set a minimum for the random number.

Your help would be greatly appreciated.

Thanks in advance, tckl.

On 1/6/07, Ruby N00bie [email protected] wrote:

I have learnt that rand(100) produces random numbers from 0 to 99 but i
need to know how to set a minimum for the random number.

Your help would be greatly appreciated.

Thanks in advance, tckl.

Just add the minimum value to whatever number you generate. For
example, if
you wanted to generate a random number between 0 and 99 with a minimum
value
of 20:

rand(80) + 20

Ruby N00bie [email protected] wrote:

I have learnt that rand(100) produces random numbers from 0 to 99 but i
need to know how to set a minimum for the random number.

Suppose the range is 50-99.

Generate a random number between 0 and 50, and add 50 to the result.

m.

<…>

I have learnt that rand(100) produces random numbers from 0 to 99 but i
need to know how to set a minimum for the random number.

Your help would be greatly appreciated.
<…>

Add the minimum :slight_smile:

def range_rand(min,max)
min + rand(max-min)
end

Welcome abord !

Easier to make it fit it that fit your self.
The Ultimate Morphing Lego Game.

#!/usr/bin/my_new_lego_game

alias old_rand rand

def rand(min,max)
until min < r=old_rand(max); end
return r
end

10.times do |x|
p rand(1,10)
end

-.rb

Thanks very much all three of you.
That’s all I needed to know.
tckl

Ruby N00bie wrote:

I have learnt that rand(100) produces random numbers from 0 to 99 but i
need to know how to set a minimum for the random number.

Your help would be greatly appreciated.

Thanks in advance, tckl.


Posted via http://www.ruby-forum.com/.

You don’t need to be able to set a minimum. You simply take what
rand() gives you and add an offset.

25.times{ r = rand(10); print "#{ r } " }
5 1 0 5 4 3 5 0 4 0 7 8 6 8 6 9 7 1 7 9 9 3 5 7 5 => 25
25.times{ r = rand(10); print "#{ r + 50 } " }
57 51 51 58 54 53 56 58 54 57 54 56 57 58 50 56 56 50 58 52 58 55 53 50
56 => 25

On 1/6/07, Ruby N00bie [email protected] wrote:

You have to do this yourself, say you want a random number between 42
and a
than you have to write

42+rand(a+1-42) # BTW it would be legal to write a - 41 :wink:
It would be nice an exercise to define your own method to do this

HTH
Robert


“The real romance is out ahead and yet to come. The computer revolution
hasn’t started yet. Don’t be misled by the enormous flow of money into
bad
defacto standards for unsophisticated buyers using poor adaptations of
incomplete ideas.”

  • Alan Kay

On 7/01/2007, at 8:02 AM, Rodrigo B. wrote:

def rand(min,max)
until min < r=old_rand(max); end
return r
end

Don’t do this. It is really inefficient. Compare these…

10.times do |x|
p rand(10000000,10000005) # Your new slow rand
end

10.times do |x|
p rand(5) + 10000000 # old rand
end