<?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[Simpler Algorithmus zum Addieren beliebig großer Integer]]></title><description><![CDATA[<p>Hallo,<br />
ich wollte mir einen einfachen Algorithmus schreiben, der beliebig große unsigned integer addiert.<br />
Die basis sieht so aus:</p>
<pre><code class="language-cpp">template&lt;unsigned int N&gt; class zahl
{
    unsigned int number[&quot;so viele unsigned ints wie man mindestens braucht, um N bits zu speichern&quot;];
};
</code></pre>
<p>Gesetzt dem Fall, es liegt Little Endian vor und number[0] addressiert die niederwertigsten Bits und number[array_size-1] die höchstwertigsten, habe ich diesen Algorithmus geschrieben:</p>
<pre><code class="language-cpp">zahl&amp; operator+=(const zahl&amp; a)
{
    bool uebertrag = false;

    for(unsigned int i=0;i!=array_size;++i)
    {
        if(uebertrag)
        {
             for(unsigned int tmp=i; tmp!=array_size; ++tmp)
                 if(++number[tmp]) break; //übertrag auf die &quot;zahl&quot; anwenden
             uebertrag=false;
        }

        uebertrag = ( (uint_max-number[i]) &lt; a.number[i] );
        number[i]+=a.number[i];
    }
    return *this;
}
</code></pre>
<p>Allerdings will der Algorithmus nicht so recht funktionieren, wenn das Ergebnis der Addition größer ist (also mehr bits hat), als in das Objekt passen. Sieht jemand spontan einen (Denk-)Fehler?</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/257533/simpler-algorithmus-zum-addieren-beliebig-großer-integer</link><generator>RSS for Node</generator><lastBuildDate>Thu, 10 Sep 2026 06:25:25 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/257533.rss" rel="self" type="application/rss+xml"/><pubDate>Wed, 30 Dec 2009 03:13:55 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Simpler Algorithmus zum Addieren beliebig großer Integer on Wed, 30 Dec 2009 03:13:55 GMT]]></title><description><![CDATA[<p>Hallo,<br />
ich wollte mir einen einfachen Algorithmus schreiben, der beliebig große unsigned integer addiert.<br />
Die basis sieht so aus:</p>
<pre><code class="language-cpp">template&lt;unsigned int N&gt; class zahl
{
    unsigned int number[&quot;so viele unsigned ints wie man mindestens braucht, um N bits zu speichern&quot;];
};
</code></pre>
<p>Gesetzt dem Fall, es liegt Little Endian vor und number[0] addressiert die niederwertigsten Bits und number[array_size-1] die höchstwertigsten, habe ich diesen Algorithmus geschrieben:</p>
<pre><code class="language-cpp">zahl&amp; operator+=(const zahl&amp; a)
{
    bool uebertrag = false;

    for(unsigned int i=0;i!=array_size;++i)
    {
        if(uebertrag)
        {
             for(unsigned int tmp=i; tmp!=array_size; ++tmp)
                 if(++number[tmp]) break; //übertrag auf die &quot;zahl&quot; anwenden
             uebertrag=false;
        }

        uebertrag = ( (uint_max-number[i]) &lt; a.number[i] );
        number[i]+=a.number[i];
    }
    return *this;
}
</code></pre>
<p>Allerdings will der Algorithmus nicht so recht funktionieren, wenn das Ergebnis der Addition größer ist (also mehr bits hat), als in das Objekt passen. Sieht jemand spontan einen (Denk-)Fehler?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1829651</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1829651</guid><dc:creator><![CDATA[Mathematiker_]]></dc:creator><pubDate>Wed, 30 Dec 2009 03:13:55 GMT</pubDate></item><item><title><![CDATA[Reply to Simpler Algorithmus zum Addieren beliebig großer Integer on Wed, 30 Dec 2009 07:20:45 GMT]]></title><description><![CDATA[<p>Na du hast es im grunde doch selber geschrieben. Du musst darauf vorbereitet sein, dass die Summe für die Darstellung ein Bit mehr braucht als jeder der beiden Summanden. Entsprechend muss die Arraygröße für das Ergebnis in dem Fall um eins erhöht werden, wenn dieses zusätzliche Bit nicht mehr in die alte Arraygröße passt.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1829676</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1829676</guid><dc:creator><![CDATA[pumuckl]]></dc:creator><pubDate>Wed, 30 Dec 2009 07:20:45 GMT</pubDate></item><item><title><![CDATA[Reply to Simpler Algorithmus zum Addieren beliebig großer Integer on Wed, 30 Dec 2009 10:58:49 GMT]]></title><description><![CDATA[<p>Ich hatte einen kleinen Denkfehler in meinem Programm. Der Overflow soll so behandelt werden, wie es bei den POD's geschieht (d.h. die Anzahl der Bits bleibt stehts konstant). Allerdings hatte ich mit einer ungeraden Anzahl Bits getestet, sodass am ende kein übertrag mehr übrig blieb (der ist dann in den &quot;padding bits&quot; verschwunden).<br />
Was haltet ihr von diesem Algorithmus? Gibt es bessere/schnellere Möglichkeiten, die addition zu realisieren?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1829725</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1829725</guid><dc:creator><![CDATA[mathematiker_]]></dc:creator><pubDate>Wed, 30 Dec 2009 10:58:49 GMT</pubDate></item></channel></rss>