qrand liefert keinen Zufallswert

Alles rund um die Programmierung mit Qt
Antworten
pospiech
Beiträge: 232
Registriert: 1. September 2006 17:20
Wohnort: Hannover

qrand liefert keinen Zufallswert

Beitrag von pospiech »

Code: Alles auswählen

	QTime time;
	qsrand ((unsigned) time.msec() );
	int rand_max = RAND_MAX;
	int random = qrand();
liefert mir grundsätzlich ein random = 38.

Wie bekomme ich nun echte Zufallszahlen? Der Seed scheint ja so nicht zu funktionieren.

Matthias
myme
Beiträge: 24
Registriert: 31. März 2008 14:25

Beitrag von myme »

Der Defaultkonstruktor von QTime ist gleich QTime(0,0,0,0); msec wird wohl auch Null liefern. Damit ist der Startwert für den Zufallszahlengenerator immer derselbe, darum kommt auch immer dasselbe heraus. Ersetze "time.msec()" mal durch "QTime::currentTime().msec()".
pospiech
Beiträge: 232
Registriert: 1. September 2006 17:20
Wohnort: Hannover

Beitrag von pospiech »

Das ist auch noch keine gute Lösung.

Code: Alles auswählen

	qsrand ((unsigned) QTime::currentTime().msec() );
	int rand_max = RAND_MAX;
	int random = qrand();
	double RandomOne = (double)random/(double)rand_max;
liefert mir nun Zufallswerte. Allerdings liegt rand_max bei 32767 aber random geht nur maximal hoch bis ~3000. Damit liegen die Werte von RandomOne nur zwischen 0-~0.1.

Das ist natürlich nicht das was ich möchte.
myme
Beiträge: 24
Registriert: 31. März 2008 14:25

Beitrag von myme »

Über die Qualität der erzeugten Zufallszahlen kann ich nichts sagen. Die Qt 4.3.4, in der GPL Variante hier unter Windows, benutzt direkt die C-Library Funktionen srand und rand.
solarix
Beiträge: 1133
Registriert: 7. Juni 2007 19:25

Beitrag von solarix »

Allerdings liegt rand_max bei 32767 aber random geht nur maximal hoch bis ~3000. Damit liegen die Werte von RandomOne nur zwischen 0-~0.1.
Bei mir nicht... der Code macht (bei Stichproben) ganz genau das, was er tun soll... (Werte von 0-32767 bez. 0-1 liefern).

[EDIT]
Auf allen Plattformen (Solaris/Qt4.3.4, Linux/Qt 4.4rc1, Mingw/Qt4.3.4). Uebrigens ist "random" ein schlechter Variabelnname... (siehe "man random").
Antworten