gforth中的以下程序打印出0到2之间的10个随机数:
require random.fs
: main 10 0 do i cr . 3 random . loop ;
main
问题是,每次起跑后,数字都是一样的。这意味着没有使用时间(0(种子。如何获得每次启动都不同的随机数?
在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 !
然而,我不是密码学家,但我觉得用当前时间播种在密码上是不安全的。我不会在任何生产代码中使用它。