$include_dir="/home/hyper-archives/boost/include"; include("$include_dir/msg-header.inc") ?>
From: Stephan Tolksdorf (andorxor_at_[hidden])
Date: 2006-08-08 16:38:48
>>> * a clumsy (and inexact) interface between the random generators and
>>> the random distributions.
>> I wonder what you refer to here?
>
> Here's one example. In bernoulli_distribution we have
>
> if(_p == RealType(0))
> return false;
> else
> return RealType(eng() - (eng.min)()) <=
> _p * RealType((eng.max)()-(eng.min)());
>
> where eng() returns integers between eng.min() and eng.max() incl. The
> problems are:
>
> * If the integers returned by eng() are signed (e.g.,
> linear_congruential) then eng() - (eng.min)() and (eng.max)() -
> (eng.min)() can overflow and the results are bogus.
> (...)
RealType(eng() - (eng.min)()) could just be replaced with
RealType(eng()) - RealType((eng.min)()), or alternatively template
metaprogramming techniques be applied (result_type, min and max are
compile time constants in the standard proposal).
> * The results depend on the granularity of the underlying engine. Why
> not return an exact result? The answer lies in the overall structure
> of the library where the bernoulli is expected to use the raw numbers
> coming out of the generator. If there were a
> uniform_float01<RealType>(eng);
See the generate_canonical template function in the standard proposal.
(...)
>> template<class Engine>
>> result_type operator()(Engine& eng)
>>
>> is sometimes awkward. It doesn't allow compile-time inquiry of the
>> engine properties by the distribution class.
min and max are static constants in the standard proposal, so there's no
general problem with compile time inspection.
Stephan