Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/algorithm/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Windows 如何生成命令提示随机数?_Windows_Algorithm_Batch File_Random_Cmd - Fatal编程技术网

Windows 如何生成命令提示随机数?

Windows 如何生成命令提示随机数?,windows,algorithm,batch-file,random,cmd,Windows,Algorithm,Batch File,Random,Cmd,在命令提示环境中,有一个变量%random%,它使用某种算法生成伪随机数 有人知道生成这些数字的算法吗?动态变量%random%生成一个从0到32767(含)的随机数。生成这些数字的算法如下: srand((unsigned)time(NULL)); 事实证明,Windows命令处理器使用标准的天真算法来播种随机数生成器 (引自) 由于时间的原因,它每秒都会吐出一个新的数字 正如dbenham所指出的,由于伪随机性和时间的种子化,在同一秒钟内打开的两个命令提示将输出相同的精确数字。您的问题与此

在命令提示环境中,有一个变量
%random%
,它使用某种算法生成伪随机数


有人知道生成这些数字的算法吗?

动态变量
%random%
生成一个从0到32767(含)的随机数。生成这些数字的算法如下:

srand((unsigned)time(NULL));
事实证明,Windows命令处理器使用标准的天真算法来播种随机数生成器 (引自)

由于时间的原因,它每秒都会吐出一个新的数字


正如dbenham所指出的,由于伪随机性和时间的种子化,在同一秒钟内打开的两个命令提示将输出相同的精确数字。

您的问题与此无关。没有编程合同,因此未定义。没有文档。微软可以而且可能已经改变了它的工作方式(x32到x64)。由于没有记录,你不能依赖观察到的行为。PS你的问题不包含问题。@面条-这是一个完全不实际的方法。关于批次,有无数未记录但关键的事实,只能通过观察到的行为来推断。如果没有这些知识,我的大部分脚本将无法编写。仅仅因为一个行为被记录下来并不意味着该行为必须保留在后续版本中。相反,缺乏文档并不会使行为在未来发生改变。谢天谢地,Microsoft在批处理方面一直致力于实现Windows版本之间的向后兼容性。如果可能存在重复,请引用您的源代码。正式而言,生成这些数字的算法尚未定义。你甚至不能从一个版本到另一个版本的Windows依赖它。很好的参考!我有。但很高兴看到来自更权威的消息来源的确认。事实上,你的最后一句话并不完全正确。无论经过多长时间,
%RANDOM%
的每次扩展都会生成一个新的数字。但给定cmd.exe会话的初始种子值取决于时间。因此,在同一秒钟内启动的两个命令窗口将生成完全相同的数字序列。@Aacini-正如我所读到的,Raymond Chen的博客非常明确地指出,windows命令处理器使用srand()为PRNG种子。我猜你和我对英语的理解不同。Raymond Chen的博客不是微软的官方文档,但他是各种Windows操作系统开发团队的重要成员,当然可以知道他在说什么。