[英]Relationship between MSVC++ rand() and C# System.Random
我怎樣才能使相同的隨機數序列從 MSVC++ 程序和 C# .NET 程序中出來?
可能嗎? MSVC++ rand()
和System.Random
之間有什么關系嗎?
鑒於下面的示例,它們似乎完全不同。
#include <iostream>
using namespace std;
int main()
{
srand( 1 ) ;
cout << rand() << endl <<
rand() << endl <<
rand() << endl ;
}
using System;
class Program
{
static void Main( string[] args )
{
Random random = new Random( 1 );
Console.WriteLine( random.Next() );
Console.WriteLine( random.Next() );
Console.WriteLine( random.Next() );
}
}
執行此操作的最簡單方法是對 C++ DLL 進行非托管引用,其中包含以參數作為種子的隨機數生成器。 然后你可以確定它們是一樣的。
是的,它們是非常不同的功能。 有時您會發現 BCL 類只是使用 PInvoke 執行它們的本機對應類的非常薄的包裝器。 System.Random 不是這種情況。 它是一個 100% 托管的實現,並且完全獨立於 srand 版本。
你能幫我們解釋一下為什么你想要一組相同的數字嗎? 例如,它用於測試嗎?
如果您確實想要擁有同一組隨機數,一個選擇是創建一個簡單的 COM object 來包裝 srand。 COM object 將可用於您的托管代碼和本機代碼,因此能夠在這兩個地方提供相同的算法。
在非托管 C++ 中使用 .NET 托管庫是可能的(並不完全容易)。您可能需要查看MSDN文檔。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.