gpt4 book ai didi

bash - Bash 中 RANDOM 和 SRANDOM 的区别

转载 作者:行者123 更新时间:2023-12-04 16:25:23 31 4
gpt4 key购买 nike

Bash 5.1 引入了 SRANDOM 变量,但是这样使用有什么不同吗?

for i in {1..10}; do
nbr=$((RANDOM%50))
nbr1=$((SRANDOM%50))
echo "$nbr -- $snbr"
done
9 -- 21
35 -- 43
27 -- 15
7 -- 24
41 -- 31
37 -- 35
23 -- 47
14 -- 23
9 -- 37
6 -- 30

来自 the manual :

RANDOM

Each time this parameter is referenced, it expands to a random integer between 0 and 32767. Assigning a value to this variable seeds the random number generator. If RANDOM is unset, it loses its special properties, even if it is subsequently reset

SRANDOM

This variable expands to a 32-bit pseudo-random number each time it is referenced. The random number generator is not linear on systems that support /dev/urandom or arc4random, so each returned number has no relationship to the numbers preceding it. The random number generator cannot be seeded, so assignments to this variable have no effect. If SRANDOM is unset, it loses its special properties, even if it is subsequently reset.

我不明白 non-linearseeding 是什么意思,但对于我的例子来说,有理由使用 RANDOM超过 SRANDOM 或反之亦然,还是没有任何区别?

最佳答案

RANDOM(16 位)与 SRANDOM(32 位); 32 位 => 更大的随机数(即更多的随机数)。

至于2x变量的随机性……

尝试运行:

RANDOM=5; for i in {1..10}; do echo $RANDOM; done
RANDOM=5; for i in {1..10}; do echo $RANDOM; done
RANDOM=5; for i in {1..10}; do echo $RANDOM; done

您应该会发现每个循环都会生成相同的“随机”数字集:

18499
9909
24640
15572
5516
17897
19000
12793
27730
5509

这是 bash fiddle以上生成相同的确切输出!

另一个测试:

RANDOM=5; echo $RANDOM $RANDOM
RANDOM=5; echo $RANDOM $RANDOM
RANDOM=5; echo $RANDOM $RANDOM

反复生成:

18499 9909

现在重复此测试,但使用 SRANDOM,您应该会发现您无法播种 SRANDOM,因此每次迭代都会生成一组不同的“随机”数字。

SRANDOM=5; echo $SRANDOM $SRANDOM
SRANDOM=5; echo $SRANDOM $SRANDOM
SRANDOM=5; echo $SRANDOM $SRANDOM

生成 3 组不同的输出:

1355214790 3304840972
4217276959 255499591
446827805 3301635911

注意:感谢 oguz ismail SRANDOM 输出。


至于linear注释……

作为 President James K Polk在他的评论中提到,'linear' 可能是指 RANDOM 生成其非随机数据的底层算法。

看看如何预先确定 RANDOM 输出(给定一个起点,又名 seed),我可能会替换 'linear' 更多类似于 'deterministic' ...


净结果 ...如果您需要重复一系列“随机”数字,请使用 RANDOM ...如果您需要生成一组真正的数字,请使用 SRANDOM随机数。

关于bash - Bash 中 RANDOM 和 SRANDOM 的区别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65523749/

31 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com