2013-01-11 5 views
1

У меня создалось впечатление, что при запуске схемы была вызвана процедура randomize с текущим временем в качестве ее семени. Однако, если у меня есть сценарий схемы, состоящий только из (print (random 10)), единственным выходом, который я получаю, является 7; нет другого номера. Итак, что я делаю неправильно? Для записи я использую Chicken Scheme.Как правильно рассчитать случайную функцию в схеме?

ответ

0

Какая случайная библиотека вы используете, точно? в соответствии с documentation вашего предположения о посеве random корректна:

(randomize [SEED]): Набор случайных чисел семян. Если SEED (точное целое число) не поставляется, используется текущее время. При запуске (когда инициализируются дополнительные функции), генератор случайных чисел инициализируется текущим временем.

(random N): Возвращает псевдослучайное целое число в [0, N-1]. N - целое число.

Также обратите внимание на предупреждения, в частности, второй один, который, кажется, чтобы объяснить поведение вы свидетелями:

Предупреждение: Эта процедура использует рандов (3) внутри и имеет свои недостатки, включая псевдослучайность низкого качества:

  • В Windows и Solaris в диапазоне [0, N-1] может быть создано только 32768 уникальных случайных значений. Если N> = 32768, в результирующем наборе будут пробелы.
  • В Mac OS X, Windows и некоторых других платформах, небольшое отклонение в выходе видно с соседними семенами. Так как случайный генератор засевается секундами при запуске, новые процессы могут видеть похожие или идентичные случайные последовательности в течение минуты.
  • В Linux, rand (3) является псевдонимом случайным (3), который обеспечивает вывод разумного качества.
+0

Я использую встроенный 'random'. Хотя я нахожусь в Mac OS X, тот же результат появляется даже через несколько минут. –

+0

@xuinkrbin. возможно, встроенный случайный - crappier, чем кажется: P. Попробуйте с более крупным параметром «N» для случайного или используйте [random-mtzig] (http://wiki.call-cc.org/egg/random-mtzig) вместо –

Смежные вопросы