我需要从Lua中的种子生成一组随机数,然后在同一个种子中生成一组c#中的随机数,那么最好的方法是什么?如何在Lua和C#中生成一组相同的随机数字?
3
A
回答
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并在两个平台上自行实施。然后你需要的是一个共同的种子来产生相同的序列。
相关问题
- 1. 在C++和.NET中生成相同的随机数
- 2. 在MatLab和JAVA中生成完全相同的随机数字?
- 3. Lua随机数生成
- 4. 生成一个随机数,但每个随机数在LUA/Love2d
- 5. 如何在C++中一次生成不同的随机数?
- 6. 在数组中生成随机数字
- 7. C++:如何从一个数组中生成一个随机数
- 8. 如何在c中生成唯一的随机数字#
- 9. 如何在Haskell中随机生成一个随机生成的数字列表
- 10. 生成两个相同的随机数和一个不同的
- 11. 在C中生成随机数字
- 12. 生成一组随机数
- 13. 在随后的页面中生成一个随机数字用作相同
- 14. 在verilog问题中随机生成相同的数字
- 15. 如何生成相同的一系列伪随机整数?
- 16. Python - 生成相同的随机数
- 17. 生成相同的随机数onclick
- 18. 生成相同的随机数序列
- 19. 生成大小相同的随机数
- 20. 随机数生成 - 数相同返回
- 21. 在C++的多维数组中生成唯一的随机数
- 22. 在数组中生成唯一的随机数C++
- 23. 我如何随机用Corona SDK为Lua生成数字
- 24. C随机数发生器有时产生相同的数字
- 25. Vb.net随机数字生成器重复相同的数字
- 26. 如何在Android中使用JSON数组生成随机数字
- 27. 2 x 10随机生成的数字有相同的总和c#
- 28. 如何在C中生成-1和1之间的随机数?
- 29. 如何比数组中的其他随机数生成一个随机数?
- 30. 如何生成大的随机数C