<?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[n-bitige Zufallszahl generieren fuer bitset mit n&amp;gt;1000]]></title><description><![CDATA[<p>Hi Forum,</p>
<p>ich arbeite gerade mit dem dynamic_biset aus der boost library, die bisets in meinem Program koennen sehr gross sein (ab 1000 bit aufwaerts) ich muss nun die bitsets mit zufaelligen Werten fuellen. Wie kann ich nun 1000 bitige oder groessere Zufallszahlen generieren. Was ist der schnellste Weg das zu tun. Da ich Boost verwende kann ich auch den Random Generator daraus benutzten aber die Zahlen gehen nur bis 2^32.</p>
<p>Beim dynamic_biset kann man auch einen String zu initialisierung nutzen, ich habe ueberlegt einen &quot;n&quot; Zeichen langen string zu generieren und dann random_shufle zu nuten aber das ist mir zu langsam.</p>
<p>Das Zahlen generieren sollte moeglichst schnell gehen.<br />
Wie kann man das machen?</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/315713/n-bitige-zufallszahl-generieren-fuer-bitset-mit-n-gt-1000</link><generator>RSS for Node</generator><lastBuildDate>Thu, 30 Jul 2026 11:57:39 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/315713.rss" rel="self" type="application/rss+xml"/><pubDate>Wed, 10 Apr 2013 05:09:13 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to n-bitige Zufallszahl generieren fuer bitset mit n&amp;gt;1000 on Wed, 10 Apr 2013 05:09:13 GMT]]></title><description><![CDATA[<p>Hi Forum,</p>
<p>ich arbeite gerade mit dem dynamic_biset aus der boost library, die bisets in meinem Program koennen sehr gross sein (ab 1000 bit aufwaerts) ich muss nun die bitsets mit zufaelligen Werten fuellen. Wie kann ich nun 1000 bitige oder groessere Zufallszahlen generieren. Was ist der schnellste Weg das zu tun. Da ich Boost verwende kann ich auch den Random Generator daraus benutzten aber die Zahlen gehen nur bis 2^32.</p>
<p>Beim dynamic_biset kann man auch einen String zu initialisierung nutzen, ich habe ueberlegt einen &quot;n&quot; Zeichen langen string zu generieren und dann random_shufle zu nuten aber das ist mir zu langsam.</p>
<p>Das Zahlen generieren sollte moeglichst schnell gehen.<br />
Wie kann man das machen?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2314301</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2314301</guid><dc:creator><![CDATA[MeckiDerIgel]]></dc:creator><pubDate>Wed, 10 Apr 2013 05:09:13 GMT</pubDate></item><item><title><![CDATA[Reply to n-bitige Zufallszahl generieren fuer bitset mit n&amp;gt;1000 on Wed, 10 Apr 2013 05:57:19 GMT]]></title><description><![CDATA[<p>Erstell das bitset doch leer und geh mit einer Schleife drüber und setz die einzelnen Bits mit rand() % 2 ?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2314309</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2314309</guid><dc:creator><![CDATA[Ethon]]></dc:creator><pubDate>Wed, 10 Apr 2013 05:57:19 GMT</pubDate></item><item><title><![CDATA[Reply to n-bitige Zufallszahl generieren fuer bitset mit n&amp;gt;1000 on Wed, 10 Apr 2013 06:14:51 GMT]]></title><description><![CDATA[<p>Evtl. erst ein dynamic_bitset zufällig erzeugen und dann kopieren/zuweisen?</p>
<pre><code class="language-cpp">#include &lt;algorithm&gt;
#include &lt;cstdint&gt;
#include &lt;functional&gt;
#include &lt;iostream&gt;
#include &lt;iterator&gt;
#include &lt;random&gt;

#include &lt;boost/dynamic_bitset.hpp&gt;

boost::dynamic_bitset&lt;&gt; generate(size_t n){
  using namespace std;
  typedef uint64_t Block_type;
  static default_random_engine rng;
  static uniform_int_distribution&lt;Block_type&gt; d;
  Block_type arr[32];
  auto gen = bind(d, rng);
  generate(begin(arr), end(arr), gen);
  boost::dynamic_bitset&lt;&gt; ret(begin(arr), end(arr));
  if (n != 2048)   // 64 * 32 = 2048
    ret.resize(n);
  return ret;
}

int main(){
  boost::dynamic_bitset&lt;&gt; b = generate(5);
  std::cout &lt;&lt; &quot;5: &quot; &lt;&lt; b &lt;&lt; '\n';
  b = generate(1024);
  std::cout &lt;&lt; &quot;1024: &quot; &lt;&lt; b &lt;&lt; '\n';
  b = generate(2048);
  std::cout &lt;&lt; &quot;2048: &quot; &lt;&lt; b &lt;&lt; '\n'; 
}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/2314311</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2314311</guid><dc:creator><![CDATA[Furble Wurble]]></dc:creator><pubDate>Wed, 10 Apr 2013 06:14:51 GMT</pubDate></item><item><title><![CDATA[Reply to n-bitige Zufallszahl generieren fuer bitset mit n&amp;gt;1000 on Wed, 10 Apr 2013 08:50:31 GMT]]></title><description><![CDATA[<p>Das scheint eine sehr gute Loesung zu sein. Aber aus irgendeinem Grund gibt generate immer nur ein 1024 bit grosses bitset zurueck.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2314331</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2314331</guid><dc:creator><![CDATA[MeckiDerIgel]]></dc:creator><pubDate>Wed, 10 Apr 2013 08:50:31 GMT</pubDate></item><item><title><![CDATA[Reply to n-bitige Zufallszahl generieren fuer bitset mit n&amp;gt;1000 on Wed, 10 Apr 2013 11:12:45 GMT]]></title><description><![CDATA[<p>MeckiDerIgel schrieb:</p>
<blockquote>
<p>Das scheint eine sehr gute Loesung zu sein. Aber aus irgendeinem Grund gibt generate immer nur ein 1024 bit grosses bitset zurueck.</p>
</blockquote>
<p>&quot;sehr gut&quot; ist in diesem Fall vielleicht etwas viel... <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f642.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--slightly_smiling_face"
      title=":)"
      alt="🙂"
    /></p>
<p>Wahrscheinlich bist du/ist Dein <code>dynamic_bitset</code> 32bittig unterwegs.<br />
Sauber wäre wohl, <code>dynamic_bitset::block_type</code> statt <code>uint64_t</code> zu verwenden. Und dann anhand <code>bits_per_block</code> die notwendige Arraygröße zu bestimmen, um auf die Bitanzahl zu kommen.</p>
<pre><code class="language-cpp">boost::dynamic_bitset&lt;&gt; generate(int n){
  using namespace std;
  typedef boost::dynamic_bitset&lt;&gt;   bitset_type;
  typedef bitset_type::block_type   block_type;
  const int bpb  = bitset_type::bits_per_block;
  const int size = 2048;
  block_type arr[size%bpb ? size/bpb+1 : size/bpb];
  static default_random_engine rng;
  static uniform_int_distribution&lt;block_type&gt; d;

  auto gen = bind(d, rng);
  generate(begin(arr), end(arr), gen);
  bitset_type ret(begin(arr), end(arr));
  if (n != size)
    ret.resize(n);
  return ret;
}
</code></pre>
<p>So ungefähr...</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2314359</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2314359</guid><dc:creator><![CDATA[Furble Wurble]]></dc:creator><pubDate>Wed, 10 Apr 2013 11:12:45 GMT</pubDate></item><item><title><![CDATA[Reply to n-bitige Zufallszahl generieren fuer bitset mit n&amp;gt;1000 on Wed, 10 Apr 2013 12:58:24 GMT]]></title><description><![CDATA[<p>Ethon schrieb:</p>
<blockquote>
<p>Erstell das bitset doch leer und geh mit einer Schleife drüber und setz die einzelnen Bits mit rand() % 2 ?</p>
</blockquote>
<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="😮"
    /></p>
<p>Eigentlich würde ich da eher mit C++11s <code>std::random</code> (bzw. dem von Boost) zufällige 64-Bit (in seinem Fall wohl eher 32-Bit) Primzahlen erzeugen und diese dann per Shift auf die Bits übertragen.<br />
So mache ich es zumindest um große Pseudo-Zufalls-Primzahlen zu erzeugen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2314395</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2314395</guid><dc:creator><![CDATA[Sone]]></dc:creator><pubDate>Wed, 10 Apr 2013 12:58:24 GMT</pubDate></item><item><title><![CDATA[Reply to n-bitige Zufallszahl generieren fuer bitset mit n&amp;gt;1000 on Wed, 10 Apr 2013 13:27:20 GMT]]></title><description><![CDATA[<p>Sone schrieb:</p>
<blockquote>
<p>Ethon schrieb:</p>
<blockquote>
<p>Erstell das bitset doch leer und geh mit einer Schleife drüber und setz die einzelnen Bits mit rand() % 2 ?</p>
</blockquote>
<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="😮"
    /></p>
<p>Eigentlich würde ich da eher mit C++11s <code>std::random</code> (bzw. dem von Boost) zufällige 64-Bit (in seinem Fall wohl eher 32-Bit) Primzahlen erzeugen und diese dann per Shift auf die Bits übertragen.<br />
So mache ich es zumindest um große Pseudo-Zufalls-Primzahlen zu erzeugen.</p>
</blockquote>
<p>Höh? Ob rand() oder den C++11 Krempel ist ja fast egal, außer man braucht Zufallszahlen einer bestimmten Qualität ...</p>
<p>Ich meinte soetwas:</p>
<pre><code>boost::dynamic_bitset&lt;&gt; bs;
bs.resize(2048);
for(size_t i = 0; i &lt; 2048; ++i)
    bs[i] = rand() % 2;
</code></pre>
<p>Denke nicht dass das sonderlich ineffizient ist. Aber das wäre zu testen.<br />
Natürlich ist es schlauer die Bits wortweise zu setzen wie Furble Wurble es macht ... aber was solls. <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/2314408</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2314408</guid><dc:creator><![CDATA[Ethon]]></dc:creator><pubDate>Wed, 10 Apr 2013 13:27:20 GMT</pubDate></item><item><title><![CDATA[Reply to n-bitige Zufallszahl generieren fuer bitset mit n&amp;gt;1000 on Wed, 10 Apr 2013 15:01:27 GMT]]></title><description><![CDATA[<p>Ethon schrieb:</p>
<blockquote>
<p>Sone schrieb:</p>
<blockquote>
<p>Ethon schrieb:</p>
<blockquote>
<p>Erstell das bitset doch leer und geh mit einer Schleife drüber und setz die einzelnen Bits mit rand() % 2 ?</p>
</blockquote>
<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="😮"
    /></p>
<p>Eigentlich würde ich da eher mit C++11s <code>std::random</code> (bzw. dem von Boost) zufällige 64-Bit (in seinem Fall wohl eher 32-Bit) Primzahlen erzeugen und diese dann per Shift auf die Bits übertragen.<br />
So mache ich es zumindest um große Pseudo-Zufalls-Primzahlen zu erzeugen.</p>
</blockquote>
<p>Höh? Ob rand() oder den C++11 Krempel ist ja fast egal, außer man braucht Zufallszahlen einer bestimmten Qualität ...</p>
</blockquote>
<p>Es ging nicht um das C++11, sondern das - wie du es nennst - <em>wortweise Erzeugen</em>, wie es Furble macht.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2314451</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2314451</guid><dc:creator><![CDATA[Sone]]></dc:creator><pubDate>Wed, 10 Apr 2013 15:01:27 GMT</pubDate></item></channel></rss>