<?xml version="1.0" encoding="UTF-8"?><rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:atom="http://www.w3.org/2005/Atom" version="2.0"><channel><title><![CDATA[Boost.Random - immer die gleiche Zufallszahl]]></title><description><![CDATA[<p>Servus,</p>
<p>ich werde da nicht schlau draus, ich habe schon etwas in der Doku, und im Netz gestöbert. Ich habe auch schon versucht den Seed zu setzen, aber ich erhalte als Rückgabe auf meinen Methodenaufruf immer den gleichen Integerwert.</p>
<p>Kann mal jemand schauen an was es liegt?</p>
<pre><code class="language-cpp">int getRandomInteger( int minIncluded, int maxIncluded ) {

    // Boost.Random wird von Breymann empfohlen
    // Tut: stackoverflow.com/questions/2254909/boost-random-number-generator
    typedef boost::mt19937 RNGType;   // mersenne twister generator
    //RNGType rng; // erzeugt immer die gleiche Zufallszahl, Lösung seed im Konstruktor setzen
    RNGType rng;
    boost::uniform_int&lt;&gt; dist(minIncluded, maxIncluded ); // distribution, Zufallszahlen von min zu max alle gleichwertig
    boost::variate_generator&lt; RNGType&amp;, boost::uniform_int&lt;&gt; &gt; dice(rng, dist); // Wuerfelobjekt mit überladenem Operator
    int randomInt = dice(); // Wuerfelvorgang des Wuerfelobjekts tatsächlich ausführen
    return randomInt;
}
</code></pre>
<p>Danke vorab.</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/280097/boost-random-immer-die-gleiche-zufallszahl</link><generator>RSS for Node</generator><lastBuildDate>Mon, 24 Aug 2026 06:04:09 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/280097.rss" rel="self" type="application/rss+xml"/><pubDate>Sun, 09 Jan 2011 15:20:15 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Boost.Random - immer die gleiche Zufallszahl on Sun, 09 Jan 2011 15:20:15 GMT]]></title><description><![CDATA[<p>Servus,</p>
<p>ich werde da nicht schlau draus, ich habe schon etwas in der Doku, und im Netz gestöbert. Ich habe auch schon versucht den Seed zu setzen, aber ich erhalte als Rückgabe auf meinen Methodenaufruf immer den gleichen Integerwert.</p>
<p>Kann mal jemand schauen an was es liegt?</p>
<pre><code class="language-cpp">int getRandomInteger( int minIncluded, int maxIncluded ) {

    // Boost.Random wird von Breymann empfohlen
    // Tut: stackoverflow.com/questions/2254909/boost-random-number-generator
    typedef boost::mt19937 RNGType;   // mersenne twister generator
    //RNGType rng; // erzeugt immer die gleiche Zufallszahl, Lösung seed im Konstruktor setzen
    RNGType rng;
    boost::uniform_int&lt;&gt; dist(minIncluded, maxIncluded ); // distribution, Zufallszahlen von min zu max alle gleichwertig
    boost::variate_generator&lt; RNGType&amp;, boost::uniform_int&lt;&gt; &gt; dice(rng, dist); // Wuerfelobjekt mit überladenem Operator
    int randomInt = dice(); // Wuerfelvorgang des Wuerfelobjekts tatsächlich ausführen
    return randomInt;
}
</code></pre>
<p>Danke vorab.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2004534</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2004534</guid><dc:creator><![CDATA[Jay1980]]></dc:creator><pubDate>Sun, 09 Jan 2011 15:20:15 GMT</pubDate></item><item><title><![CDATA[Reply to Boost.Random - immer die gleiche Zufallszahl on Sun, 09 Jan 2011 15:28:44 GMT]]></title><description><![CDATA[<p>Was macht boost::random so besonders als ctime-random?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2004537</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2004537</guid><dc:creator><![CDATA[boostwirdüberbewertet]]></dc:creator><pubDate>Sun, 09 Jan 2011 15:28:44 GMT</pubDate></item><item><title><![CDATA[Reply to Boost.Random - immer die gleiche Zufallszahl on Sun, 09 Jan 2011 15:54:20 GMT]]></title><description><![CDATA[<p>Du benutzt so immer den gleichen seed. Selbst, wenn Du einen seed setzt (z.B. mittels <code>std::time</code> ), dann setzt Du, wenn die Deine Funktion mehrfach sehr schnell aufrufst vielfach den gleichen seed, weil <code>std::time</code> sich nicht schnell genug ändert.<br />
Mögliche Lösung: Zum Beispiel einen Funktor benutzen, welche den Generator im Ctor einmal initialisiert:</p>
<pre><code class="language-cpp">class Dice
{
public:
    Dice() : engine(std::time(0)){};

    int operator()(int minIncluded, int maxIncluded)
    {
        return boost::uniform_int&lt;int&gt;(minIncluded, maxIncluded)(engine);
    }
private:
    boost::mt19937 engine;
};

int main()
{
    Dice dice;
    std::cout &lt;&lt; dice(10, 20) &lt;&lt; '\n';
    std::cout &lt;&lt; dice(10, 20) &lt;&lt; '\n';
    std::cout &lt;&lt; dice(20, 30) &lt;&lt; '\n';
}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/2004543</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2004543</guid><dc:creator><![CDATA[Tachyon]]></dc:creator><pubDate>Sun, 09 Jan 2011 15:54:20 GMT</pubDate></item><item><title><![CDATA[Reply to Boost.Random - immer die gleiche Zufallszahl on Sun, 09 Jan 2011 15:59:43 GMT]]></title><description><![CDATA[<p>Danke, genau in den schnell aufeinander folgenden Funktionsaufrufen liegt denke ich der Haken. Mal schauen ob es nun klappt ...</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2004552</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2004552</guid><dc:creator><![CDATA[Jay1980]]></dc:creator><pubDate>Sun, 09 Jan 2011 15:59:43 GMT</pubDate></item><item><title><![CDATA[Reply to Boost.Random - immer die gleiche Zufallszahl on Sun, 09 Jan 2011 16:16:33 GMT]]></title><description><![CDATA[<p>boostwirdüberbewertet schrieb:</p>
<blockquote>
<p>Was macht boost::random so besonders als ctime-random?</p>
</blockquote>
<p>Warum ist nachts kälter als draußen?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2004563</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2004563</guid><dc:creator><![CDATA[Shlo]]></dc:creator><pubDate>Sun, 09 Jan 2011 16:16:33 GMT</pubDate></item><item><title><![CDATA[Reply to Boost.Random - immer die gleiche Zufallszahl on Sun, 09 Jan 2011 16:36:44 GMT]]></title><description><![CDATA[<p>boostwirdüberbewertet schrieb:</p>
<blockquote>
<p>Was macht boost::random so besonders als ctime-random?</p>
</blockquote>
<p>Eine Meta-Compiletime-Template-Random-Generation. :p</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2004576</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2004576</guid><dc:creator><![CDATA[Xerraproxer]]></dc:creator><pubDate>Sun, 09 Jan 2011 16:36:44 GMT</pubDate></item><item><title><![CDATA[Reply to Boost.Random - immer die gleiche Zufallszahl on Sun, 09 Jan 2011 16:50:46 GMT]]></title><description><![CDATA[<p>@boostwirdüberbewertet: Zumindest hat man sich von Boost inspirieren lassen. In C++0x wird es einen Header &lt;random&gt; geben, der Nach Abbild von Boost Zufallszahlengeneratoren anbieten wird.</p>
<p>Warum ist das gut? Zum einen arbeitet man dann nicht mehr mit einem globalen Zustand, wie es std::rand tut (böse!) und zum Anderen bietet die Bibliothek Zufallsgeneratoren mit einer höheren &quot;statistischen Qualität&quot;.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2004579</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2004579</guid><dc:creator><![CDATA[krümelkacker]]></dc:creator><pubDate>Sun, 09 Jan 2011 16:50:46 GMT</pubDate></item><item><title><![CDATA[Reply to Boost.Random - immer die gleiche Zufallszahl on Sun, 09 Jan 2011 16:58:26 GMT]]></title><description><![CDATA[<p>Danke krümelkacker, deine Antworten sind immer sehr verständlich.<br />
Shlo schneid dir eine Scheibe von ihm ab ! <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f921.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--clown_face"
      title=":clown:"
      alt="🤡"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/2004582</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2004582</guid><dc:creator><![CDATA[boostwird!überbewertet]]></dc:creator><pubDate>Sun, 09 Jan 2011 16:58:26 GMT</pubDate></item><item><title><![CDATA[Reply to Boost.Random - immer die gleiche Zufallszahl on Sun, 09 Jan 2011 17:11:43 GMT]]></title><description><![CDATA[<p>Also klappt immer noch nicht, dazu verwundet es mich, dass der Test in meiner main-Methode funktioniert, aber der geplante Ablauf über die Hilfsklasse und Hilfsmethoden nicht - wo ist der Haken?</p>
<p>main.cpp - main():</p>
<pre><code class="language-cpp">...
cout &lt;&lt; &quot;RANDOM-Test:\n&quot;;
    Dice dice;
    for (int i = 0; i &lt; 6; i++) {
        cout &lt;&lt; dice(0, 6) &lt;&lt; endl;
    }
</code></pre>
<p>... hier geht, Ausgabe liefert unterschiedliche Integers.</p>
<p>main.cpp - Hilfsmethoden aus main() gerufen:</p>
<pre><code class="language-cpp">int getRandomInteger( int minIncluded, int maxIncluded ) {

    Dice dice;
    int ranInt = dice( minIncluded, maxIncluded );
    return ranInt;
}

vector&lt;string&gt; randomizeSequenceStrings( vector&lt;string&gt; seqList ) {

    vector&lt;string&gt; ranSeqList;
    int j = 0;

    for ( int d = 0; d &lt; seqList.size(); d++ )
    {
        string curSeqString = seqList.at( d );
        int stringSize = curSeqString.size();
        string randomizedSeqString( curSeqString );
        for ( int i = 0; i &lt; stringSize; i++ )
        {
            int firstRandom = getRandomInteger( 0, (stringSize-1) );
            string sub1 = curSeqString.substr( 0, firstRandom );
            string sub2 = curSeqString.substr( firstRandom );
            randomizedSeqString = sub2;
            randomizedSeqString += sub1;

            cout &lt;&lt; &quot;... ... for-innnen Lauf (&quot;;
            cout &lt;&lt; i;
            cout &lt;&lt; &quot;), nimm Zufallszahl (&quot;;
            cout &lt;&lt; firstRandom;
            cout &lt;&lt; &quot;), zerteile String in sub1 (&quot;;
            cout &lt;&lt; sub1;
            cout &lt;&lt; &quot;) und sub2 (&quot;;
            cout &lt;&lt; sub2;
            cout &lt;&lt; &quot;) und konkateniere die beiden zu randomString ( &quot;;
            cout &lt;&lt; randomizedSeqString;
            cout &lt;&lt; &quot;);\n&quot;;

        }

        ranSeqList.push_back( randomizedSeqString );
        j++;

    }
    return ranSeqList;

}
</code></pre>
<p>... hier kommt immer der gleiche Integer aus getRandomInteger() in randomizeSequenceStrings() an ?!</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2004588</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2004588</guid><dc:creator><![CDATA[Jay1980]]></dc:creator><pubDate>Sun, 09 Jan 2011 17:11:43 GMT</pubDate></item><item><title><![CDATA[Reply to Boost.Random - immer die gleiche Zufallszahl on Sun, 09 Jan 2011 17:24:24 GMT]]></title><description><![CDATA[<p>Wieder genau das gleiche Problem wie vorher: Dadurch, dass Du die Dice-Klasse lokal in der getRandomInteger-Funktion aufrufst, wird jedes mal ein neues Objekt angelegt und dabei der Seed bei jedem Aufruf neu gesetzt. Und der gesetzte Seed bleibt über mehrere Aufrufe hinweg gleich, weil std::time dem gleichen Wert liefert. Du darfst den Seed nicht ständig neu setzen, sondern nur einfall am Anfang!</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2004598</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2004598</guid><dc:creator><![CDATA[Tachyon]]></dc:creator><pubDate>Sun, 09 Jan 2011 17:24:24 GMT</pubDate></item><item><title><![CDATA[Reply to Boost.Random - immer die gleiche Zufallszahl on Sun, 09 Jan 2011 17:31:08 GMT]]></title><description><![CDATA[<p>Okay, also sollte ich den Dice per Referenz in die Methoden reichen und es sollte klappen ... mal schauen ...</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2004604</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2004604</guid><dc:creator><![CDATA[Jay1980]]></dc:creator><pubDate>Sun, 09 Jan 2011 17:31:08 GMT</pubDate></item><item><title><![CDATA[Reply to Boost.Random - immer die gleiche Zufallszahl on Sun, 09 Jan 2011 17:41:05 GMT]]></title><description><![CDATA[<p>Okay, nun habe ich es so gemacht, es scheint zu klappen: die dice-Instanz erzeuge ich als globale Variable und lasse diese dann von der getRandomInteger-Methode verwenden - aber gedanklich durchdrungen habe ich das noch nicht, warum das plötzlich klappt und vorher eben nicht.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2004607</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2004607</guid><dc:creator><![CDATA[Jay1980]]></dc:creator><pubDate>Sun, 09 Jan 2011 17:41:05 GMT</pubDate></item><item><title><![CDATA[Reply to Boost.Random - immer die gleiche Zufallszahl on Sun, 09 Jan 2011 17:49:04 GMT]]></title><description><![CDATA[<p>Die Seed ist nur für die Initalisierung der Zahlenreihnfolge von Nöten.<br />
Die Random-Funktion gibt dir eine Zahlenfolge, Gib mir die erste Zahl vom Seed (beim ersten Aufrufe), Gib mir die zweite Zahl vom Seed (beim zweiten Aufrufe),...<br />
Bei deinen Aufrufen ist der Seed aber identisch, weil der Aufruf so schnell geht, dass kein zeitunterschied festzustellen ist. Deswegen wird immer der selbe Wert ausgespuckt.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2004611</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2004611</guid><dc:creator><![CDATA[Zeus]]></dc:creator><pubDate>Sun, 09 Jan 2011 17:49:04 GMT</pubDate></item></channel></rss>