<?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[Zufallszahlen generieren mit std::generate -&amp;gt; immer die gleichen Zahlen]]></title><description><![CDATA[<p>Hi Forum,</p>
<p>ich habe folgenden C++ Code im Forum gefunden und nach meinen Wuenschen modifiziert:</p>
<pre><code>boost::dynamic_bitset&lt;&gt; generate(boost::dynamic_bitset&lt;&gt;::size_type n)
{ 
   static std::random_device rd;

   const int bpb  = boost::dynamic_bitset&lt;&gt;::bits_per_block; 
   std::vector&lt;boost::dynamic_bitset&lt;&gt;::block_type&gt;arr;
   arr.resize(n%bpb ? n/bpb+1 : n/bpb); 

   static std::independent_bits_engine&lt;std::minstd_rand, 
		 boost::dynamic_bitset&lt;&gt;::bits_per_block, 
		 boost::dynamic_bitset&lt;&gt;::block_width_type&gt; engine(rd); 

   std::generate(std::begin(arr), std::end(arr), engine); 

   boost::dynamic_bitset&lt;&gt; ret(std::begin(arr), std::end(arr)); 
   return ret; 
}
</code></pre>
<p>Jedoch werden immer die gleichen Zahlen generiert, wenn ich die Zeile std::generate mit folgender ersetze, geht es auf einmal:</p>
<pre><code>for(auto i=arr.begin();i!=arr.cend();i++)
	(*i) = engine();
</code></pre>
<p>Warum funktioniert es nicht mit std::generate?</p>
<p>Vielen Dank fuer eure Hilfe</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/318412/zufallszahlen-generieren-mit-std-generate-gt-immer-die-gleichen-zahlen</link><generator>RSS for Node</generator><lastBuildDate>Mon, 27 Jul 2026 09:25:45 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/318412.rss" rel="self" type="application/rss+xml"/><pubDate>Fri, 12 Jul 2013 05:01:39 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Zufallszahlen generieren mit std::generate -&amp;gt; immer die gleichen Zahlen on Fri, 12 Jul 2013 05:01:39 GMT]]></title><description><![CDATA[<p>Hi Forum,</p>
<p>ich habe folgenden C++ Code im Forum gefunden und nach meinen Wuenschen modifiziert:</p>
<pre><code>boost::dynamic_bitset&lt;&gt; generate(boost::dynamic_bitset&lt;&gt;::size_type n)
{ 
   static std::random_device rd;

   const int bpb  = boost::dynamic_bitset&lt;&gt;::bits_per_block; 
   std::vector&lt;boost::dynamic_bitset&lt;&gt;::block_type&gt;arr;
   arr.resize(n%bpb ? n/bpb+1 : n/bpb); 

   static std::independent_bits_engine&lt;std::minstd_rand, 
		 boost::dynamic_bitset&lt;&gt;::bits_per_block, 
		 boost::dynamic_bitset&lt;&gt;::block_width_type&gt; engine(rd); 

   std::generate(std::begin(arr), std::end(arr), engine); 

   boost::dynamic_bitset&lt;&gt; ret(std::begin(arr), std::end(arr)); 
   return ret; 
}
</code></pre>
<p>Jedoch werden immer die gleichen Zahlen generiert, wenn ich die Zeile std::generate mit folgender ersetze, geht es auf einmal:</p>
<pre><code>for(auto i=arr.begin();i!=arr.cend();i++)
	(*i) = engine();
</code></pre>
<p>Warum funktioniert es nicht mit std::generate?</p>
<p>Vielen Dank fuer eure Hilfe</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2338306</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2338306</guid><dc:creator><![CDATA[Random_1337]]></dc:creator><pubDate>Fri, 12 Jul 2013 05:01:39 GMT</pubDate></item><item><title><![CDATA[Reply to Zufallszahlen generieren mit std::generate -&amp;gt; immer die gleichen Zahlen on Fri, 12 Jul 2013 05:28:13 GMT]]></title><description><![CDATA[<p>Erstens: Das sieht verdächtig nach meinem Code aus, ich erinnere mich nur nicht woher... ahh, von hier: <a href="http://www.c-plusplus.net/forum/317308-full" rel="nofollow">http://www.c-plusplus.net/forum/317308-full</a></p>
<p>Zweitens: Der gezeigte Code funktioniert gar nicht. Es funktioniert, wenn du es so umschreibst*:</p>
<pre><code>boost::dynamic_bitset&lt;&gt; generate(boost::dynamic_bitset&lt;&gt;::size_type n)
{ 
   const int bpb  = boost::dynamic_bitset&lt;&gt;::bits_per_block; 

   std::vector&lt;boost::dynamic_bitset&lt;&gt;::block_type&gt; arr(n%bpb ? n/bpb+1 : n/bpb);  // Siehe Link, lässt sich abkürzen

   static std::independent_bits_engine&lt;std::minstd_rand, 
         boost::dynamic_bitset&lt;&gt;::bits_per_block, 
         boost::dynamic_bitset&lt;&gt;::block_width_type&gt; engine; 

   std::generate(std::begin(arr), std::end(arr), engine); // Hmm. Vielleicht std::ref, gehts bei dir dann?

   boost::dynamic_bitset&lt;&gt; ret(std::begin(arr), std::end(arr)); 
   return ret; 
}
</code></pre>
<p>Und wenn du meinen mit deinem vergleichst, siehst du, dass ich <strong>seede</strong>.<br />
Mit <code>std::generate</code> hat das nichts zu tun - Schleifenversion und <code>generate</code> produzieren auf meinem Rechner gleiche Bits.</p>
<pre><code>static std::independent_bits_engine&lt;std::minstd_rand,
                                       boost::dynamic_bitset&lt;&gt;::bits_per_block,
                                       boost::dynamic_bitset&lt;&gt;::block_width_type&gt; engine( std::chrono::system_clock::now().time_since_epoch().count() ); // list-initialization mal weggelassen, führt hier zu narrowing
</code></pre>
<p>*Edit: Ok, ja, du hast ein Klammerpaar vergessen, dann geht auch die Version aus deinem Post (du seedest). Allerdings selbes Ergebnis bei mir: Sowohl Schleife als auch <code>generate</code> bringen gleiche Ergebnisse. Es liegt nur am Seed.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2338307</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2338307</guid><dc:creator><![CDATA[Sone]]></dc:creator><pubDate>Fri, 12 Jul 2013 05:28:13 GMT</pubDate></item><item><title><![CDATA[Reply to Zufallszahlen generieren mit std::generate -&amp;gt; immer die gleichen Zahlen on Fri, 12 Jul 2013 05:27:27 GMT]]></title><description><![CDATA[<p>Wie kann ich dann die std::random_device rd zum seeden benutzen?</p>
<p>Wenn ich schreibe:</p>
<pre><code>static std::independent_bits_engine&lt;std::minstd_rand,
                                       boost::dynamic_bitset&lt;&gt;::bits_per_block,
                                       boost::dynamic_bitset&lt;&gt;::block_width_type&gt; engine{ rd };
</code></pre>
<p>kompiliert VC++ 2010 nicht, die {} Klammern mag er nicht?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2338310</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2338310</guid><dc:creator><![CDATA[Random_1337]]></dc:creator><pubDate>Fri, 12 Jul 2013 05:27:27 GMT</pubDate></item><item><title><![CDATA[Reply to Zufallszahlen generieren mit std::generate -&amp;gt; immer die gleichen Zahlen on Fri, 12 Jul 2013 05:34:36 GMT]]></title><description><![CDATA[<p>Ja, wenn ich std::ref nehme:</p>
<pre><code>std::generate(arr.begin(), arr.end(),std::ref(engine));
</code></pre>
<p>Dann geht es. Aber wieso muss man an dieser Stelle std::ref verwenden?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2338314</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2338314</guid><dc:creator><![CDATA[Random_1337]]></dc:creator><pubDate>Fri, 12 Jul 2013 05:34:36 GMT</pubDate></item><item><title><![CDATA[Reply to Zufallszahlen generieren mit std::generate -&amp;gt; immer die gleichen Zahlen on Fri, 12 Jul 2013 05:34:54 GMT]]></title><description><![CDATA[<blockquote>
<p>Wie kann ich dann die std::random_device rd zum seeden benutzen?</p>
</blockquote>
<p>Das solltest du gar nicht. Nimm einfach meine Version. <code>random_device</code> ist auch laut Standard nicht <strong>verpflichtet</strong>, bei jedem Programmablauf neue Zahlen zu erzeugen.</p>
<blockquote>
<p>If implementation limitations prevent generating non-deterministic random numbers, the implementation may employ a random number engine.</p>
</blockquote>
<p>Die geschweiften Klammern sind ein C++11-feature, genannt <em>list-initialization</em>.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2338315</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2338315</guid><dc:creator><![CDATA[Sone]]></dc:creator><pubDate>Fri, 12 Jul 2013 05:34:54 GMT</pubDate></item><item><title><![CDATA[Reply to Zufallszahlen generieren mit std::generate -&amp;gt; immer die gleichen Zahlen on Fri, 12 Jul 2013 05:54:31 GMT]]></title><description><![CDATA[<p>(Doppelpost)</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2338316</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2338316</guid><dc:creator><![CDATA[Sone]]></dc:creator><pubDate>Fri, 12 Jul 2013 05:54:31 GMT</pubDate></item><item><title><![CDATA[Reply to Zufallszahlen generieren mit std::generate -&amp;gt; immer die gleichen Zahlen on Fri, 12 Jul 2013 05:47:33 GMT]]></title><description><![CDATA[<p>Danke fuer die Hilfe und Hinweise! Aber warum geht es nur mit std::ref?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2338317</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2338317</guid><dc:creator><![CDATA[Random_1337]]></dc:creator><pubDate>Fri, 12 Jul 2013 05:47:33 GMT</pubDate></item><item><title><![CDATA[Reply to Zufallszahlen generieren mit std::generate -&amp;gt; immer die gleichen Zahlen on Fri, 12 Jul 2013 05:55:08 GMT]]></title><description><![CDATA[<p>Random_1337 schrieb:</p>
<blockquote>
<p>Danke fuer die Hilfe und Hinweise! Aber warum geht es nur mit std::ref?</p>
</blockquote>
<p>Weil so nicht kopiert wird, das war eigentlich nur geraten von mir...</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2338318</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2338318</guid><dc:creator><![CDATA[Sone]]></dc:creator><pubDate>Fri, 12 Jul 2013 05:55:08 GMT</pubDate></item><item><title><![CDATA[Reply to Zufallszahlen generieren mit std::generate -&amp;gt; immer die gleichen Zahlen on Fri, 12 Jul 2013 12:46:32 GMT]]></title><description><![CDATA[<p>Sone schrieb:</p>
<blockquote>
<p><code>random_device</code> ist auch laut Standard nicht <strong>verpflichtet</strong>, bei jedem Programmablauf neue Zahlen zu erzeugen.</p>
<blockquote>
<p>If implementation limitations prevent generating non-deterministic random numbers, the implementation may employ a random number engine.</p>
</blockquote>
</blockquote>
<p>Zu beschreiben was daran Quark ist und wieso genau ist hoffentlich etwas was ich nicht tun muss, oder?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2338418</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2338418</guid><dc:creator><![CDATA[hustbaer]]></dc:creator><pubDate>Fri, 12 Jul 2013 12:46:32 GMT</pubDate></item><item><title><![CDATA[Reply to Zufallszahlen generieren mit std::generate -&amp;gt; immer die gleichen Zahlen on Fri, 12 Jul 2013 12:49:19 GMT]]></title><description><![CDATA[<p>Random_1337 schrieb:</p>
<blockquote>
<p>Danke fuer die Hilfe und Hinweise! Aber warum geht es nur mit std::ref?</p>
</blockquote>
<p><code>std::generate</code> nimmt den Generator &quot;by value&quot; - wie es in der STL mit Funktoren üblich ist. D.h. er wird kopiert, und dadurch bleibt das Original unverändert.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2338422</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2338422</guid><dc:creator><![CDATA[hustbaer]]></dc:creator><pubDate>Fri, 12 Jul 2013 12:49:19 GMT</pubDate></item></channel></rss>