Seite 1 von 3

Zufallszahlen

Verfasst: Do Jul 17, 2008 2:56 pm
von aqe89
Mein Problem ist mit diesen Funktionen, dass die Zufallszahlen immer aufsteigend sind.
Zahl Diff
10533
10565 . 32
10601 . 36
10637 . 36
10670 . 33
.....
11176
11212 . 36
11248 . 36
11287 . 39

Ich finde das ein bisschen komisch.
Habe es 2 mal ausprobiert, sind immer aufsteigend aber andere Zahlen, aber immer ähnliche Differenzen immer zwischen 32 und 39.

Es liegt wahrscheinlich an der umrand Funktion, hatte dort mal eine anderen Lösung, gab aber immer einen Integer-Überlauf.
Weiss da jemand eine alternative? Bei Linux könnte man ja noch getpid() rein nehmen. aber bei Windows.

Code: Alles auswählen

unsigned long randtime()
{
    unsigned long randome;
    long min=10000, max=12000;

    srand(time(NULL));

    randome = umrand(min, max);
    printf("%d msec\n",randome);
    return randome;
}


unsigned long umrand( long min, long max)
{
    unsigned long random=0;
    unsigned long rnd = max - min + 1;
    random=rand()%rnd+min;
    return random;
}

Re: Zufallszahlen

Verfasst: Do Jul 17, 2008 3:04 pm
von nufan
Ich hab mir dein Programm ehrlich gesagt nicht angesehen. Aber wenn du eine Zufallszahl generieren willst, versuch es mit randomize ().
Bin mir jetzt nicht sicher, ob das in time.h oder stdlib.h ist. Ich mach halt mal beide rein. :D
Ein einfaches Prog mit randomize:

Code: Alles auswählen

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

int main ()
{

  int zufallszahl;
  randomize ();

  zufallszahl=random (1000);    // Zufallszahl zwischen 0 und 1000 wird generiert. 

  return 0;

}

Re: Zufallszahlen

Verfasst: Do Jul 17, 2008 3:19 pm
von aqe89
die Funktion randomize ist nix für mich denn:
randomize()
Diese Funktion ermittelt und setzt den Anfangswert des Zufallsgenerators durch einen Zähler der DOS-Uhr. Dadurch ist dieser Wert selbst für den Programmierer kaum vorhersagbar und die mit random() auf diesem Wert aufbauenden Zahlenfolgen liefern relativ willkürliche Zahlen.
es werden beide funktionen nicht erkannt

Re: Zufallszahlen

Verfasst: Do Jul 17, 2008 3:19 pm
von Dirty Oerti
dani93 hat geschrieben:Ich hab mir dein Programm ehrlich gesagt nicht angesehen. Aber wenn du eine Zufallszahl generieren willst, versuch es mit randomize ().
Bin mir jetzt nicht sicher, ob das in time.h oder stdlib.h ist. Ich mach halt mal beide rein. :D
Ein einfaches Prog mit randomize:

Code: Alles auswählen

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

int main ()
{

  int zufallszahl;
  randomize ();

  zufallszahl=random (1000);    // Zufallszahl zwischen 0 und 1000 wird generiert. 

  return 0;

}

Dem ist fast nichts mehr hinzuzufügen.
Außer: randomize(); vor jeder neuen auszugebenden Zufallszahl ausführen.
Führte zumindest bei mir dazu, dass die Zufallszahlen wirklich sehr zufällig waren.

MfG
Daniel

Re: Zufallszahlen

Verfasst: Do Jul 17, 2008 3:23 pm
von nufan
aqe89 hat geschrieben: es werden beide funktionen nicht erkannt
Nicht erkannt?

Re: Zufallszahlen

Verfasst: Do Jul 17, 2008 3:34 pm
von Dirty Oerti
Hm..ich weiß es selber nicht, deswegen die Frage:

Sind diese Funktionen vllcht plattformabhängig?

Re: Zufallszahlen

Verfasst: Do Jul 17, 2008 3:35 pm
von aqe89
error: 'randomize' was not declared in this scope
error: 'random' was not declared in this scope
bin jetzt auf interessante Artikel gestossen, werde mich ein weilchen damit beschäftigen. den wie oben erwähnt ist die Funktion randomize für windows, oder sonst haben die da etwas falsches geschreiben. den:
durch einen Zähler der DOS-Uhr.

Re: Zufallszahlen

Verfasst: Do Jul 17, 2008 3:39 pm
von nufan
Weiss da jemand eine alternative? Bei Linux könnte man ja noch getpid() rein nehmen. aber bei Windows.
Nach dem Satz dachte ich, dass das Programm für Windows sein soll.
Auf welchem OS programmierst du denn? Da es ein Windows Programm werden soll, nehme ich an, du programmierst auch auf Windows. Bei mir Funktionierts zu 100% auf Vista, XP und Millenium.

Re: Zufallszahlen

Verfasst: Do Jul 17, 2008 3:45 pm
von aqe89
Das Programm wird unter Linux (3 Personen ) und unter Windows verwendet.
aber ich habe es unter Windows versucht und es ging nicht. bin jetzt am Windows PC.

habe jetzt ca 10 Artikel über Zufallszahlen, werde da wohl einige Stunden am lesen sein.

Re: Zufallszahlen

Verfasst: Do Jul 17, 2008 3:50 pm
von nufan
Vllt ist das auch Compilerabhängig.
Borland Hilfe sagt das über random:
Syntax

Code: Alles auswählen

#include <stdlib.h>
int random(int num);
Description

Random number generator.
random returns a random number between 0 and (num-1). random(num) is a macro defined in stdlib.h. Both num and the random number returned are integers.

Return Value

random returns a number between 0 and (num-1).
und das über randomize:
Syntax

Code: Alles auswählen

#include <stdlib.h>
#include <time.h>
void randomize(void);
Description

Initializes random number generator.
randomize initializes the random number generator with a random value.

Return Value

None.
Weiß nicht, ob dir das weiterhilft.