2013-12-22 32 views
0

我必須將一個C++程序移植到C#中。在C++和.NET中生成相同的隨機數

程序中涉及隨機數字。我必須在兩個程序中產生完全相同的隨機數以在測試中獲得相同的結果。

在C++中我使用

srand(1000) 
... 
double r = (double)rand()/(double)(RAND_MAX); 

和在C#我使用

private readonly Random _rnd = new Random(1000); 
... 
_rnd.NextDouble() 

然而方案儘管相同的種子產生不同的數字。有什麼辦法可以產生相同的隨機數字嗎?

+1

「同樣的隨機數」。有點矛盾,也許? – dandan78

+0

我會打賭''的東西,特別是與梅森扭轉者的東西。我也會在C#上打賭說明你需要尋找什麼。 – chris

回答

0

基本上,隨機函數(srand vs Random)具有不同的底層實現,因此您不能依賴它們給出相同的輸出。那麼,爲什麼不提供一組「n」數字並將它們在C++和c#中輸入到您的算法中 - 僅僅用於測試目的?這樣你就可以確定你會有相同的數量,相同的數字和相同的順序。例如:在每行上都有一些數字的文件,然後在C++/c#中讀出它們,然後將這些數字輸入到您要「測試」的算法中。因此,根據你對我上面的問題的回答,你可以在這裏測試你的算法(移植後的算法),或者這兩種語言的「隨機」功能,與您的案例相關的答案可能會有很大差異!那麼您能否給我們提供更多的上下文?)

+0

這是我的逃跑計劃。如果我找不到任何其他解決方案,我將創建一個包含一系列隨機數的文件,然後使用它來編程。 – maxc900

+1

我使用隨機數來分配粒子的速度。那些粒子在彼此和牆壁之間相互碰撞。因此,如果初始速度不同,系統的最終狀態也會不同。 – maxc900

+0

感謝您提供的上下文。然而,如果它只是一次性的(用於測試),你可以參考我的建議,但是如果在c和.net端口都需要結構化的話,那麼我會說@VX的答案/建議。 –

1

你知道嗎,什麼算法用於C++ rand和c#Random class?

你可以嘗試自己實現一些PNG。例如。 LCG算法非常簡單並且易於在兩種語言中實現...只需使用wiki頁面中的一些常用參數即可。

+0

的確如此,但是當他只需要「測試」的時候很多工作,而不是?我想我們需要更多的上下文來理解他爲什麼總是需要相同的輸出。我認爲這是爲了測試,但如果它是基本的,那麼推出自己的確是一個好主意。或者可能使用P/Invoke來調用srand的c/C++庫.. –

+0

'class CRandom {unsigned int m_seed; CRandom(int seed){m_seed = seed;} unsigned int Next(){m_seed = 1664525 * m_seed + 1013904223;返回m_seed;}};'這似乎並沒有太多的工作.... –

+0

是的伊夫斯是正確的。實施一些其他的事情會對我造成負擔。 – maxc900

0

我用這個

Random rnd = new Random(); 

我的聲明。

和此:

Convert.ToString(rnd.Next(1, 49)) 

當按下按鈕的執行。

也許你可以有一個有用的使用。

問候

+0

但是這不會產生與srand相同的輸出,不是嗎? –