相关疑难解决方法(0)

如何在 bash 中有效地生成大的、均匀分布的随机整数?

我一直在想这将是获得最佳的方式很好在bash,即随机性,这将是一个过程,以获得之间的随机正整数MIN,并MAX使得

  1. 范围可以是任意大的(或者至少可以达到 2 32 -1);
  2. 值均匀分布(即没有偏差);
  3. 它是有效的。

在 bash 中获得随机性的一种有效方法是使用$RANDOM变量。但是,这仅对 0 到 2 15 -1之间的值进行采样,这对于所有用途来说可能不够大。人们通常使用模数将其置于他们想要的范围内,例如,

MIN=0
MAX=12345
rnd=$(( $RANDOM % ($MAX + 1 - $MIN) + $MIN ))
Run Code Online (Sandbox Code Playgroud)

此外,这会产生偏差,除非$MAX碰巧除以 2 15 -1=32767。例如,如果$MIN是 0 并且$MAX是 9,那么值 0 到 7 的可能性比值 8 和 9 稍大,$RANDOM永远不会是 32768 或 32769。随着范围的增加,这种偏差会变得更糟,例如,如果$MIN是 0 并且$MAX是9999,那么数字 0 到 2767 的概率为4 / 32767,而数字 2768 到 9999 的概率仅为 …

command-line bash shell-script

35
推荐指数
5
解决办法
2万
查看次数

如何配置 RANDOM 以获取相同的 32 位随机数范围,例如使用 SRANDOM?

环境:

  • Debian
  • 重击

什么是已知的:

RANDOM 通过以下方式给出一个 15 位范围内的随机数:

echo $RANDOM
Run Code Online (Sandbox Code Playgroud)

SRANDOM 通过以下方式给出 32 位范围内的随机数:

echo $SRANDOM
Run Code Online (Sandbox Code Playgroud)

RANDOM 可以通过以下方式配置为在 30 位范围内创建随机数:

my_rnd=$(((RANDOM<<15|RANDOM)))
echo "$my_rnd"
Run Code Online (Sandbox Code Playgroud)

RANDOM 可以通过以下方式配置为在 45 位范围内创建随机数:

my_rnd=$(((RANDOM<<15|RANDOM)<<15|RANDOM))
echo "$my_rnd"
Run Code Online (Sandbox Code Playgroud)

如何配置RANDOM以获得与使用时相同的 32 位随机数范围SRANDOM

shell bash random

2
推荐指数
2
解决办法
204
查看次数

标签 统计

bash ×2

command-line ×1

random ×1

shell ×1

shell-script ×1