Vraag Willekeurig genereren van nummers


Ik heb willekeurige getallen gegenereerd in turbo C ++ (DOS) met behulp van de willekeurige opdracht.
Nogmaals, ik heb een willekeurig nummer gegenereerd in ubuntu C ++ met behulp van srand- en randopdrachten.

Beide willekeurige generaties matchen elkaar niet (beide generaties zijn dus verschillend voor een bepaald zaad).

Laat me de redenen achter dit probleem weten. Is het mogelijk om een ​​code achter willekeurige commando's, srand- en rand-commando's te krijgen?


1
2018-06-19 06:04


oorsprong




antwoorden:


Turbo C ++ en Gnu G ++ (C ++) (misschien LLVM / clang) hebben verschillende bibliotheken. Hun implementaties van rand, srand en veel (veel!) functies zullen waarschijnlijk anders zijn in HOE ze zorgen voor het juiste resultaat.

Elke functie in die bibliotheken zal verwachte resultaten opleveren, open, read, exit enzovoort. (Als ze dat niet doen, zijn ze niet erg 'voldoet aan de normen').

Zo rand & srand  ZIJN werkt goed in elke omgeving ... ze bieden (en zaad) willekeurige getallen.

HOE ze komen tot dat resultaat is niet gedefinieerd, er zijn verschillende methoden voor het maken van willekeurige getallen (Zie `Willekeurige nummergeneratie ' voor meer info over RNG's)

Daarom, zelfs met dezelfde seedwaarde, kunt u niet verwachten dat verschillende RNG-bibliotheken identieke uitvoer leveren. Dit zal waar zijn, ongeacht welke bron van bibliotheken je gebruikt, Microsoft, Solaris, Linux, * BSD's, OSX enzovoort.

Alleen als het exact  dezelfde methode wordt gebruikt om de willekeurige getallen af ​​te leiden, kunt u een identieke reeks verwachten. Verschillen in entropie-verzameling kunnen verschillen en in de loop van de tijd verstoringen veroorzaken. Ik stel me voor dat iemand me corrigeert over het 'soort', maar zolang je dezelfde bibliotheken gebruikt, zou je dezelfde resultaten van dezelfde zaden moeten krijgen. (hetzelfde hetzelfde!)


2
2018-06-20 00:53