<?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[Algorithmus um kleine Zahlen in &amp;quot;gute&amp;quot; Zufallszahlen zu transformieren]]></title><description><![CDATA[<p>Hallo,<br />
ich möchte eine Funktion zum en- und decrypten von strings schreiben. Dazu muss ich Zahlen, die relativ nah beieinander liegen (zB sich um den Wert 5 unterscheiden) in möglichst unterschiedliche Zahlen transformieren. Dabei soll das ganze Sprektrum von 0 bis unsigned_int_max abgedeckt sein.<br />
Beispiel:</p>
<pre><code>Gewünschte Ausgabe:
seed: 1   Ausgabe: 324
seed: 2   Ausgabe: 3850275047
seed: 3   Ausgabe: 439560
usw
</code></pre>
<p>Gibt es so einen Algorithmus? Ich habe schon sämtliche Bitwise Operatoren und + - * / usw ausprobiert, aber immer lagen die Ergebnisse recht nah beieinander.<br />
Beispiel:</p>
<pre><code class="language-cpp">//Beispiel
unsigned int g3_rand(char b)
{
    unsigned int a = static_cast&lt;unsigned int&gt;(b);
    a = ~a;
    a += 1680712364u;
    a *= 1680712363u;
    a &amp;= 0xABAFACAA;
    a&lt;&lt;=1;
    a|= 123;
    a ^= 34;
    return a;
}
</code></pre>
<p>Hat jemand eine Idee, wie man sowas realisieren kann?</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/246790/algorithmus-um-kleine-zahlen-in-quot-gute-quot-zufallszahlen-zu-transformieren</link><generator>RSS for Node</generator><lastBuildDate>Thu, 17 Sep 2026 21:25:00 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/246790.rss" rel="self" type="application/rss+xml"/><pubDate>Sat, 01 Aug 2009 17:55:52 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Algorithmus um kleine Zahlen in &amp;quot;gute&amp;quot; Zufallszahlen zu transformieren on Sat, 01 Aug 2009 17:55:52 GMT]]></title><description><![CDATA[<p>Hallo,<br />
ich möchte eine Funktion zum en- und decrypten von strings schreiben. Dazu muss ich Zahlen, die relativ nah beieinander liegen (zB sich um den Wert 5 unterscheiden) in möglichst unterschiedliche Zahlen transformieren. Dabei soll das ganze Sprektrum von 0 bis unsigned_int_max abgedeckt sein.<br />
Beispiel:</p>
<pre><code>Gewünschte Ausgabe:
seed: 1   Ausgabe: 324
seed: 2   Ausgabe: 3850275047
seed: 3   Ausgabe: 439560
usw
</code></pre>
<p>Gibt es so einen Algorithmus? Ich habe schon sämtliche Bitwise Operatoren und + - * / usw ausprobiert, aber immer lagen die Ergebnisse recht nah beieinander.<br />
Beispiel:</p>
<pre><code class="language-cpp">//Beispiel
unsigned int g3_rand(char b)
{
    unsigned int a = static_cast&lt;unsigned int&gt;(b);
    a = ~a;
    a += 1680712364u;
    a *= 1680712363u;
    a &amp;= 0xABAFACAA;
    a&lt;&lt;=1;
    a|= 123;
    a ^= 34;
    return a;
}
</code></pre>
<p>Hat jemand eine Idee, wie man sowas realisieren kann?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1753662</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1753662</guid><dc:creator><![CDATA[Gilder]]></dc:creator><pubDate>Sat, 01 Aug 2009 17:55:52 GMT</pubDate></item><item><title><![CDATA[Reply to Algorithmus um kleine Zahlen in &amp;quot;gute&amp;quot; Zufallszahlen zu transformieren on Sat, 01 Aug 2009 18:03:39 GMT]]></title><description><![CDATA[<p>Such dir eine Funktion die nicht &quot;stetig&quot; ist bzw. in numerischer Ausdrucksweise einen instabilen Algorithmus, das heißt, dass kleine Änderungen in der Eingabe zu nicht vorhersagbaren Ausgaben führen.</p>
<p>Vielleicht einfach mal nach unstable algorithms suchen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1753666</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1753666</guid><dc:creator><![CDATA[Mathe-Freak]]></dc:creator><pubDate>Sat, 01 Aug 2009 18:03:39 GMT</pubDate></item><item><title><![CDATA[Reply to Algorithmus um kleine Zahlen in &amp;quot;gute&amp;quot; Zufallszahlen zu transformieren on Sat, 01 Aug 2009 18:11:33 GMT]]></title><description><![CDATA[<p>einfach mit einer ungeraden zahl multiplizieren. die größte bereichsexpansion hast du mit (sqrt(5)-1)/2 * 2^32, also 2654435769.<br />
zum dekodieren mußt du nur die inverse finden, höhö (extended gcd).</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1753668</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1753668</guid><dc:creator><![CDATA[volkard]]></dc:creator><pubDate>Sat, 01 Aug 2009 18:11:33 GMT</pubDate></item><item><title><![CDATA[Reply to Algorithmus um kleine Zahlen in &amp;quot;gute&amp;quot; Zufallszahlen zu transformieren on Sat, 01 Aug 2009 18:24:32 GMT]]></title><description><![CDATA[<p>Interessant. wie kommst du auf die Formel (sqrt(5)-1)/2 * Max ? Hast du mal nen Link oder Stichwort zum Nachlesen?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1753675</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1753675</guid><dc:creator><![CDATA[Gilder]]></dc:creator><pubDate>Sat, 01 Aug 2009 18:24:32 GMT</pubDate></item><item><title><![CDATA[Reply to Algorithmus um kleine Zahlen in &amp;quot;gute&amp;quot; Zufallszahlen zu transformieren on Sat, 01 Aug 2009 18:28:56 GMT]]></title><description><![CDATA[<p>Gilder schrieb:</p>
<blockquote>
<p>Interessant. wie kommst du auf die Formel (sqrt(5)-1)/2 * Max ? Hast du mal nen Link oder Stichwort zum Nachlesen?</p>
</blockquote>
<p>das ist der goldene schnitt (golden ratio), sozusagen die irrationalste zahl.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1753676</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1753676</guid><dc:creator><![CDATA[volkard]]></dc:creator><pubDate>Sat, 01 Aug 2009 18:28:56 GMT</pubDate></item><item><title><![CDATA[Reply to Algorithmus um kleine Zahlen in &amp;quot;gute&amp;quot; Zufallszahlen zu transformieren on Sat, 01 Aug 2009 19:26:43 GMT]]></title><description><![CDATA[<p>Ich habe jetzt mal folgendes probiert mit recht guten Ergebnissen (Anmerkung: Performance spielt eigentlich keine Rolle).<br />
Hat jemand noch Verbesserungsvorschläge oder Tipps für mich?</p>
<pre><code class="language-cpp">unsigned int funktion (const char b )
{
    unsigned int tmp = (static_cast&lt;unsigned int&gt;(b));

    tmp += 2654435767u;
    tmp &lt;&lt;= 1;
    tmp ^= 2654435765u;
    tmp *= 2654435769u;
    tmp |= 2654435768u;
    tmp = ~tmp;

    return tmp;
}

int main()
{
    std::cout&lt;&lt;funktion('a')&lt;&lt;std::endl;
    std::cout&lt;&lt;funktion('b')&lt;&lt;std::endl;
    std::cout&lt;&lt;funktion('c')&lt;&lt;std::endl;
    std::cout&lt;&lt;funktion('d')&lt;&lt;std::endl;
    std::cout&lt;&lt;funktion('e')&lt;&lt;std::endl;
    std::cout&lt;&lt;funktion('f')&lt;&lt;std::endl;

    /*
    * Ausgabe:
    *  1103135810
    *  21004864
    *  1082688582
    *  4227140
    *  1610612738
    *  562037760
    */
}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1753698</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1753698</guid><dc:creator><![CDATA[Gilder]]></dc:creator><pubDate>Sat, 01 Aug 2009 19:26:43 GMT</pubDate></item><item><title><![CDATA[Reply to Algorithmus um kleine Zahlen in &amp;quot;gute&amp;quot; Zufallszahlen zu transformieren on Sat, 01 Aug 2009 20:06:07 GMT]]></title><description><![CDATA[<p>Gilder schrieb:</p>
<blockquote>
<p>Hat jemand noch Verbesserungsvorschläge oder Tipps für mich?</p>
</blockquote>
<p>Ja. Einfach auf Onkel Volkard hören. <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>
<pre><code class="language-cpp">#include &lt;iostream&gt;

unsigned int funktion (const char b )
{
    unsigned int tmp = (static_cast&lt;unsigned int&gt;(b));
    tmp *= 2654435769u;
    return tmp;
}

int main()
{
    std::cout&lt;&lt;funktion('a')&lt;&lt;std::endl;
    std::cout&lt;&lt;funktion('b')&lt;&lt;std::endl;
    std::cout&lt;&lt;funktion('c')&lt;&lt;std::endl;
    std::cout&lt;&lt;funktion('d')&lt;&lt;std::endl;
    std::cout&lt;&lt;funktion('e')&lt;&lt;std::endl;
    std::cout&lt;&lt;funktion('f')&lt;&lt;std::endl;

    /*
    * Ausgabe alt:
    *  1103135810
    *    21004864
    *  1082688582
    *     4227140
    *  1610612738
    *   562037760
    * Viele Zahlen klein, nur drei Zahlen bei einer Milliarde
    */

    /* Ausgabe neu
    *  4077199129
    *  2436667602
    *   796136075
    *  3450571844
    *  1810040317
    *   169508790
    * Bereich von 0 bis 4.2 Milliarden gleichmäßig benutzt
    */
}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1753708</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1753708</guid><dc:creator><![CDATA[volkard]]></dc:creator><pubDate>Sat, 01 Aug 2009 20:06:07 GMT</pubDate></item></channel></rss>