default random object?

Lionello Lunesu lio at lunesu.remove.com
Sun Feb 15 16:39:28 PST 2009


Andrei Alexandrescu wrote:
> 1. Are you cool with making the rng the last parameter and give it a 
> default value?

Yes.

> 2. The global random generator will be allocated per thread. Are you 
> cool with this too?

Yes.

> 3. How should the global rng be initialized? To always generate the same 
> sequence, or not?

If you go with a rng per thread, then it's probably safest NOT to 
generate the same sequence by default. Somebody how knows what he's 
doing can always seed with a constant (for tests and such.)

> 4. While we're at it, should uniform(a, b) generate by default something 
> in [a, b] or [a, b)? Someone once explained to me that generating [a, b] 
> for floating point numbers is the source of all evils and that Hitler, 
> Stalin and Kim Il Sung (should he still be alive) must be using that 
> kind of generator. Conversely, generating [a, b) is guaranteed to bring 
> in the long term everlasting peace to Earth. My problem however is that 
> in the integer realm I always want to generate [a, b]. Furthermore, I 
> wouldn't be happy if the shape of the interval was different for 
> integers and floating point numbers. How to break this conundrum? Don't 
> forget that we're only worrying about defaults, explicit generation is 
> always possible with self-explanatory code:
> 
> auto rng = Random(unpredictableSeed);
> auto a = 0.0, b = 1.0;
> auto x1 = uniform!("[]")(rng, a, b);
> auto x2 = uniform!("[)")(rng, a, b);
> auto x3 = uniform!("(]")(rng, a, b);
> auto x4 = uniform!("()")(rng, a, b);

I love your templates as much as the next guy, but let's not forget the 
possibility of using different function names instead of templating 
everything!?

And, as other have said, I'm ok with [) since that's what rand()%max 
boiled down to as well. Futhermore, since arrays in D are also [), users 
of D get used to it so it's not odd at all.

L.



More information about the Digitalmars-d mailing list