<?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[long double Zufallswerte]]></title><description><![CDATA[<p>Liebe Gemeinschaft,</p>
<p>für die Startwerte der Gewichtungen meines neuralen Backpropergation Netzes<br />
hätte ich gern den Code eines geeigneten Zufallsgenerators.</p>
<p>Er soll schnell sein<br />
und möglichst zufällige sowie gleichmäßig verteilte Fließkommazahlen<br />
im Wertebereich -1,1E-4932 bis 1,1E4932 zurückgeben.</p>
<p>Zugunsten der Symetrie<br />
und um einen Offsetwert zu im Sinne der Codeübersichtlichkeit zu vermeiden<br />
wurde der negative long double Bereich nicht ganz ausgereizt.</p>
<p>Über entsprechende Lösungen für Borland C++ würde ich mich sehr freuen.</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/268734/long-double-zufallswerte</link><generator>RSS for Node</generator><lastBuildDate>Sun, 30 Aug 2026 02:18:16 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/268734.rss" rel="self" type="application/rss+xml"/><pubDate>Sun, 13 Jun 2010 21:09:11 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to long double Zufallswerte on Sun, 13 Jun 2010 21:09:11 GMT]]></title><description><![CDATA[<p>Liebe Gemeinschaft,</p>
<p>für die Startwerte der Gewichtungen meines neuralen Backpropergation Netzes<br />
hätte ich gern den Code eines geeigneten Zufallsgenerators.</p>
<p>Er soll schnell sein<br />
und möglichst zufällige sowie gleichmäßig verteilte Fließkommazahlen<br />
im Wertebereich -1,1E-4932 bis 1,1E4932 zurückgeben.</p>
<p>Zugunsten der Symetrie<br />
und um einen Offsetwert zu im Sinne der Codeübersichtlichkeit zu vermeiden<br />
wurde der negative long double Bereich nicht ganz ausgereizt.</p>
<p>Über entsprechende Lösungen für Borland C++ würde ich mich sehr freuen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1911839</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1911839</guid><dc:creator><![CDATA[fuse]]></dc:creator><pubDate>Sun, 13 Jun 2010 21:09:11 GMT</pubDate></item><item><title><![CDATA[Reply to long double Zufallswerte on Sun, 13 Jun 2010 21:19:35 GMT]]></title><description><![CDATA[<p>Wäre die Bibliothek <a href="http://www.boost.org/doc/libs/1_43_0/doc/html/boost_random.html" rel="nofollow">Boost.Random</a> etwas für dich?</p>
<p>Eventuell kannst du auch den Linearen Kongruenzgenerator aus der Standardbibliothek benutzen, allerdings besitzt der nicht eine wahnsinnig gute Zufälligkeit. Ein naiver Ansatz wäre:</p>
<pre><code class="language-cpp">long double Random(long double begin, long double end)
{
    return static_cast&lt;long double&gt;(rand()) / RAND_MAX * (end - begin) + begin;
}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1911841</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1911841</guid><dc:creator><![CDATA[Nexus]]></dc:creator><pubDate>Sun, 13 Jun 2010 21:19:35 GMT</pubDate></item><item><title><![CDATA[Reply to long double Zufallswerte on Sun, 13 Jun 2010 21:19:58 GMT]]></title><description><![CDATA[<pre><code class="language-cpp">void generate_random_floating_point_number(double&amp; number)
{
    for(unsigned int i = 0; i != sizeof(double); ++i)
        *reinterpret_cast&lt;unsigned char*&gt;(&amp;number) = (unsinged char)rand();
}
</code></pre>
<p>Optimierbar wenn du festlegst, wie groß dein double typ sein soll.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1911842</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1911842</guid><dc:creator><![CDATA[asdfasd]]></dc:creator><pubDate>Sun, 13 Jun 2010 21:19:58 GMT</pubDate></item><item><title><![CDATA[Reply to long double Zufallswerte on Sun, 13 Jun 2010 21:23:02 GMT]]></title><description><![CDATA[<p>Denke daran, dass bei einem long double die möglichen Werte ungleichmäßig auseinanderliegen (und es sind auch nicht so viele mögliche Werte wie man so denkt). Ein Zufallsgenerator der long double gleichverteilt abdeckt muss schon ziemlich speziell aufgebaut sein, glaube nicht, dass es das gibt, denn: Wozu soll das gut sein? Ich sehe auch bei deiner Anwendung keine Notwendigkeit derart großer Zahlen. Kannst du mich da mal erleuchten?</p>
<p>edit: @asdfasd: Dein Code macht genau das was ich meine: Unglaublich viele Zahlen nahe 0 und vergleichsweise wenige große Zahlen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1911843</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1911843</guid><dc:creator><![CDATA[SeppJ]]></dc:creator><pubDate>Sun, 13 Jun 2010 21:23:02 GMT</pubDate></item><item><title><![CDATA[Reply to long double Zufallswerte on Sun, 13 Jun 2010 21:22:05 GMT]]></title><description><![CDATA[<p>@asdfasd:<br />
Ich denke, das gibt Probleme, weil nicht jedes Bitmuster eine gültige Fliesskommazahl ist (NaN und so).</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1911844</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1911844</guid><dc:creator><![CDATA[Nexus]]></dc:creator><pubDate>Sun, 13 Jun 2010 21:22:05 GMT</pubDate></item><item><title><![CDATA[Reply to long double Zufallswerte on Sun, 13 Jun 2010 21:23:27 GMT]]></title><description><![CDATA[<p>Nochmal korrigiert</p>
<pre><code class="language-cpp">void generate_random_floating_point_number(double&amp; number)
{
    for(unsigned int i = 0; i != sizeof(double); ++i)
        *(reinterpret_cast&lt;unsigned char*&gt;(&amp;number)+i) = (unsigned char)rand();
}
</code></pre>
<p>Ja, an Nan und +/- inf habe ich nicht gedacht. Dann wirds kniffeliger <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>
]]></description><link>https://www.c-plusplus.net/forum/post/1911846</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1911846</guid><dc:creator><![CDATA[asdfasd]]></dc:creator><pubDate>Sun, 13 Jun 2010 21:23:27 GMT</pubDate></item><item><title><![CDATA[Reply to long double Zufallswerte on Sun, 13 Jun 2010 21:25:33 GMT]]></title><description><![CDATA[<p>Bischen Offtopic:</p>
<p>Nexus schrieb:</p>
<blockquote>
<p>@asdfasd:<br />
Ich denke, das gibt Probleme, weil nicht jedes Bitmuster eine gültige Fliesskommazahl ist (NaN und so).</p>
</blockquote>
<p>Nexus kannst du mir kurz erklären oder einen link geben was es mit diesem NaN auf sich hat, hatte diesen Werten erste letztens bei Ausgaben vor mir und konnte mir nicht ganz vorstellen was dies zu bedeuten hat.</p>
<p>Mfg marco</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1911847</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1911847</guid><dc:creator><![CDATA[Marc-O]]></dc:creator><pubDate>Sun, 13 Jun 2010 21:25:33 GMT</pubDate></item><item><title><![CDATA[Reply to long double Zufallswerte on Sun, 13 Jun 2010 21:26:41 GMT]]></title><description><![CDATA[<p>Marc-O schrieb:</p>
<blockquote>
<p>Nexus kannst du mir kurz erklären oder einen link geben was es mit diesem NaN auf sich hat, hatte diesen Werten erste letztens bei Ausgaben vor mir und konnte mir nicht ganz vorstellen was dies zu bedeuten hat.</p>
</blockquote>
<p><a href="http://de.wikipedia.org/wiki/NaN" rel="nofollow">http://de.wikipedia.org/wiki/NaN</a> <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/1911848</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1911848</guid><dc:creator><![CDATA[Nexus]]></dc:creator><pubDate>Sun, 13 Jun 2010 21:26:41 GMT</pubDate></item><item><title><![CDATA[Reply to long double Zufallswerte on Sun, 13 Jun 2010 21:26:45 GMT]]></title><description><![CDATA[<p><a href="http://en.wikipedia.org/wiki/IEC_559#Cases" rel="nofollow">http://en.wikipedia.org/wiki/IEC_559#Cases</a></p>
]]></description><link>https://www.c-plusplus.net/forum/post/1911849</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1911849</guid><dc:creator><![CDATA[asdfasd]]></dc:creator><pubDate>Sun, 13 Jun 2010 21:26:45 GMT</pubDate></item><item><title><![CDATA[Reply to long double Zufallswerte on Sun, 13 Jun 2010 21:30:01 GMT]]></title><description><![CDATA[<p>Danke schön <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>NaN (engl. Not a Number) =&gt; Zu leicht um selber drauf zu kommen <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>
<p>Mfg Marco</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1911851</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1911851</guid><dc:creator><![CDATA[Marc-O]]></dc:creator><pubDate>Sun, 13 Jun 2010 21:30:01 GMT</pubDate></item><item><title><![CDATA[Reply to long double Zufallswerte on Sun, 13 Jun 2010 21:49:34 GMT]]></title><description><![CDATA[<p>Es handelt sich um ein simples Buchstabenerkennungsnetz<br />
von dem ich den Quellcode gern offen legen kann.</p>
<p>Hier meine Funktion:</p>
<pre><code class="language-cpp">void TForm1::GewichtungenRandomize(int netz)
{
Randomize(); // gleicher startwert für ganzes netz (algorhytmusabzeichnung?)
for(int quellschicht=1; quellschicht&lt;=schichtanzahl-1;++quellschicht)  // quellschichtenanzahl = schichtanzahl-1
  {
  for(int verbindungsquelle=1; verbindungsquelle&lt;=objektanzahl[quellschicht];++verbindungsquelle)
    {
    for(int verbindungsziel=1; verbindungsziel&lt;=objektanzahl[quellschicht+1];++verbindungsziel)
      {
      // Randomize(); // für jede verbindung ein extra startwert (clockabzeichnung = zufallswert clockeperiodeisch(sekunde?) gleich)
      verbindung[netz][quellschicht][verbindungsquelle][verbindungsziel]=RandomRange(-1.1E-4932l,1.1E4932l);     // gewichtung   // geringster wert: -3.4E-4932l nicht genutzt um ein symetrisches verhältnis zu erzeugen
      }
    }
  }
}
//---------------------------------------------------------------------------
</code></pre>
<p>Randomize() und RandomRange() kann ich leider nich mehr verwenden,<br />
da nur Integerwerte zurückgegeben werden.</p>
<p>Boost.Random habe ich überflogen. Vermutlich ist es da auch so.</p>
<p>Den Zahlenraum reize ich wie genannt nur symetrisch aus.</p>
<p>Ich habe schon darüber nachgedacht,<br />
wie der Mersenne-Twister MT 19937 angepasst werden müsste.<br />
<a href="http://de.wikipedia.org/wiki/Mersenne-Twister" rel="nofollow">http://de.wikipedia.org/wiki/Mersenne-Twister</a><br />
Weiß jemand wie das am besten geht ?</p>
<p>Vielleicht gibt es aber auch bessere Lösungen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1911856</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1911856</guid><dc:creator><![CDATA[fuse]]></dc:creator><pubDate>Sun, 13 Jun 2010 21:49:34 GMT</pubDate></item><item><title><![CDATA[Reply to long double Zufallswerte on Sun, 13 Jun 2010 22:09:39 GMT]]></title><description><![CDATA[<p>Hab zwar von Boost Random keine Ahnung, aber die folgende Klasse von Boost Random sieht doch schon recht vielversprechend aus:</p>
<p><a href="http://www.boost.org/doc/libs/1_43_0/doc/html/boost/uniform_real.html" rel="nofollow">http://www.boost.org/doc/libs/1_43_0/doc/html/boost/uniform_real.html</a></p>
]]></description><link>https://www.c-plusplus.net/forum/post/1911859</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1911859</guid><dc:creator><![CDATA[life]]></dc:creator><pubDate>Sun, 13 Jun 2010 22:09:39 GMT</pubDate></item><item><title><![CDATA[Reply to long double Zufallswerte on Sun, 13 Jun 2010 22:29:14 GMT]]></title><description><![CDATA[<p>life schrieb:</p>
<blockquote>
<p>Hab zwar von Boost Random keine Ahnung, aber die folgende Klasse von Boost Random sieht doch schon recht vielversprechend aus:</p>
<p><a href="http://www.boost.org/doc/libs/1_43_0/doc/html/boost/uniform_real.html" rel="nofollow">http://www.boost.org/doc/libs/1_43_0/doc/html/boost/uniform_real.html</a></p>
</blockquote>
<blockquote>
<p>Note: The current implementation is buggy, because it may not fill all of the mantissa with random bits.</p>
</blockquote>
]]></description><link>https://www.c-plusplus.net/forum/post/1911864</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1911864</guid><dc:creator><![CDATA[SeppJ]]></dc:creator><pubDate>Sun, 13 Jun 2010 22:29:14 GMT</pubDate></item><item><title><![CDATA[Reply to long double Zufallswerte on Sun, 13 Jun 2010 23:05:01 GMT]]></title><description><![CDATA[<p>Die Bits sollten schon gefüllt werden.</p>
<p>Dies ist auch eine schöne Bibliothek:<br />
<a href="http://lxnt.info/rng/randomc.htm" rel="nofollow">http://lxnt.info/rng/randomc.htm</a><br />
Long double Rückgaben konnte ich auch dort nicht entdecken.</p>
<p>Mir wurde erklährt,<br />
daß das Netz kleine Unterschiede bei auflösenderen Werten besser erkennen kann.<br />
Ein Professor hat mir double empfolen. Für einen Wert werden 8 Byte reserviert. Bei long double sind es 2 Byte mehr. Der Zahlenraum ist aber um vieles größer.</p>
<p>Deshalb habe ich mein ursprüngliches Integernetz mit nur positiven Werten bis 255 (unsigned char hätte ich verwenden können) schon bis auf den Zufallsgenerator umgestellt.</p>
<p>Ich bin sehr gespannt wie es sich dann verhält.</p>
<p>Ergäbe sich eine Wahrscheinlichkeitsverschiebung,<br />
wenn ich Zufallsfunktionsergebnisse aufaddiere bis die maximalen Zufallszahlen<br />
den kompletten Zahlenraum füllen würden ?</p>
<p>Bei long double vom Minimalwert zum Maximalwert zu zählen stelle ich mir Zeitaufwendig vor.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1911871</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1911871</guid><dc:creator><![CDATA[fuse]]></dc:creator><pubDate>Sun, 13 Jun 2010 23:05:01 GMT</pubDate></item><item><title><![CDATA[Reply to long double Zufallswerte on Mon, 14 Jun 2010 09:01:58 GMT]]></title><description><![CDATA[<p>SeppJ schrieb:</p>
<blockquote>
<blockquote>
<p>Note: The current implementation is buggy, because it may not fill all of the mantissa with random bits.</p>
</blockquote>
</blockquote>
<p>Das würde ich persönlich jetzt nicht überbewerten, zumal die Anwendung &quot;Startwerte der Gewichtungen meines neuralen Backpropergation Netzes&quot; nicht so kritisch erscheint. Wenn man stattdessen selbst irgendwas frikelt, baut man desweiteren sicherlich noch mehr bugs rein..</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1911963</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1911963</guid><dc:creator><![CDATA[life@work]]></dc:creator><pubDate>Mon, 14 Jun 2010 09:01:58 GMT</pubDate></item><item><title><![CDATA[Reply to long double Zufallswerte on Mon, 14 Jun 2010 09:24:56 GMT]]></title><description><![CDATA[<p>fuse schrieb:</p>
<blockquote>
<p>Ergäbe sich eine Wahrscheinlichkeitsverschiebung,<br />
wenn ich Zufallsfunktionsergebnisse aufaddiere bis die maximalen Zufallszahlen<br />
den kompletten Zahlenraum füllen würden ?</p>
</blockquote>
<p>Ja, das geht dann gegen eine Gaußverteilung.</p>
<p>Außerdem kannst du nicht beliebig integer-Werte zu einem double addieren, denn schon bald wird der gespeicherte Wert so groß, dass eine Addition eines INT_MAX trotzdem wieder den alten Wert ergibt.</p>
<blockquote>
<p>Bei long double vom Minimalwert zum Maximalwert zu zählen stelle ich mir Zeitaufwendig vor.</p>
</blockquote>
<p>Ähem, selbst wenn es theoretisch ginge (siehe oben, warum es nicht geht), bräuchtest du etwa 10^4913 Rechenschritte. Du bräuchtest mit jetziger Technik etwa 10^4897 CPU-Jahre dafür.</p>
<p>Der long double ist auch nur um die 16 Byte groß. Nur die Interpretation ist anders als z.B. bei einem long int. Das heißt es gibt 2^16 mögliche Werte die ein double annehmen kann. Wenn du es so machst wie in diesem Thread gezeigt und einfach ein zufälliges 16 Byte Bitmuster reinterpretierst, dann hast du <strong>die möglichen Werte eines double gleichmäßig abgedeckt</strong>. Dabei willst du wahrscheinlich auch noch Sonderwerte wie inf und NaN abfangen.<br />
Wenn es das ist, was du willst (was nichts anderes ist als eine 16 Byte Zufallszahl), dann mach es. Die Werte sind dann aber <strong>nicht gleichmäßig auf den reellen Zahlenraum</strong> verteilt. Angefangen damit, dass es zum Beispiel zwei verschiedene Nullen gibt, entspricht die Dichteverteilung der Zufallszahlen ungefähr so wie |1/x| aus<sup>*</sup>. Falls die Gleichverteilung über einen so großen Zahlenbereich wichtig sein sollte, ist double der falsche Typ.</p>
<p><sup>*</sup>: Ja, es ist nicht |1/x|, weil das keine gültige dichtefunktion ist, aber es sieht so ähnlich aus und ich war zu faul zum Rechnen was es genau ist. Die Funktion |1/x| illustriert das Problem ganz gut.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1911976</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1911976</guid><dc:creator><![CDATA[SeppJ]]></dc:creator><pubDate>Mon, 14 Jun 2010 09:24:56 GMT</pubDate></item><item><title><![CDATA[Reply to long double Zufallswerte on Fri, 18 Jun 2010 00:18:15 GMT]]></title><description><![CDATA[<p>Wenn es einen Datentyp mit einer ähnlichen Präzision gibt,<br />
ist er vermutlich auch geeignet.</p>
<p>Beim Aufadieren würde ich das Komma durch teilen nachrücken.</p>
<p>Die beschrieben Lösung probiere ich gern aus.</p>
<p>Methode:</p>
<pre><code>void TForm1::ZufallsgeneratorLongDouble1(double&amp; number)
{
while((number &lt; -1.1E-4932l) || IsNan(number) || IsInfinite(number))
  {
  for(unsigned int i = 0; i != sizeof(long double); ++i)
    *reinterpret_cast&lt;unsigned char*&gt;(&amp;number) = (unsigned char)rand();
  }
}
//---------------------------------------------------------------------------
</code></pre>
<p>Aufruf:</p>
<pre><code>ZufallsgeneratorLongDouble1(verbindung[netz][quellschicht][verbindungsquelle][verbindungsziel]);     // gewichtung   // geringster wert: -3.4E-4932l nicht genutzt um ein symetrisches verhältnis zu erzeugen
</code></pre>
<p>Fehlermeldung:<br />
---------------------------<br />
Benachrichtigung über Debugger-Exception<br />
---------------------------<br />
Im Projekt NNTwo.exe ist eine Exception der Klasse EOverflow aufgetreten. Meldung: 'Gleitkommaüberlauf'. Prozeß wurde angehalten. Mit Einzelne Anweisung oder Start fortsetzen.<br />
---------------------------<br />
OK Hilfe<br />
---------------------------</p>
<p>Was müßte geändert werden ?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1914218</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1914218</guid><dc:creator><![CDATA[fuse]]></dc:creator><pubDate>Fri, 18 Jun 2010 00:18:15 GMT</pubDate></item><item><title><![CDATA[Reply to long double Zufallswerte on Fri, 18 Jun 2010 00:29:10 GMT]]></title><description><![CDATA[<p>fuse schrieb:</p>
<blockquote>
<p>Methode:</p>
<pre><code>void TForm1::ZufallsgeneratorLongDouble1(double&amp; number)
{
while((number &lt; -1.1E-4932l) || IsNan(number) || IsInfinite(number))
  {
  for(unsigned int i = 0; i != sizeof(long double); ++i)
    *reinterpret_cast&lt;unsigned char*&gt;(&amp;number) = (unsigned char)rand();
  }
}
</code></pre>
<p>Was müßte geändert werden ?</p>
</blockquote>
<p>alles <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f60b.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--face_savoring_food"
      title=":yum:"
      alt="😋"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/1914219</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1914219</guid><dc:creator><![CDATA[no_code]]></dc:creator><pubDate>Fri, 18 Jun 2010 00:29:10 GMT</pubDate></item><item><title><![CDATA[Reply to long double Zufallswerte on Fri, 18 Jun 2010 00:36:03 GMT]]></title><description><![CDATA[<p>Welchen Code ergibt die vorgeschlagene Änderung ?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1914220</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1914220</guid><dc:creator><![CDATA[fuse]]></dc:creator><pubDate>Fri, 18 Jun 2010 00:36:03 GMT</pubDate></item><item><title><![CDATA[Reply to long double Zufallswerte on Fri, 18 Jun 2010 08:25:19 GMT]]></title><description><![CDATA[<p>fuse schrieb:</p>
<blockquote>
<p>für die Startwerte der Gewichtungen meines neuralen Backpropergation Netzes<br />
hätte ich gern den Code eines geeigneten Zufallsgenerators.</p>
<p>Er soll schnell sein<br />
und möglichst zufällige sowie gleichmäßig verteilte Fließkommazahlen<br />
im Wertebereich -1,1E-4932 bis 1,1E4932 zurückgeben.</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>Für die Gewichte eines solchen Netzes würde ich mich auf einen viel kleineren Zahlenbereich beschränken, zB so etwas:</p>
<pre><code class="language-cpp">/// liefert Zufallszahl zwischen 0...1
double rectangularPDF();

/// liefert Zufallszahl zwischen -1...1
double triangularPDF()
{
  double t = rectangularPDF();
  t -= rectangularPDF();
  return t;
}

  ...
  gewicht = triangularPDF() * 10;
  ...
</code></pre>
<p>(oder so)</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1914290</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1914290</guid><dc:creator><![CDATA[krümelkacker]]></dc:creator><pubDate>Fri, 18 Jun 2010 08:25:19 GMT</pubDate></item><item><title><![CDATA[Reply to long double Zufallswerte on Fri, 18 Jun 2010 20:27:57 GMT]]></title><description><![CDATA[<p>Das ist auch interessant<br />
und wenn sich der Überlauf bei der ersten Lösung vermeiden lässt<br />
gäbe es schon 2 Lösungsansätze.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1914546</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1914546</guid><dc:creator><![CDATA[fuse]]></dc:creator><pubDate>Fri, 18 Jun 2010 20:27:57 GMT</pubDate></item><item><title><![CDATA[Reply to long double Zufallswerte on Fri, 18 Jun 2010 22:26:39 GMT]]></title><description><![CDATA[<p>SeppJ schrieb:</p>
<blockquote>
<p>Der long double ist auch nur um die 16 Byte groß. Nur die Interpretation ist anders als z.B. bei einem long int. Das heißt es gibt 2^16 mögliche Werte die ein double annehmen kann.</p>
</blockquote>
<p>2^128. (Byte != Bit)</p>
<p>Dementsprechend braucht man, um von einem Ende zum nächsten zu zählen, auch nur etwa etwa 10^38,5 Schritte. Das ist auch eines der Probleme, in das man mit einer Gleichverteilung über einen derart großen Bereich in Fließkommazahlen läuft - Wenn du einem long double 1,1e-4932 zuweist und eins draufzählst, ändert sich der Wert nicht, weil der Datentyp nicht genau genug ist, beide Werte darzustellen.</p>
<p>Aus diesem Grund generiert man Fließkommazufallswerte üblicherweise zwischen 0 und 1, wo der Exponent keine Rolle spielt, und multipliziert dann ggf. mit der gewünschten Bereichsgröße, nach dem Muster</p>
<pre><code class="language-cpp">(double) rand() / RAND_MAX
</code></pre>
<p>Um das ganze zu erweitern, wäre eine Reihenentwicklung wahrscheinlich das einfachste. Ich stelle mir das etwa so vor:</p>
<pre><code class="language-cpp">long double float_rand() {
  static long double const precise_max = std::pow(2.0L, std::numeric_limits&lt;long double&gt;::digits) - 1;
  static long double const rand_mod = RAND_MAX + 1.0L;

  long double x = 0;
  long double divisor = 1;

  do {
    x = x * rand_mod + rand();
    divisor *= rand_mod;
  } while(divisor &lt; precise_max / rand_mod);

  x = x * (precise_max / divisor) + (rand() / precise_max * divisor);

  return x / precise_max;
}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1914593</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1914593</guid><dc:creator><![CDATA[seldon]]></dc:creator><pubDate>Fri, 18 Jun 2010 22:26:39 GMT</pubDate></item><item><title><![CDATA[Reply to long double Zufallswerte on Sat, 19 Jun 2010 10:37:06 GMT]]></title><description><![CDATA[<p>seldon schrieb:</p>
<blockquote>
<p>Aus diesem Grund generiert man Fließkommazufallswerte üblicherweise zwischen 0 und 1, wo der Exponent keine Rolle spielt, und multipliziert dann ggf. mit der gewünschten Bereichsgröße, nach dem Muster</p>
<pre><code class="language-cpp">(double) rand() / RAND_MAX
</code></pre>
</blockquote>
<p>Du meinst</p>
<p>Nexus (1. Antwort) schrieb:</p>
<blockquote>
<pre><code class="language-cpp">long double Random(long double begin, long double end)
{
    return static_cast&lt;long double&gt;(rand()) / RAND_MAX * (end - begin) + begin;
}
</code></pre>
</blockquote>
<p><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/1914679</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1914679</guid><dc:creator><![CDATA[Nexus]]></dc:creator><pubDate>Sat, 19 Jun 2010 10:37:06 GMT</pubDate></item><item><title><![CDATA[Reply to long double Zufallswerte on Sun, 04 Jul 2010 17:10:27 GMT]]></title><description><![CDATA[<p>Welche Schrittweite zwischen 1 und -1 ist am kleinsten, ändert den Wert aber noch ?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1921223</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1921223</guid><dc:creator><![CDATA[fuse]]></dc:creator><pubDate>Sun, 04 Jul 2010 17:10:27 GMT</pubDate></item><item><title><![CDATA[Reply to long double Zufallswerte on Sun, 04 Jul 2010 17:19:15 GMT]]></title><description><![CDATA[<p>Für den long double Datentyp verwendet der Borlnd C++ Compiler 80 Bit.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1921226</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1921226</guid><dc:creator><![CDATA[fuse]]></dc:creator><pubDate>Sun, 04 Jul 2010 17:19:15 GMT</pubDate></item><item><title><![CDATA[Reply to long double Zufallswerte on Sun, 04 Jul 2010 18:50:13 GMT]]></title><description><![CDATA[<p>fuse schrieb:</p>
<blockquote>
<p>Er soll schnell sein<br />
und möglichst zufällige sowie gleichmäßig verteilte Fließkommazahlen<br />
im Wertebereich -1,1E-4932 bis 1,1E4932 zurückgeben.</p>
</blockquote>
<p>Interessante Frage,<br />
für ein neuronales Netz würde ich dir persönlich allerdings kleine Werte bevorzugen wie z.B. zwischen<br />
-1 und 1 empfehlen oder -0,5 und 0,5</p>
<p>EDIT: Beim vollen Ausschöpfen des Wertebereichs kriegst du auch noch Probleme mit Überläufen... Inwiefern sie die Leistungsfähigkeit deines Netzes beeinflussen, vermag ich jetzt nicht zu beurteilen</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1921240</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1921240</guid><dc:creator><![CDATA[[[global:guest]]]]></dc:creator><pubDate>Sun, 04 Jul 2010 18:50:13 GMT</pubDate></item></channel></rss>