<?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 fuer Bitset, ist das so richtig?]]></title><description><![CDATA[<p>Hallo,</p>
<p>ich versuche Zufallszahlen fuer ein Bitset zu generieren. Am Anfang wird geprueft wieviele Bits per block erhalten sind. Spaeter moechte ich dann mit std::uniform_int_distribution&lt;&gt;d(0,std::pow(2.0f,bpb)-1); den Bereich festlegen aus dem die Zufallszahlen generiert werden sollen. Leider stuerzt das Program in der Zeile ab. Wenn ich die Zeile auskommentiere funktioniert es.<br />
Was mache ich falsch?</p>
<pre><code>std::random_device rd;
boost::dynamic_bitset&lt;&gt; generate(int n)
{ 
   std::mt19937 gen(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); 
   //std::uniform_int_distribution&lt;&gt;d(0,std::pow(2.0f,bpb)-1); 
   // auto gen = std::bind(d, rng); 
   std::generate(arr.begin(), arr.end(), gen); 
   boost::dynamic_bitset&lt;&gt; ret(std::begin(arr), std::end(arr)); 
   return ret; 
}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/topic/317308/zufallszahlen-fuer-bitset-ist-das-so-richtig</link><generator>RSS for Node</generator><lastBuildDate>Mon, 27 Jul 2026 10:37:05 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/317308.rss" rel="self" type="application/rss+xml"/><pubDate>Tue, 04 Jun 2013 06:45:26 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Zufallszahlen fuer Bitset, ist das so richtig? on Tue, 04 Jun 2013 06:45:26 GMT]]></title><description><![CDATA[<p>Hallo,</p>
<p>ich versuche Zufallszahlen fuer ein Bitset zu generieren. Am Anfang wird geprueft wieviele Bits per block erhalten sind. Spaeter moechte ich dann mit std::uniform_int_distribution&lt;&gt;d(0,std::pow(2.0f,bpb)-1); den Bereich festlegen aus dem die Zufallszahlen generiert werden sollen. Leider stuerzt das Program in der Zeile ab. Wenn ich die Zeile auskommentiere funktioniert es.<br />
Was mache ich falsch?</p>
<pre><code>std::random_device rd;
boost::dynamic_bitset&lt;&gt; generate(int n)
{ 
   std::mt19937 gen(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); 
   //std::uniform_int_distribution&lt;&gt;d(0,std::pow(2.0f,bpb)-1); 
   // auto gen = std::bind(d, rng); 
   std::generate(arr.begin(), arr.end(), gen); 
   boost::dynamic_bitset&lt;&gt; ret(std::begin(arr), std::end(arr)); 
   return ret; 
}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/2328459</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2328459</guid><dc:creator><![CDATA[PartisanBelgrad]]></dc:creator><pubDate>Tue, 04 Jun 2013 06:45:26 GMT</pubDate></item><item><title><![CDATA[Reply to Zufallszahlen fuer Bitset, ist das so richtig? on Tue, 04 Jun 2013 07:45:36 GMT]]></title><description><![CDATA[<p>Edit: Nicht richtig geguckt.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2328471</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2328471</guid><dc:creator><![CDATA[Sone]]></dc:creator><pubDate>Tue, 04 Jun 2013 07:45:36 GMT</pubDate></item><item><title><![CDATA[Reply to Zufallszahlen fuer Bitset, ist das so richtig? on Tue, 04 Jun 2013 07:51:35 GMT]]></title><description><![CDATA[<p>Sorry, wenn ich es auskommentiere muss man Sachen umbennennen:</p>
<pre><code>boost::dynamic_bitset&lt;&gt; generate(int n)
{ 
   static std::random_device rd;
   std::mt19937 rng(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); 
   std::uniform_int_distribution&lt;&gt;d(0,std::pow(2.0f,bpb)-1); 
   auto gen = std::bind(d, rng); 
   std::generate(arr.begin(), arr.end(), gen); 
   boost::dynamic_bitset&lt;&gt; ret(std::begin(arr), std::end(arr)); 
   return ret; 
}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/2328475</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2328475</guid><dc:creator><![CDATA[PartisanBelgrad]]></dc:creator><pubDate>Tue, 04 Jun 2013 07:51:35 GMT</pubDate></item><item><title><![CDATA[Reply to Zufallszahlen fuer Bitset, ist das so richtig? on Tue, 04 Jun 2013 07:52:28 GMT]]></title><description><![CDATA[<p>Sorry, wenn ich es auskommentiere muss man Sachen umbennennen:</p>
<pre><code>boost::dynamic_bitset&lt;&gt; generate(int n)
{ 
   static std::random_device rd;
   std::mt19937 rng(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); 
   std::uniform_int_distribution&lt;&gt;d(0,std::pow(2.0f,bpb)-1); 
   auto gen = std::bind(d, rng); 
   std::generate(arr.begin(), arr.end(), gen); 
   boost::dynamic_bitset&lt;&gt; ret(std::begin(arr), std::end(arr)); 
   return ret; 
}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/2328476</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2328476</guid><dc:creator><![CDATA[PartisanBelgrad]]></dc:creator><pubDate>Tue, 04 Jun 2013 07:52:28 GMT</pubDate></item><item><title><![CDATA[Reply to Zufallszahlen fuer Bitset, ist das so richtig? on Tue, 04 Jun 2013 08:20:35 GMT]]></title><description><![CDATA[<pre><code>std::pow(2.0f,bpb)-1
</code></pre>
<p><img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f62e.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--face_with_open_mouth"
      title=":open_mouth:"
      alt="😮"
    /> <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/27a1.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--right_arrow"
      title=":arrow_right:"
      alt="➡"
    /></p>
<pre><code>(1u &lt;&lt; bpb) - 1
</code></pre>
<p>Und anderes. Wieso ein vorzeichenbehaftete Typen?</p>
<p>Aber verstehe ich dich richtig, du willst ein zufälliges Bitset mit N Bits erzeugen?<br />
Ich würde da pauschal einfach</p>
<pre><code>boost::dynamic_bitset&lt;&gt; generate(boost::dynamic_bitset&lt;&gt;::size_type N) // size_t statt int
{
    boost::dynamic_bitset&lt;&gt; ret{N};

    static std::independent_bits_engine&lt;std::minstd_rand, 1, uint32_t&gt; engine(std::chrono::system_clock::now().time_since_epoch().count()); // Ich nehm mal nicht random_device, mein MinGW hat noch den Bug

    for( boost::dynamic_bitset&lt;&gt;::size_type ct = 0; ct &lt; ret.size(); ++ct )
        ret[ct] = engine();

    return ret;
}
</code></pre>
<p>Nehmen, was auch funktioniert, aber vielleicht brauchst du ja was spezielles.<br />
Edit: Hmm, eine <code>bernoulli_distribution</code> geht auch, ist auch schöner. Ich will jetzt nicht noch extra zwei Engines benutzen, aber sonst wäre das besser.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2328481</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2328481</guid><dc:creator><![CDATA[Sone]]></dc:creator><pubDate>Tue, 04 Jun 2013 08:20:35 GMT</pubDate></item><item><title><![CDATA[Reply to Zufallszahlen fuer Bitset, ist das so richtig? on Tue, 04 Jun 2013 08:23:23 GMT]]></title><description><![CDATA[<p>Solltest du nicht lieber <code>uniform_int_distribution&lt;block_type&gt;(0,block_type(-1))</code> verwenden?<br />
Edit: Besser wär's noch, wenn man direkt sagen könnte, wieviele Bits man haben will. Scheint's ja auch zu geben, wenn ich mir Sone's code angucke.</p>
<p>Das ist std::pow sieht zerbrechlich aus. 2.0f ist float, floats haben typischerweise eine 24-Bit-Mantisse aus. Was kommt bei pow(2.0f,32) raus? Float oder double? Wenn float und block_type ist &gt; als std::uint32_t, dann hättest du hier ein Problem.</p>
<p>Versuch mal die Standardbibliothek im Debug-Modus zu betreiben. Die Toolchain von Microsoft erlaubt das, die GCC auch. Stichwort &quot;safe iterators&quot;. Ich seh' da spontan nicht, warum da etwas abstürzen sollte. Schmeiß den Debugger an, verwende sämlilche Debug-Modi und geh da Schritt für Schritt durch ...</p>
<p>BTW: <code>n%bpb ? n/bpb+1 : n/bpb</code> kann man auch <code>(n+bpb-1)/bpb</code> schreiben.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2328485</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2328485</guid><dc:creator><![CDATA[krümelkacker]]></dc:creator><pubDate>Tue, 04 Jun 2013 08:23:23 GMT</pubDate></item><item><title><![CDATA[Reply to Zufallszahlen fuer Bitset, ist das so richtig? on Tue, 04 Jun 2013 08:34:38 GMT]]></title><description><![CDATA[<p>Sone schrieb:</p>
<blockquote>
<pre><code>std::pow(2.0f,bpb)-1
</code></pre>
<p><img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f62e.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--face_with_open_mouth"
      title=":open_mouth:"
      alt="😮"
    /> <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/27a1.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--right_arrow"
      title=":arrow_right:"
      alt="➡"
    /></p>
<pre><code>(1u &lt;&lt; bpb) - 1
</code></pre>
<p>Und anderes. Wieso ein vorzeichenbehaftete Typen?</p>
<p>Aber verstehe ich dich richtig, du willst ein zufälliges Bitset mit N Bits erzeugen?<br />
Ich würde da pauschal einfach</p>
<pre><code>boost::dynamic_bitset&lt;&gt; generate(boost::dynamic_bitset&lt;&gt;::size_type N) // size_t statt int
{
    boost::dynamic_bitset&lt;&gt; ret{N};

    static std::independent_bits_engine&lt;std::minstd_rand, 1, uint32_t&gt; engine(std::chrono::system_clock::now().time_since_epoch().count()); // Ich nehm mal nicht random_device, mein MinGW hat noch den Bug

    for( boost::dynamic_bitset&lt;&gt;::size_type ct = 0; ct &lt; ret.size(); ++ct )
        ret[ct] = engine();

    return ret;
}
</code></pre>
<p>Nehmen, was auch funktioniert, aber vielleicht brauchst du ja was spezielles.<br />
Edit: Hmm, eine <code>bernoulli_distribution</code> geht auch, ist auch schöner. Ich will jetzt nicht noch extra zwei Engines benutzen, aber sonst wäre das besser.</p>
</blockquote>
<p>Danke fuer den Hinweis. std::independent_bits_engine kannte ich noch nicht.<br />
Aber verstehe ich das richtig das die For-Schleife ueber alle Bits einzeln itertiert und fuer jedes Bit eine eigen Zufallszahl generiert?</p>
<p><a class="plugin-mentions-user plugin-mentions-a" href="https://www.c-plusplus.net/forum/uid/24868">@krümelkacker</a><br />
Ich bekomme die Meldung: R6010 - abort() has benn called</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2328490</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2328490</guid><dc:creator><![CDATA[PartisanBelgrad]]></dc:creator><pubDate>Tue, 04 Jun 2013 08:34:38 GMT</pubDate></item><item><title><![CDATA[Reply to Zufallszahlen fuer Bitset, ist das so richtig? on Tue, 04 Jun 2013 08:50:36 GMT]]></title><description><![CDATA[<p>PartisanBelgrad schrieb:</p>
<blockquote>
<p>Aber verstehe ich das richtig das die For-Schleife ueber alle Bits einzeln itertiert und fuer jedes Bit eine eigen Zufallszahl generiert?</p>
</blockquote>
<p>Es geht natürlich direkter:</p>
<pre><code>boost::dynamic_bitset&lt;&gt; generate(boost::dynamic_bitset&lt;&gt;::size_type N) // size_t statt int
{
    typedef boost::dynamic_bitset&lt;&gt; bitset;

    bitset ret;

    static std::independent_bits_engine&lt;std::minstd_rand, bitset::bits_per_block, bitset::block_width_type&gt; engine{std::chrono::system_clock::now().time_since_epoch().count()};

    while( ret.size() &lt; N )
        ret.append( engine() );
    ret.resize(N);

    return ret;
}
</code></pre>
<p>Aber da arbeite ich mit<a href="http://www.boost.org/doc/libs/1_36_0/libs/dynamic_bitset/dynamic_bitset.html#append1" rel="nofollow"> <code>append</code> </a>und nicht mit einem Puffer wie du. <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f609.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--winking_face"
      title=";)"
      alt="😉"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/2328497</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2328497</guid><dc:creator><![CDATA[Sone]]></dc:creator><pubDate>Tue, 04 Jun 2013 08:50:36 GMT</pubDate></item></channel></rss>