<?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[Zufall: vc++ vs. gcc]]></title><description><![CDATA[<p>Hallo,</p>
<p>habe eine Zufallsfunktion, die u.a. auch mit Zahlen &lt;1 umgehen soll bzw. float Zufallswerte generieren soll. In Tests mit Visual C++ scheint es zu funktionieren.<br />
Unter Linux mit dem gcc versuchte ich es nun auch mit der Funktion; aber leider erhängt sich die Anwendung irgendwo, wenn ich nicht rnd(5), sondern z.b. rnd(5.1) aufrufe, also eine float, statt Ganzzahl teste.<br />
Hier die Funktion:</p>
<blockquote>
<p>float rnd(float max)</p>
<p>{</p>
<p>int pot=0;</p>
<p>float z=0;</p>
<p>if(max==0)</p>
<p>return 0;</p>
<p>while((int)max!=(float)max)</p>
<p>{</p>
<p>max*=10.0;</p>
<p>pot++;</p>
<p>}</p>
<p>if(max==1.0)</p>
<p>{</p>
<p>max*=100;</p>
<p>pot+=2;</p>
<p>}</p>
<p>while(RAND_MAX&lt;max)</p>
<p>{</p>
<p>max=(int)(max/10);</p>
<p>pot--;</p>
<p>}</p>
<p>z=rand()%(int)max+1;</p>
<p>for(;pot&gt;0;pot--)</p>
<p>{</p>
<p>z/=10.0;</p>
<p>}</p>
<p>return z;</p>
<p>}</p>
</blockquote>
<p>Wenn ich bei der Funktion einen sem. Fehler eingebaut habe, so hoffe ich, dass Ihr ihn findet; aber dennoch würde mich das dann wundern, dass es im VC++ läuft.<br />
Was meint Ihr?</p>
<p>Danke für Eure Hilfe!<br />
Schönen Tag noch</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/200247/zufall-vc-vs-gcc</link><generator>RSS for Node</generator><lastBuildDate>Sun, 04 Oct 2026 09:54:38 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/200247.rss" rel="self" type="application/rss+xml"/><pubDate>Wed, 12 Dec 2007 15:20:35 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Zufall: vc++ vs. gcc on Wed, 12 Dec 2007 15:20:35 GMT]]></title><description><![CDATA[<p>Hallo,</p>
<p>habe eine Zufallsfunktion, die u.a. auch mit Zahlen &lt;1 umgehen soll bzw. float Zufallswerte generieren soll. In Tests mit Visual C++ scheint es zu funktionieren.<br />
Unter Linux mit dem gcc versuchte ich es nun auch mit der Funktion; aber leider erhängt sich die Anwendung irgendwo, wenn ich nicht rnd(5), sondern z.b. rnd(5.1) aufrufe, also eine float, statt Ganzzahl teste.<br />
Hier die Funktion:</p>
<blockquote>
<p>float rnd(float max)</p>
<p>{</p>
<p>int pot=0;</p>
<p>float z=0;</p>
<p>if(max==0)</p>
<p>return 0;</p>
<p>while((int)max!=(float)max)</p>
<p>{</p>
<p>max*=10.0;</p>
<p>pot++;</p>
<p>}</p>
<p>if(max==1.0)</p>
<p>{</p>
<p>max*=100;</p>
<p>pot+=2;</p>
<p>}</p>
<p>while(RAND_MAX&lt;max)</p>
<p>{</p>
<p>max=(int)(max/10);</p>
<p>pot--;</p>
<p>}</p>
<p>z=rand()%(int)max+1;</p>
<p>for(;pot&gt;0;pot--)</p>
<p>{</p>
<p>z/=10.0;</p>
<p>}</p>
<p>return z;</p>
<p>}</p>
</blockquote>
<p>Wenn ich bei der Funktion einen sem. Fehler eingebaut habe, so hoffe ich, dass Ihr ihn findet; aber dennoch würde mich das dann wundern, dass es im VC++ läuft.<br />
Was meint Ihr?</p>
<p>Danke für Eure Hilfe!<br />
Schönen Tag noch</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1419446</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1419446</guid><dc:creator><![CDATA[rabby]]></dc:creator><pubDate>Wed, 12 Dec 2007 15:20:35 GMT</pubDate></item><item><title><![CDATA[Reply to Zufall: vc++ vs. gcc on Wed, 12 Dec 2007 15:26:03 GMT]]></title><description><![CDATA[<p>Das Problem ist vermutlich, daß der Rechner Gleitkommazahlen nicht wirklich exakt darstellen kann und deshalb irgendwo runden muß. Und dadurch könnte es passieren, daß die erste Schleife nicht abbricht (weil in Wirklichkeit nicht 5.1 übergeben wird, sondern 5.10000000012).</p>
<p>Aber nur für mich - was genau soll diese ganze Umrechnerei bringen? Ich würde es wohl eher so lösen:</p>
<pre><code class="language-cpp">float rnd(float max)
{
  return ((float)rand()/RAND_MAX)*max;
}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1419450</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1419450</guid><dc:creator><![CDATA[CStoll]]></dc:creator><pubDate>Wed, 12 Dec 2007 15:26:03 GMT</pubDate></item><item><title><![CDATA[Reply to Zufall: vc++ vs. gcc on Wed, 12 Dec 2007 15:33:00 GMT]]></title><description><![CDATA[<p>hallo,</p>
<p>danke für die schnelle antwort.<br />
hattest recht!<br />
wie gesagt, das war nur ein kleiner test... jetzt kenne ich einen unterschied mehr zwisch vc und gcc <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>schönen tag noch</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1419456</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1419456</guid><dc:creator><![CDATA[rabby]]></dc:creator><pubDate>Wed, 12 Dec 2007 15:33:00 GMT</pubDate></item><item><title><![CDATA[Reply to Zufall: vc++ vs. gcc on Wed, 12 Dec 2007 15:38:09 GMT]]></title><description><![CDATA[<p>Naja, er will halt auch Zahlen mit Nachkommastellen rausbekommen. Geht da aber einen vollkommen unperformanten und unsicheren Weg.</p>
<pre><code class="language-cpp">float rang_rand(const float min, const float max)
{ return min + (static_cast&lt;float&gt;(std::rand()) / RAND_MAX) * max; }
</code></pre>
<p>hmm ... naja das wahre ist die Wahrscheinlichkeitsverteilung jetzt nicht ^^ Was er wollte war eher, jetzt anzugeben, wie viele Potenzen drin sein sollen, und dann dementsprechend das zu machen:</p>
<pre><code class="language-cpp">float rang_rand(const float min, const float max, const std::size_t pow)
{ return min + ((static_cast&lt;float&gt;(std::rand()) / RAND_MAX) * max) / (pow * 10.f); }
</code></pre>
<p>oder so ...</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1419463</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1419463</guid><dc:creator><![CDATA[*D*Evil]]></dc:creator><pubDate>Wed, 12 Dec 2007 15:38:09 GMT</pubDate></item></channel></rss>