Gforth случайный генератор не имеет семян - PullRequest
0 голосов
/ 30 октября 2018

Следующая программа в gforth распечатывает 10 случайных чисел от 0 до 2:

require random.fs
: main 10 0 do i cr . 3 random . loop ;
main

Проблема в том, что после каждого запуска номера совпадают. Это означает, что время (0) семян не использовалось. Как я могу получить случайные числа, которые отличаются при каждом запуске?

1 Ответ

0 голосов
/ 04 ноября 2018

В исходном файле с лицензией GPL random.fs:

Variable seed
$10450405 Constant generator
: rnd  ( -- n )  seed @ generator um* drop 1+ dup seed ! ;
: random ( n -- 0..n-1 )  rnd um* nip ;

Чтобы получить случайное число, вы можете ввести в переменную seed строку, возможно, такую:

utime drop seed !

Однако я не криптограф, но у меня сложилось впечатление, что засев с текущим временем не криптографически безопасен. Я не использовал бы это в любом производственном коде.

...