Hallo erstmal, ich benötige für ein Programm von mir eine berechnete Zufallszahl. Hab bereits gelesen das es natürlich keine echten Zufallszahlen gibt, da die CPU schliesslich alles berechnet. Nun benötige ich in meinem Programm eine Zufallszahl in dem Bereich von 1-4. Ist dies möglich und dann auch mit halbwegs gleicher verteilung? Ich programmiere den uC in C. Danke schon mal und Grüße
Gast
#3405788
http://www.rn-wissen.de/index.php/Zufallszahlen_mit_avr-gcc "Echte" Zufallszahlen zu generieren ist leider nicht möglich, hierzu muss man externe Hardware wie einen Rauschgenerator verwenden.
Gast
#3405790
Wenn dir der Pseudo-Zufall der rand-Funktion reicht schreib einfach: value = (rand()%max_value);
Gast
#3405795
Dominik J. schrieb: > Nun benötige ich in meinem Programm eine Zufallszahl in dem Bereich > von 1-4. Meinst du damit eine aus der Menge der Natürlichen Zahlen {1, 2, 3, 4}?
Jo das reicht mir schon. Vielen vielen Dank! Jap meinte ich, aber funktioniert mit der Methode von Dennis einwandfrei, soweit ichs bisher getestet hab ;).
Gast
#3405832
Dominik J. schrieb: > Jap meinte ich, aber funktioniert mit der Methode von Dennis > einwandfrei, soweit ichs bisher getestet hab ;). Musst nur schauen ob du von 1-4 brauchst oder eben von 0-4. Evtl. das später noch aufaddieren oder eben so lassen.
Das Problem der rand()-Funktion ist, dass Du nach jedem Einschalten genau die gleiche "Zufallsfolge" erhälst. Das kann man ändern, indem man den Zufallsgenerator einmalig mit srand() und einer echten Zufallszahl initialisiert. Eine echte Zufallszahl zu erhalten, ist aber gar nicht so einfach. Eine Möglichkeit wäre, mehrere ADC-Messungen an einem freien Pin durchzuführen und das Rauschen in den niederwertigsten Bits zu einer Zufallszahl zusammenzusetzen. Falls Du irgendwelche Eingaben von außen (Tastendrücke, Kommandos von serieller Schnittsteller, Sensoren) hast, kannst Du diese Daten auch zum Erzeugen von (Initialisierungs-)Zufallszahlen nutzen. Zum Beispiel die Zeit zwischen zwei Tastendrücken per Timer stoppen und an srand() übergeben.
Fabian O. schrieb: > Eine echte Zufallszahl zu erhalten, ist aber gar nicht so einfach. Eine > Möglichkeit wäre, mehrere ADC-Messungen an einem freien Pin > durchzuführen und das Rauschen in den niederwertigsten Bits zu einer > Zufallszahl zusammenzusetzen. Kann man natürlich machen. Man kann sich aber auch ganz einfach den zuletzt benutzten seed im EEPROM merken und beim nächsten Einschalten ganz einfach den seed um 1 erhöhen, damit srand aufrufen um den Generator etwas vorzugeben und den neuen seed wieder im EEPROM speichern.
Antwort schreiben
Bitte melde dich an, um einen Beitrag zu schreiben.