2009-06-17 6 views
0

Wie kann ich es so machen, dass die gleiche Folge von Zufallszahlen aus einem MSVC++ - Programm und einem C# .NET-Programm kommen?Beziehung zwischen MSVC++ rand() und C# System.Random

Ist es möglich? Gibt es eine Beziehung zwischen MSVC++ rand() und System.Random?

Angesichts des Beispiels unten scheint es, dass sie völlig unterschiedlich sind.

#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()); 
    } 
} 

Antwort

2

Es ist möglich (nicht sehr einfach), .NET-Bibliotheken in nicht verwaltetem C++ zu verwenden. Vielleicht möchten Sie einen Blick auf die Dokumentation MSDN werfen.

5

Der einfachste Weg, dies zu tun wäre, um einen nicht verwalteten Verweis auf einen C++ DLL zu machen, die den Zufallszahlengenerator mit einem Parameter, der als Samen enthält. Dann können Sie sicher sein, dass sie gleich sind.

+2

Dies ist der richtige Weg, nicht die akzeptierte Antwort. Die CLR nur für die Zufallsfunktion einzubringen wäre wahnsinnig. – Qix

3

Ja, sie sind sehr unterschiedliche Funktionen. Gelegentlich werden Sie feststellen, dass BCL-Klassen nur sehr dünne Wrapper um ihre nativen Gegenstücke sind, die PInvoke verwenden, um sie auszuführen. Dies ist bei System.Random nicht der Fall. Es ist eine 100% verwaltete Implementierung und ist vollständig von der Srand-Version getrennt.

Können Sie uns ein wenig helfen und erklären, warum Sie die gleiche Anzahl von Zahlen haben möchten? Ist es zum Beispiel zum Testen?

Wenn Sie wirklich den gleichen Satz von Zufallszahlen haben möchten, besteht eine Möglichkeit darin, ein einfaches COM-Objekt zu erstellen, das srand umschließt. Das COM-Objekt wäre sowohl für Ihren verwalteten als auch für Ihren nativen Code verfügbar und wäre daher in der Lage, denselben Algorithmus an beiden Stellen anzubieten.

+0

Ich portiere eines meiner eigenen Projekte nach C# von C++. Es ist eine Art von Simulation, und ich möchte schnell überprüfen, ob ich etwas verpasst habe, indem Sie die gleiche Folge von Zufallszahlen verwenden, so kann ich _expect_ die Sim in beiden Fenstern identisch aussehen! – bobobobo

Verwandte Themen