From: nobu.nokada@... Date: 2003-03-22T10:33:10+09:00 Subject: Re: redefining rand and srand --Multipart_Sat_Mar_22_10:33:08_2003-1 Content-Type: text/plain; charset=US-ASCII Hi, At Sat, 22 Mar 2003 03:30:00 +0900, Judson Lester wrote: > > A couple of questions: > > 1) how good is Ruby's rand function (what's the quality of randomness)? I > > suspec that it is just the same as C's rand, so there won't be a > > difference. > > 2) I'd like to plug in my own random number generator that would > > probably > > produce higher-quality random numbers than the current rand does. I'm > > pretty sure it should be doable and easy, like: > > > > module Kernel > > def rand(max=0) > > #do random number generation magic here > > end > > end > > So long as we're redefining rand, and srand, can I recommend that they > be put into a Random object? It is occasionally very helpful to have > separate random number domains. Especially when you're trying to > abuse a PRNG. Tried. There are Random and Random::MT classes, former is the interface and stub, and latter is an implementation. All methods of MT are internal, and RNG classes must implement the first 3 methods (initialize, seed, next) and should do the last (copy_object). --- Random::seed generates appropriate seed integer. --- Random::default, Random::default= accessor for default RNG class. defaulted to Random::MT. --- Random::current, Random::current= accessor for current RNG instance. never returns nil. --- Random#rand([max=nil]) returns next random value. --- Random::MT#initialize([seed=nil]) returns seed value. --- Random::MT#seed returns seed value. --- Random::MT#next returns next random value as Float. --- Random::MT#copy_object(obj) copies the content from obj. # Calling Random#next as method would make rand() much slower, # but "fast method call" (mentioned in [ruby-dev:19781] a # little) might be efficient. --Multipart_Sat_Mar_22_10:33:08_2003-1 Content-Type: text/x-diff; type=gzip; charset=US-ASCII Content-Disposition: attachment; filename="random-obj.diff.gz" Content-Transfer-Encoding: base64 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 wR4AAA== --Multipart_Sat_Mar_22_10:33:08_2003-1 Content-Type: text/plain; charset=US-ASCII -- Nobu Nakada --Multipart_Sat_Mar_22_10:33:08_2003-1--