default random object?

Don nospam at nospam.com
Thu Feb 19 00:35:04 PST 2009


Benji Smith wrote:
> Don wrote:
>> Andrei Alexandrescu wrote:
>>> Benji Smith wrote:
>>>> Benji Smith wrote:
>>>>> Maybe a NumericInterval struct would be a good idea. It could be 
>>>>> specialized to any numeric type (float, double, int, etc), it would 
>>>>> know its own boundaries, and it'd keep track of whether those 
>>>>> boundaries were open or closed.
>>>>>
>>>>> The random functions would take an RND and an interval (with some 
>>>>> reasonable default intervals for common tasks like choosing 
>>>>> elements from arrays and random-access ranges).
>>>>>
>>>>> I have a Java implementation around here somewhere that I could 
>>>>> port to D if anyone is interested.
>>>>>
>>>>> --benji
>>>>
>>>> Incidentally, the NumericInterval has lots of other interesting 
>>>> applications. For example
>>>>
>>>>    auto i = NumericInterval.UBYTE.intersect(NumericInterval.SBYTE);
>>>>    bool safelyPolysemious = i.contains(someByteValue);
>>>>
>>>>    auto array = new double[123];
>>>>    auto i = NumericInterval.indexInterval(array);
>>>>    bool indexIsLegal = i.contains(someIndex);
>>>>
>>>> Using a numeric interval for generating random numbers would be, in 
>>>> my opinion, totally ideal.
>>>>
>>>>    double d = uniform(NumericInterval.DOUBLE); // Any double value
>>>
>>> I've never been in a situation in my life where I thought, hey, a 
>>> random double is exactly what I'd need right now. It's a ginormous 
>>> interval!
>>>
>>> Andrei
>>
>> It's worse than that. Since the range of double includes infinity, a 
>> uniform distribution must return +-infinity with probability 1. It's 
>> nonsense.
> 
> Way to miss the forest for the trees.
> 
> You guys telling me can't see any legitimate use for a NumericInterval 
> type? And that it wouldn't be convenient to use for random number 
> generation within that interval?
> 
> So the full double range was a dumb example. But that wasn't really the 
> point, was it?
> 
> --benji

On the contrary, I've been giving NumericInterval considerable thought.
One key issue is whether a NumericInterval(x1, x2) must satisfy x1 <= x2 
(the _strict_ definition), or whether it is also permissible to have 
x2<=x1 (ie, you can specify the two endpoints in reverse order; the 
interval is then between min(x1,x2) and max(x1, x2)).

This is an issue because I've noticed is that when I want to use it, I 
often have related pairs of values.
eg.
Suppose u is the interval {x1, x2}. There's a related v = {f(x1), f(x2)}.
Unfortunately although x1<=x2, f(x1) may not be <= f(x2). So v is not an 
interval in the _strict_ sense. But it satisfies the _relaxed_ definition.



More information about the Digitalmars-d mailing list