006
09.09.2004, 14:56 Uhr
virtual
Sexiest Bit alive (Operator)
|
Nachtrag:
Erstmal muß ich mich schämen: In meinem ersten post fehlen in den rand Funktionen diverse Klammern. Habe ich nachgeschoben.
Zweitens: Ich mal der Numerische "Beweis", daß mit rand zusammengesetzte Zufallsfunktionen eine Gleichverteilung bringen. Man kann ähnliche Tests dann auch machen mit der Fragestellung, wie oft es zB vokommt, daß Gleiche Zahlen hineinander gezogen werden; man kommt in der Regel auf ähnlich befriedigende Ergebisse).
C++: |
#include <iostream> #include <cstdlib>
unsigned rand8() { return std::rand()%16 + 16*(std::rand()%16); }
/* * Auswertung */ void auswerten(int n[256]) { /* Berechnung des mittelwerts */ double amw = 0.0; for(unsigned i=0; i<256; ++i) amw += i*n[i]; amw /= 25600;
/** Berechnung der Standardabweichung */ double saw = 0.0; for(unsigned i=0; i<256; ++i) { double diff = n[i]*(i-amw); saw += diff*diff; } saw = std::sqrt(saw/25600);
std::cout<<"Mittel: "<<amw<<std::endl <<"Abweichung: "<<saw<<std::endl; }
void test() { int n[256];
/* Initialisierung */
/* Verteilung laufen lassen, jede Zahl sollte im Schnitt 100 mal gezogen worden sein */ for(unsigned i=0; i<256; ++i) n[i] = 0; for(unsigned i=0; i<25600; ++i) { n[rand8()]++; } std::cout << "Tatsächliches Ergebnis:"<<std::endl; auswerten(n);
/* zum Verleich: theoretisches Ergebis */ for(unsigned i=0; i<256; ++i) n[i] = 100; std::cout << "Theoretisches Ergebnis:"<<std::endl; auswerten(n);
}
int main() { srand(time(NULL)); test(); }
|
-- Gruß, virtual Quote of the Month Ich eß' nur was ein Gesicht hat (Creme 21) |