Boost Random
-
Wenn ich folgendes compile:
http://boost.org/libs/random/random_demo.cpp
Kommt folgende Ausgabe raus:10 samples of a uniform distribution in [0..1): 0.000944 0.571363 0.256809 0.447674 0.654139 0.966970 0.628985 0.716352 0.042059 0.227523 experiment: roll a die 10 times: 5 5 1 4 2 1 2 5 3 2 redo the experiment to verify it: 5 5 1 4 2 1 2 5 3 2 4 4 4Und das jedes mal wenn ich die Anwenung starte.
Warum klappt der eigene Beispiel code nicht?? Muss man da selber noch was machen?mfg.
-
Äh, was ist also dein Problem?
Anders gesagt. Wenn du erwartest, dass dir jemand bei deinem Problem hilft, dann solltest du lernen dein Problem richtig zu schildern. Sprich: was tust du, was passiert, was erwartest du, welche fehlermeldungen kommen, welche umgebung benutzt du, wie linkst du etc.
Oder lies einfach wmfrs
Überleg dir einfach, in welcher Form man die Frage am übersichtlichsten und verständlichsten formuliert. Um so schneller bekommst _du_ hilfe!
-
kingruedi schrieb:
Äh, was ist also dein Problem?
Anders gesagt. Wenn du erwartest, dass dir jemand bei deinem Problem hilft, dann solltest du lernen dein Problem richtig zu schildern. Sprich: was tust du, was passiert, was erwartest du, welche fehlermeldungen kommen, welche umgebung benutzt du, wie linkst du etc.
Oder lies einfach <a target='_blank'href='http://tinyurl.com/ysokg'>Wie man Fragen richtig stellt</a>
Überleg dir einfach, in welcher Form man die Frage am übersichtlichsten und verständlichsten formuliert. Um so schneller bekommst _du_ hilfe!
Hab ich ganz genau gesagt was ich mache??? Ich compiliere den Beispiel code von Boost.random und die ausgabe sieht jedes mal gleich aus. (verstehst du? random -> nicht jedes mal gleich)
Ich bekomme überhaupt keine Fehlermeldung und mein Compilier ist MinGW.mfg.
-
Hallo
Ich glaube, dass du den Zufalssgenerator noch mit einer Zahl initialisieren musst. So ist es zumindest, wenn man rand() benutzt. Es kommen immer die selben, außer amn initialisiert mit srand(unsigned(time(NULL)). Die Zahl mit der Initialisiert ist variabel und die "Zufallszahlen" sind nicht immer die gleichen.
chrische
-
chrische5 schrieb:
Hallo
Ich glaube, dass du den Zufalssgenerator noch mit einer Zahl initialisieren musst. So ist es zumindest, wenn man rand() benutzt. Es kommen immer die selben, außer amn initialisiert mit srand(unsigned(time(NULL)). Die Zahl mit der Initialisiert ist variabel und die "Zufallszahlen" sind nicht immer die gleichen.
chrische
Ja das hab ich mir auch gedacht, aber so einen Fehler würden die von Boost doch nicht in ihren eigenen Beispielcode machen, oder???
Deswegen hab ich das gefühl, dass der Code schon richtig ist, ich aber noch was einstellen muss.mfg.
-
Hallo
Ich weiß nicht, wie das bei boost funktionirt, aber ein Fehler ist es doch nicht. Er lioefert dir doch Zufallszahlen. Du bist aber eben adfür verantwortlich den Zufallsgenerator zu initialisieren.
chrische
-
chrische5 schrieb:
Hallo
Ich weiß nicht, wie das bei boost funktionirt, aber ein Fehler ist es doch nicht. Er lioefert dir doch Zufallszahlen. Du bist aber eben adfür verantwortlich den Zufallsgenerator zu initialisieren.
chrische
Vor allem an der Zeile:
"redo the experiment to verify it:"
würde ich jetzt mal sagen, dass die das schon gemacht haben.
Aber egal.
Ich frage mich gerade wo ich dort die Initialisierung mit der Zeit hinpacken soll:boost::mt19937 rng; // produces randomness out of thin air // see pseudo-random number generators boost::uniform_int<> six(1,6) // distribution that maps to 1..6 // see random number distributions boost::variate_generator<boost::mt19937&, boost::uniform_int<> > die(rng, six); // glues randomness with mapping int x = die(); // simulate rolling a dieJemand ne Ahnung?
mfg.
-
Hallo
Das war nur eine Vermutung von mir. Ich bin mir also nicht sicher.
chrische
-
chrische5 schrieb:
Hallo
Das war nur eine Vermutung von mir. Ich bin mir also nicht sicher.
chrische
Achso, ok.
Könntest du die cpp DAtei mal bei dir Compiliren um zu sehen ob es da klappt? Oder jemand der Boost hat?
mfg.
-
Lesen ist schon schwer, gell?
// Define a random number generator and initialize it with a reproducible // seed. // (The seed is unsigned, otherwise the wrong overload may be selected // when using mt19937 as the base_generator_type.) base_generator_type generator(42u);
-
Ich hab mich noch nie mit boosts Random beschäftigt, hab es jetzt ebend einfach mal überflogen.
Aber so wie ich das interpretiere, handelt es sich um einen reproduzierbaren Testcase. So steht es jedenfalls in den Kommentaren des Demo-Sourcecodes. D.h. auch das die Werte immer wieder gleich sein müssen, damit die Lib auch auf Richtigkeit überprüft werden kann. Das ist bei Testcases aller Art so, das die Werte bei jedem Testdurchlauf gleich sein müssen. Sonst hat die Lib einen Fehler.
Wenn du dir auch mal die Introduction zu der Random Lib durchliest, wirst du auch feststellen, das Boost.Random auch vorrangig ein Random-Interface ist. Scheint wohl ein Policy-Konzept zu sein. D.h. du als Lib-Benutzer kannst und mußt entscheiden, welches Verhalten Random haben soll. In der Demo wurde eine uniform-Policy (eintöniges Verhalten) gewählt:
// This is a reproducible simulation experiment. See main(). void experiment(base_generator_type & generator) { // Define a uniform random number distribution of integer values between // 1 and 6 inclusive. typedef boost::uniform_int<> distribution_type; typedef boost::variate_generator<base_generator_type, distribution_type> gen_type; gen_type die_gen(generator, distribution_type(1, 6));Das hab ich nach 3 Min. überfliegen der Doku und Source raus gelesen.
Deshalb: Doku und Sourcecode bzw. Source-Kommentare lesen!!!
-
edit: Tschuldigung aber mein Englisch (und mein C++ auch nicht) ist nicht so gut, ich versteh immmer nur die Hälfte von der Doku. Ich wollte ja nur zufallszahlen generieren...

mfg.
-
Achja, ich kann übrigens das Buch "Modernes C++ Design" nur empfehlen, das ich seit gestern habe. Da sind solche Konzepte auch drin.

-
Oh man, Boost ist ja voll schlecht designt.

-
Artchi schrieb:
Achja, ich kann übrigens das Buch "Modernes C++ Design" nur empfehlen, das ich seit gestern habe. Da sind solche Konzepte auch drin.

Ich hab Effektic C++ programmieren, welches allerdings zu hoch für mich ist. Werde mir das Buch mal angucken.
mfg.
-
joomoo schrieb:
Artchi schrieb:
Achja, ich kann übrigens das Buch "Modernes C++ Design" nur empfehlen, das ich seit gestern habe. Da sind solche Konzepte auch drin.

Ich hab Effektic C++ programmieren, welches allerdings zu hoch für mich ist. Werde mir das Buch mal angucken.
mfg.
Dann ist das Buch *viel* zu hoch für dich.
-
Also Zufallszahlen kannst du ja mit der Lib erzeugen, das ist dir doch jetzt klar? Nur halt dieses eine spezielle Demo erzeugt halt immer die gleichen "Zufallszahlen", mehr nicht.
Es sind ja auch weitere Generatoren neben dem uniform verfügbar, einfach mal die Doku durch stöbern.
Englisch solltest du zumindest lesen können. Ich selbst bin nicht der Englisch-Profi, aber ich lese viel englisch. Sprechen und schreiben ist dann eher schon wieder schlechter bei mir. Aber durch das viele lesen, kann ich schon gut solche Dokus verstehen.
"Effektiv C++" ist mehr ein technisches Buch. Sollte man auch lesen, aber beschäftigt sich praktisch nicht mit Design und Pattern. Ist eine ganz andere Kategorie als das "Modernes C++ Design". Das mit den Random-Generatoren von Boost ist z.B. ein Konzept und nichts technisches. OK, man baut es dann natürlich letztendlich technisch mit Templates und Vererbung, aber der eigentliche Gedanke ist das Design und Konzept.
Um aber "Modernes C++ Design" zu verstehen, muß man sich mit der Sprache C++ gut auskennen. Also man sollte schon mal Templates benutzt und auch mal selbsts Template-Klassen gebaut haben. Damit man weiß was da passiert.