【发布时间】:2016-06-03 07:38:01
【问题描述】:
我有一个大型的、相当复杂的程序内容生成 lua 项目。出于调试目的,我想做的一件事是使用随机种子,以便我可以重新运行系统并获得相同的结果。
最后,我在运行开始时打印出种子。问题是,每次运行它时,我仍然得到完全不同的结果。假设种子在其他任何地方都没有改变,这应该是不可能的,对吧?
我的问题是,还有什么其他方法可以影响 lua 的 math.random() 的输出?我已经搜索了项目中的所有代码,并且只有一个地方调用了 math.randomseed(),而且我在做其他任何事情之前都会这样做。任何事情。我不使用时间或日期进行任何计算,因此不会影响结果...我还能遗漏什么?
2/22/16 更新猴子补丁 math.random 和 math.randomseed 经常(但不总是)输出相同的随机数序列。但结果仍然不一样——所以我想现在的真正问题是:lua 中的哪些行为是不确定的,并且当相同的代码按顺序运行时可能会导致不同的输出?注意它在哪里发散,什么时候发散,这有助于我缩小范围,但我仍然没有找到它。 (这段代码不使用协程,所以我不认为这是线程/竞争条件问题)
【问题讨论】:
-
我觉得可能是外部程序在影响它,但我没有足够的技术知识来支持这一点。
-
math.random 在内部使用tutorialspoint.com/c_standard_library/c_function_rand.htm,也许这个函数在某些方面被弄乱了,除了你的程序之外还有另一种方式。
-
我很想提供一个最小、完整且可验证的示例,但它是一个非常复杂的系统。到目前为止,我以更小的形式复制它的尝试被证明是徒劳的,这就是为什么我正在寻找关于寻找什么的想法。
标签: random lua procedural-generation