<?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[Datentyp long ist zu klein...]]></title><description><![CDATA[<p>Hallo,</p>
<p>ich suche nach einer möglichst einfachen und eleganten Lösung für mein Problem.</p>
<p>Ich habe ein kleines Programm geschrieben, dass folgende Aufgabe lösen soll:</p>
<blockquote>
<p>Each new term in the Fibonacci sequence is generated by adding the previous two terms. By starting with 1 and 2, the first 10 terms will be:</p>
<p>1, 2, 3, 5, 8, 13, 21, 34, 55, 89, ...</p>
<p>By considering the terms in the Fibonacci sequence whose values do not exceed four million, find the sum of the even-valued terms.</p>
</blockquote>
<p>Hier ist mein Programm:</p>
<pre><code class="language-cpp">#include &lt;iostream&gt;

using namespace std;

int main()
{

    int zahl1 = 1;
    int zahl2 = 2;
    long fibonacci;
    long sum = 2; //2 wird in die summe miteinbezogen, in der schleife wird sie aber nicht errechnet, 2 ist gerade

    for (int i = 0; i &lt;= 4000000; i++)
    {
        fibonacci = zahl1 + zahl2;

        if (fibonacci % 2 == 0)
        {
            sum = sum + fibonacci; 
        }

        zahl1 = zahl2;
        zahl2 = fibonacci;
    }

    cout &lt;&lt; sum;

    return 0;
}
</code></pre>
<p>Allerdings werden die Zahlen so groß, dass sie nicht mehr in eine long passen.</p>
<p>Wisst ihr einen Workaround?</p>
<p>Danke für eure Hilfe</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/307985/datentyp-long-ist-zu-klein</link><generator>RSS for Node</generator><lastBuildDate>Thu, 06 Aug 2026 05:19:40 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/307985.rss" rel="self" type="application/rss+xml"/><pubDate>Tue, 11 Sep 2012 14:29:38 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Datentyp long ist zu klein... on Tue, 11 Sep 2012 14:29:38 GMT]]></title><description><![CDATA[<p>Hallo,</p>
<p>ich suche nach einer möglichst einfachen und eleganten Lösung für mein Problem.</p>
<p>Ich habe ein kleines Programm geschrieben, dass folgende Aufgabe lösen soll:</p>
<blockquote>
<p>Each new term in the Fibonacci sequence is generated by adding the previous two terms. By starting with 1 and 2, the first 10 terms will be:</p>
<p>1, 2, 3, 5, 8, 13, 21, 34, 55, 89, ...</p>
<p>By considering the terms in the Fibonacci sequence whose values do not exceed four million, find the sum of the even-valued terms.</p>
</blockquote>
<p>Hier ist mein Programm:</p>
<pre><code class="language-cpp">#include &lt;iostream&gt;

using namespace std;

int main()
{

    int zahl1 = 1;
    int zahl2 = 2;
    long fibonacci;
    long sum = 2; //2 wird in die summe miteinbezogen, in der schleife wird sie aber nicht errechnet, 2 ist gerade

    for (int i = 0; i &lt;= 4000000; i++)
    {
        fibonacci = zahl1 + zahl2;

        if (fibonacci % 2 == 0)
        {
            sum = sum + fibonacci; 
        }

        zahl1 = zahl2;
        zahl2 = fibonacci;
    }

    cout &lt;&lt; sum;

    return 0;
}
</code></pre>
<p>Allerdings werden die Zahlen so groß, dass sie nicht mehr in eine long passen.</p>
<p>Wisst ihr einen Workaround?</p>
<p>Danke für eure Hilfe</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2250321</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2250321</guid><dc:creator><![CDATA[geruetzel]]></dc:creator><pubDate>Tue, 11 Sep 2012 14:29:38 GMT</pubDate></item><item><title><![CDATA[Reply to Datentyp long ist zu klein... on Tue, 11 Sep 2012 14:32:47 GMT]]></title><description><![CDATA[<p>unsigned<br />
bzw.<br />
unsigned long long / unsigned __int64</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2250322</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2250322</guid><dc:creator><![CDATA[Shade Of Mine]]></dc:creator><pubDate>Tue, 11 Sep 2012 14:32:47 GMT</pubDate></item><item><title><![CDATA[Reply to Datentyp long ist zu klein... on Tue, 11 Sep 2012 14:34:10 GMT]]></title><description><![CDATA[<p>Hallo geruetzel,</p>
<p>long ist auf jeden Fall groß genug, denn sein Wertebereich lieg zwischen - und +2.1 Milliarden. Der Fehler bei dir liegt darin, dass du in der Schleife nicht überprüfst, ob die Fibonacci-Zahl kleiner 4M io ist, sondern die Schleife vier Millionen mal durchführst - da wird nämlich auch der long zu klein.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2250323</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2250323</guid><dc:creator><![CDATA[*Rewind*]]></dc:creator><pubDate>Tue, 11 Sep 2012 14:34:10 GMT</pubDate></item><item><title><![CDATA[Reply to Datentyp long ist zu klein... on Tue, 11 Sep 2012 14:37:20 GMT]]></title><description><![CDATA[<p><a class="plugin-mentions-user plugin-mentions-a" href="https://www.c-plusplus.net/forum/uid/29486">@geruetzel</a>: Yeah, Project Euler. <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f642.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--slightly_smiling_face"
      title=":)"
      alt="🙂"
    /><br />
Lange wird es übrigens nicht mehr dauern, bis da Aufgaben kommen, bei denen du auch mit Zahlen bis 2^64 nicht mehr hinkommst. <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>
]]></description><link>https://www.c-plusplus.net/forum/post/2250325</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2250325</guid><dc:creator><![CDATA[Dobi]]></dc:creator><pubDate>Tue, 11 Sep 2012 14:37:20 GMT</pubDate></item><item><title><![CDATA[Reply to Datentyp long ist zu klein... on Tue, 11 Sep 2012 14:37:22 GMT]]></title><description><![CDATA[<p>@ Shade Of Mine - Danke <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f642.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--slightly_smiling_face"
      title=":)"
      alt="🙂"
    /></p>
<p>@ [Rewind] - Danke dir auch, ja das ist natürlich ein gravierender Denkfehler <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f642.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--slightly_smiling_face"
      title=":)"
      alt="🙂"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/2250326</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2250326</guid><dc:creator><![CDATA[geruetzel]]></dc:creator><pubDate>Tue, 11 Sep 2012 14:37:22 GMT</pubDate></item><item><title><![CDATA[Reply to Datentyp long ist zu klein... on Tue, 11 Sep 2012 14:40:43 GMT]]></title><description><![CDATA[<p>wäre es hier besser mit einer do while schleife zu arbeiten?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2250327</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2250327</guid><dc:creator><![CDATA[geruetzel]]></dc:creator><pubDate>Tue, 11 Sep 2012 14:40:43 GMT</pubDate></item><item><title><![CDATA[Reply to Datentyp long ist zu klein... on Tue, 11 Sep 2012 15:22:42 GMT]]></title><description><![CDATA[<p>Ja, wäre auf jeden Fall eleganter.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2250346</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2250346</guid><dc:creator><![CDATA[*Rewind*]]></dc:creator><pubDate>Tue, 11 Sep 2012 15:22:42 GMT</pubDate></item><item><title><![CDATA[Reply to Datentyp long ist zu klein... on Tue, 11 Sep 2012 17:18:42 GMT]]></title><description><![CDATA[<p>edit: unnötiger post <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=";D"
      alt="😉"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/2250396</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2250396</guid><dc:creator><![CDATA[geruetzel]]></dc:creator><pubDate>Tue, 11 Sep 2012 17:18:42 GMT</pubDate></item><item><title><![CDATA[Reply to Datentyp long ist zu klein... on Tue, 11 Sep 2012 17:20:37 GMT]]></title><description><![CDATA[<pre><code class="language-cpp">while ( fibonacci &lt; 4000000) {
        fibonacci = zahl1 + zahl2;

        [...]

    }
</code></pre>
<p>Allerdings musst du fibonacci vorher initialisieren (z.B. mit 0).</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2250397</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2250397</guid><dc:creator><![CDATA[*Rewind*]]></dc:creator><pubDate>Tue, 11 Sep 2012 17:20:37 GMT</pubDate></item><item><title><![CDATA[Reply to Datentyp long ist zu klein... on Tue, 11 Sep 2012 17:37:00 GMT]]></title><description><![CDATA[<pre><code class="language-cpp">int main()
{

    int zahl1 = 1;
    int zahl2 = 2;
    long fibonacci = 0;
    long sum = 2; //2 wird in die summe miteinbezogen, in der schleife wird sie aber nicht errechnet, 2 ist gerade

    while ( fibonacci &lt;= 4000000 )
    {
        fibonacci = zahl1 + zahl2;

        if ( fibonacci % 2 == 0 )
        {
            sum = sum + fibonacci;
            cout &lt;&lt; fibonacci &lt;&lt; endl;
        }

        zahl1 = zahl2;
        zahl2 = fibonacci;

    }

    cout &lt;&lt; sum;

    return 0;
}
</code></pre>
<p>So sieht der Code jetzt aus <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f642.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--slightly_smiling_face"
      title=":)"
      alt="🙂"
    /></p>
<p>Allerdings wird der zahl sum noch eine Zahl über 4 Mio. hinzugefügt...<br />
Ich sehe den Fehler einfach nicht...</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2250401</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2250401</guid><dc:creator><![CDATA[geruetzel]]></dc:creator><pubDate>Tue, 11 Sep 2012 17:37:00 GMT</pubDate></item><item><title><![CDATA[Reply to Datentyp long ist zu klein... on Tue, 11 Sep 2012 17:49:39 GMT]]></title><description><![CDATA[<p>geruetzel schrieb:</p>
<blockquote>
<p>Allerdings wird der zahl sum noch eine Zahl über 4 Mio. hinzugefügt...<br />
Ich sehe den Fehler einfach nicht...</p>
</blockquote>
<p>Gehe den Code mal Schritt für Schritt durch: Solange fibonacci höchstens 4 Mio. ist, vergrößere fibonacci (wie groß kann fibonacci jetzt sein?) und addiere es zur Summe, falls es gerade ist.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2250406</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2250406</guid><dc:creator><![CDATA[Michael E.]]></dc:creator><pubDate>Tue, 11 Sep 2012 17:49:39 GMT</pubDate></item><item><title><![CDATA[Reply to Datentyp long ist zu klein... on Tue, 11 Sep 2012 18:01:46 GMT]]></title><description><![CDATA[<p>Ups, ich habe gerade bemerkt, dass die über 4 Millionen große Zahl die ausgegebene Summe ist <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f61e.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--disappointed_face"
      title=":("
      alt="😞"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/2250407</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2250407</guid><dc:creator><![CDATA[geruetzel]]></dc:creator><pubDate>Tue, 11 Sep 2012 18:01:46 GMT</pubDate></item><item><title><![CDATA[Reply to Datentyp long ist zu klein... on Wed, 12 Sep 2012 11:01:15 GMT]]></title><description><![CDATA[<p>Dann hast du lediglich Glück, dass die erste Fibonaccizahl &gt; 4 Mio. ungerade ist.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2250590</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2250590</guid><dc:creator><![CDATA[Michael E.]]></dc:creator><pubDate>Wed, 12 Sep 2012 11:01:15 GMT</pubDate></item><item><title><![CDATA[Reply to Datentyp long ist zu klein... on Wed, 12 Sep 2012 11:06:25 GMT]]></title><description><![CDATA[<p>geruetzel schrieb:</p>
<blockquote>
<p>Ups, ich habe gerade bemerkt, dass die über 4 Millionen große Zahl die ausgegebene Summe ist <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f61e.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--disappointed_face"
      title=":("
      alt="😞"
    /></p>
</blockquote>
<p>So ein Zufall <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f642.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--slightly_smiling_face"
      title=":)"
      alt="🙂"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/2250592</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2250592</guid><dc:creator><![CDATA[camper]]></dc:creator><pubDate>Wed, 12 Sep 2012 11:06:25 GMT</pubDate></item><item><title><![CDATA[Reply to Datentyp long ist zu klein... on Wed, 12 Sep 2012 12:08:30 GMT]]></title><description><![CDATA[<p>Obligatorischer Einwurf: Mathematik! \o/</p>
<pre><code class="language-cpp">#include &lt;cmath&gt;
#include &lt;iostream&gt;

double const phi = (1 + std::sqrt(5)) / 2;

int fib(int n) {
  return static_cast&lt;int&gt;(std::pow(phi, n) / std::sqrt(5) + .5);
}

int main(void) {
  int const N = 4000000;
  double const phi = (1 + std::sqrt(5)) / 2;

  int n = static_cast&lt;int&gt;(std::log(std::sqrt(5) * N) / std::log(phi));

  std::cout &lt;&lt; n &lt;&lt; &quot;te Fib-Zahl (&quot; &lt;&lt; fib(n) &lt;&lt; &quot;) ist die letzte &lt; &quot; &lt;&lt; N &lt;&lt; '\n';

  int sum = (fib(n) + fib(n + 1) - 1) / 2;

  std::cout &lt;&lt; &quot;Summe der geraden Fib-Zahlen kleiner &quot; &lt;&lt; N &lt;&lt; &quot;: &quot; &lt;&lt; sum &lt;&lt; '\n';
}
</code></pre>
<p>Beweis:</p>
<p>Definiere S(n) = Summe aller geraden Fibonacci-Zahlen unter den ersten n. Behauptung: S(n) = (f(n) + f(n + 1) - 1) / 2</p>
<p>f(0) = S(0) = (f(0) + f(1) - 1) / 2 = (0 + 1 - 1) / 2 ist trivial.</p>
<p>Induktion:</p>
<p>Sei S(n) = (f(n) + f(n + 1) - 1) / 2 vorausgesetzt, so ist</p>
<p>S(n + 3) = (f(n + 3) + f(n + 4) - 1) / 2</p>
<p>zu zeigen. Da</p>
<p>f(n + 3) = f(n) + 2 * f(n + 1)<br />
f(n + 4) = 2 * f(n) + 3 * f(n + 1)</p>
<p>ist</p>
<p>(f(n + 3) + f(n + 4) - 1) / 2 = (3 * f(n) + 4 * f(n + 1) - 1) / 2 = (2 * f(n) + 4 * f(n)) / 2 + S(n) = f(n) + 2 * f(n) + S(n) = f(n + 3) + S(n) = S(n + 3)</p>
<p>q.e.d.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2250619</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2250619</guid><dc:creator><![CDATA[seldon]]></dc:creator><pubDate>Wed, 12 Sep 2012 12:08:30 GMT</pubDate></item><item><title><![CDATA[Reply to Datentyp long ist zu klein... on Wed, 12 Sep 2012 14:05:18 GMT]]></title><description><![CDATA[<p>seldon schrieb:</p>
<blockquote>
<p>Obligatorischer Einwurf: Mathematik! \o/</p>
<pre><code class="language-cpp">#include &lt;cmath&gt;
#include &lt;iostream&gt;

double const phi = (1 + std::sqrt(5)) / 2;

int fib(int n) {
  return static_cast&lt;int&gt;(std::pow(phi, n) / std::sqrt(5) + .5);
}

int main(void) {
  int const N = 4000000;
  double const phi = (1 + std::sqrt(5)) / 2;

  int n = static_cast&lt;int&gt;(std::log(std::sqrt(5) * N) / std::log(phi));

  std::cout &lt;&lt; n &lt;&lt; &quot;te Fib-Zahl (&quot; &lt;&lt; fib(n) &lt;&lt; &quot;) ist die letzte &lt; &quot; &lt;&lt; N &lt;&lt; '\n';

  int sum = (fib(n) + fib(n + 1) - 1) / 2;

  std::cout &lt;&lt; &quot;Summe der geraden Fib-Zahlen kleiner &quot; &lt;&lt; N &lt;&lt; &quot;: &quot; &lt;&lt; sum &lt;&lt; '\n';
}
</code></pre>
</blockquote>
<p>Ein schöner Ansatz. Ich will nicht überkritisch sein, aber die globale Variable ist überflüssig. Die gibt's ja einzig und allein für die Funktion, die die Variable aber auch als Übergabeparameter bekommen kann, da sie ja nochmals in der main deklariert wird. Sonst <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f44d.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--thumbs_up"
      title=":+1:"
      alt="👍"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/2250674</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2250674</guid><dc:creator><![CDATA[*Rewind*]]></dc:creator><pubDate>Wed, 12 Sep 2012 14:05:18 GMT</pubDate></item><item><title><![CDATA[Reply to Datentyp long ist zu klein... on Wed, 12 Sep 2012 14:12:34 GMT]]></title><description><![CDATA[<p>Das ist eine Konstante, keine Variable. Globale Konstanten sind idR unproblematisch. Dass sie in der main nochmal definiert wird, ist ein Versehen.</p>
<p>Allerdings fällt mir grad noch auf, dass das nur funktioniert, wenn n = die Zahl der größten <em>geraden</em> Fibo-Zahl kleiner N ist, und dass ich das nirgendwo prüfe. In diesem Fall ist f(33) gerade, also funktioniert das, aber für andere Grenzen müsste man das noch reincoden.</p>
<p>Das sei als Übungsaufgabe interessierten Lesern vorbehalten. <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>
]]></description><link>https://www.c-plusplus.net/forum/post/2250678</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2250678</guid><dc:creator><![CDATA[seldon]]></dc:creator><pubDate>Wed, 12 Sep 2012 14:12:34 GMT</pubDate></item></channel></rss>