<?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[Fibonacci-Reihen-Template]]></title><description><![CDATA[<p>Warum geht das bei großen Zahlen nicht mehr? Gibts da Überläufe oder ist das ein Fehler?</p>
<pre><code class="language-cpp">#include &lt;iostream&gt;

template&lt;unsigned num&gt;
struct FibonacciNumber {
    static unsigned const value;
    operator unsigned() const {
        return this-&gt;value;
    }
};
template&lt;unsigned num&gt; unsigned const FibonacciNumber&lt;num&gt;::value =
    FibonacciNumber&lt;num - 1&gt;::value + FibonacciNumber&lt;num - 2&gt;::value;
template&lt;&gt; unsigned const FibonacciNumber&lt;0&gt;::value = 0;
template&lt;&gt; unsigned const FibonacciNumber&lt;1&gt;::value = 1;

int main() {
    std::cout &lt;&lt; FibonacciNumber&lt;xxx&gt;() &lt;&lt; std::endl;
}
</code></pre>
<p>Wie kann man das besser machen?</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/157421/fibonacci-reihen-template</link><generator>RSS for Node</generator><lastBuildDate>Thu, 16 Apr 2026 21:39:36 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/157421.rss" rel="self" type="application/rss+xml"/><pubDate>Fri, 25 Aug 2006 14:36:21 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Fibonacci-Reihen-Template on Fri, 25 Aug 2006 14:36:21 GMT]]></title><description><![CDATA[<p>Warum geht das bei großen Zahlen nicht mehr? Gibts da Überläufe oder ist das ein Fehler?</p>
<pre><code class="language-cpp">#include &lt;iostream&gt;

template&lt;unsigned num&gt;
struct FibonacciNumber {
    static unsigned const value;
    operator unsigned() const {
        return this-&gt;value;
    }
};
template&lt;unsigned num&gt; unsigned const FibonacciNumber&lt;num&gt;::value =
    FibonacciNumber&lt;num - 1&gt;::value + FibonacciNumber&lt;num - 2&gt;::value;
template&lt;&gt; unsigned const FibonacciNumber&lt;0&gt;::value = 0;
template&lt;&gt; unsigned const FibonacciNumber&lt;1&gt;::value = 1;

int main() {
    std::cout &lt;&lt; FibonacciNumber&lt;xxx&gt;() &lt;&lt; std::endl;
}
</code></pre>
<p>Wie kann man das besser machen?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1124495</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1124495</guid><dc:creator><![CDATA[templäyder]]></dc:creator><pubDate>Fri, 25 Aug 2006 14:36:21 GMT</pubDate></item><item><title><![CDATA[Reply to Fibonacci-Reihen-Template on Fri, 25 Aug 2006 14:40:00 GMT]]></title><description><![CDATA[<p>das liegt an den vielen aufrufen.<br />
und es ist lösbar.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1124502</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1124502</guid><dc:creator><![CDATA[volkard]]></dc:creator><pubDate>Fri, 25 Aug 2006 14:40:00 GMT</pubDate></item><item><title><![CDATA[Reply to Fibonacci-Reihen-Template on Fri, 25 Aug 2006 15:48:46 GMT]]></title><description><![CDATA[<p>ich glaub, der compiler compiliert sich da tot, da da so viele templateinstanzierungen sind. Metaprogrammierung is eben nur was für die ganz harten compiler. Wenn du unbedingt den Wert der Zahl schon vor der laufzeit haben willst, berechne sie doch vorher mit nem programm und füg sie in deinen quelltext ein. Oder wozu braucht man sonst dieses konstrukt?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1124562</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1124562</guid><dc:creator><![CDATA[Maxi]]></dc:creator><pubDate>Fri, 25 Aug 2006 15:48:46 GMT</pubDate></item><item><title><![CDATA[Reply to Fibonacci-Reihen-Template on Sat, 26 Aug 2006 12:15:33 GMT]]></title><description><![CDATA[<blockquote>
<p>ich glaub, der compiler compiliert sich da tot, da da so viele templateinstanzierungen sind. Metaprogrammierung is eben nur was für die ganz harten compiler. Wenn du unbedingt den Wert der Zahl schon vor der laufzeit haben willst, berechne sie doch vorher mit nem programm und füg sie in deinen quelltext ein. Oder wozu braucht man sonst dieses konstrukt?</p>
</blockquote>
<p>Nein. Dieses Vorgehen halte ich für sehr umständlich und riskant. Durch das manuelle Einfügen in den Quelltext wird eine unnötige Fehlerquelle gemacht.</p>
<p>Die Lösung via Metaprogrammierung finde ich deutlich ansprechender. Zurück zu dem Problem. Der Compiler beschwärt sich mit folgender Meldung:</p>
<blockquote>
<p>main.cpp:10: error: template instantiation depth exceeds maximum of 500 (use<br />
-ftemplate-depth-NN to increase the maximum)</p>
</blockquote>
<p>Ich denke der Fehler wird dadurch selbsterkälrend. Der Aufruf</p>
<p>g++ -ftemplate-depth-1000 main.cpp</p>
<p>erhöht die Verschachtelungstiefe und es tritt kein Fehler mehr auf. Jeder gute Compiler sollte ein solches Parameter besitzen mitdem sich die Schachtelungstiefe einstellen lässt.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1124884</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1124884</guid><dc:creator><![CDATA[[[global:guest]]]]></dc:creator><pubDate>Sat, 26 Aug 2006 12:15:33 GMT</pubDate></item><item><title><![CDATA[Reply to Fibonacci-Reihen-Template on Sun, 27 Aug 2006 13:40:44 GMT]]></title><description><![CDATA[<p>Wie wär's mit</p>
<pre><code class="language-cpp">template &lt;int a, int b, int n&gt;
struct Fibonacci
{
  enum { value = Fibonacci&lt;b, a+b, n-1&gt;::value;}
};

template &lt;int a, int b&gt;
struct Fibonacci&lt;a,b,0&gt;
{
  enum { value = b; }
};
</code></pre>
<p>Ungetestet und vermutlich falsch. Dafür braucht's nur lineare Instanziierungtiefe und nicht exponentiell. Mag wer den Code so reparieren, daß er auch funktioniert?</p>
<p>edit: Aufruf: Fibonacci&lt;1,1, 7&gt;::value liefert die 7-te Fibonaccizahl.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1125336</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1125336</guid><dc:creator><![CDATA[Jester]]></dc:creator><pubDate>Sun, 27 Aug 2006 13:40:44 GMT</pubDate></item><item><title><![CDATA[Reply to Fibonacci-Reihen-Template on Sun, 27 Aug 2006 17:07:45 GMT]]></title><description><![CDATA[<p>Als Programmier-Neuling verstehe ich zwar nur die Hälfte hier, aber wnen ich es richtig verstanden habe wird da etwas wegen der rekursiven Fibonacci Formel zuviel Verschachtelt, ist das korrekt?</p>
<p>Wenn ja kann man doch die explezite Fibonacci-Formel nutzen, oder wird dies durch irgendetwas verhindert (vielleicht durch die enthalten wurzeln oder so...)?</p>
<p><a href="http://www.ijon.de/mathe/fibonacci/formeln/img41.png" rel="nofollow">http://www.ijon.de/mathe/fibonacci/formeln/img41.png</a></p>
]]></description><link>https://www.c-plusplus.net/forum/post/1125563</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1125563</guid><dc:creator><![CDATA[Shinja]]></dc:creator><pubDate>Sun, 27 Aug 2006 17:07:45 GMT</pubDate></item><item><title><![CDATA[Reply to Fibonacci-Reihen-Template on Sun, 27 Aug 2006 17:40:20 GMT]]></title><description><![CDATA[<p>lucky_tux schrieb:</p>
<blockquote>
<p>Die Lösung via Metaprogrammierung finde ich deutlich ansprechender.</p>
</blockquote>
<p>Wenn man sich die Kompilierzeit leisten kann.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1125605</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1125605</guid><dc:creator><![CDATA[Michael E.]]></dc:creator><pubDate>Sun, 27 Aug 2006 17:40:20 GMT</pubDate></item><item><title><![CDATA[Reply to Fibonacci-Reihen-Template on Sun, 27 Aug 2006 18:43:16 GMT]]></title><description><![CDATA[<p>Shinja schrieb:</p>
<blockquote>
<p>Als Programmier-Neuling verstehe ich zwar nur die Hälfte hier, aber wnen ich es richtig verstanden habe wird da etwas wegen der rekursiven Fibonacci Formel zuviel Verschachtelt, ist das korrekt?</p>
<p>Wenn ja kann man doch die explezite Fibonacci-Formel nutzen, oder wird dies durch irgendetwas verhindert (vielleicht durch die enthalten wurzeln oder so...)?</p>
<p><a href="http://www.ijon.de/mathe/fibonacci/formeln/img41.png" rel="nofollow">http://www.ijon.de/mathe/fibonacci/formeln/img41.png</a></p>
</blockquote>
<p>das geht ned gut, da c++ templates atm nur integer und typen nehmen dürfen</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1125656</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1125656</guid><dc:creator><![CDATA[ronny]]></dc:creator><pubDate>Sun, 27 Aug 2006 18:43:16 GMT</pubDate></item><item><title><![CDATA[Reply to Fibonacci-Reihen-Template on Sun, 27 Aug 2006 20:02:34 GMT]]></title><description><![CDATA[<p>r0nny schrieb:</p>
<blockquote>
<p>das geht ned gut, da c++ templates atm nur integer und typen nehmen dürfen</p>
</blockquote>
<p>das ist kein problem. wenn sich mathematiker die reellen zahlen aus <span class="katex"><span class="katex-mathml"><math><semantics><mrow><mrow><mi mathvariant="double-struck">N</mi></mrow></mrow><annotation encoding="application/x-tex">\mathbb{N}</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="strut" style="height:0.68889em;"></span><span class="strut bottom" style="height:0.68889em;vertical-align:0em;"></span><span class="base textstyle uncramped"><span class="mord textstyle uncramped"><span class="mord mathbb">N</span></span></span></span></span> basteln können, dann kann das ein geübter metaprogrammierer erst recht.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1125698</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1125698</guid><dc:creator><![CDATA[lamb&#x27;da]]></dc:creator><pubDate>Sun, 27 Aug 2006 20:02:34 GMT</pubDate></item><item><title><![CDATA[Reply to Fibonacci-Reihen-Template on Mon, 28 Aug 2006 07:01:48 GMT]]></title><description><![CDATA[<p>Es gibt eine Erweiterungen der Boost.MPL im Vault unter &quot;Template Metaprogramming&quot; -&gt; mpl_math.zip, die auch &quot;Reelle&quot; Zahlen versteht. Damit die explizite Formel zu berechnen ist aber wahrscheinlich (für die sinnvollen Zahlenbereiche) aufwendiger und langsamer als die lineare Version. Ich probiers mal.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1125871</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1125871</guid><dc:creator><![CDATA[.filmor]]></dc:creator><pubDate>Mon, 28 Aug 2006 07:01:48 GMT</pubDate></item></channel></rss>