如何在Lua和C#中生成一组相同的随机数?

如何在Lua和C#中生成一组相同的随机数?,c#,random,lua,C#,Random,Lua,我需要从Lua中的一个种子生成一组随机数,然后从同一个种子生成c中的同一组随机数,最好的方法是什么?您需要两个使用相同算法和参数的随机生成器 NET framework不保证生成器的任何功能(即它可能在将来的版本中发生更改)。我对Lua了解不多,但它可能有一个基于实现平台的标准生成器,具有类似的特性 因此,您最可靠的方法是自己在两个平台上选择并实现它。然后你只需要一个共同的种子来产生相同的序列 您将需要相同的代码来生成相同的随机数。Lua库很简单,它将作业传递给了用户。这使得如果你同时使用它,你

我需要从Lua中的一个种子生成一组随机数,然后从同一个种子生成c中的同一组随机数,最好的方法是什么?

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

NET framework不保证生成器的任何功能(即它可能在将来的版本中发生更改)。我对Lua了解不多,但它可能有一个基于实现平台的标准生成器,具有类似的特性


因此,您最可靠的方法是自己在两个平台上选择并实现它。然后你只需要一个共同的种子来产生相同的序列

您将需要相同的代码来生成相同的随机数。Lua库很简单,它将作业传递给了用户。这使得如果你同时使用它,你可能会得到相同的数字。使用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#编写一个小测试程序,确保使用luarandomsed()和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);
}