<?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[zufalls integer]]></title><description><![CDATA[<p>hi, für eine monte carlo simulation brauche ich 100%ige zufalls integer von min_i bis max_i z.b. 1 bis 10. ich dachte eigentl. dass ich meine zufalls zahlen richtig generiere aber bin mir nicht mehr sicher. (aufgrund von simulations ergebnissen) kann jemand bitte kurz drüber schauen?</p>
<p>editierte (hoffentl.) korrigierte version</p>
<pre><code class="language-cpp">#include &lt;ctime&gt;
#include &lt;cstdlib&gt;

class randint {
	private:
		int min, max; 
		int randomnumber; 
	public:
		randint(int min_i, int max_i) {
			min = min_i;
			max = max_i;
			srand((unsigned) time(NULL));
		}
		int getrand() {
			int nrofrandomnumbers, b; 
			nrofrandomnumbers = max-min+1; 
			b = (RAND_MAX+1)%nrofrandomnumbers; 
			do {
				randomnumber = rand(); 
			} while (randomnumber &gt; RAND_MAX-b);
			return min+randomnumber%(max-min+1);
		}
};
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/topic/288274/zufalls-integer</link><generator>RSS for Node</generator><lastBuildDate>Thu, 20 Aug 2026 01:27:00 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/288274.rss" rel="self" type="application/rss+xml"/><pubDate>Mon, 13 Jun 2011 18:06:25 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to zufalls integer on Tue, 14 Jun 2011 16:54:28 GMT]]></title><description><![CDATA[<p>hi, für eine monte carlo simulation brauche ich 100%ige zufalls integer von min_i bis max_i z.b. 1 bis 10. ich dachte eigentl. dass ich meine zufalls zahlen richtig generiere aber bin mir nicht mehr sicher. (aufgrund von simulations ergebnissen) kann jemand bitte kurz drüber schauen?</p>
<p>editierte (hoffentl.) korrigierte version</p>
<pre><code class="language-cpp">#include &lt;ctime&gt;
#include &lt;cstdlib&gt;

class randint {
	private:
		int min, max; 
		int randomnumber; 
	public:
		randint(int min_i, int max_i) {
			min = min_i;
			max = max_i;
			srand((unsigned) time(NULL));
		}
		int getrand() {
			int nrofrandomnumbers, b; 
			nrofrandomnumbers = max-min+1; 
			b = (RAND_MAX+1)%nrofrandomnumbers; 
			do {
				randomnumber = rand(); 
			} while (randomnumber &gt; RAND_MAX-b);
			return min+randomnumber%(max-min+1);
		}
};
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/2077616</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2077616</guid><dc:creator><![CDATA[Halozination]]></dc:creator><pubDate>Tue, 14 Jun 2011 16:54:28 GMT</pubDate></item><item><title><![CDATA[Reply to zufalls integer on Mon, 13 Jun 2011 18:11:50 GMT]]></title><description><![CDATA[<p>rand() ist ein <strong>Pseudo</strong>zufallsgenerator. Echte Zufallszahlen bekommst Du damit nicht.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2077617</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2077617</guid><dc:creator><![CDATA[Caligulaminus]]></dc:creator><pubDate>Mon, 13 Jun 2011 18:11:50 GMT</pubDate></item><item><title><![CDATA[Reply to zufalls integer on Mon, 13 Jun 2011 18:11:51 GMT]]></title><description><![CDATA[<p>Es gibt kein 100% Zufall. In dem Fall müttest du z.B. eine Webcam nehmen und das dort zu erkenndene Rauschen nehmen. Das wäre eine recht günstige Lösung.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2077618</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2077618</guid><dc:creator><![CDATA[klöklö]]></dc:creator><pubDate>Mon, 13 Jun 2011 18:11:51 GMT</pubDate></item><item><title><![CDATA[Reply to zufalls integer on Mon, 13 Jun 2011 18:13:40 GMT]]></title><description><![CDATA[<p>Das könnte dir helfen: <a href="http://www.random.org/" rel="nofollow">http://www.random.org/</a></p>
]]></description><link>https://www.c-plusplus.net/forum/post/2077621</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2077621</guid><dc:creator><![CDATA[icarus2]]></dc:creator><pubDate>Mon, 13 Jun 2011 18:13:40 GMT</pubDate></item><item><title><![CDATA[Reply to zufalls integer on Mon, 13 Jun 2011 18:19:28 GMT]]></title><description><![CDATA[<p>Während rand() für professionelles MC nicht gut genug ist, brauchst du doch keinen teuren echten Zufallsgenerator. Es gibt viele Numerikbibliotheken die sehr gute, sehr schnelle Pseudozufallsgeneratoren für wissenschaftliche Zwecke implementieren. Und auch in dem Numerikbuch deiner Wahl findest du Hinweise.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2077625</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2077625</guid><dc:creator><![CDATA[SeppJ]]></dc:creator><pubDate>Mon, 13 Jun 2011 18:19:28 GMT</pubDate></item><item><title><![CDATA[Reply to zufalls integer on Mon, 13 Jun 2011 18:22:33 GMT]]></title><description><![CDATA[<p>mir ist schon klar dass die zufalls zahlen die so generiert werden eigentl. nur zahlen einer folge sind die irgend einem algorithmus folgen. aber das stört mich nicht solange die warscheinlichkeit von allen zahlen exakt gleich ist und solange es kein muster oder tendenz zu einem muster gibt; auch nach sehr vielen generationen nicht.</p>
<p>SeppJ, willst du damit sagen rand(); ist nicht ausreichend?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2077629</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2077629</guid><dc:creator><![CDATA[Halozination]]></dc:creator><pubDate>Mon, 13 Jun 2011 18:22:33 GMT</pubDate></item><item><title><![CDATA[Reply to zufalls integer on Mon, 13 Jun 2011 18:33:26 GMT]]></title><description><![CDATA[<p>Hier reicht rand() locker.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2077636</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2077636</guid><dc:creator><![CDATA[volkard]]></dc:creator><pubDate>Mon, 13 Jun 2011 18:33:26 GMT</pubDate></item><item><title><![CDATA[Reply to zufalls integer on Mon, 13 Jun 2011 18:41:28 GMT]]></title><description><![CDATA[<p>Halozination schrieb:</p>
<blockquote>
<p>SeppJ, willst du damit sagen rand(); ist nicht ausreichend?</p>
</blockquote>
<p>Das kommt halt da drauf an, was man machen will. rand() hat Muster und Tendenzen zu Mustern, schon nach wenigen Generationen. Wenn deine Simulationsergebnisse deutlich falsch sind, ist der Fehler aber sehr wahrscheinlich ein anderer.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2077637</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2077637</guid><dc:creator><![CDATA[SeppJ]]></dc:creator><pubDate>Mon, 13 Jun 2011 18:41:28 GMT</pubDate></item><item><title><![CDATA[Reply to zufalls integer on Mon, 13 Jun 2011 18:48:10 GMT]]></title><description><![CDATA[<p>srand((unsigned) time(NULL)); gehört eigentlich an den Anfang der main().<br />
So in dem Konstruktor würde ich Angst haben, daß das mehrmals im Programmlauf passieren kann.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2077641</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2077641</guid><dc:creator><![CDATA[volkard]]></dc:creator><pubDate>Mon, 13 Jun 2011 18:48:10 GMT</pubDate></item><item><title><![CDATA[Reply to zufalls integer on Mon, 13 Jun 2011 20:15:05 GMT]]></title><description><![CDATA[<p>Man munkelt, <code>std::random_device</code> soll echten Zufall liefern <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f4a1.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--light_bulb"
      title=":bulb:"
      alt="💡"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/2077664</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2077664</guid><dc:creator><![CDATA[Nexus]]></dc:creator><pubDate>Mon, 13 Jun 2011 20:15:05 GMT</pubDate></item><item><title><![CDATA[Reply to zufalls integer on Mon, 13 Jun 2011 20:30:56 GMT]]></title><description><![CDATA[<p>Nexus schrieb:</p>
<blockquote>
<p>Man munkelt, <code>std::random_device</code> soll echten Zufall liefern <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f4a1.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--light_bulb"
      title=":bulb:"
      alt="💡"
    /></p>
</blockquote>
<p>Ist das eigentlich portabel?</p>
<p>Gut für Kryptographie, aber für Simulationen Overkill und (vermutlich, nicht getestet) viel zu langsam.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2077671</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2077671</guid><dc:creator><![CDATA[SeppJ]]></dc:creator><pubDate>Mon, 13 Jun 2011 20:30:56 GMT</pubDate></item><item><title><![CDATA[Reply to zufalls integer on Mon, 13 Jun 2011 23:14:13 GMT]]></title><description><![CDATA[<p>Also an dem Code sind sicherlich ein paar Sachen - neben stilistischen - kaputt.<br />
Schauen wir uns einfach mal Extremfälle an:</p>
<p>max=RAND_MAX<br />
min=0</p>
<p>dann ist</p>
<pre><code class="language-cpp">nrofrandomnumbers = max-min+1=RAND_MAX+1;
b = RAND_MAX%nrofrandomnumbers =RAND_MAX %(RAND_MAX+1) = RAND_MAX;
...
if (randomnumber &lt; 0) break;
</code></pre>
<p>ich würde also vermuten, dass &quot;nrofrandomnumbers = max-min;&quot; sein sollte, probieren wir das mal:</p>
<pre><code class="language-cpp">nrofrandomnumbers = RAND_MAX;
b = 0
if (randomnumber &lt; RAND_MAX) break;
</code></pre>
<p>Ohh, immer noch nicht ganz richtig. So wird nie randomnumber=max=RAND_MAX gezogen.</p>
<pre><code class="language-cpp">if (randomnumber &lt;= RAND_MAX) break;
</code></pre>
<p>Korrigiert.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2077728</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2077728</guid><dc:creator><![CDATA[otze]]></dc:creator><pubDate>Mon, 13 Jun 2011 23:14:13 GMT</pubDate></item><item><title><![CDATA[Reply to zufalls integer on Mon, 13 Jun 2011 23:30:13 GMT]]></title><description><![CDATA[<p>Ich hab mit den Generatoren von boost relativ gute Erfahrungen gemacht.<br />
<a href="http://www.boost.org/doc/libs/1_46_1/doc/html/boost_random.html" rel="nofollow">http://www.boost.org/doc/libs/1_46_1/doc/html/boost_random.html</a><br />
Der mt19937 liefert ganz gute Zahlen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2077731</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2077731</guid><dc:creator><![CDATA[[[global:former_user]]]]></dc:creator><pubDate>Mon, 13 Jun 2011 23:30:13 GMT</pubDate></item><item><title><![CDATA[Reply to zufalls integer on Mon, 13 Jun 2011 23:42:47 GMT]]></title><description><![CDATA[<p>Scorcher24 schrieb:</p>
<blockquote>
<p>Ich hab mit den Generatoren von boost relativ gute Erfahrungen gemacht.<br />
<a href="http://www.boost.org/doc/libs/1_46_1/doc/html/boost_random.html" rel="nofollow">http://www.boost.org/doc/libs/1_46_1/doc/html/boost_random.html</a><br />
Der mt19937 liefert ganz gute Zahlen.</p>
</blockquote>
<p>Hast Du selber bemerkt, daß rand() schlechte Zahlen liefert?</p>
<p>Meistens hat man um Größenordnungen stärkere Fehler einprogrammiert.<br />
Man könnte rand() vorwerfen, eine kurze Periode zu haben. Jo, dann läuft der Simulator halt ein paarmal rum, jeweils leicht versetzt und er denkt, es wäre jedesmal neu. Und am Ende ist es trotzdem hübsch gleichverteilt.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2077733</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2077733</guid><dc:creator><![CDATA[volkard]]></dc:creator><pubDate>Mon, 13 Jun 2011 23:42:47 GMT</pubDate></item><item><title><![CDATA[Reply to zufalls integer on Mon, 13 Jun 2011 23:45:45 GMT]]></title><description><![CDATA[<p>volkard schrieb:</p>
<blockquote>
<p>Hast Du selber bemerkt, daß rand() schlechte Zahlen liefert?</p>
</blockquote>
<p>Wenn das DIng als LCG implementiert ist, dann ist es zum Beispiel eine schlechte Idee, mehrdimensionale Normalverteilungen mit ihnen zu ziehen.</p>
<p>//edit hier ein Link zu einem paper, keine Ahnung ob du Zugriff drauf kriegst. aber der Abstract sagt schon eine Menge:</p>
<p><a href="http://www.springerlink.com/content/q7885421202m6565/" rel="nofollow">http://www.springerlink.com/content/q7885421202m6565/</a></p>
]]></description><link>https://www.c-plusplus.net/forum/post/2077734</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2077734</guid><dc:creator><![CDATA[otze]]></dc:creator><pubDate>Mon, 13 Jun 2011 23:45:45 GMT</pubDate></item><item><title><![CDATA[Reply to zufalls integer on Mon, 13 Jun 2011 23:43:41 GMT]]></title><description><![CDATA[<p>volkard schrieb:</p>
<blockquote>
<p>Scorcher24 schrieb:</p>
<blockquote>
<p>Ich hab mit den Generatoren von boost relativ gute Erfahrungen gemacht.<br />
<a href="http://www.boost.org/doc/libs/1_46_1/doc/html/boost_random.html" rel="nofollow">http://www.boost.org/doc/libs/1_46_1/doc/html/boost_random.html</a><br />
Der mt19937 liefert ganz gute Zahlen.</p>
</blockquote>
<p>Hast Du selber bemerkt, daß rand() schlechte Zahlen liefert?</p>
</blockquote>
<p>Ja.<br />
Ich habe im Zuge meiner 2D Engine per Zufall Sprites auf dem Bildschirm verteilt für ein Testprogramm. Und die Anordnung war nicht wirklich zufriedenstellend und nicht gleichmäßig. Meistens waren &quot;Löcher&quot; in der Anordnung. Sprich, es waren als bsp links und rechts sprites, aber in der mitte kaum welche. Sowas. Mit dem Mersenne Twiser von boost ist das nicht so. Da ist die Anordnung der Sprites viel gleichmäßiger über den Bildschirm.</p>
<p>Das sind meine Funktionen:</p>
<pre><code class="language-cpp">typedef boost::mt19937 TRandomGenerator;
typedef boost::uniform_int&lt;&gt; TRandomIntUniform;
typedef boost::uniform_real&lt;&gt; TRandomFloatUniform;

typedef boost::variate_generator&lt;TRandomGenerator&amp;, TRandomIntUniform &gt; TIntVariateGen;
typedef boost::variate_generator&lt;TRandomGenerator&amp;, TRandomFloatUniform &gt; TFloatVariateGen;

int NLSystemController::getRandomInt( int min, int max )
{
    TRandomIntUniform distance(min, max);
    TIntVariateGen dice(m_rand, distance);
    return dice();
}

int NLSystemController::getRandomInt()
{
    TRandomIntUniform distance;
    TIntVariateGen dice(m_rand, distance);
    return dice();
}

f32 NLSystemController::getRandomReal( double min, double max )
{
    TRandomFloatUniform distance(min, max);
    TFloatVariateGen dice(m_rand, distance);
    return static_cast&lt;f32&gt;(dice());
}

f32 NLSystemController::getRandomReal()
{
    TRandomFloatUniform distance;
    TFloatVariateGen dice(m_rand, distance);
    return static_cast&lt;f32&gt;(dice());
}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/2077735</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2077735</guid><dc:creator><![CDATA[[[global:former_user]]]]></dc:creator><pubDate>Mon, 13 Jun 2011 23:43:41 GMT</pubDate></item><item><title><![CDATA[Reply to zufalls integer on Mon, 13 Jun 2011 23:52:04 GMT]]></title><description><![CDATA[<p>Scorcher24 schrieb:</p>
<blockquote>
<p>Meistens waren &quot;Löcher&quot; in der Anordnung. Sprich, es waren als bsp links und rechts sprites, aber in der mitte kaum welche. Sowas.</p>
</blockquote>
<p>Da wähne ich andere Fehler. Ein schlechter LCG zeichnet sich eher durch übertriebene Gleichmäßigkeit aus.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2077736</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2077736</guid><dc:creator><![CDATA[volkard]]></dc:creator><pubDate>Mon, 13 Jun 2011 23:52:04 GMT</pubDate></item><item><title><![CDATA[Reply to zufalls integer on Tue, 14 Jun 2011 06:30:15 GMT]]></title><description><![CDATA[<p>Gibt es eigentlich einen Grund, wieso in diesem Forum im Gegensatz zu vielen anderen C++ Neuheiten <code>&lt;random&gt;</code> so selten bis nie empfohlen wird? Normalerweise sind alle (die meisten) doch recht scharf drauf Dinge aus &lt;c....&gt; durch ein modernes C++ Pendant zu ersetzen und <code>&lt;random&gt;</code> ist schon recht lange in vc und gcc implementiert (wenn auch nicht 100% fehlerfrei) und in boost gibt es das eh schon lang.<br />
Wieso &quot;reicht&quot; für euch immer ein rand() mit seinem globalen Zustand (das auch ständig falsch benutzt wird) und andere C Techniken sind pöse. Und ich rede jetzt hier nicht von der Qualität der Zahlen.<br />
So und zur Frage:</p>
<pre><code class="language-cpp">#include &lt;random&gt;  // entweder
#include &lt;boost/random.hpp&gt;  // oder

namespace Rand = boost;
typedef Rand::uniform_int&lt;int&gt; Distribution;
typedef Rand::mt19937 Engine;  // oder eine andere
typedef Rand::variate_generator&lt;Engine, Distribution&gt; Generator;

Generator random(Engine(seed), Distribution(1, 10));
std::vector&lt;int&gt; v;
std::generate_n(v.begin(), 10, std::ref(random));
</code></pre>
<p>Ich habe auch verschiedene Monte Carlo Projekte und arbeite mit boost random (das tr1 random hatte im gcc in der normal_distribution oder irgendwo einen kleinen fehler; wahrscheinlich ist das auch gar nicht mehr so). Besonders wenn es komplexer wird und man das ganze dann auch noch parallelisiert möchte ich da nicht mit rand(...) rumhampeln.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2077756</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2077756</guid><dc:creator><![CDATA[brotbernd]]></dc:creator><pubDate>Tue, 14 Jun 2011 06:30:15 GMT</pubDate></item><item><title><![CDATA[Reply to zufalls integer on Tue, 14 Jun 2011 09:36:45 GMT]]></title><description><![CDATA[<p>Letztes Mal, als ich TR1.Random benutzt habe, war die Implementierung auf g++ verbuggt. Okay, gerade nachgeschaut, immer noch, obwohl der Bug bereits vor 2 Jahren <a href="http://gcc.gnu.org/bugzilla/show_bug.cgi?id=40331" rel="nofollow">bekannt</a> war.</p>
<pre><code class="language-cpp">#ifdef _MSC_VER
 #include &lt;random&gt;
#else
 #include &lt;tr1/random&gt;
#endif
#include &lt;iostream&gt;

int main()
{
	std::tr1::mt19937 engine;
	std::tr1::uniform_real&lt;float&gt; distribution(3.f, 4.f);
	std::cout &lt;&lt; distribution(engine) &lt;&lt; std::endl;
}
</code></pre>
<p>MSVC++</p>
<pre><code>3.81472
</code></pre>
<p>g++ 4.5.2 (MinGW)</p>
<pre><code>3.49921e+009
</code></pre>
<p>Und <code>std::uniform_real</code> gibts bei g++ noch nicht, erst <code>std::tr1::uniform_real</code> . Für was Zuverlässiges und Portables würde ich also Boost.Random benutzen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2077852</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2077852</guid><dc:creator><![CDATA[Nexus]]></dc:creator><pubDate>Tue, 14 Jun 2011 09:36:45 GMT</pubDate></item><item><title><![CDATA[Reply to zufalls integer on Tue, 14 Jun 2011 10:14:10 GMT]]></title><description><![CDATA[<p>brotbernd schrieb:</p>
<blockquote>
<p>Und ich rede jetzt hier nicht von der Qualität der Zahlen.</p>
</blockquote>
<p>Ich rede nur von der Qualität der Zahlen. Wie so oft wurde rand() wieder abgelehnt nur wegen der Qualität der Zahlen. Und hier bin ich eher des Skeptiker. Mir scheint, man erzählt sich immer wieder gegenseitig etwas und sowas wie eine kleine Religion entsteht um den Mersenne Twister. Daß der globale Zustand pöse ist, da sind wir einer Meinung.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2077866</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2077866</guid><dc:creator><![CDATA[volkard]]></dc:creator><pubDate>Tue, 14 Jun 2011 10:14:10 GMT</pubDate></item><item><title><![CDATA[Reply to zufalls integer on Tue, 14 Jun 2011 10:37:32 GMT]]></title><description><![CDATA[<p>Ach was, ich benutze den Multiply-With-Carry-Generator, den du mir vor einiger Zeit empfohlen hast. Er scheint sich zu bewähren... Danke, volkard! <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>
]]></description><link>https://www.c-plusplus.net/forum/post/2077879</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2077879</guid><dc:creator><![CDATA[Nexus]]></dc:creator><pubDate>Tue, 14 Jun 2011 10:37:32 GMT</pubDate></item><item><title><![CDATA[Reply to zufalls integer on Tue, 14 Jun 2011 11:20:52 GMT]]></title><description><![CDATA[<p>volkard schrieb:</p>
<blockquote>
<p>brotbernd schrieb:</p>
<blockquote>
<p>Und ich rede jetzt hier nicht von der Qualität der Zahlen.</p>
</blockquote>
<p>Ich rede nur von der Qualität der Zahlen. Wie so oft wurde rand() wieder abgelehnt nur wegen der Qualität der Zahlen. Und hier bin ich eher des Skeptiker. Mir scheint, man erzählt sich immer wieder gegenseitig etwas und sowas wie eine kleine Religion entsteht um den Mersenne Twister. Daß der globale Zustand pöse ist, da sind wir einer Meinung.</p>
</blockquote>
<p>Der rand() ist aber schon etwas was schnell ins Auge gehen kann und es gibt keinen guten Grund, das zu riskieren. Wenn der Threadersteller sagt, dass er MC macht, dann kann das ziemlich vieles sein. Falls er so etwas macht wie ich (und ich mache gar nicht mal so anspruchsvolles Zeug), dann fliegt er gehörig auf die Schnauze mit rand(). Wie otze schon erwähnt hat, liefern LCG an sich schon schlechte Verteilungen wenn man Zahlenpaare zieht. Und wenn auf der Maschine ein klassischer 15 Bit LCG laufen sollte, dann ziehe ich in jedem Schritt schon mehr Zahlen als der seine Periode hat.<br />
Und man hat natürlich noch mehr Nachteile, den globalen Zustand hast du genannt, ein weiterer ist, dass die Zahlen nicht portierbar sind, da die Implementierung nicht vorgegeben ist. rand() ist was für Spielereien und schnelles testen, sobald man damit etwas macht wofür man Geld bekommt oder das man veröffentlichen möchte, ist er nur noch fahrlässig.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2077903</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2077903</guid><dc:creator><![CDATA[SeppJ]]></dc:creator><pubDate>Tue, 14 Jun 2011 11:20:52 GMT</pubDate></item><item><title><![CDATA[Reply to zufalls integer on Tue, 14 Jun 2011 12:40:20 GMT]]></title><description><![CDATA[<p>SeppJ schrieb:</p>
<blockquote>
<p>Und wenn auf der Maschine ein klassischer 15 Bit LCG laufen sollte,</p>
</blockquote>
<p>irrelevant</p>
<p>SeppJ schrieb:</p>
<blockquote>
<p>ein weiterer ist, dass die Zahlen nicht portierbar sind, da die Implementierung nicht vorgegeben ist.</p>
</blockquote>
<p>Ungefähr das ist mein Grund gegen rand(). Und ein wenig Verspieltheit.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2077959</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2077959</guid><dc:creator><![CDATA[volkard]]></dc:creator><pubDate>Tue, 14 Jun 2011 12:40:20 GMT</pubDate></item><item><title><![CDATA[Reply to zufalls integer on Tue, 14 Jun 2011 17:55:41 GMT]]></title><description><![CDATA[<p>otze schrieb:</p>
<blockquote>
<p>...</p>
</blockquote>
<p>Hey danke für dein beispiel, ich habe den fehler damit gefunden. Denke aber deine korrektur ist nicht das was ich tuen wollte ^^.<br />
Ich hätte den code wohl direkt erklären sollen hole das hiermit mal nach:<br />
nehme an RAND_MAX==8. dann generiert rand(); zahlen von 0 bis 8.<br />
Angenommen ich will nun zufallszahlen von min=0 bis max=5 dann ist nrofrandomnumbers=5-0+1=6.<br />
Eine erste annäherung für die lösung der aufgabe wäre min+rand()%6 = 0+rand()%6;.<br />
rand(); gibt 0%6=0, 1%6=1, 2%6=2, 3%6=3, 4%6=4, 5%6=5, 6%6=0, 7%6=1, 8%6=2.<br />
Damit es gleichverteilt ist will die letzten zahlen die zu oft vorkommen rausnehmen.<br />
Wenn ich floor((RAND_MAX+1)/nrofrandomnrs) nehmen würde wüsste ich wie oft jede zahl vorkommen dürfte. (RAND_MAX+1 ist nrofrandnrs mit min=0, max=RAND_MAX für alle rand(); ergebnisse).<br />
Das bringt mich allerdings nicht sofort zum ziel.<br />
Wenn ich hingegen b=(RAND_MAX+1)%nrofrandomnrs nehme kann ich herrausfinden wie viele zahlen zu oft vorkommen. z.b. kann ich die 6 zahlen die ich habe (0..6) in 0..8 nur einmal unterbringen wenn ich gleichverteilung will und der rest ist b=(8+1)%6=3. Also b zahlen wurden zu oft untergebracht.<br />
Meine fehler also korrigiert und verschönert <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f603.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--grinning_face_with_big_eyes"
      title=":D"
      alt="😃"
    /> :</p>
<pre><code class="language-cpp">int getrand() {
            int nrofrandomnumbers, b;
            nrofrandomnumbers = max-min+1;
            b = (RAND_MAX+1)%nrofrandomnumbers;
            do {
                randomnumber = rand();
            } while (randomnumber &gt; RAND_MAX-b);
            return min+randomnumber%(max-min+1);
        }
</code></pre>
<p>was meint ihr ist es nun korrekt?</p>
<p>edit: ich lese btw auch eure anderen vorschläge. mir ist performance des zufallsalgorithmus schon ziemlich wichtig. Der trend geht also weg von rand() aus cstdlib so wie ich das mitbekomme? Werde mir demnächst mal alternativen anschauen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2078110</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2078110</guid><dc:creator><![CDATA[Halozination]]></dc:creator><pubDate>Tue, 14 Jun 2011 17:55:41 GMT</pubDate></item></channel></rss>