Forum: Mikrocontroller und Digitale Elektronik Zufallszahl


von Kati (Gast)


Lesenswert?

Hallo,
ja ich weiß es gibt schon mehrere Threads über dieses Thema, dennoch 
bleiben mir ein paar ganz kleine Fragen offen !

und zwar habe ich aus diesem Thread
Beitrag "Re: Funk-Fernsteuerung (seriell)"
den Code genommen und in mein Programm eingefügt...

jetzt ist die Frage die ich habe, wie verwende ich diesen Befehl:

PMrand_seed((long int)time(NULL));

denn in dem beitrag steht folgendes:
=====
Zum Initialisieren wird meist time genommen, also:

PMrand_seed((long int)time(NULL));

Falls man time nicht zur Verfügung hat, dann muß man die Systemzeit in
Sekunden nehmen; jedenfalls etwas, was sich ständig ändert und
praktisch nicht (exakt) vorhersagbar ist.
=====

muss ich dafür ne eine zusätzliche Bibliothek einbinden oder wie 
verwende ich diesen Befehl ?

von Bri (Gast)


Lesenswert?

Es wär echt hilfreich, wenn du mal dazuschreiben würdest, für welchen 
Mikrocontroller du programmierst und mit welchen Compiler usw.

von Kati (Gast)


Lesenswert?

Ohh das tut mir Leid, bin neu hier ! Daran hatte ich gar nicht gedacht
Also das Ganze ist für einen ATMega-16 bestimmt und ich Programmiere mit 
Programmers Notepad, dann lade ich die *.hex Files mit PonyProg in 
meinen Controller

von Unbekannter (Gast)


Lesenswert?

Naja, das Problem ist, dass Du auf einen AVR keine Systemuhr hast. 
Desshalb hast Du auch kein time().

Mach doch ein paar Analog-Digital-Wandlungen eines nicht angeschlossenen 
Pins und verwende jeweils das unterste Bit. Diese einzelnen Bits 
schiebst Du zu einem 32-Bit-Wert zusammen den Du als Seed für den 
Zufallsgenerator verwendest.

Aber je nach Anwendung, reicht auch ein fester Seed. Für was brauchst Du 
die Zufallszahlen auf dem Controller?

von Kati (Gast)


Lesenswert?

Ich wollte mit meinem 2x27 Zeilen Display eine Art Bildschirmschoner 
basteln,
wo das Programm zufällig an eine x-beliebige Stelle auf dem Display 
springt und dann dort entweder eine 1 oder eine 0 ausgibt, also 
zufällige position und zufällig 0 oder 1 !!!
das mit dem AD-Wandlungen verstehe ich nicht, da ich noch recht neu in 
der Welt der uC's bin-....

von einen Namen (Gast)


Lesenswert?

  - -

von Walter (Gast)


Lesenswert?

Dann ist der Startwert ziemlich egal, nimm doch einfach 42
Grüße
Walter

von Karl H. (kbuchegg)


Lesenswert?

Was du wissen must:

Ein Zufallszahlengenerator ist in einem Computer
normalerweise einfach eine Formel.
Irgendwas in der Form

    Xneu = f( Xalt )

Es wird also eine Zahl hergenommen, diese Zahl
durch eine Formel geschickt. Das Ergebnis ist wieder
eine Zahl, die zum einen deine Zufallszahl darstellt
und zum anderen als Zahl für den nächsten Durchgang
mit der Formel herhält.

Die Frage ist nur: Wo kriegt man die erste Zahl her.
Wenn ich die kenne, und die Formel kenne, kann ich
die ganze Folge der generierten Zahlen vorhersagen.

Für echte Zufallszahlen die zb. in einem Spielautomaten
gebraucht werden, ist das natürlich nicht akzeptabel. Auch
bei Simulationen, die auf Zufallszahlen basieren, braucht
man einen guten Generator. In deiner konkreten Anwendung
spielt es aber nun wirklich keine Rolle, ob das Muster
jedes mal anders ist oder ob sich das Muster widerholt.
Eine Möglichkeit gäbe es allerdings. Lass den Startwert
so wie er ist. Du hast doch sicher irgendeinen Timer
im Program, der einen Interrupt auslöst. Bei jedem
Interrupt Aufruf rufst du einmal rand() auf. Da nicht
vorhersagbar ist, wann dein Bildschirmschoner sich einklinkt
ist auch nicht vorhersagbar, wieviele rand() Aufrufe bis zum
Start des Bildschirmschoners gemacht werden und damit ist auch
nicht vorherbestimmt, wo genau das Programm sich in die
Kette der Zufallszahlen einklinkt.

Und nochwas: Wenn schon dann seed nur einmal in einem
Programmlauf aufrufen. Das ist wichtig. Die 'Zufäülligkeit'
entsteht nur dann, wenn du die Formel arbeiten lässt. Wenn
du dich mittels seed() da immer wieder einmischt, sind deine
generierten Zahlen alles mögliche, nur keine Zufallszahlen.


PS: Die Dinger heissen nicht deswegen Zufallszahlen, weil
sie zufällig sind, sondern weil sie die statistischen
Eigenschaften von Zufall (mehr oder weniger) haben.

von Unbekannter (Gast)


Lesenswert?

> Die Dinger heissen nicht deswegen Zufallszahlen, weil
> sie zufällig sind, sondern weil sie die statistischen
> Eigenschaften von Zufall (mehr oder weniger) haben.

Na, das ist aber nicht (ganz) richtig.

Es gibt zwei "Sorten":

a.) Pseudo-Zufallszahlen
b.) "echte" Zufallszahlen

