 
		 
			 
			
			
			Is niet altijd random in de zin dat het standaard statistische tests doorstaat, en wat erger is (vanuit wetenschappelijk oogpunt) is dat de gegenereerde nummers niet reproduceerbaar zijn (ook al haalt hij op gegeven moment wel een statistische test, het heeft geen betekenis).quote:
xchg is typisch langzamer dan gewone moves/stores. Het is schijnbaar handig om semaforen te implementeren (geen ervaring mee), maar anders spaart het wederom 1 register uit in ruil voor meer cycles voor de swap; i.e. geheugen vs snelheid, de aloude tradeoff.quote:Op vrijdag 17 augustus 2012 00:46 schreef t4rt4rus het volgende:
[..]
/dev/random is random nummer generator in linux.
xchg rax, rdx is swappen tussen rax en rbx.
 
			 
			
			
			Ik heb er even mee zitten kloten, maar het is toch wel een heel gedoe om dit in C++ voor elkaar te krijgen. Toen zag ik opeens dat er prima random integer generators op internet zijn. Ik genereer daar in een mum van tijd 100,000 random ints. Die plak ik in een textbestandje en lees ik dan in C++ in een array. So far so good, maar als ik bij element 20,096 van mijn array kom, dan loopt mijn programma vast.quote:Op donderdag 16 augustus 2012 22:19 schreef thabit het volgende:
