<?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[C++ Artikel &amp;quot;Zufälle gibt&#x27;s?!&amp;quot; Fehler?]]></title><description><![CDATA[<p>Hi, zunächst mal hoffe ich, dass ich im richtigen Forum poste, falls nicht, bitte verschieben.</p>
<p>Desweiteren, der Link zum Artikel:<br />
<a href="http://www.c-plusplus.net/forum/viewtopic-var-t-is-172876.html" rel="nofollow">http://www.c-plusplus.net/forum/viewtopic-var-t-is-172876.html</a></p>
<p>Und zwar geht es mir um das Kapitel &quot;Mehr Gerechtigkeit&quot; bzw. um folgende Code-Zeilen:</p>
<pre><code class="language-cpp">int ignoreBoundary = (RAND_MAX / count) * count;

do
{
rawNumber = std::rand();
} while (rawNumber &gt; ignoreBoundary);
</code></pre>
<p>Nun zu meiner Frage:<br />
Müsste es nicht, um für mehr Gerechtigkeit zu sorgen,</p>
<pre><code class="language-cpp">while (rawNumber &gt;= ignoreBoundary);
</code></pre>
<p>heißen, weil sonst die 0 öfter vorkommen würde?</p>
<p>Schließlich wird rawNumber später durch count geteilt und der Divisionsrest verwendet. Der kleinste Wert den rawNumber annehmen kann ist 0, was für den Divisionsrest bedeuten würde, dass er auch 0 ist. Der höchste Wert den rawNumber annehmen kann (so wie es im Artikel steht) ist ignoreBoundary, ignoreBoundary ist ein vielfaches von count, und somit bleibt bei der Division durch count auch ein Divisionsrest von 0.</p>
<p>Hoffe, dass das verständlich war.<br />
Zum Schluss noch ein kleines Testprogramm (nur main() funktion):</p>
<pre><code class="language-cpp">int main ()
{
    int topf[10000];

    for(int i = 0; i &lt; 10000; i++)
         topf[i] = 0;

    for(int i = 0; i &lt; 100000000; i++)
        topf[Random::rnd_nobias(0, 9999)]++;

    cout &lt;&lt; topf[0] &lt;&lt; endl;
    cout &lt;&lt; topf[1] &lt;&lt; endl;
    cout &lt;&lt; topf[9999];
    return 0;
}
</code></pre>
<p>Dieses bestätigt meine Vermutung, da sich im duchschnitt topf[1] und topf[9999] nicht wesentlich unterscheiden, topf[0] aber wesentlich höhere Werte annimmt, als die anderen beiden (wenn man die Methode rnd_nobias aus dem Artikel übernimmt).</p>
<p>Es kann natürlich auch sein, dass ich nur nen ganz dummen Denkfehler oder ähnliches habe... wenn ja, bitte ich um Aufklärung.</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/188854/c-artikel-quot-zufälle-gibt-s-quot-fehler</link><generator>RSS for Node</generator><lastBuildDate>Fri, 25 Sep 2026 04:40:15 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/188854.rss" rel="self" type="application/rss+xml"/><pubDate>Sun, 05 Aug 2007 13:52:29 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to C++ Artikel &amp;quot;Zufälle gibt&#x27;s?!&amp;quot; Fehler? on Sun, 05 Aug 2007 13:52:29 GMT]]></title><description><![CDATA[<p>Hi, zunächst mal hoffe ich, dass ich im richtigen Forum poste, falls nicht, bitte verschieben.</p>
<p>Desweiteren, der Link zum Artikel:<br />
<a href="http://www.c-plusplus.net/forum/viewtopic-var-t-is-172876.html" rel="nofollow">http://www.c-plusplus.net/forum/viewtopic-var-t-is-172876.html</a></p>
<p>Und zwar geht es mir um das Kapitel &quot;Mehr Gerechtigkeit&quot; bzw. um folgende Code-Zeilen:</p>
<pre><code class="language-cpp">int ignoreBoundary = (RAND_MAX / count) * count;

do
{
rawNumber = std::rand();
} while (rawNumber &gt; ignoreBoundary);
</code></pre>
<p>Nun zu meiner Frage:<br />
Müsste es nicht, um für mehr Gerechtigkeit zu sorgen,</p>
<pre><code class="language-cpp">while (rawNumber &gt;= ignoreBoundary);
</code></pre>
<p>heißen, weil sonst die 0 öfter vorkommen würde?</p>
<p>Schließlich wird rawNumber später durch count geteilt und der Divisionsrest verwendet. Der kleinste Wert den rawNumber annehmen kann ist 0, was für den Divisionsrest bedeuten würde, dass er auch 0 ist. Der höchste Wert den rawNumber annehmen kann (so wie es im Artikel steht) ist ignoreBoundary, ignoreBoundary ist ein vielfaches von count, und somit bleibt bei der Division durch count auch ein Divisionsrest von 0.</p>
<p>Hoffe, dass das verständlich war.<br />
Zum Schluss noch ein kleines Testprogramm (nur main() funktion):</p>
<pre><code class="language-cpp">int main ()
{
    int topf[10000];

    for(int i = 0; i &lt; 10000; i++)
         topf[i] = 0;

    for(int i = 0; i &lt; 100000000; i++)
        topf[Random::rnd_nobias(0, 9999)]++;

    cout &lt;&lt; topf[0] &lt;&lt; endl;
    cout &lt;&lt; topf[1] &lt;&lt; endl;
    cout &lt;&lt; topf[9999];
    return 0;
}
</code></pre>
<p>Dieses bestätigt meine Vermutung, da sich im duchschnitt topf[1] und topf[9999] nicht wesentlich unterscheiden, topf[0] aber wesentlich höhere Werte annimmt, als die anderen beiden (wenn man die Methode rnd_nobias aus dem Artikel übernimmt).</p>
<p>Es kann natürlich auch sein, dass ich nur nen ganz dummen Denkfehler oder ähnliches habe... wenn ja, bitte ich um Aufklärung.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1339009</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1339009</guid><dc:creator><![CDATA[Paul Panther]]></dc:creator><pubDate>Sun, 05 Aug 2007 13:52:29 GMT</pubDate></item><item><title><![CDATA[Reply to C++ Artikel &amp;quot;Zufälle gibt&#x27;s?!&amp;quot; Fehler? on Sun, 05 Aug 2007 22:14:53 GMT]]></title><description><![CDATA[<p>Ja du hast Recht, es müsste &gt;= heissen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1339256</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1339256</guid><dc:creator><![CDATA[hustbaer]]></dc:creator><pubDate>Sun, 05 Aug 2007 22:14:53 GMT</pubDate></item></channel></rss>