Gforth 随机生成器没有种子
Gforth random generator has no seed
gforth 中的以下程序打印出 0 到 2 之间的 10 个随机数:
require random.fs
: main 10 0 do i cr . 3 random . loop ;
main
问题是,每次开始后,数字都是一样的。这意味着没有使用 time(0) 种子。我怎样才能得到每次开始时不同的随机数?
在 GPL 许可的源文件中 random.fs
:
Variable seed
450405 Constant generator
: rnd ( -- n ) seed @ generator um* drop 1+ dup seed ! ;
: random ( n -- 0..n-1 ) rnd um* nip ;
要获取随机数,您可以在变量 seed
中添加一行,可能像这样:
utime drop seed !
不过我不是密码学家,但我的印象是使用当前时间播种在密码学上是不安全的。我不会在任何生产代码中使用它。
gforth 中的以下程序打印出 0 到 2 之间的 10 个随机数:
require random.fs
: main 10 0 do i cr . 3 random . loop ;
main
问题是,每次开始后,数字都是一样的。这意味着没有使用 time(0) 种子。我怎样才能得到每次开始时不同的随机数?
在 GPL 许可的源文件中 random.fs
:
Variable seed
450405 Constant generator
: rnd ( -- n ) seed @ generator um* drop 1+ dup seed ! ;
: random ( n -- 0..n-1 ) rnd um* nip ;
要获取随机数,您可以在变量 seed
中添加一行,可能像这样:
utime drop seed !
不过我不是密码学家,但我的印象是使用当前时间播种在密码学上是不安全的。我不会在任何生产代码中使用它。