Pseudo-Zufallszahlen werden durch Pseudo-Zufallsgeneratoren erzeugt, 
auch PRNG (Pseudo Random Number Generator) genannt.

Die "echten" Zufallszahlen sind eben "echter" Zufall. Z.b. das kosmische 
Rauschen oder das Elektronenrauschen an einem Halbleiterübergang etc.

Und nun der springende Punkt:

Statische gesehen sind Pseudo-Zufallszahlen vollkommen identisch wie 
echte Zufallszahlen!

Du kannst statistisch keinen Unterschied zwischen Pseudo-Zufallszahlen 
und echten, natürlichen Zufallszahlen feststellen.

Du kannst statistisch nur festestellen, wie hoch die Wahrscheinlichkeit 
ist, ob eine Zahlenfolge nun zufällig ist oder nicht.

Wenn Du bei Pseudo-Zufallszahlen mit statistischen Methoden feststellst, 
dass es höchstwahrscheinlich keine Zufallszahlen sind, ist der 
Algorithmus zum Erzeugen der Pseudo-Zufallszahlen untauglich.

Wenn Du bei "echten" Zufallszahlen statistisch feststellst, dass die 
Wahrscheinlichkeit für einen Zufall gering ist, hast Du meistes bei der 
Messung des Zufallsprozesses (z.B. Halbleiter-Rauschen) einen Messfehler 
gemacht.

Der einzige, aber sehr wichtige, Unterschied zwischen 
Pseudo-Zufallszahlen und "echten" Zufallszahlen ist der, dass Du die 
Folge der Pseudo-Zufallszahlen jederzeit aus dem Startwert des PRNGs 
wieder herstellen kannst.

Du brauchst in nur sehr wenigen Fällen echte Zufallszahlen. Z.B. in der 
Cryptographie sind echte Zufallszahlen Grundvoraussetzung.

Für Simulationen, Analysen, Bildschirmschoner, Computerspiele usw. 
reichen Pseudo-Zufallszahlen vollkommen aus.

von Christoph Kessler (db1uq) (Gast)


Lesenswert?

Beitrag "Zufallsgenerator"
da gabs das Thema Pseudozufallszahlen schon mal.
Ein wichtiger Unterschied ist, dass sich die Pseudozufälle nach einiger 
Zeit wiederholen. Ein  Autokorellation würde das beweiisen.

von Florian (Gast)


Lesenswert?

Bevor die Diskussion wieder voll durchstartet: Es ist so einfach: 
http://www.elektor.de/default.aspx?tabid=29&view=topic&forumid=23&postid=3789

von Unbekannter (Gast)


Lesenswert?

> Ein wichtiger Unterschied ist, dass sich die Pseudozufälle nach
> einiger Zeit wiederholen.

Ja.

> Ein  Autokorellation würde das beweiisen.

Da bekommst Du allerdings ein praktisches Problem. Nimm einen PRNG mit 
einer Periode 2^256 (ca. 10^77) oder noch mehr, und Du bist bedient.

Kleiner Tip: Die Anzahl aller Atome im Universum wird auf 10^80 bis 
10^99 geschätzt (je nach Quelle).

von Christoph Kessler (db1uq) (Gast)


Lesenswert?

peinlich, Korellation wie Koralle, (und Sattelit wie Sattel) sollte 
natürlich Korrelation heißen.
Früher war man eben sparsamer mit den Schieberegisterstufen, da konnte 
man auch noch WLAN-Schlüssel u.ä. knacken, weil an der Stufenzahl 
gespart wurde.

Spielereien mit großen Zahlen gibts öfter - mit den ersten 
weißnichtwieviel (40?) Stellen von PI kann man den Durchmesser des 
Weltalls auf ein Atom genau angeben. Das 1/f-Rauschen nimmt zu tiefen 
Frequenzen hin zu, bei 1/(Alter des Weltalls) hat es sich verdreifacht, 
(oder nur verdoppelt ?) hat Maxim mal vorgerechnet.

von Johnny (Gast)


Lesenswert?

Sorry ich bin ein Skeptiker und Hinterfrager:

Wer weiss denn so genau wie gross das Weltall wirklich ist?
Und wer weiss mit Sicherheit, wie alt das Weltall ist?

Es sind doch alles nur Theorien und es gibt auch viele Gegentheorien.

Im Leben ist halt alles im Fluss und man weiss nicht was morgen ist. Um 
wieder zurück aufs Thema zu kommen:
Man entwirft halt einen Verschlüsselungsalgo so, dass er heute nicht 
ohne Weiteres geknackt werden kann. Dann baut man noch eine Reserve ein 
und hofft so, dass er auch in ein paar Jahren noch genügend Sicherheit 
bietet. Aber wie es im Leben so ist: Es kommt meistens anders als man 
denkt....
Darum sollte man meiner Meinung nach darauf achten, dass man das Produkt 
gut warten kann und allenfalls die Verschlüsselung später noch auf den 
aktuellen Stand der Technik upgraden kann oder das ganze Gerät gut gegen 
ein aktuelles tauschen kann.
Gut ist bereits, wenn man einen Plan hat, welche Geräte von Zeit zu Zeit 
überprüft werden sollten, ob die Verschlüsselung noch stand hält oder ob 
Massnahmen zu ergreifen sind.
Am schlimmsten sind Geräte wie z.B. eine Firewall oder eine online 
banking software, welche bestens funktionieren, aber die einfach 
vergessen werden und vor sich hin werkeln bis ein bösartiger Angriff 
erfolgt....

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.