[..]
Goed random getallen produceren, dat is een vakgebied op zich. Ik zou vooral googlen naar wat mensen ermee gedaan hebben.
| 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 | void ReadInts(int randint[]) { char *inname = "random2.txt"; //contains random numbers 0 - 9999 ifstream infile(inname); if (!infile) { cout << "There was a problem opening file " << inname << " for reading." << endl; } else cout << "Opened " << inname << " for reading." << endl; int k=0; randint[30000]; string value; int result; while ( infile.good() ) { getline ( infile, value, ',' ); result=0; stringstream convert(value); if ( !(convert >> result) ) { result = 0; } randint[k]=result; cout << "k = " << k << " en random number = " << result << endl; ++k; } } | 
 
			 
			
			
			 
			 
			
			
			 .
 .
											 
			 
			
			
			 
			 
			
			
			Misschien een beetje laat, maar over het algemeen is rand() een prima bron voor random getallen en alleen in geval van beveiliging kan ik me voorstellen dat je een betere random number generator wilt gebruiken.quote:Nog een andere vraag trouwens: hoe kan je het beste goede random getallen produceren in C++? De snelheid van de methode is ook erg belangrijk. Met srand en rand krijg ik getallen die niet zo random lijken.
 
			 
			
			
			 
			 
			
			
			Meneer zit op Windows...quote:Op zondag 19 augustus 2012 12:14 schreef trancethrust het volgende:
GSL is doorgaans wat makkelijker in gebruik.
 
											 
			 
			
			
			Ik heb het nodig voor statistische technieken in de wiskunde, waarbij ik heel snel achter elkaar random numbers wil genereren die niet van elkaar afhankelijk zijn. Dat lukte me niet met srand met de tijd als seed als ik het heel snel achter elkaar deed. Ik zag iedere keer ongeveer hetzelfde patroon erin zitten. Op google vond ik ook dat je voor serieuze taken beter iets anders gebruikt.quote:Op zondag 19 augustus 2012 15:04 schreef GS42 het volgende:
[..]
Misschien een beetje laat, maar over het algemeen is rand() een prima bron voor random getallen en alleen in geval van beveiliging kan ik me voorstellen dat je een betere random number generator wilt gebruiken.
Waarom heb je het idee dat de de getallen "niet zo random lijken"? En waarvoor wil je het gebruiken?
 
			 
			
			
			Dan wordt het ook moeilijker dan noodzakelijk.quote:
Dat komt omdat (zelfs al gebruikt je installatie een betere RNG dan de twee die ik hierboven als voorbeeld aanhaalde), doordat rand() doorgaans een linear congruential RNG (LC-RNG) is. Als ik een gok doe dan ben je bezig met monte-carlo methoden, en voor zulke punt-gebaseerde methodes kun je bewijzen dat voor elke LC-RNG altijd een dimensie d is waarvoor de gegenereerde punten rond vlakken in die d-dimensionale ruimte clusteren.quote:Op maandag 20 augustus 2012 11:56 schreef thenxero het volgende:
[..]
Ik heb het nodig voor statistische technieken in de wiskunde, waarbij ik heel snel achter elkaar random numbers wil genereren die niet van elkaar afhankelijk zijn.
...
 
			 
			
			
			 
			 
			
			
			Je gebruikt srand() toch wel maar 1 keer he? Als je rand() gebruikt in je programma, roep je maar 1 enkele keer srand() aan, als eerste statement in je main(); op een andere plek of vaker is fout.quote:Op maandag 20 augustus 2012 11:56 schreef thenxero het volgende:
[..]
Ik heb het nodig voor statistische technieken in de wiskunde, waarbij ik heel snel achter elkaar random numbers wil genereren die niet van elkaar afhankelijk zijn. Dat lukte me niet met srand met de tijd als seed als ik het heel snel achter elkaar deed. Ik zag iedere keer ongeveer hetzelfde patroon erin zitten. Op google vond ik ook dat je voor serieuze taken beter iets anders gebruikt.
 Ik heb bijvoorbeeld voor mijn bachelorscriptie - een implementatie van een monte-carlo (= statistische classificatie) zoekalgoritme - gewoon de rand() gebruikt zonder problemen.
 Ik heb bijvoorbeeld voor mijn bachelorscriptie - een implementatie van een monte-carlo (= statistische classificatie) zoekalgoritme - gewoon de rand() gebruikt zonder problemen.
											 
			 
			
			
			ik zou sowieso zo vaak mogelijk de std functies gebruiken ipv. zelf maken of uit externe libs halenquote:Op maandag 20 augustus 2012 12:59 schreef GS42 het volgende:
[..]
Je gebruikt srand() toch wel maar 1 keer he? Als je rand() gebruikt in je programma, roep je maar 1 enkele keer srand() aan, als eerste statement in je main(); op een andere plek of vaker is fout.
Verder klopt het dat je voor serieuze taken beter een aparte library kan gebruiken, maar dan moet je wel erg serieus zijn.Ik heb bijvoorbeeld voor mijn bachelorscriptie - een implementatie van een monte-carlo (= statistische classificatie) zoekalgoritme - gewoon de rand() gebruikt zonder problemen.
 
			 
			
			
			| 1 2 3 4 5 6 7 8 9 | 2 2 3 3 4 2 2 5 5 6 2 3 7 7 8 2 2 2 9 3 3 10 2 5 | 
 
			 
			
			
			Waarom geen vector gebruiken?quote:Op zondag 26 augustus 2012 11:33 schreef thenxero het volgende:
Ik heb een txt-bestandje gemaakt waarbij getallen links staan en rechts hun priemfactoren, gescheiden door witte ruimte. Het ziet er dus uit als volgt:
[ code verwijderd ]
etcetera.
Nu wil ik dit bestandje lezen en in een array zetten. Maar omdat iedere regel een andere lengte kan hebben, weet ik niet hoe ik dat moet doen. Iemand een idee?
 
			 
			
			
			Gaat het om het inlezen of om het opslaan? De oplossing voor het tweede is al gegeven door thabit: gewoon een vector gebruiken in plaats van een array. Het inlezen zou ik als volgt doen:quote:Op zondag 26 augustus 2012 11:33 schreef thenxero het volgende:
Ik heb een txt-bestandje gemaakt waarbij getallen links staan en rechts hun priemfactoren, gescheiden door witte ruimte. Het ziet er dus uit als volgt:
[ code verwijderd ]
etcetera.
Nu wil ik dit bestandje lezen en in een array zetten. Maar omdat iedere regel een andere lengte kan hebben, weet ik niet hoe ik dat moet doen. Iemand een idee?
 
			 
			
			
			Ik zou std::getline gebruiken en niet std::basic_istream::getline.quote:Op zondag 26 augustus 2012 12:06 schreef GS42 het volgende:
[..]
Gaat het om het inlezen of om het opslaan? De oplossing voor het tweede is al gegeven door thabit: gewoon een vector gebruiken in plaats van een array. Het inlezen zou ik als volgt doen:
Het bestand per regel inlezen met getline (díe getline, er is ook een andere). Per regel stop je dan de string die je hebt gelezen in een std::istringstream. Uit de stringstream kan je daarna getallen halen met operator>>.
 
			 
			
			
			Dan zijn we het eens: jouw getline is dezelfde als de mijne.quote:Op zondag 26 augustus 2012 13:03 schreef t4rt4rus het volgende:
[..]
Ik zou std::getline gebruiken en niet std::basic_istream::getline.
http://en.cppreference.com/w/cpp/string/basic_string/getline
 
											 
			 
			
			
			Als ik op die link van je klik kom ik toch ergens anders uit.quote:Op zondag 26 augustus 2012 13:06 schreef GS42 het volgende:
[..]
Dan zijn we het eens: jouw getline is dezelfde als de mijne.
 
											 
			 
			
			
			 
			 
			
			
			quote:Op zondag 26 augustus 2012 13:20 schreef thenxero het volgende:
De reden dat ik het met een array wilde doen is omdat ik dezelfde 'layout' wil als in dat textbestand: een 2-dimensionaal ding. Met vector heb je altijd 1 dimensie voor zover ik weet.
| 1 | std::vector< std::vector<unsigned> > | 

| Forum Opties | |
|---|---|
| Forumhop: | |
| Hop naar: | |