PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Zufallsgenerator in C2?



Dirk
22.08.2004, 14:28
Hallo C2-Profis,

gibt es eine gute Zufallsgenerator-Funktion für C2 (so wie in BASIC der RANDOM-Befehl)?

Gruß Dirk

Rudi
24.08.2004, 10:48
Kann man so machen


int RND;
//--------------------
function randomize()
//--------------------
{
RND = system.timer();
}

//--------------------------------------------
function rnd(int min, int max) returns float
//--------------------------------------------
{
float r1;
RND = RND * 251 ;
r1 = math.abs(RND) ;
return ((r1 / 32768) * (max - min + 1)) + min;
}

Dirk
24.08.2004, 17:23
Hallo Rudi,

der Code kommt mir aus dem Modul "random.c2" bekannt vor.

Mein Problem war mit diesem Modul u.a., dass es bei Neustart des Progs immer dieselben Zahlen liefert, weil der system.timer immer den selben Wert hat, wenn das Prog ihn anfangs mit randomize() abfragt.

Ich habe mir schon mit der "Krücke" geholfen, dass ich random.RND mit dem Inhalt eines A/D-Wandlers gefüllt habe. Der ist ein Helligkeitssensor, so dass meist unterschiedliche Startwerte für RND entstehen.

Das sind aber auch keine guten Zufallswerte, d.h. es kommen immer noch Wiederholungen vor.

Gruß Dirk

avatar
24.08.2004, 20:34
Statt dem Helligkeitssensor kannst du einen Rauschgenerator an den A/D-Wandler anschließen. Schaltungen für Rauschgeneratoren gibts im WWW. Ich glaube bei "Elektronik Kompendium" habe ich mal eine gesehen. Ist nicht kompliziert. Im Prinzip wird nur das schwache Rauschen, das in allen Widerständen und Halbleitern entsteht wird, verstärkt. Das Rauschen entsteht durch Bewegungen den Atome und Elektronen. Diese Bewegungen sind völlig unregelmäßig und nicht deterministisch.

Wenn du pro Zufallszahl zwei oder drei Messungen machst und diese miteinander verrechnest, müsstest du "Hausnummern" heraus bekommen, wie sie zufälliger nicht sein könnten.

Da ist der RAND-Befehl dann wirklich überflüssig.

http://www.ciphersbyritter.com/NOISE/NOISRC.HTM

nestler
27.08.2004, 01:46
Alternativ gäbe es doch auch noch die Möglichkeit, dass nach dem
Start irgendeine User-Interaktion nötig ist.

Beispielsweise muss der User auf der Tastatur eine Taste drücken
(sofern du ein Applikationboard mit Tastatur hast) oder es muss
vom PC ein byte übertragen werden.
Natürlich lässt sich auch ein einfacher Schalter an einen der Ports
anschliessen - sobald der Schalter gedrückt wurde, läuft das Programm
weiter.

Damit hast du komplette Zufälligkeit, da ja die Userinteraktion nie
zur gleichen Millisekunde nach dem Start auftritt...

Ciao,
Simon

Dirk
28.08.2004, 19:02
Hallo Simon,

danke für den Tip mit der Benutzeraktion!
Jetzt muss vorher ein Berührungssensor gedrückt werden. Die Zufallszahlen danach sind nicht mehr vorhersagbar!

Gruß Dirk