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