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?的可能重复 你问,“这会给我一个均匀分布吗?”,还有“这会给我一个均匀分布吗?”我的分布不均匀?”,所以明确的答案是Yes和No,但不一定按这个顺序。 :) 【参考方案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批处理中随机数的均匀分布的主要内容,如果未能解决你的问题,请参考以下文章