# rand() v. rand(0.1) ?

Discussion in 'Ruby' started by 7stud --, Sep 15, 2007.

1. ### 7stud --Guest

7stud --, Sep 15, 2007

2. ### Florian FrankGuest

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

Florian Frank, Sep 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."

4. ### Matthew RudyGuest

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/Kernel.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/.

Matthew Rudy, Sep 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 <> 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

6. ### 7stud --Guest

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/Kernel.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/.

7stud --, Sep 15, 2007
7. ### Morton GoldbergGuest

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

Morton Goldberg, Sep 16, 2007