Seite 1 von 1

[gelöst] qrand Maximum zuweisen

Verfasst: 4. April 2010 12:48
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?

Verfasst: 4. April 2010 12:56
von Christian81
Auch wenn es dann nicht wirklich gleichverteilt ist - qrand() liefert ja sowieso nur Pseudo-Zufallszahlen: qrand() % 200

Verfasst: 4. April 2010 14:39
von keo
Ok ich werde es damit mal versuchen,danke!

Verfasst: 5. April 2010 00:52
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