2015-06-28 31 views

回答

4

您将需要相同的代码来生成相同的随机数。 Lua库不复杂,将作业传递给C runtime library。如果你使用它,那么你有可能得到相同的数字。容易做到的PInvoke:

using System.Runtime.InteropServices; 
... 
    public static double LuaRandom() { 
     const int RAND_MAX = 0x7fff; 
     return (double)(rand() % RAND_MAX)/RAND_MAX; 
    } 

    public static void LuaRandomSeed(int seed) { 
     srand(seed); 
    } 

    [DllImport("msvcrt.dll", CallingConvention = CallingConvention.Cdecl)] 
    private static extern int rand(); 
    [DllImport("msvcrt.dll", CallingConvention = CallingConvention.Cdecl)] 
    private static extern void srand(int seed); 

两个Lua和C#写一个小的测试程序,一定要使用LuaRandomSeed()和math.randomseed(),所以他们开始以相同的顺序,比较第一〜25他们吐出的数字。如果你没有得到一个匹配,那么你的Lua实现使用了一个不同的C运行库,你必须编写你自己的随机数生成器。 Microsoft使用的简单LCG:

private static uint seed; 

public static int rand() { 
    seed = seed * 214013 + 2531011; 
    return (int)((seed >> 16) % RAND_MAX); 
} 
1

您需要2个使用相同算法和参数的随机生成器。

.NET框架并不保证关于生成器的任何内容(即它可能在未来版本中更改)。我对Lua了解不多,但它可能有一个标准的生成器,它基于具有类似变幻莫测的实现平台。

因此,您最可靠的课程将是挑选an algorithm并在两个平台上自行实施。然后你需要的是一个共同的种子来产生相同的序列。