Go Down

Topic: Unerwartetes Verhalten bei randomSeed(0) (Read 631 times) previous topic - next topic

mde110

kannst ja auch i++ senden. Nicht viel zu tippen und immer def. Reihenfolge ;-)

erni-berni

leider sind dann die Bits im Datenstrom nicht besonders zufällig verteilt

olikraus

Wobei ein LCG Zufallszahlengenerator auch schnell selbst geschrieben ist:

Code: [Select]
uint8_t z = 0;
uint8_t lcg_rnd(void)
{
  z = (uint8_t)((uint16_t)65*(uint16_t)z + (uint16_t)17);
  return z;
}


Die Sequenz wiederholt sich nach 256 Zahlen (nämlich dann, wenn alle 8 Bit Zahlen mal dran waren), die Zahlen selbst sind gleichverteilt.

Siehe auch hier: http://en.wikipedia.org/wiki/Linear_congruential_generator

Grüße,
Oliver

uwefed


Hallo,
ich mache gerade Experimente zum Test einer Funkverbindung zwischen zwei Arduinos und wollte eine Quasi Zufallsbytefolge als Testmuster übertragen.
Dabei habe ich festgestellt, dass der Funktionsaufruf randomSeed(0) nicht bei jedem Aufruf die gleiche Folge von Zufallszahlen generiert, sondern nur beim ersten Aufruf.
Wenn ich stattdessen randomSeed(1) aufrufe, wird nach dem Aufruf auch im laufenden Programm immer wieder die gleiche Folge generiert.

In arduino1.0.2\hardware\arduino\cores\arduino\WMath.cpp
steht
Code: [Select]
void randomSeed(unsigned int seed)
{
  if (seed != 0) {
    srandom(seed);
  }
}

Praktisch bei null wird kein neuer Wert gesetzt sondern mit der alten Folge weitergemacht. Frag mich aber nicht wieso.
Grüße Uwe

erni-berni

Danke Uwe, das ist die Erklärung und offensichtlich so gewollt.
In meiner genutzten V1.0 ist der Programmabschnitt übrigens auch so.
Wenn man das Verhalten kennt, kann man das ja evtl bewusst so einsetzen.

Go Up