# How to generate rand (random number) between two numbers?

Hi,

How to generate rand (random number) between two numbers?
I mean not between 0 and some number. It should be between some number (not 0) and some number.

Sincerely,
Asset

Try this:

irb(main):001:0> def random_number(from, to)
irb(main):002:1> from + rand((to - from).abs)
irb(main):003:1> end
=> #<Rubinius::CompiledMethod random_number file=(irb)>
irb(main):004:0> random_number(6, 9)
=> 6
irb(main):005:0> random_number(6, 9)
=> 7
irb(main):006:0> random_number(6, 9)
=> 6
irb(main):007:0> random_number(6, 9)
=> 6

cr

···

On Sep 19, 2011, at 11:52 AM, Асет Асет wrote:

Hi,

How to generate rand (random number) between two numbers?
I mean not between 0 and some number. It should be between some number (not 0) and some number.

Or if you don't mind opening a core class:
irb1.9.2> class Range
irb1.9.2> def sample
irb1.9.2> span = self.end - self.begin
irb1.9.2> span += 1 unless self.exclude_end?
irb1.9.2> self.begin + rand(span.to_i)
irb1.9.2> end
irb1.9.2> end
#1.9.2 => nil
irb1.9.2> (6..9).sample
#1.9.2 => 7
irb1.9.2> (6..9).sample
#1.9.2 => 8
irb1.9.2> (6..9).sample
#1.9.2 => 7
irb1.9.2> (6..9).sample
#1.9.2 => 9
irb1.9.2> (6..9).sample
#1.9.2 => 8
irb1.9.2> (6..9).sample
#1.9.2 => 7
irb1.9.2> (6..9).sample
#1.9.2 => 6

···

On Sep 19, 2011, at 1:03 PM, Chuck Remes wrote:

On Sep 19, 2011, at 11:52 AM, Асет Асет wrote:

Hi,

How to generate rand (random number) between two numbers?
I mean not between 0 and some number. It should be between some number (not 0) and some number.

Try this:

irb(main):001:0> def random_number(from, to)
irb(main):002:1> from + rand((to - from).abs)
irb(main):003:1> end
=> #<Rubinius::CompiledMethod random_number file=(irb)>
irb(main):004:0> random_number(6, 9)
=> 6
irb(main):005:0> random_number(6, 9)
=> 7
irb(main):006:0> random_number(6, 9)
=> 6
irb(main):007:0> random_number(6, 9)
=> 6

cr

I mind, because it's tricky to get right:

irb(main):022:0> (0.0..0.1).sample
=> 0.0
irb(main):023:0> (0.0..0.1).sample
=> 0.0
irb(main):024:0> (0.0..0.1).sample
=> 0.0
irb(main):025:0> (0.0..0.1).sample
=> 0.0
irb(main):026:0> (0.0..0.1).sample
=> 0.0
irb(main):027:0> (0.0..0.1).sample
=> 0.0
irb(main):028:0> (0.0..0.1).sample
=> 0.0
irb(main):029:0> (0.0..0.1).sample
=> 0.0
irb(main):030:0> (0.0..0.1).sample

i.e. you always get 0 and

irb(main):057:0> ("a".."o").sample
NoMethodError: undefined method `-' for "o":String
from (irb):11:in `sample'
from (irb):57
from /opt/bin/irb19:12:in `<main>'

At least the logic in Range#sample should be a bit more involved to
either make it fail for floats or only if floats are used with an
inclusive range (..).

Kind regards

robert

···

On Tue, Sep 20, 2011 at 2:19 PM, Rob Biedenharn <Rob@agileconsultingllc.com> wrote:

On Sep 19, 2011, at 1:03 PM, Chuck Remes wrote:

On Sep 19, 2011, at 11:52 AM, Асет Асет wrote:

Hi,

How to generate rand (random number) between two numbers?
I mean not between 0 and some number. It should be between some number
(not 0) and some number.

Try this:

irb(main):001:0> def random_number(from, to)
irb(main):002:1> from + rand((to - from).abs)
irb(main):003:1> end
=> #<Rubinius::CompiledMethod random_number file=(irb)>
irb(main):004:0> random_number(6, 9)
=> 6
irb(main):005:0> random_number(6, 9)
=> 7
irb(main):006:0> random_number(6, 9)
=> 6
irb(main):007:0> random_number(6, 9)
=> 6

cr

Or if you don't mind opening a core class:
irb1.9.2> class Range
irb1.9.2> def sample
irb1.9.2> span = self.end - self.begin
irb1.9.2> span += 1 unless self.exclude_end?
irb1.9.2> self.begin + rand(span.to_i)
irb1.9.2> end
irb1.9.2> end
#1.9.2 => nil
irb1.9.2> (6..9).sample
#1.9.2 => 7
irb1.9.2> (6..9).sample
#1.9.2 => 8
irb1.9.2> (6..9).sample
#1.9.2 => 7
irb1.9.2> (6..9).sample
#1.9.2 => 9
irb1.9.2> (6..9).sample
#1.9.2 => 8
irb1.9.2> (6..9).sample
#1.9.2 => 7
irb1.9.2> (6..9).sample
#1.9.2 => 6

--
remember.guy do |as, often| as.you_can - without end
http://blog.rubybestpractices.com/