我已经使用 random 命令在 turbo C++ (DOS) 中生成了随机数。
同样,我已经使用 srand 和 rand 命令在 ubuntu C++ 中生成了随机数。
两个随机代彼此不匹配(即,对于特定的种子,两个代都是不同的)。
请告诉我这个问题背后的原因。是否可以获取随机命令、srand 和 rand 命令背后的代码?
答案1
Turbo C++ 和 Gnu G++ (C++)(可能是 LLVM/clang)有不同的库。它们的实现rand
以及srand
许多(许多!)函数可能在如何它们提供了正确的结果。
这些库中的每个函数都会产生预期的结果,,,等等open
。(如果没有,它们就不是很'read
exit
符合标准')。
所以rand
&srand
是在每个环境中正常工作...它们提供(和种子)随机数。
如何他们得出的结论是没有定义的,有几种创建随机数的方法(见`随机数生成'有关 RNG 的更多信息)
因此,即使给定相同的种子值,您也不能期望不同的 RNG 库提供相同的输出。无论您使用哪个库源,Microsoft、Solaris、Linux、*BSD、OSX 等,情况都是如此。
只有当精确的 相同的方法是用来导出随机数的,你能否期望得到相同的序列。熵收集的差异可能会有所不同,并会随着时间的推移产生扰动。我想有人会纠正我关于“类似”的说法,但只要你使用相同的库,你就应该从相同的种子中获得相同的结果。(一样一样一样!)