Из-за этого в Windows функция rand физически не может сгенерить больше чем 32768 разных случайных чисел. Проверить это довольно просто:
> (length (unique (rand 1000000 1000000)))
32767
Что делать, если нам таки нужно больше случайных чисел?
Лично я сделал функцию (rand_64):
(define (rand_64 top num)
(map (fn (x y) (/ (* (+ (* x 32768) y) top) 1073741824))
(rand 32768 num) (rand 32768 num)))
Если я правильно всё рассчитал (в чём я ни разу не уверен) она умеет генерить уже не 32 тысячи, а примерно миллиард разных случайных чисел.
Комментариев нет:
Отправить комментарий