0

gforth 中的以下程序打印出 0 到 2 之间的 10 个随机数:

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

问题是,每次开始后,数字都是一样的。这意味着没有使用 time(0) 种子。如何获得每次开始时不同的随机数?

4

1 回答 1

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 !

但是我不是密码学家,但我的印象是用当前时间播种在密码学上并不安全。我不会在任何生产代码中使用它。

于 2018-11-04T15:09:16.187 回答