我想要一个Windows批处理中的随机数。 这是我的命令:
set /a "random_line=(%random%%%total)+1"
这会给我一个随机数的均匀分布吗?
编辑:
我已经看过如何在 BATCH 脚本中使用随机?,CherryDT 的回答让我问了关于均匀分布的问题:
请注意,这不会均匀分布!取0~99 例如,数字 0~67 的出现频率略高于 数字 68~99,因为 32767 模 100 是 67 而不是 0 必须均匀分布。(此
%random% %%100
不是 魔术语法,但实际上%random % %% 100
少了一个空格,其中%%
只是一个转义的%
,代表模。
所以澄清一下,这会给我带来分布不均吗?
简要回答您的问题:不,您的计算不会给您均匀分布。
长答案,对你想要实现的目标有一点想象力,
%random%
会给你一个均匀的分布
但是你的代码可能没有做你假装的事情。
因为%RANDOM%
动态变量生成一个从 0 到 32767 的随机整数(包括 0 和 32767(。
如果要将其转换为 1
和 %total%
之间的均匀整数分布,则需要此计算
SET /a random_line=(%RANDOM%*%total%/32768)+1