我想知道如何使用%random%变量来选择一个小于0-30000的数字(我粗略估计)。我在这个网站上看了几篇文章并没有解决我的问题。在我的程序中,我想绘制一个从0到5的随机数。无论如何,我可以这样做吗?
答案 0 :(得分:0)
使用模数功能。它除了一个数字并返回余数。如果需要1到6加1,则除以6,范围为0到5(6个单位)。请参阅Set /?
。运算符是C运算符(https://docs.microsoft.com/en-us/cpp/c-language/c-operators)。
这给出了1到6.请注意,运算符模数%
被另一个%
转义。
Set /a num=%random% %% 6 + 1
echo %num%
答案 1 :(得分:-2)
mod运算符%是整数集合上的一个关系,它是单射的(一对一)但不是主观的(上)。因此它不是一个正确的函数,因为它不是双射的(一对一和一对(但我们知道你的意思))。
必须注意发电机前半部分的构造;生成要修改的整数的部分。如果你是以不规则的时钟间隔进行修改,那么一天到毫秒的时间就可以了。但是如果你在一个循环中进行修改,你必须注意你没有生成你希望修改的全范围的子集。即:时钟时间中有1000个可能的毫秒值。如果你的循环定时是常规的,你可以在每次调用时以毫秒为单位绘制小的整数值子集,因此在每次调用时产生相同的修改值,特别是如果你在msecs中循环间隔均匀地划分1000。
你可以使用rand()生成器模6 - rand()%6。这就是我的工作。但是你必须意识到rand()使用递归方法选择0到32767范围内的替换整数(生成的下一个数字完全取决于绘制的前一个数字)。考虑范围A和B中的两个数字。最初,绘制A的概率等于绘制B的概率等于1/32768。假设在第一次绘制时你绘制A,那么你在第二次绘制时绘制A的概率为零,你绘制B的概率是1/32767。
还有一件事:rand()不是一个类,并且在你的程序中调用它是GLOBALLY DEPENDENT。因此,如果您需要在程序的不同部分绘制范围随机变量,即使您从不同的类调用,上面描述的A和B的依赖关系仍然成立。
大多数语言提供了一种产生REAL随机数R的方法,其范围为0.0 <= R <1。 1.0。这些生成器没有依赖关系。在BASIC中,这个方法是rnd(),你可以编码(rnd()* 1000)%6,或者它的一些变体。
还有其他自制方法可以产生随机变量。我的后备是中间方法,你可以在任何地方查找。
好吧,我说了一口,似乎我正在用大锤驾驶图钉。但是,在使用内置方法时,此信息始终有用。