verschiedene rand () - Ergebnisse, die auf Windows und Linux
Ich habe gemerkt, dass die standard-Funktion rand() liefert unterschiedliche Ergebnisse, die auf Windows und Linux. Natürlich habe ich die gleichen seed-Zahl (1234). Hier sind einige erste Ergebnisse:
GEWINNEN: 4068 213 12761 8758
LIN: 479142414 465566339 961126155 1057886067
Meine Anwendung erfordert, dass beide Plattformen produzieren identische Ausgabe.
Was sind meine Optionen? Gibt es irgendwelchen guten Ersatz für rand (), die erfüllt meine Anforderungen ?
Dank
PS. Ich benutzte Microsoft Visual C ++ 2008 unter Windows7, und gcc-4.1.2 auf CentOS 5.5
- Warum müssen Sie Zufallszahlen identisch auf allen Plattformen? Das ist nicht sehr zufällig, nachdem alle - was wollen Sie erreichen?
- Mögliches Szenario: eine App entwickelt, die unter linux und cygwin getestet und mit randomisierten test. Das Saatgut wird gedruckt, für jeden test. Wenn der test identifiziert eine Fehlerbedingung man den Fehler reproduzieren kann Fall mit Hilfe der Samen. Wenn man will, zu Debuggen, Fehler, Falle auf linux und cygwin, es wäre sehr schön, wenn
rand
zurückkehren würde, die gleiche zufällige Abfolge unter linux und cygwin.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Boost hat eine Breite Palette von RNGs, vermutlich mit reproduzierbaren Verhalten auf allen Plattformen.
Wenn Sie glücklich sind, mit dem standard -
rand
Implementierung und verlangen nur, dass Reproduzierbarkeit, können Sie einfach schreiben Sie Ihre eigenen linear congruential generator (Anpassung der C-Schnittstelle, wahrscheinlich nicht eine gute Wahl! – verwenden Sie lieber eine statt Klasse):Diese Konstanten verwendet (ANSI C: Watcom) aus dem Wikipedia-Artikel.
Sagte, ich gehe lieber mit einem read-Umsetzung von Boost, wie vorgeschlagen, von anderen.
Werden Sie nicht erhalten die gleichen Ergebnisse durch die unterschiedliche Umsetzung der Funktionen auf eine Plattform.
Denke ich, werden Sie auch verschiedene linux-Versionen Rückgabe unterschiedlicher Werte, sowie verschiedene windows-Versionen Rücksendung unterschiedliche Werte haben.
Könnten Sie vereinheitlichen Ihre random-generator durch die Verwendung der glibc gehört, zum Beispiel.
Eine weitere option für Sie ist, schreiben Sie Ihre eigene Funktion ABER tun, dass NUR, wenn Sie 100% sicher, dass Sie nicht brauchen, um verwenden Sie Ihre random für kryptographische Nutzung oder jegliche andere Verwendung, erfordert die Sache mit Unberechenbarkeit oder uniformness oder sonst randomish Eigenschaften.
Können Sie versuchen, mit srand(int), die erzeugt Zufallszahl-basierend auf Saatgut (input)
--
Cheers