[gelöst] qrand Maximum zuweisen

Alles rund um die Programmierung mit Qt
Antworten
keo
Beiträge: 8
Registriert: 21. März 2010 18:36

[gelöst] qrand Maximum zuweisen

Beitrag von keo »

Hallo,

kann man die Funktion qrand() auf einen Wertebereich beschränken? Z.B. soll mir die Funktion nur eine Zufallszahl zwischen 1 und 200 liefern.

Das Maximum wird ja durch RAND_MAX beschränkt. Meines Wissens kann man kein define ändern bzw. wäre das auch nicht so gut... gibt es eine andere Möglichkeit das Maximum zu ändern?
Zuletzt geändert von keo am 4. April 2010 14:39, insgesamt 1-mal geändert.
Christian81
Beiträge: 7319
Registriert: 26. August 2004 14:11
Wohnort: Bremen
Kontaktdaten:

Beitrag von Christian81 »

Auch wenn es dann nicht wirklich gleichverteilt ist - qrand() liefert ja sowieso nur Pseudo-Zufallszahlen: qrand() % 200
MfG Christian

'Funktioniert nicht' ist keine Fehlerbeschreibung
keo
Beiträge: 8
Registriert: 21. März 2010 18:36

Beitrag von keo »

Ok ich werde es damit mal versuchen,danke!
FaS
Beiträge: 184
Registriert: 25. Mai 2006 19:48
Kontaktdaten:

Beitrag von FaS »

Also um ein Intervall zu stauchen und zu verschieben genügt Grundschulmathematik.
qrand()*199/RAND_MAX+1

Bei Verwendung eines ganzzahligen Datentypes ist die Wahrscheinlichkeit, dass das Ergebnis 200 ist, allerdings nicht 1/200 sondern 1/(RAND_MAX+1). Die anderen Zahlen sind gleichmäßig verteilt.

Auch hier hilft etwas Mathematik:
qrand()*200/(RAND_MAX+1)+1
Die Quelle der Zahlen ist hier nicht offensichtlich, also falls das auf andere Wertebereiche angewendet werden muss:
qrand()*(max-min+1)/(RAND_MAX+1)+min

Diese Formel gilt nur für ganzzahlige Berechnungen, und sorgt für eine bessere Gleichverteilung. Der Wertebereich des verwendeten Datentypes darf allerdings RAND_MAX*(max-min+1) nicht unterschreiten.

Das alles sind übrigens C++-Grundlagen.

MfG,
FaS
Antworten