Hallo zusammen, wie kann ich in C Zufallszahlen erzeugen die alle kleiner 20 sind. Die Bibliotheksfunktion rand(void) liefert nur integer, die weitaus größer sind. Mit freundlichen Grüßen Stefan Peters
On Monday 16 February 2004 16:52, Stefan Peters wrote:
wie kann ich in C Zufallszahlen erzeugen die alle kleiner 20 sind. Die Bibliotheksfunktion rand(void) liefert nur integer, die weitaus größer sind.
Siehe "man rand":
"If you want to generate a random integer between 1 and 10, you should always
do it by using high-order bits, as in
j=1+(int) (10.0*rand()/(RAND_MAX+1.0));
and never by anything resembling
j=1+(rand() % 10);
(which uses lower-order bits)."
Weiter oben wird das allerdings auch gleich abgemildert:
"The versions of rand() and srand() in the Linux C Library use the same random
number generator as random() and srandom(), so the lower-order bits should be
as random as the higher-order bits."
Soll heißen:
x = rand() % 20 // 0..19
tut's auch, wenn Du nicht gerade Rücksicht auf Implementierungen von
Uralt-Systemen nehmen mußt:
"However, on older rand() implementations, the lower-order bits are much less
random than the higher-order bits."
Soll heißen, daß die Zahlen dann nicht gleichverteilt sein könnten.
CU
--
Stefan Hundhammer
Hallo, also ich habr die grafikkarte Ati radeon 9600TX und ich finde keinen Treiber dafür der auch funktioniert! und außerdem kann ich keinen 3d beschleuniger aktivieren... sry ich weiß falsches Thema ich hoffe ihr könnt mir helden! Mit schönen Grüßen von Yahoo! Mail - http://mail.yahoo.de
Hi! Also _mir_ hat http://www.linuxquestions.org/questions/history/122514 und http://www.gmpf.de/ geholfen. Beachte weiterhin, a) daß es sowohl von SuSE als auch direkt von ATI Treiber gibt (vgl. mein Posting vom 16.02., 16:18 Uhr); b) daß Du das agpgart-Kernelmodul vor dem Modul fglrx lädst und nach der ATI-Treiberinstallation in fglrxconfig angibst, daß external AGPGart-Modul zu verwenden; c) daß SaX nicht mit den ATI-Treibern zusammenarbeitet (zumindest kannst Du 3D-Beschl. damit nicht einschalten). Weiterhin habe ich die von fglrxconfig generierte XF86config-4 nicht verwendet, sondern relevante Zeilen in meine von SaX erzeugte XF86Config kopiert. Viele Grüße, Oliver On 17.02.2004 07:25, Niklas Andruszkiewicz wrote:
Hallo, also ich habr die grafikkarte Ati radeon 9600TX und ich finde keinen Treiber dafür der auch funktioniert! und außerdem kann ich keinen 3d beschleuniger aktivieren... sry ich weiß falsches Thema ich hoffe ihr könnt mir helden!
Hallo Niklas, ich kann Dir zwar nicht weiterhelfen, aber wenn Du Deine Anfrage in die ML "suse-linux" wirfst, wirst Du sicher nützliche Tipps bekommen, denn dort werden solche Probleme zuhauf gewälzt. MfG, Mike -----Ursprüngliche Nachricht----- Von: Niklas Andruszkiewicz [mailto:niklas_andrus@yahoo.de] Gesendet: Dienstag, 17. Februar 2004 07:26 An: suse-programming@suse.com Betreff: ATI-Treiber Hallo, also ich habr die grafikkarte Ati radeon 9600TX und ich finde keinen Treiber dafür der auch funktioniert! und außerdem kann ich keinen 3d beschleuniger aktivieren... sry ich weiß falsches Thema ich hoffe ihr könnt mir helden! Mit schönen Grüßen von Yahoo! Mail - http://mail.yahoo.de -- Um die Liste abzubestellen, schicken Sie eine Mail an: suse-programming-unsubscribe@suse.com Um eine Liste aller verfügbaren Kommandos zu bekommen, schicken Sie eine Mail an: suse-programming-help@suse.com
wie kann ich in C Zufallszahlen erzeugen die alle kleiner 20 sind. Die Bibliotheksfunktion rand(void) liefert nur integer, die weitaus größer sind.
Na dann machst Du vom Ergebnis ein Modulo 20. -- 1 Bodo Kaelberer 123 http://www.webkind.de/ 3 4 Politik ist, wenn viele sich streiten und keiner sich freut.
Hallo Stefan,
Hallo zusammen,
wie kann ich in C Zufallszahlen erzeugen die alle kleiner 20 sind. Die Bibliotheksfunktion rand(void) liefert nur integer, die weitaus größer sind.
...und dass die Zufallszahlen nicht immer in der gleichen Reihenfolge
kommen:
Um eine zufällige Startzahl zu erzeugen
schreibe man folgendes Script:
#!/bin/bash
f=$(cat /proc/uptime | awk -F" " {' print $1 '})
d=$(echo $f |sed -e "s:\.::")
exit $d
und speichere es im Home-Verzeichnis unter dem Namen laufzeit ab.
Es liest die Anzahl der 1/100 Sekunden seit Systemstart.
Dann setze das x-Attribut mit chmod +x laufzeit
Mit den folgenden zwei Zeilen wird diese Zahl ausgelesen.
*/
int startwert = system("~/laufzeit");
srand(startwert); //oder auch srandom(...);
dieZufallsZahl = (rand()%(MaxZahl-MinZahl+1))+MinZahl; //mind of ufg
#include
Am Montag, 16. Februar 2004 20:44 schrieb Ulrich Gehring: [...]
...und dass die Zufallszahlen nicht immer in der gleichen Reihenfolge kommen: Um eine zufällige Startzahl zu erzeugen schreibe man folgendes Script: #!/bin/bash f=$(cat /proc/uptime | awk -F" " {' print $1 '}) d=$(echo $f |sed -e "s:\.::") exit $d und speichere es im Home-Verzeichnis unter dem Namen laufzeit ab. Es liest die Anzahl der 1/100 Sekunden seit Systemstart. Dann setze das x-Attribut mit chmod +x laufzeit Mit den folgenden zwei Zeilen wird diese Zahl ausgelesen. */ int startwert = system("~/laufzeit"); srand(startwert); //oder auch srandom(...);
Hm, wären da nicht time() oder / und clock() bessere + schnellere Kandidaten (die keinen Ausflug in die Shell brauchen)? Jan
Am Montag, 16. Februar 2004 20:44 schrieb Ulrich Gehring:
dieZufallsZahl = (rand()%(MaxZahl-MinZahl+1))+MinZahl; //mind of ufg
man 3 rand: ... In Numerical Recipes in C: The Art of Scientific Computing (William H. Press, Brian P. Flannery, Saul A. Teukolsky, William T. Vetterling; New York: Cambridge University Press, 1992 (2nd ed., p. 277)), the following comments are made: "If you want to generate a random integer between 1 and 10, you should always do it by using high-order bits, as in j=1+(int) (10.0*rand()/(RAND_MAX+1.0)); and never by anything resembling j=1+(rand() % 10); (which uses lower-order bits)." ... Also lieber dieZufallsZahl = MinZahl + (int)((MaxZahl-MinZahl+1.0)*rand()/(RAND_MAX+1.0))
Am Montag, 16. Februar 2004 22:14 schrieb Matthias Guede:
Am Montag, 16. Februar 2004 20:44 schrieb Ulrich Gehring:
dieZufallsZahl = (rand()%(MaxZahl-MinZahl+1))+MinZahl; //mind of ufg
man 3 rand: ... In Numerical Recipes in C: The Art of Scientific Computing (William H. Press, Brian P. Flannery, Saul A. Teukolsky, William T. Vetterling; New York: Cambridge University Press, 1992 (2nd ed., p. 277)), the following comments are made: "If you want to generate a random integer between 1 and 10, you should always do it by using high-order bits, as in
j=1+(int) (10.0*rand()/(RAND_MAX+1.0));
and never by anything resembling
j=1+(rand() % 10);
(which uses lower-order bits)." ...
Also lieber
dieZufallsZahl = MinZahl + (int)((MaxZahl-MinZahl+1.0)*rand()/(RAND_MAX+1.0))
Ok, Ok. Habe jetzt auch den Absatz davor gelesen. Vergesst es. *schaem*
Hallo, Am Mon, 16 Feb 2004, Ulrich Gehring schrieb:
...und dass die Zufallszahlen nicht immer in der gleichen Reihenfolge kommen: Um eine zufällige Startzahl zu erzeugen schreibe man folgendes Script: #!/bin/bash f=$(cat /proc/uptime | awk -F" " {' print $1 '}) d=$(echo $f |sed -e "s:\.::") exit $d und speichere es im Home-Verzeichnis unter dem Namen laufzeit ab. Es liest die Anzahl der 1/100 Sekunden seit Systemstart. Dann setze das x-Attribut mit chmod +x laufzeit Mit den folgenden zwei Zeilen wird diese Zahl ausgelesen. */ int startwert = system("~/laufzeit"); srand(startwert); //oder auch srandom(...);
*UARGH*
====
#include
Hi, On Mon, 16 Feb 2004, Ulrich Gehring wrote:
Um eine zufällige Startzahl zu erzeugen schreibe man folgendes Script: #!/bin/bash f=$(cat /proc/uptime | awk -F" " {' print $1 '}) d=$(echo $f |sed -e "s:\.::") exit $d und speichere es im Home-Verzeichnis unter dem Namen laufzeit ab. Es liest die Anzahl der 1/100 Sekunden seit Systemstart. Dann setze das x-Attribut mit chmod +x laufzeit Mit den folgenden zwei Zeilen wird diese Zahl ausgelesen. */ int startwert = system("~/laufzeit"); srand(startwert); //oder auch srandom(...);
Schade. Leider bin ich eben blind geworden. Du wolltest "srand(time())" haben. Noch besser waere Benutzung von /dev/random, ist aber unportabel (wie allerdings auch deine Loesung, die auch noch den Nachteil hat nur insgesamt 256 verschiedene seeds zu erzeugen, wegen exit value). Ciao, Micha.
Stefan Peters schrieb:
wie kann ich in C Zufallszahlen erzeugen die alle kleiner 20 sind. Die Bibliotheksfunktion rand(void) liefert nur integer, die weitaus größer sind.
Mach die Ergebnisse kleiner. In 'man 3 rand' steht sogar ein Beispiel für Zahlen kleiner 10 drin. mfG, Jens
participants (12)
-
Bodo Kaelberer
-
David Haller
-
Jan.Trippler@t-online.de
-
Jens Nixdorf
-
Matthias Guede
-
Michael Matz
-
Mike Leuschner
-
Niklas Andruszkiewicz
-
Oliver Baum
-
Stefan Hundhammer
-
Stefan Peters
-
Ulrich Gehring