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