Windows批处理中随机数的均匀分布

Posted

技术标签:

【中文标题】Windows批处理中随机数的均匀分布【英文标题】:Even distribution of random numbers in Windows batch 【发布时间】:2017-06-27 23:47:49 【问题描述】:

我想要一个 Windows 批处理中的随机数。这是我的命令:

set /a "random_line=(%random%%%total)+1"

这会给我一个随机数的均匀分布吗?

编辑:

我已经看过How to use random in BATCH script?,CherryDT 的回答让我问了关于均匀分布的问题:

请注意,这不会是均匀分布的!取 0~99 例如,数字 0~67 的出现频率会比 数字 68~99 因为 32767 模 100 是 67 而不是 0 必须是均匀分布。 (这个%random% %%100 是没有 神奇的语法,但实际上%random % %% 100 少了一个空格,其中 %% 只是一个转义的%,它代表模数。)

所以澄清一下,这会让我分布不均吗?

【问题讨论】:

***.com/a/5777608/1683264 How to use random in BATCH script?的可能重复 你问,“这会给我一个均匀分布吗?”,还有“这会给我一个均匀分布吗?”我的分布不均匀?”,所以明确的答案是YesNo,但不一定按这个顺序。 :) 【参考方案1】:

简短回答您的问题:,您的计算不会给您一个均匀分布。

回答很长,对你想要实现的目标有一点想象,

%random%会给你一个统一的分布

但您的代码可能并没有像您假装的那样做。

因为%RANDOM% 动态变量会生成一个介于 0 到 32767 之间的随机整数。

如果要将其转换为1%total% 之间的均匀整数分布,则需要此计算

SET /a random_line=(%RANDOM%*%total%/32768)+1

【讨论】:

假设 %random% = 32767 和 %total% = 100。这意味着 (32767*100/32768)+1 = 100.996948242。这会达到 101 吗?因为它不能高于 100。 回答了我自己的问题。它总是会向下取整。谢谢。 @grgoelyk 这是整数数学,没有舍入而是截断 好吧,有道理。

以上是关于Windows批处理中随机数的均匀分布的主要内容,如果未能解决你的问题,请参考以下文章

用均匀分布随机变量生成泊松分布随机变量

参数化:处理非均匀数据分布

RandomSearchCV 算法中的均匀分布随机变量

均匀分布的随机数

以均匀随机分布生成任意斜率随机线性分布

均匀分布映射到任意分布