
On Dec 31, 2004, at 10:51 AM, Jens Maurer wrote:
Looking at the source to uniform_real, the problem is obvious: result_type operator()(Engine& eng) { return eng() * (_max - _min) + _min; }
Yes. Fixed.
It doesn't seem to be completely fixed, although it might be because I am wrong. In the fix I'd sent, eng() - eng.min() would first be casted to the result_type (a real type, of course), the we divide by eng.max() - eng.min() and adjust to uniform_real's range. In the code in CVS, the cast isn't performed until after the division. So when the engine returns integer values (as linear_congruential does), we don't get proper results. Is it wrong to use engines returning integer values with uniform_real? If so, we should have a static assert in there. Doug