簡體   English   中英

MSVC++ rand() 與 C# System.Random 的關系

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM