【发布时间】:2015-09-20 23:28:21
【问题描述】:
我们处于一个 lua 脚本的上下文中,该脚本使用一些导出的 C/C++ 函数以与 lua 一起使用。
在lua中,我们有
math.randomseed(12) // 12 for example
for i=0, 10 do
c++function()
print(math.random())
end
输出总是相同的数字。 当我看到原因时,我发现在 c++_function 中,有一个 srand(0) 和一些对 rand() 函数的调用。
所以我们的 math.randomseed(12) 将不起作用,我们将在每次迭代中调用 srand(0)、rand() 调用,然后调用 math.random()(只调用 C rand() 函数)。 因为我们总是给出相同的种子,所以我们总是生成相同的序列。
问题是,有没有办法让 srand(x) 限制在特定范围内?所以 c++_function 中的 rand() 调用将使用种子 0,当我们返回 lua 时,math.random() 使用 math.randomseed(x)。
如果没有,有人有什么建议吗?
谢谢
【问题讨论】:
-
不能改c++函数吗?
srand()在整个程序中只能调用一次。 -
不是,因为c++函数调用独立于lua脚本,所以问题只出现在这个例子中,因为他们都做了srand。在另一个 lua 脚本中,我们可以在没有 math.randomseed 的情况下调用 c++_function。
-
如果你不能改变
math.randomseed和c++function中的任何一个,恐怕你就倒霉了……
标签: c++ lua random-seed