我需要從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