why the array bounds array
BCS
ao at pathlink.com
Mon Dec 8 10:07:25 PST 2008
Reply to Sergey,
> Mon, 8 Dec 2008 06:59:40 +0000 (UTC), BCS wrote:
>>
>>>> better (I think):
>> rand() / (RAND_MAX / TYPES_OF_TILES)
>>
> Don't use rand() like this, ever. ;) "RAND_MAX / TYPES_OF_TILES" is
> an integer expression, it rounds down, therefore your formula gives a
> slightly greater range of values than you expect. You'll get all
> sorts of out of bounds errors.
>
thus the (I think). I was just to lazy to figure out the rounding.
the idea still work as long as you round up.
rand() / ( RAND_MAX / TYPES_OF_TILES + !!(RAND_MAX % TYPES_OF_TILES))
OTOH using someone else's code that does the same thing is always better.
> Your best bet is to use a uniform distribution method of the same
> random number generator implementation. There is std.random.uniform()
> in D2's Phobos which serves this purpose. If you don't have an
> equivalent, your next stop is "rand() % TYPES_OF_TILES". It's not
> strictly uniform but close if TYPES_OF_TILES is small.
if TYPES_OF_TILES is to small (like 4) it start s getting highly un random
again.
>
More information about the Digitalmars-d-learn
mailing list