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 ?
Es wär echt hilfreich, wenn du mal dazuschreiben würdest, für welchen Mikrocontroller du programmierst und mit welchen Compiler usw.
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
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?
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-....
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.
> 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.
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.
Bevor die Diskussion wieder voll durchstartet: Es ist so einfach: http://www.elektor.de/default.aspx?tabid=29&view=topic&forumid=23&postid=3789
> 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).
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.
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.