Zufallsdaten aktualisieren sich zu langsam!

beelzebub

beelzebub

Jungspund
/*********************************************
* *
* Zufallszahlengenerator *
* *
*********************************************/

define rand() (z=z*z*z*z*z*1103515245+12345, z&0x7fff)
#define srand(s) z=s

unsigned long int z=1;

unsigned long int random(unsigned long int von,unsigned long int bis){

unsigned long int zahl;
srand(time(NULL));
zahl=rand()%bis+von;

return zahl;
}
//xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
//Dieser Zufallsdatenerzeuger aktualisiert sich nur 1x in der sec., zu langsam für ein Programm, dass sehr viele Zufallszahlen erzeugen muss. liegt an time(); gibt's da eine bessere Funktion?
 
man 2 time gibt:
Code:
NAME
       time - get time in seconds
also insofern is das logisch mit den zufallszahlengenerator.

Leider steht das was du brauchst nicht bei den references zu time.
Was du brauchst is clock():
Code:
NAME
       clock - Determine processor time

DESCRIPTION
       The clock() function returns an approximation of processor time used by
       the program.
Das gibt dann eine sehr kleine zahl bzw. eine sehr große ;)
siehe man clock
 
Ich hab jetzt auch noch gelesen, dass es unter Linux /dev/urandom gibt, gibt's dass unter den anderen Unixes auch, wie z. B. FreeBSD??
 
Jop, das kannst du auch nehmen, einfach ganz normal öffnen uns auslesen.
urandom gibts nich bei alles Unixes, je nachdem ob random kontinuierlich Zufallszeichen ausgibt. Wenn nicht gibts urandom. random gibt dann nur bei Ereigniss Zufallsdaten aus (z.B. Interrupts -> Tastatur, Maus etc.)
 
ich hab's jetzt anders gelöst, und zwar srand(time(NULL)*random())

random() ist unter stdlib.h zu finden, und generiert einen schneller aktualisierenden Zufallswert. Jedoch scheint sich der irgendwie an der Zeit, die seit dem Start des Programms vergangen ist zu orientieren
-> immer die gleichen, deswegen vermischen mit time()
 
z.B. so

Code:
#include<iostream> // fuer cout 
#include<time.h>   // fuer time 
#include<stdlib.h> // fuer srand 
 
using namespace std; 

int main(){
	srand((unsigned)time(NULL)); 
	while(1){
 		cout << "Zahl zwischen 1 und 49: " << 1+(rand()%49) << endl; 
	}
	exit(0); 
}
 
Den Startwert kann man auch ueber andere Zufallswerte bestimmen, z.B. PID, Mauszeiger Position ... oder einer Summe aus den Werten.
Code:
...
#include<unistd.h> // fuer getpid
...
srand((unsigned)time(NULL) + getpid());
...
 
beelzebub schrieb:
ich hab's jetzt anders gelöst, und zwar srand(time(NULL)*random())

random() ist unter stdlib.h zu finden, und generiert einen schneller aktualisierenden Zufallswert. Jedoch scheint sich der irgendwie an der Zeit, die seit dem Start des Programms vergangen ist zu orientieren
-> immer die gleichen, deswegen vermischen mit time()
Kleiner Tipp: Für random() gibts auch srandrom() ;)
Dann kanns ja nur besser werden, wenn du beide kombinierst :D
 
Ich glaub jetzt ist alles mögliche drin, und hab total zufällige Daten. Super!
 

Ähnliche Themen

Unix Webserver mit HTML Seite erstellen

doppelte srand() initialisierung

C Funktion in einer Schleife ausführen (Funktion wird nur 1 mal ausgeführt)

Internet mit C

Per Sockets ins IRC

Zurück
Oben