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?
[gelöst] qrand Maximum zuweisen
[gelöst] qrand Maximum zuweisen
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:
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
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