default random object?
Denis Koroskin
2korden at gmail.com
Thu Feb 19 01:16:39 PST 2009
On Thu, 19 Feb 2009 11:35:04 +0300, Don <nospam at nospam.com> wrote:
> 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.
Same as NumericInterval's bounds ([],(),[),(]), strictness might be an interval's template parameter.
More information about the Digitalmars-d
mailing list