www.mikrocontroller.net

Forum: PC-Programmierung Zufallsgenerator in Win32 Assembler


Autor: agzo (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Hey ihr!

Ich hab da nen Problem einen Zufallsgenerator in Win32 Assembler 
umzusetzen. Dabei geht es mir nicht um kryptografisch sichere 
Zufallszahlen, es reicht mir vollkommen wenn die generierten Zahlen sich 
von Programmstart zu Programmstart unterscheiden. Mein bisheriger Ansatz 
war einfach die GetTickCounts API zu benutzen, aber das Problem ist das 
sich diese "Zufallszahl" nur einmal pro ms ändert, ich aber mehrere 
Zufallszahlen pro ms brauche. Danach habe ich versucht einen "lineareren 
Kongruenzgenerator" 
(http://de.wikipedia.org/wiki/Linearer_Kongruenzgenerator) zu 
implementieren, mit der Rückgabe von GetTickCounts als ersten Seed. Aber 
leider wähle ich entweder die ganze Zeit ungünstige Parameter oder mein 
Code weist irgendwo einen fundamentalen Fehler auf (ich fürchte ich 
runde zu großzügig aber wenn ich das nicht mache kann es vorkommen, dass 
bei der Division die Register zu klein sind und mein Programm abstürzt).
Ich muss dazu sagen, dass es mein erstes Projekt in Win32 Assembler ist, 
davor habe ich Assembler nur für AVRs programmiert.

Als erstes würden mich alle Informationen, wenn möglich Sources 
interessieren die sich damit beschäftigen einen einfachen 
(pseudo-)Zufallsgenerator in ASM umzusetzen. Wenn ihr noch andere 
innovative Ideen entwickelt habt wie ich einen einfachen 
Zufallsgenerator umsetzen könnte sind die natürlich auch gerne 
willkommen ;D

Achja, nur für den Fall, dass ihr euch tatsächlich meinen Quälcode antun 
wollt kann ich den natürlich auch noch posten, aber wie gesagt ist es 
mein erstes Win32 Assembler Projekt also erwartet nicht allzu viel von 
meinem Code, vieles ist halt noch sehr unschön gelöst.

Autor: ist gut so (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Aus den "Numerical Recipes", 7.1, Quick and Dirty Generators - An Even 
Quicker Generator.
Ist zwar in C, jedoch so einfach, dass eine Umsetzung in ASM trivial 
ist.

--------------------------------------------
unsigned long idum;
...
idum = 1664525L*idum + 1013904223L;
-----------------------------------------------

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.