Rand() wird gern mißverstanden. Das ist eine immer gleiche (abh. vom Anfangswert SEED) Zahlenfolge, und der Witz daran ist nicht der Zufall, sondern die gleichmäßige Streuung über das Bereich.
Den "Zufall" mußt du über SEED reinzaubern.
also wenn ich mir mit rand eiene zufallszahl generiere dann kommt nach dem reset immer wieder die gleiche zahl weis jemand warum das so ist oder ist das einfach ein bug
#include <stdlib.h>
#define RAND_MAX 0xff für 0 -255
int r;
r = rand();
Rand() wird gern mißverstanden. Das ist eine immer gleiche (abh. vom Anfangswert SEED) Zahlenfolge, und der Witz daran ist nicht der Zufall, sondern die gleichmäßige Streuung über das Bereich.
Den "Zufall" mußt du über SEED reinzaubern.
mfg robert
Wer glaubt zu wissen, muß wissen, er glaubt.
hast vieleicht ein paar codeschnippsel oder nen kleines bsp
tja hab mir gedacht rand wäre ähnlich der random(min,max) funktion in c#
frag mich eigentlich warum ich c# in der schule hatte und nicht c++ würd glaub auch einiges einfacher machen
Hi,
hatte damit mal etwas mehr zu tun, raus gekommen ist die Initialisierung:
hat sich ganz gut bewährt...Code:void rnd_init () { long tricks; unsigned int seed; // START set random seed seed = time(&tricks) % 37; srand (seed); // END set random seed } //rnd_init
alternativ könnte man auch den aktuellen seed im eeprom speichern, um dann nach nem Neustart diesen weiterzuverwenden...
Hi,
wenn Du das auf dem uC machen moechtest wird mein prog wohl eher nciht funzen, da hier das mit der Time nicht wirklich geht...
Wuerde mich dann eFFex anschliessen (aktuelles seed im eeprom). Fuer den Anfangswert (also bei erstinebtriebnahem) koenntest Dir den Wert vom PC ausgeben lassen und dann einfach uebertragen...
hab mir auch schon überlegt ob ich nicht selbst eine random funktion schreiben soll weil so etwas wäre auch für obotter und soh nicht schlecht
wnn man iehn zufällige operationen ausführen lassen könte
weis jemand wie ne random funktion grunzätzlich afgebaut sein muss
und hat ne idee wie man soetwas realisieren kan
vieleicht könnte ich das mit einem timerinterupt lösen
das unterprogramm von 0 -255 werte laden lassen und bei dem interupt der ja immer anders kommt weils nur ein unterprogramm ist den wert weitergeben aber denk mal da muss es was besseres geben
Das letzte versteh ich jetzt nicht so ganz...
Warum sollte ein interrupt immer anderskommen ?? und welcher Überhaupt ??
Denke mal das mit einer eigenen rand() Funktion ist nicht wirklich einfach...
Oder hat hier zufällitg jemand die Formel für die Berechnung einer zufälligen Zahl parat ??
Moin moin!
Ich glaube, dafuer nimmt man meistens mehrere MOD-Operationen (Divisionsrest) hintereinander. Also zum Beispiel irgendeinen Timer- oder Zaehlerwert, diesen durch irgendwas anderes (Integer) teilen und den Rest der Division weiterverwenden. Wenn man ein paar Berechnungen dieser Art hintereinander durchfuehrt und der Timer-Anfangswert nicht gerade immer den gleichen Wert hat, sind die Ergebnisse recht gut gestreut. Normieren kann man ja dann je nach Bedarf.
Nils
Lesezeichen