<?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[Limitless Int - Sinnvoll ?]]></title><description><![CDATA[<p>Ich hab eine Klasse geschrieben, bei der man mit Zahlen rechnen kann die *fast* Grenzlos große Ganzzahlen behandeln kann und damit rechnen.<br />
Die Ausgabe ist als std::string.<br />
Ich arbeite momentan an der Substraktion.</p>
<p>Leider muss die Grenze vorher definiert werden, dynamisch hab ich das noch nicht hinbekommen.</p>
<p>1. Brauch man sowas überhaupt ? (hat einfach spaß gemacht sowas zu basteln)<br />
2. Könnt ihr mir helfen die Initialisierung der Größe die man vorher machen muss rauszukriegen ?</p>
<p>Hier Code:<br />
Klasse:</p>
<pre><code class="language-cpp">class Limitless
{
	private:
		std::vector &lt;int&gt; thousands;
		int len;
		int Overflow;
	public:
		void Initialise(int MaxLength);
		void AddInteger(long int Value);
		void Substract(long int Value);
		std::string OutputValue(bool dotted);
		// math funktion
		void MultiplyWithInteger(long int Value);
		void DivideTrough(long int Value);

	Limitless&amp; operator += (long int Val)
	{
		AddInteger(Val);
	}
        Limitless&amp; operator *= (long int Val)
	{
		MultiplyWithInteger(Val);
	}
	Limitless&amp; operator /= (long int Val)
	{
		DivideTrough(Val);
	}
	Limitless&amp; operator ++ ()
	{
		AddInteger(1);
	}
};
</code></pre>
<p>Initialisieren:</p>
<pre><code class="language-cpp">void Limitless::Initialise(int MaxLength)
{
	MaxLength++;
    thousands.reserve(MaxLength*3);
	int i = 0;
	while (i &lt; MaxLength)
		{i++;thousands.push_back(0);}
	len = MaxLength;
}
</code></pre>
<p>Addieren</p>
<pre><code class="language-cpp">void Limitless::AddInteger(long int Value)
{
	thousands[0] += Value;
	long int i = 0;
	while (true)
	{
		if (thousands[i] &gt; 999)
		{
			if (i &lt;= len)
			{
            	if (thousands[i+1] &gt; 999)
				{
					i++;
				}
				while (thousands[i] &gt; 999)
				{
					thousands[i] -= 1000;
					thousands[i + 1] += 1;
				}
			}
			else
				Overflow = 2;
		}
		else
        	break;
	}
}
</code></pre>
<p>Die Ausgabe ist ja jetzt nich so wichitg.</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/268176/limitless-int-sinnvoll</link><generator>RSS for Node</generator><lastBuildDate>Tue, 01 Sep 2026 22:06:04 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/268176.rss" rel="self" type="application/rss+xml"/><pubDate>Sat, 05 Jun 2010 12:24:03 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Limitless Int - Sinnvoll ? on Sat, 05 Jun 2010 12:24:03 GMT]]></title><description><![CDATA[<p>Ich hab eine Klasse geschrieben, bei der man mit Zahlen rechnen kann die *fast* Grenzlos große Ganzzahlen behandeln kann und damit rechnen.<br />
Die Ausgabe ist als std::string.<br />
Ich arbeite momentan an der Substraktion.</p>
<p>Leider muss die Grenze vorher definiert werden, dynamisch hab ich das noch nicht hinbekommen.</p>
<p>1. Brauch man sowas überhaupt ? (hat einfach spaß gemacht sowas zu basteln)<br />
2. Könnt ihr mir helfen die Initialisierung der Größe die man vorher machen muss rauszukriegen ?</p>
<p>Hier Code:<br />
Klasse:</p>
<pre><code class="language-cpp">class Limitless
{
	private:
		std::vector &lt;int&gt; thousands;
		int len;
		int Overflow;
	public:
		void Initialise(int MaxLength);
		void AddInteger(long int Value);
		void Substract(long int Value);
		std::string OutputValue(bool dotted);
		// math funktion
		void MultiplyWithInteger(long int Value);
		void DivideTrough(long int Value);

	Limitless&amp; operator += (long int Val)
	{
		AddInteger(Val);
	}
        Limitless&amp; operator *= (long int Val)
	{
		MultiplyWithInteger(Val);
	}
	Limitless&amp; operator /= (long int Val)
	{
		DivideTrough(Val);
	}
	Limitless&amp; operator ++ ()
	{
		AddInteger(1);
	}
};
</code></pre>
<p>Initialisieren:</p>
<pre><code class="language-cpp">void Limitless::Initialise(int MaxLength)
{
	MaxLength++;
    thousands.reserve(MaxLength*3);
	int i = 0;
	while (i &lt; MaxLength)
		{i++;thousands.push_back(0);}
	len = MaxLength;
}
</code></pre>
<p>Addieren</p>
<pre><code class="language-cpp">void Limitless::AddInteger(long int Value)
{
	thousands[0] += Value;
	long int i = 0;
	while (true)
	{
		if (thousands[i] &gt; 999)
		{
			if (i &lt;= len)
			{
            	if (thousands[i+1] &gt; 999)
				{
					i++;
				}
				while (thousands[i] &gt; 999)
				{
					thousands[i] -= 1000;
					thousands[i + 1] += 1;
				}
			}
			else
				Overflow = 2;
		}
		else
        	break;
	}
}
</code></pre>
<p>Die Ausgabe ist ja jetzt nich so wichitg.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1907282</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1907282</guid><dc:creator><![CDATA[5cript]]></dc:creator><pubDate>Sat, 05 Jun 2010 12:24:03 GMT</pubDate></item><item><title><![CDATA[Reply to Limitless Int - Sinnvoll ? on Sat, 05 Jun 2010 13:02:32 GMT]]></title><description><![CDATA[<p>Das kann man schon brauchen. Daher gibt es auch gute Lösungen bereits:<br />
<a href="http://www.gmplib.org/" rel="nofollow">http://www.gmplib.org/</a></p>
<p>Ich verstehe dein Problem nicht so ganz.</p>
<p>Subtraktion ist eigentlich recht einfach. Du musst du die Addition richtig machen. Wenn die Addition nämlich das addieren von positiven und negativen Zahlen korrekt handhabt lässt sich die Subtraktion mit 2 Zeilen implementieren.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1907300</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1907300</guid><dc:creator><![CDATA[drakon]]></dc:creator><pubDate>Sat, 05 Jun 2010 13:02:32 GMT</pubDate></item><item><title><![CDATA[Reply to Limitless Int - Sinnvoll ? on Sat, 05 Jun 2010 13:36:06 GMT]]></title><description><![CDATA[<p>drakon schrieb:</p>
<blockquote>
<p>Ich verstehe dein Problem nicht so ganz.</p>
<p>Subtraktion ist eigentlich recht einfach. Du musst du die Addition richtig machen. Wenn die Addition nämlich das addieren von positiven und negativen Zahlen korrekt handhabt lässt sich die Subtraktion mit 2 Zeilen implementieren.</p>
</blockquote>
<p>Die Subtraktion ist nicht das Problem, zumindest noch nicht.<br />
Das Problem ist, dass es immer noch zu Überläufen kommen kann, wenn man die Eigene Grenze überschreitet. Diese sollte sich dann automatisch heben.</p>
<p>(Aus der Addition)</p>
<pre><code class="language-cpp">if (i &lt;= len)
            {
                if (thousands[i+1] &gt; 999)
                {
                    i++;
                }
                while (thousands[i] &gt; 999)
                {
                    thousands[i] -= 1000;
                    thousands[i + 1] += 1;
                }
            }
            else
                Overflow = 2;
</code></pre>
<p>Ich muss den vector weiter vergrößern, da wo jetzt Overflow = 2; steht, und die Abrage | if(i &lt;= len) muss anders gestaltet werden.</p>
<p>Ich suche:</p>
<p>1. Eine Funktion mit der ich die Größe eines Vectors erhalte</p>
<p>Weiter erhalte ich noch folgendes Problem:<br />
diese Länge kann ja nur als int ausgegeben werden, doch der hat wiederum eine Grenze. (Aber das ist dann sicher schon wieder nebensächlich, der Datentyp wäre trotzdem bei weitem größer als andere)</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1907311</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1907311</guid><dc:creator><![CDATA[5cript]]></dc:creator><pubDate>Sat, 05 Jun 2010 13:36:06 GMT</pubDate></item><item><title><![CDATA[Reply to Limitless Int - Sinnvoll ? on Sat, 05 Jun 2010 13:39:50 GMT]]></title><description><![CDATA[<p>Sieh' dir die Doku von std::vector an, da findest du alle Methoden die du benötigst.</p>
<p>MfG SideWinder</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1907313</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1907313</guid><dc:creator><![CDATA[SideWinder]]></dc:creator><pubDate>Sat, 05 Jun 2010 13:39:50 GMT</pubDate></item><item><title><![CDATA[Reply to Limitless Int - Sinnvoll ? on Sat, 05 Jun 2010 15:26:57 GMT]]></title><description><![CDATA[<pre><code class="language-cpp">void Limitless::AddInteger(long int Value)
{
    long to_add = Value;
    for(std::vector&lt;int&gt;::iterator i(thousands.begin()), e(thousands.end()); i != e; ++i)
    {
      *i += to_add;

      if(*i &lt; 1000)
        continue;

      to_add = *i/1000;
      *i %= 1000;
    }

    if(to_add == 0)
      return;

    //ggf. noch rollback-fähig machen, falls bad_alloc fliegt
    thousands.push_back(to_add);    
}
</code></pre>
<p>so siehts doch irgendwie toller aus, oder?</p>
<p>einziges problem: kannst du eben nicht als minus verwenden - aber das konnte deine bisherige lösung ja auch nicht...</p>
<p>bb</p>
<p>edit: aus dem continue kannst du so gar auch ein return machen, wenn du dir sicher bist, dass der vector davor in ordnung(alles &lt; 1000) war.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1907342</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1907342</guid><dc:creator><![CDATA[unskilled]]></dc:creator><pubDate>Sat, 05 Jun 2010 15:26:57 GMT</pubDate></item><item><title><![CDATA[Reply to Limitless Int - Sinnvoll ? on Sat, 05 Jun 2010 16:51:09 GMT]]></title><description><![CDATA[<p>to_add heißt carry und kann nur ein bit fassen und % gibts in der Schleife nicht und limitless klingt nach unlimited, aber ich würde übliche Namen bevorzugen wie NotReallySmallInt.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1907389</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1907389</guid><dc:creator><![CDATA[volkard]]></dc:creator><pubDate>Sat, 05 Jun 2010 16:51:09 GMT</pubDate></item><item><title><![CDATA[Reply to Limitless Int - Sinnvoll ? on Mon, 07 Jun 2010 19:22:29 GMT]]></title><description><![CDATA[<p>volkard schrieb:</p>
<blockquote>
<p>aber ich würde übliche Namen bevorzugen wie NotReallySmallInt.</p>
</blockquote>
<p><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="😃"
    /><br />
wie wärs mit &quot;long long long long long long int&quot; ? xD</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1908550</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1908550</guid><dc:creator><![CDATA[5cript]]></dc:creator><pubDate>Mon, 07 Jun 2010 19:22:29 GMT</pubDate></item></channel></rss>