Velocity Reviews > Ruby > rand() v. rand(0.1) ?

# rand() v. rand(0.1) ?

7stud --
Guest
Posts: n/a

 09-15-2007
Is there any difference between calling rand() and rand(0.1)?
--
Posted via http://www.ruby-forum.com/.

Florian Frank
Guest
Posts: n/a

 09-15-2007
7stud -- wrote:
> Is there any difference between calling rand() and rand(0.1)?
>

------------------------------------------------------------ Kernel#rand
rand(max=0) => number
------------------------------------------------------------------------
Converts _max_ to an integer using max1 = max+.to_i.abs+. [...]

No.

--
Florian Frank

Guest
Posts: n/a

 09-15-2007
On Sat, Sep 15, 2007 at 08:11:25PM +0900, Florian Frank wrote:
> 7stud -- wrote:
> >Is there any difference between calling rand() and rand(0.1)?
> >

> ------------------------------------------------------------ Kernel#rand
> rand(max=0) => number
> ------------------------------------------------------------------------
> Converts _max_ to an integer using max1 = max+.to_i.abs+. [...]
>
> No.

Speaking of which . . . obviously rand() doesn't produce a truly random
number, but it's reasonably close for some purposes. I'm curious about
just how far off it is, though -- because I'm curious about how
appropriate it is to use to simulate dice-rolling for gaming software (in
the "roleplaying game" sense of the term "gaming") in Ruby's
implementation. I'd prefer some kind of a general feel for it before I
write software to statistically analyze the output of millions of
iterations of rand() evaluations.

--
CCD CopyWrite Chad Perrin [ http://ccd.apotheon.org ]
Dr. Ron Paul: "Liberty has meaning only if we still believe in it when
terrible things happen and a false government security blanket beckons."

Matthew Rudy
Guest
Posts: n/a

 09-15-2007
7stud -- wrote:
> Is there any difference between calling rand() and rand(0.1)?

takes a look at the rdoc -
http://www.ruby-doc.org/core/classes...l.html#M005955

its defined as "rand(max=0)"
ie. calling rand() is exactly the same as rand(0)

also it "Converts max to an integer using max1 = max.to_i.abs"
ie. max = 0.1 -> max1 = 0.1.to_i.abs = 0
ie. rand() results in the same behaviour as rand(0.1)
--
Posted via http://www.ruby-forum.com/.

Guest
Posts: n/a

 09-15-2007
On Sat, Sep 15, 2007 at 09:09:52PM +0900, Yukihiro Matsumoto wrote:
> Hi,
>
> In message "Re: rand() v. rand(0.1) ?"
> on Sat, 15 Sep 2007 20:35:37 +0900, Chad Perrin <(E-Mail Removed)> writes:
>
> |Speaking of which . . . obviously rand() doesn't produce a truly random
> |number, but it's reasonably close for some purposes. I'm curious about
> |just how far off it is, though -- because I'm curious about how
> |appropriate it is to use to simulate dice-rolling for gaming software (in
> |the "roleplaying game" sense of the term "gaming") in Ruby's
> |implementation.
>
> It uses Mersenne Twister algorithm which has a period of 2**19937-1.

Excellent! Thank you for the quick and informative response.

--
CCD CopyWrite Chad Perrin [ http://ccd.apotheon.org ]
Amazon.com interview candidate: "When C++ is your hammer, everything starts

7stud --
Guest
Posts: n/a

 09-15-2007
Matthew Rudy wrote:
> 7stud -- wrote:
>> Is there any difference between calling rand() and rand(0.1)?

>
> takes a look at the rdoc -
> http://www.ruby-doc.org/core/classes...l.html#M005955
>
> its defined as "rand(max=0)"
> ie. calling rand() is exactly the same as rand(0)
>
> also it "Converts max to an integer using max1 = max.to_i.abs"
> ie. max = 0.1 -> max1 = 0.1.to_i.abs = 0
> ie. rand() results in the same behaviour as rand(0.1)

That was my analysis too, however pickaxe2 has some code on p. 138 that
calls rand(0.1).
--
Posted via http://www.ruby-forum.com/.

Morton Goldberg
Guest
Posts: n/a

 09-16-2007
On Sep 15, 2007, at 3:54 PM, 7stud -- wrote:

> That was my analysis too, however pickaxe2 has some code on p. 138
> that
> calls rand(0.1).

You've found a bug in the Pickaxe book. I'm guessing but I suspect that

sleep(rand(0.1))

should be

sleep(0.1 * rand)

That is, I think the idea was to sleep in the range 0.0 to 0.1
seconds, not 0.0 to 1.0 seconds.

Regards, Morton