我们在lua脚本的上下文中,它使用导出的一些C / C ++函数与lua一起使用。
在lua,我们有
math.randomseed(12) // 12 for example
for i=0, 10 do
c++function()
print(math.random())
end
输出始终是相同的数字。 当我看到原因时,我发现在c ++ _函数中,有一个srand(0)和一些对rand()函数的调用。
所以我们的math.randomseed(12)将没有任何效果,我们将在每次迭代中都有srand(0),rand()调用,然后是math.random()调用(只调用C) rand()函数)。 因为我们总是给同一个种子,所以我们总是生成相同的序列。
问题是,是否存在使srand(x)限于特定范围的解决方案?所以c ++ _函数中的rand()调用将使用种子0,当我们返回到lua时,math.random()使用math.randomseed(x)。
如果不是,任何人都有建议吗?
谢谢
答案 0 :(得分:1)
不幸的是,srand
没有返回其当前种子。不过,你可以假装它。试试这个:
function call_c_function()
local s=math.random(1,2^30)
c++function()
math.randomseed(s)
end
for i=0, 10 do
call_c_function()
print(math.random())
end
在每次致电math.randomseed
之前,请确保不致电math.random
,但仅在致电c++function
之后,如上所述。
答案 1 :(得分:0)
您可能无法限制srand()的范围仅影响math.random()的调用。
我建议使用独立于内置的随机数生成器。有关示例,请参阅Generating uniform random numbers in Lua。