<?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[Iteration reele Zahlen mit 0,1]]></title><description><![CDATA[<p>Hallo <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f60e.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--smiling_face_with_sunglasses"
      title="8)"
      alt="😎"
    /></p>
<p>Welche Probleme bringt eine Iteration über reellen Zahlen mit sich, z.B. das Durchlaufen einer Schleife von -4,3 bis 19,6 in Schritten von 0,1?</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/205386/iteration-reele-zahlen-mit-0-1</link><generator>RSS for Node</generator><lastBuildDate>Fri, 09 Oct 2026 03:03:51 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/205386.rss" rel="self" type="application/rss+xml"/><pubDate>Wed, 13 Feb 2008 19:02:56 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Iteration reele Zahlen mit 0,1 on Wed, 13 Feb 2008 19:02:56 GMT]]></title><description><![CDATA[<p>Hallo <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f60e.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--smiling_face_with_sunglasses"
      title="8)"
      alt="😎"
    /></p>
<p>Welche Probleme bringt eine Iteration über reellen Zahlen mit sich, z.B. das Durchlaufen einer Schleife von -4,3 bis 19,6 in Schritten von 0,1?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1455300</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1455300</guid><dc:creator><![CDATA[MarcR]]></dc:creator><pubDate>Wed, 13 Feb 2008 19:02:56 GMT</pubDate></item><item><title><![CDATA[Reply to Iteration reele Zahlen mit 0,1 on Wed, 13 Feb 2008 19:12:34 GMT]]></title><description><![CDATA[<p>eigentlich keine. müsstest nur einen float oder double nehmen</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1455306</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1455306</guid><dc:creator><![CDATA[qqqqq]]></dc:creator><pubDate>Wed, 13 Feb 2008 19:12:34 GMT</pubDate></item><item><title><![CDATA[Reply to Iteration reele Zahlen mit 0,1 on Wed, 13 Feb 2008 19:14:50 GMT]]></title><description><![CDATA[<p>Dass keine deiner Zahlen als float oder double exakt darstellbar ist. Du wirst also nicht genau bei 19,6 bzw. der Zahl, die dein Rechner für 19,6 hält ankommen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1455309</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1455309</guid><dc:creator><![CDATA[Bashar]]></dc:creator><pubDate>Wed, 13 Feb 2008 19:14:50 GMT</pubDate></item><item><title><![CDATA[Reply to Iteration reele Zahlen mit 0,1 on Wed, 13 Feb 2008 19:17:21 GMT]]></title><description><![CDATA[<p>ah danke Bashar.</p>
<p>Aber kannst du mir das etwas genauer erklären, würde mich freuen 8).</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1455314</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1455314</guid><dc:creator><![CDATA[MarcR]]></dc:creator><pubDate>Wed, 13 Feb 2008 19:17:21 GMT</pubDate></item><item><title><![CDATA[Reply to Iteration reele Zahlen mit 0,1 on Wed, 13 Feb 2008 19:35:11 GMT]]></title><description><![CDATA[<p>MarcR schrieb:</p>
<blockquote>
<p>ah danke Bashar.</p>
<p>Aber kannst du mir das etwas genauer erklären, würde mich freuen 8).</p>
</blockquote>
<p>0.1 ist im Dualsystem eine periodischer Bruch. Da der Computer nicht unendlich viele Stellen darstellen kann, muss er runden. Also kommt es zu rundungsfehlern beim rechnen mit 0.1.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1455319</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1455319</guid><dc:creator><![CDATA[[[global:guest]]]]></dc:creator><pubDate>Wed, 13 Feb 2008 19:35:11 GMT</pubDate></item><item><title><![CDATA[Reply to Iteration reele Zahlen mit 0,1 on Wed, 13 Feb 2008 20:06:16 GMT]]></title><description><![CDATA[<p>ah danke.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1455354</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1455354</guid><dc:creator><![CDATA[MarcR]]></dc:creator><pubDate>Wed, 13 Feb 2008 20:06:16 GMT</pubDate></item><item><title><![CDATA[Reply to Iteration reele Zahlen mit 0,1 on Wed, 13 Feb 2008 22:11:02 GMT]]></title><description><![CDATA[<p>Ein beliebtes Umgehen davon ist übrigens, bei Fließkommawerten nicht auf Gleichheit zu testen (a==b), sondern zu prüfen, ob die beiden sich nur winzig bisschen unterscheiden ( abs(a-b) &lt; 0.00001 ).</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1455485</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1455485</guid><dc:creator><![CDATA[Badestrand]]></dc:creator><pubDate>Wed, 13 Feb 2008 22:11:02 GMT</pubDate></item><item><title><![CDATA[Reply to Iteration reele Zahlen mit 0,1 on Thu, 14 Feb 2008 08:53:51 GMT]]></title><description><![CDATA[<p>Badestrand schrieb:</p>
<blockquote>
<p>Ein beliebtes Umgehen davon ist übrigens, bei Fließkommawerten nicht auf Gleichheit zu testen (a==b), sondern zu prüfen, ob die beiden sich nur winzig bisschen unterscheiden ( abs(a-b) &lt; 0.00001 ).</p>
</blockquote>
<p>Das Funktioniert aber nur bei kurzen berechnungen mit Zahlen, die alle ungefähr die selbe Größenordnung haben. Bei beliebig großen Zahlen und beliebig langen rechnungen ist der Fehler, der auftritt beliebig groß.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1455619</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1455619</guid><dc:creator><![CDATA[[[global:guest]]]]></dc:creator><pubDate>Thu, 14 Feb 2008 08:53:51 GMT</pubDate></item><item><title><![CDATA[Reply to Iteration reele Zahlen mit 0,1 on Thu, 14 Feb 2008 08:55:30 GMT]]></title><description><![CDATA[<p>Oder aber man arbeitet mit ints und teilt diese, wenn sie benötigt werden, durch 10. So ist zumindest die Iteration an sich kein Problem mehr.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1455620</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1455620</guid><dc:creator><![CDATA[Fellhuhn]]></dc:creator><pubDate>Thu, 14 Feb 2008 08:55:30 GMT</pubDate></item><item><title><![CDATA[Reply to Iteration reele Zahlen mit 0,1 on Thu, 14 Feb 2008 09:11:33 GMT]]></title><description><![CDATA[<p>Fellhuhn schrieb:</p>
<blockquote>
<p>Oder aber man arbeitet mit ints und teilt diese, wenn sie benötigt werden, durch 10. So ist zumindest die Iteration an sich kein Problem mehr.</p>
</blockquote>
<p>Oder: Wenn man mit gleitkommazahlen Arbeitet, kann man unter umständen auch vorher ausrechnen, wie viele Schritte man benötigt und dann in der Schleife mit einer Integer-Variablen zählen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1455630</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1455630</guid><dc:creator><![CDATA[[[global:guest]]]]></dc:creator><pubDate>Thu, 14 Feb 2008 09:11:33 GMT</pubDate></item><item><title><![CDATA[Reply to Iteration reele Zahlen mit 0,1 on Thu, 14 Feb 2008 19:02:30 GMT]]></title><description><![CDATA[<p>Die Probleme, die bei der Iteration von Fließkommazahlen auftreten, wurden ja schon erläutert. Die schulmäßige Lösung für dieses Rundungsproblem sieht so aus, dass immer eine Integer-Variable inkrementiert wird und die gewünschte Fließkommazahl jedesmal neu berechnet wird, um die Akkumulation der Rundungsfehler zu vermeiden.</p>
<pre><code class="language-cpp">double von = -4.3;
    double bis = 19.6;
    double step = 0.1;
    double x;
    for( int iStep = 0; (x = von + iStep * step) &lt;= bis; ++iStep )
    {
        // mache was mit x
    }
</code></pre>
<p>man kann sich hier auch nicht darauf verlassen, dass x als letzen Wert den Wert 19.6 erreicht - bei diesem Zahlenbeispiel ist es nicht so. Das liegt daran, dass der interne Wert von 19.5 (kann noch exakt dargestellt werden) + 0.1 eben nicht identisch 19.6 ist. Hier schlägt bereits der Rundungsfehler zu.</p>
<p>Wenn man sicher ist, dass es sich bei [von, bis] um ein geschlossenes Intervall handelt und der letze Wert (bis = 19.6) noch sicher erreicht werden soll, so sollte man die obere Grenze um step/2 nach oben schieben - also</p>
<pre><code class="language-cpp">for( int iStep = 0; (x = von + iStep * step) &lt; (bis + step/2); ++iStep )
</code></pre>
<p>Gruß<br />
Werner</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1456073</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1456073</guid><dc:creator><![CDATA[Werner Salomon]]></dc:creator><pubDate>Thu, 14 Feb 2008 19:02:30 GMT</pubDate></item></channel></rss>