Следующая программа в gforth выводит 10 случайных чисел от 0 до 2:
require random.fs
: main 10 0 do i cr . 3 random . loop ;
main
Проблема в том, что после каждого старта цифры совпадают. Это означает, что начальное значение времени (0) не использовалось. Как я могу получить случайные числа, которые различаются при каждом запуске?
В исходном файле random.fs
под лицензией GPL:
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 !
Однако я не криптограф, но у меня сложилось впечатление, что посев в настоящее время не является криптографически безопасным. Я бы не стал использовать это ни в каком производственном коде.