rand(x)

Wolfsbein

Erfahrenes Mitglied
Hallo
ich wollte fragen, wie rand(x) eigentlich genau arbeitet, da ich gehört habe, dass mit s_rand() nicht wirklich absolute Zufallszahlen erzeugt werden. Gibt es hier eine geringe Fehlerstreuung?
 
int rand(void);

The rand function returns a pseudorandom integer in the range 0 to RAND_MAX. Use the srand function to seed the pseudorandom-number generator before calling rand.

#include <stdlib.h>
#include <stdio.h>
#include <time.h>

void main( void )
{
int i;

/* Seed the random-number generator with current time so that the numbers will be different every time we run.*/

srand( (unsigned)time( NULL ) );
for( i = 0; i < 10;i++ )
printf( " %6d\n", rand() );
}


void srand( unsigned int seed );

The srand function sets the starting point for generating a series of pseudorandom integers. To reinitialize the generator, use 1 as the seed argument. Any other value for seed sets the generator to a random starting point. rand retrieves the pseudorandom numbers that are generated. Calling rand before any call to srand generates the same sequence as calling srand with seed passed as 1.


Soweit ich es bisher gesehen und benutzt habe sind es zufallszahlen die ausgegeben werden.
Hoffe es ist einigermaßen beantwortet...
 
Bis hierhin weiß ich es, aber die Frage ist, ob ich, wenn ich mit srand((unsigned) time(NULL)); den Zufallsgenerator starte, und mit int x = (rand() % 6) + 1; eine Zufallszahl zwischen eins und sechs (in diesem Fall) ermittle, diese Zahl auch wirklich absolut zufällig ist, oder eine kleine Abweichung vorliegt.
 
Da es wie schon gesagt ein Pseudozufallszahlengenerator ist, sind die Zahlen sicher nicht 100%ig zufällig.
Wie definierst du "absolut zufällig" bzw. eine kleine Abweichung davon?
Falls du "uniform-distribution" meinst, kannst du es ja einfach ausprobieren, ich habe das einmal mit TC++ 3.0 getestet, und es war relativ einheitlich.
Allerdings kann das bei jeder Implementierung der CRT anders sein, da meines Wissens im Standard kein bestimmter Algorithmus für rand() vorgeschrieben wird.
 
Ich meine damit, ob z.B. bei meinem Beispiel die Zahlen zw. 1 und 6 auch wirklich gleich oft vorkommen, also genau 1/6?
 
Japp, das is "uniform-distribution", führ einfach wie oben beschrieben einen Test durch (wenn der zufallsgenerator zw. 0 u. RAND_MAX uniform-distribution hat, hat er das auch bei modulo x)
 

Neue Beiträge

Zurück