<?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[Mehrere Zufallszahlen erzeugen]]></title><description><![CDATA[<p>Hallo,</p>
<p>ich habe eine Frage zu Zufallszahlen. Wie solche in guter statistischer Qualität in modernem C++ erzeugen kann, findet man ja recht einfach bei Google, z.B so:</p>
<pre><code>// Beispiel 1
#include &lt;iostream&gt;
#include &lt;random&gt;

int main()
{
	std::random_device rd;
	std::mt19937 eng(rd());
	std::uniform_real_distribution&lt;double&gt; dist(0, 1);

	for (int i = 1; i &lt;= 10; ++i)
		std::cout &lt;&lt; i &lt;&lt; &quot;\t&quot; &lt;&lt; dist(eng) &lt;&lt; &quot;\n&quot;; // 10 random numbers
}
</code></pre>
<p>Soweit so gut, aber da braucht man drei Zeilen um lokale Variablen zu initialisieren, nur um eine Zufallszahl zu erzeugen.</p>
<p>Eine bequemere Methode (auch bei Google gefunden) wäre das in eine Funktion auszulagen, wie z.B. so:</p>
<pre><code>// Beispiel 2
#include &lt;iostream&gt;
#include &lt;random&gt;

double rand_double(double min, double max)
{
	std::uniform_real_distribution&lt;double&gt; dist(0, 1);
	static std::default_random_engine eng(std::random_device{}());
	return dist(eng);
}

int main()
{
	for (int i = 1; i &lt;= 10; ++i)
		std::cout &lt;&lt; i &lt;&lt; &quot;\t&quot; &lt;&lt; rand_double(0.0, 1.0) &lt;&lt; &quot;\n&quot;;  // 10 random numbers
}
</code></pre>
<p>Ist schonmal viel besser, aber meine Frage ist jetzt, wie sieht das aus wenn ich mehrere verschiedene Variablen zufällig erzeuge?<br />
Dann verwenden die ja alle die selbe <code>std::default_random_engine</code> , kann das meine statistische Verteilung negativ beeinflussen (ich vermute schon)?</p>
<p>Beispiel Code:</p>
<pre><code>// Beispiel 3
#include &lt;iostream&gt;
#include &lt;random&gt;

double rand_double(double min, double max)
{
	std::uniform_real_distribution&lt;double&gt; dist(0, 1);
	static std::default_random_engine eng(std::random_device{}());
	return dist(eng);
}

int main()
{
	for (int i = 1; i &lt;= 10; ++i)
	{
		double x = rand_double(0.0, 1.0);
		double y = rand_double(0.0, 1.0);
		std::cout &lt;&lt; i &lt;&lt; &quot;\t&quot; &lt;&lt; x &lt;&lt; &quot;\t&quot; &lt;&lt; y &lt;&lt; &quot;\n&quot;; // 2 * 10 random numbers
	}
}
</code></pre>
<p>Für n Zufallszahlen müsste ich ja um eine gegenseitige Beeinflussung zu vermeiden auch n random_engines haben, die ich irgendwie &quot;managen&quot; muss.<br />
Hier mal eine (sinnlose) Beispiel-Klasse:</p>
<pre><code>// Beispiel 4
#include &lt;iostream&gt;
#include &lt;random&gt;

struct Test
{
	std::default_random_engine eng1, eng2, eng3;

	Test() : eng1((std::random_device{}())), 
		eng2((std::random_device{}())), 
		eng3((std::random_device{}())) {}

	double calculate()
	{
		std::uniform_real_distribution&lt;double&gt; dist(0, 1);

		double x1 = dist(eng1);
		double x2 = dist(eng2);
		double x3 = dist(eng3);

		return x1 + x2 + x3;
	}
};

int main()
{
	Test test;

	for (int i = 1; i &lt;= 10; ++i)
		std::cout &lt;&lt; i &lt;&lt; &quot;\t&quot; &lt;&lt; test.calculate() &lt;&lt; &quot;\n&quot;;
}
</code></pre>
<p>So müsste es ja eigentlich &quot;sicher&quot; sein, also alle drei Zufallszahlen haben ihre eigene <code>random_engine</code> .</p>
<p><strong>Frage:</strong> Kann man das auch einfacher machen?<br />
Also die Einfachheit beim Aufruf wie in Beispiel 3 (ohne in jeder Klasse die Zufallszahlen verwenden will die engines &quot;mitzuschleifen&quot;) aber trotzdem die Unabhängigkeit der Zahlen wie in Beispiel 4?</p>
<p>Ich brauche relativ viele Zufallszahlen lokal, und eine einzige Funktion <code>rand_double</code> die man einfach aufrufen kann ohne bei jeder neuen Variable wieder einen Member hinzufügen zu müssen wäre nicht schlecht.</p>
<p>Geht das sinnvoll?</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/340300/mehrere-zufallszahlen-erzeugen</link><generator>RSS for Node</generator><lastBuildDate>Sat, 11 Apr 2026 07:11:11 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/340300.rss" rel="self" type="application/rss+xml"/><pubDate>Sun, 30 Oct 2016 16:23:56 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Mehrere Zufallszahlen erzeugen on Sun, 30 Oct 2016 16:23:56 GMT]]></title><description><![CDATA[<p>Hallo,</p>
<p>ich habe eine Frage zu Zufallszahlen. Wie solche in guter statistischer Qualität in modernem C++ erzeugen kann, findet man ja recht einfach bei Google, z.B so:</p>
<pre><code>// Beispiel 1
#include &lt;iostream&gt;
#include &lt;random&gt;

int main()
{
	std::random_device rd;
	std::mt19937 eng(rd());
	std::uniform_real_distribution&lt;double&gt; dist(0, 1);

	for (int i = 1; i &lt;= 10; ++i)
		std::cout &lt;&lt; i &lt;&lt; &quot;\t&quot; &lt;&lt; dist(eng) &lt;&lt; &quot;\n&quot;; // 10 random numbers
}
</code></pre>
<p>Soweit so gut, aber da braucht man drei Zeilen um lokale Variablen zu initialisieren, nur um eine Zufallszahl zu erzeugen.</p>
<p>Eine bequemere Methode (auch bei Google gefunden) wäre das in eine Funktion auszulagen, wie z.B. so:</p>
<pre><code>// Beispiel 2
#include &lt;iostream&gt;
#include &lt;random&gt;

double rand_double(double min, double max)
{
	std::uniform_real_distribution&lt;double&gt; dist(0, 1);
	static std::default_random_engine eng(std::random_device{}());
	return dist(eng);
}

int main()
{
	for (int i = 1; i &lt;= 10; ++i)
		std::cout &lt;&lt; i &lt;&lt; &quot;\t&quot; &lt;&lt; rand_double(0.0, 1.0) &lt;&lt; &quot;\n&quot;;  // 10 random numbers
}
</code></pre>
<p>Ist schonmal viel besser, aber meine Frage ist jetzt, wie sieht das aus wenn ich mehrere verschiedene Variablen zufällig erzeuge?<br />
Dann verwenden die ja alle die selbe <code>std::default_random_engine</code> , kann das meine statistische Verteilung negativ beeinflussen (ich vermute schon)?</p>
<p>Beispiel Code:</p>
<pre><code>// Beispiel 3
#include &lt;iostream&gt;
#include &lt;random&gt;

double rand_double(double min, double max)
{
	std::uniform_real_distribution&lt;double&gt; dist(0, 1);
	static std::default_random_engine eng(std::random_device{}());
	return dist(eng);
}

int main()
{
	for (int i = 1; i &lt;= 10; ++i)
	{
		double x = rand_double(0.0, 1.0);
		double y = rand_double(0.0, 1.0);
		std::cout &lt;&lt; i &lt;&lt; &quot;\t&quot; &lt;&lt; x &lt;&lt; &quot;\t&quot; &lt;&lt; y &lt;&lt; &quot;\n&quot;; // 2 * 10 random numbers
	}
}
</code></pre>
<p>Für n Zufallszahlen müsste ich ja um eine gegenseitige Beeinflussung zu vermeiden auch n random_engines haben, die ich irgendwie &quot;managen&quot; muss.<br />
Hier mal eine (sinnlose) Beispiel-Klasse:</p>
<pre><code>// Beispiel 4
#include &lt;iostream&gt;
#include &lt;random&gt;

struct Test
{
	std::default_random_engine eng1, eng2, eng3;

	Test() : eng1((std::random_device{}())), 
		eng2((std::random_device{}())), 
		eng3((std::random_device{}())) {}

	double calculate()
	{
		std::uniform_real_distribution&lt;double&gt; dist(0, 1);

		double x1 = dist(eng1);
		double x2 = dist(eng2);
		double x3 = dist(eng3);

		return x1 + x2 + x3;
	}
};

int main()
{
	Test test;

	for (int i = 1; i &lt;= 10; ++i)
		std::cout &lt;&lt; i &lt;&lt; &quot;\t&quot; &lt;&lt; test.calculate() &lt;&lt; &quot;\n&quot;;
}
</code></pre>
<p>So müsste es ja eigentlich &quot;sicher&quot; sein, also alle drei Zufallszahlen haben ihre eigene <code>random_engine</code> .</p>
<p><strong>Frage:</strong> Kann man das auch einfacher machen?<br />
Also die Einfachheit beim Aufruf wie in Beispiel 3 (ohne in jeder Klasse die Zufallszahlen verwenden will die engines &quot;mitzuschleifen&quot;) aber trotzdem die Unabhängigkeit der Zahlen wie in Beispiel 4?</p>
<p>Ich brauche relativ viele Zufallszahlen lokal, und eine einzige Funktion <code>rand_double</code> die man einfach aufrufen kann ohne bei jeder neuen Variable wieder einen Member hinzufügen zu müssen wäre nicht schlecht.</p>
<p>Geht das sinnvoll?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2513483</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2513483</guid><dc:creator><![CDATA[happystudent]]></dc:creator><pubDate>Sun, 30 Oct 2016 16:23:56 GMT</pubDate></item><item><title><![CDATA[Reply to Mehrere Zufallszahlen erzeugen on Sun, 30 Oct 2016 21:29:58 GMT]]></title><description><![CDATA[<p>Ähm. Jo. Na. Geh mal lesen: <a href="http://www.pcg-random.org/posts/cpp-seeding-surprises.html" rel="nofollow">http://www.pcg-random.org/posts/cpp-seeding-surprises.html</a></p>
]]></description><link>https://www.c-plusplus.net/forum/post/2513538</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2513538</guid><dc:creator><![CDATA[Swordfish]]></dc:creator><pubDate>Sun, 30 Oct 2016 21:29:58 GMT</pubDate></item></channel></rss>