<?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[RossiBigInt]]></title><description><![CDATA[<p>Hallo an alle,</p>
<p>ich bin neu hier.</p>
<p>Ich habe ein Probelm mit der BigInt Klasse von <a href="https://sourceforge.net/projects/cpp-bigint/" rel="nofollow">https://sourceforge.net/projects/cpp-bigint/</a>.</p>
<p>Ich möchte den Binomialkoeffizienten von großen Zahlen bestimmen.<br />
Bei meiner Funktion tritt allerdings bei einigen Parametern ein Fehler auf:</p>
<p>Vector subscript out of range.</p>
<p>Kann mir jemand helfen, oder hat eine Idee woran es liegen könnte?</p>
<p>Habe zwei Versionen der BinomialkoeffizientenFunktion:</p>
<p>Version 1:</p>
<pre><code class="language-cpp">RossiBigInt Binkof ( unsigned long b1, unsigned long b2)
	{
	RossiBigInt p1(0), p2(0) ,p3(0), p4(0), erg(0);
	unsigned int b3;
	p1=Faku(b1);	cout&lt;&lt;&quot;\nn!= &quot;&lt;&lt;p1;
	p2=Faku(b2);	cout&lt;&lt;&quot;\nk!= &quot;&lt;&lt;p2;
	b3=b1-b2;
	p3=Faku(b3);
	p4=p2*p3;	cout&lt;&lt;&quot;\nk!*(n-k)!= &quot;&lt;&lt;p4;
	erg = p1 / p4;	cout&lt;&lt;&quot;\nerg= &quot;&lt;&lt;erg;
	return p1;
	}
</code></pre>
<pre><code class="language-cpp">RossiBigInt Binkof ( unsigned long b1, unsigned long b2)
	{
	unsigned long b3, b4;
	RossiBigInt p1(1), p2(0), erg (0);

	b3= b1-b2;
	if (b3&lt;b2){b4=b2;} else{b4=b3;b3=b2;}	        cout &lt;&lt;&quot;\tb4= &quot;&lt;&lt;b4&lt;&lt;&quot; b3= &quot;&lt;&lt;b3;
	for (unsigned long x=b4+1;x&lt;b1+1;x++){		cout &lt;&lt;&quot;\nx= &quot;&lt;&lt;x;
		p1=p1 * x;
		}	cout&lt;&lt;&quot;\np1= &quot;&lt;&lt;p1;
	p2=Faku(b3);	cout&lt;&lt;&quot;\np2= &quot;&lt;&lt;p2;
	erg=p1 /p2;	cout&lt;&lt;&quot;\nerg= &quot;&lt;&lt;erg;
	 return erg;
	}
</code></pre>
<p>Die Faku Funktion:</p>
<pre><code class="language-cpp">RossiBigInt Faku(unsigned long f)
	{
	RossiBigInt erg(1);
	RossiBigInt t(0);
	for (int x=0;x&lt;f;x++){
		t++;
		erg=erg*t; 
		}
	return erg;
	}
</code></pre>
<p>Ich habe WinXP prof und benutze VS2005 prof</p>
<p>Hat jemand eine Idee. Wäre echt super wenn mir jemand einen Tipp geben kann.</p>
<p>Dankeschön schon mal im Vorraus</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/203038/rossibigint</link><generator>RSS for Node</generator><lastBuildDate>Sun, 05 Apr 2026 20:41:07 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/203038.rss" rel="self" type="application/rss+xml"/><pubDate>Fri, 18 Jan 2008 09:26:38 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to RossiBigInt on Fri, 18 Jan 2008 09:30:47 GMT]]></title><description><![CDATA[<p>Hallo an alle,</p>
<p>ich bin neu hier.</p>
<p>Ich habe ein Probelm mit der BigInt Klasse von <a href="https://sourceforge.net/projects/cpp-bigint/" rel="nofollow">https://sourceforge.net/projects/cpp-bigint/</a>.</p>
<p>Ich möchte den Binomialkoeffizienten von großen Zahlen bestimmen.<br />
Bei meiner Funktion tritt allerdings bei einigen Parametern ein Fehler auf:</p>
<p>Vector subscript out of range.</p>
<p>Kann mir jemand helfen, oder hat eine Idee woran es liegen könnte?</p>
<p>Habe zwei Versionen der BinomialkoeffizientenFunktion:</p>
<p>Version 1:</p>
<pre><code class="language-cpp">RossiBigInt Binkof ( unsigned long b1, unsigned long b2)
	{
	RossiBigInt p1(0), p2(0) ,p3(0), p4(0), erg(0);
	unsigned int b3;
	p1=Faku(b1);	cout&lt;&lt;&quot;\nn!= &quot;&lt;&lt;p1;
	p2=Faku(b2);	cout&lt;&lt;&quot;\nk!= &quot;&lt;&lt;p2;
	b3=b1-b2;
	p3=Faku(b3);
	p4=p2*p3;	cout&lt;&lt;&quot;\nk!*(n-k)!= &quot;&lt;&lt;p4;
	erg = p1 / p4;	cout&lt;&lt;&quot;\nerg= &quot;&lt;&lt;erg;
	return p1;
	}
</code></pre>
<pre><code class="language-cpp">RossiBigInt Binkof ( unsigned long b1, unsigned long b2)
	{
	unsigned long b3, b4;
	RossiBigInt p1(1), p2(0), erg (0);

	b3= b1-b2;
	if (b3&lt;b2){b4=b2;} else{b4=b3;b3=b2;}	        cout &lt;&lt;&quot;\tb4= &quot;&lt;&lt;b4&lt;&lt;&quot; b3= &quot;&lt;&lt;b3;
	for (unsigned long x=b4+1;x&lt;b1+1;x++){		cout &lt;&lt;&quot;\nx= &quot;&lt;&lt;x;
		p1=p1 * x;
		}	cout&lt;&lt;&quot;\np1= &quot;&lt;&lt;p1;
	p2=Faku(b3);	cout&lt;&lt;&quot;\np2= &quot;&lt;&lt;p2;
	erg=p1 /p2;	cout&lt;&lt;&quot;\nerg= &quot;&lt;&lt;erg;
	 return erg;
	}
</code></pre>
<p>Die Faku Funktion:</p>
<pre><code class="language-cpp">RossiBigInt Faku(unsigned long f)
	{
	RossiBigInt erg(1);
	RossiBigInt t(0);
	for (int x=0;x&lt;f;x++){
		t++;
		erg=erg*t; 
		}
	return erg;
	}
</code></pre>
<p>Ich habe WinXP prof und benutze VS2005 prof</p>
<p>Hat jemand eine Idee. Wäre echt super wenn mir jemand einen Tipp geben kann.</p>
<p>Dankeschön schon mal im Vorraus</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1438850</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1438850</guid><dc:creator><![CDATA[amsel]]></dc:creator><pubDate>Fri, 18 Jan 2008 09:30:47 GMT</pubDate></item><item><title><![CDATA[Reply to RossiBigInt on Sat, 19 Jan 2008 12:56:52 GMT]]></title><description><![CDATA[<p>Dieses RossiBigInt hat einen Bug beim Subtrahieren. Und das Subtrahieren wird beim Dividieren aufgerufen. Dieser Fehler tritt bereits bei dem mitgelieferten Testtool auf.... komisch, dass das der Autor nicht bemerkt hat.</p>
<p>Aber vielleicht hilft Dir <a href="http://www.c-plusplus.net/forum/viewtopic-var-t-is-202925-and-highlight-is-binokoeff.html" rel="nofollow">dieser Thread</a> weiter, dort findest Du eine Berechnung, die im Allgemeinen mit ints auskommt.</p>
<p>Gruß<br />
Werner</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1439422</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1439422</guid><dc:creator><![CDATA[Werner Salomon]]></dc:creator><pubDate>Sat, 19 Jan 2008 12:56:52 GMT</pubDate></item><item><title><![CDATA[Reply to RossiBigInt on Sun, 20 Jan 2008 08:11:58 GMT]]></title><description><![CDATA[<p>Danke für die Antwort.</p>
<p>Ich habe dem Autor auch von dem Problem geschrieben. Er hat mir geantwortet, dass meine Funktion bei ihm unter GNU go++ 4.0.1 mit windows 2000 funktioniert. Er vermutet das es ein Problem vom Compiler ist. Er schlägt mir vor den Stack Größe zu erhöhen.</p>
<p>Die in dem anderen Thread vorgeschlagene Version mit kleineren Zahlen habe ich auch umgesetzt. Da tritt das Problem teilweise bei anderen Zahlen auf.</p>
<p>Ich werde mir die dort Vorgeschlagene GMP Bibliothek anschauen. Doch kann man die Stack größe vergrößern, wenn ja wie?</p>
<p>Gruß<br />
amsel</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1439756</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1439756</guid><dc:creator><![CDATA[amsel]]></dc:creator><pubDate>Sun, 20 Jan 2008 08:11:58 GMT</pubDate></item><item><title><![CDATA[Reply to RossiBigInt on Sun, 20 Jan 2008 13:48:56 GMT]]></title><description><![CDATA[<p>amsel schrieb:</p>
<blockquote>
<p>Ich habe dem Autor auch von dem Problem geschrieben. Er hat mir geantwortet, dass meine Funktion bei ihm unter GNU go++ 4.0.1 mit windows 2000 funktioniert. Er vermutet das es ein Problem vom Compiler ist.</p>
</blockquote>
<p>Ja - der Unterschied besteht darin, dass die Implementierung der GNU-STL wohl nicht merkt, dass der vector überläuft. Er schreibt außerhalb des allokierten Speichers. Solange da keine relevanten Daten stehen, fällt es natürlich nicht auf.</p>
<p>Folgendes triviale Programm generiert den Fehler:</p>
<pre><code class="language-cpp">#include &lt;limits&gt;
#include &quot;bigint.h&quot;

int main()
{
    using namespace std;
    RossiBigInt a(1);
    RossiBigInt b( numeric_limits&lt; unsigned long &gt;::max() );
    b = b * b;  // RossiBigInt kennt kein operator*= !?
    b -= a;  // hier wird in nicht allokierten Speicher hineingeschrieben!
    return 0;
}
</code></pre>
<p>Das mit dem 'Stack vergrößern' ist dementsprechend Quatsch.</p>
<p>Gruß<br />
Werner</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1439902</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1439902</guid><dc:creator><![CDATA[Werner Salomon]]></dc:creator><pubDate>Sun, 20 Jan 2008 13:48:56 GMT</pubDate></item></channel></rss>