<?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[dumme frage...]]></title><description><![CDATA[<p>in der hoffnung, dass ich da nur nen dummen fehler gemacht hab, den ich - warum auch immer - nicht sehe:</p>
<p>if((Differenz==0,11)||(Differenz==0,33)||(Differenz==0,55)||(Differenz==0,77)||(Differenz==0,99))</p>
<p>aus irgend einem grund wird die bedingung immer als wahr angesehen. was mach ich falsch? (Differenz = floatVariable)</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/193300/dumme-frage</link><generator>RSS for Node</generator><lastBuildDate>Sun, 27 Sep 2026 22:31:37 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/193300.rss" rel="self" type="application/rss+xml"/><pubDate>Mon, 24 Sep 2007 19:24:20 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to dumme frage... on Mon, 24 Sep 2007 19:25:08 GMT]]></title><description><![CDATA[<p>in der hoffnung, dass ich da nur nen dummen fehler gemacht hab, den ich - warum auch immer - nicht sehe:</p>
<p>if((Differenz==0,11)||(Differenz==0,33)||(Differenz==0,55)||(Differenz==0,77)||(Differenz==0,99))</p>
<p>aus irgend einem grund wird die bedingung immer als wahr angesehen. was mach ich falsch? (Differenz = floatVariable)</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1371920</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1371920</guid><dc:creator><![CDATA[Corin]]></dc:creator><pubDate>Mon, 24 Sep 2007 19:25:08 GMT</pubDate></item><item><title><![CDATA[Reply to dumme frage... on Mon, 24 Sep 2007 19:30:52 GMT]]></title><description><![CDATA[<p><img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f644.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--face_with_rolling_eyes"
      title=":rolling_eyes:"
      alt="🙄"
    /> <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f644.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--face_with_rolling_eyes"
      title=":rolling_eyes:"
      alt="🙄"
    /> <em><strong>wirklich dumme frage</strong></em> <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f644.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--face_with_rolling_eyes"
      title=":rolling_eyes:"
      alt="🙄"
    /> <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f644.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--face_with_rolling_eyes"
      title=":rolling_eyes:"
      alt="🙄"
    /></p>
<pre><code class="language-asm">asm.a4s65d1a + as4d6a = dh1, mov:
A
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1371926</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1371926</guid><dc:creator><![CDATA[ffffffffffffffff]]></dc:creator><pubDate>Mon, 24 Sep 2007 19:30:52 GMT</pubDate></item><item><title><![CDATA[Reply to dumme frage... on Mon, 24 Sep 2007 19:33:30 GMT]]></title><description><![CDATA[<p>Ich sehe den Fehler nicht, hab auch keine Ahnung was mein Vorposter der Welt mitteilen wollte..</p>
<p>Und du bist wirklich sicher, dass die Variable vorher nicht einen dieser Werte annimmt?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1371929</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1371929</guid><dc:creator><![CDATA[Badestrand]]></dc:creator><pubDate>Mon, 24 Sep 2007 19:33:30 GMT</pubDate></item><item><title><![CDATA[Reply to dumme frage... on Mon, 24 Sep 2007 19:35:37 GMT]]></title><description><![CDATA[<p>Ist das nicht Teil vom BWINF?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1371931</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1371931</guid><dc:creator><![CDATA[langeweile]]></dc:creator><pubDate>Mon, 24 Sep 2007 19:35:37 GMT</pubDate></item><item><title><![CDATA[Reply to dumme frage... on Mon, 24 Sep 2007 19:41:56 GMT]]></title><description><![CDATA[<pre><code class="language-csharp">for(int i=0; i&lt;AnzahlPreise; i++)
  {
    int AnzahlMoeglich;
    AnzahlMoeglich = 0;
    for(int u=0; u&lt;AnzahlPreise; u++)
    {
      if(i!=u) 
      {
        float Summe, Differenz = 0;
        int Integer = 0;              

        Summe = Preise[i]+Preise[u];
        Integer = Preise[i]+Preise[u];
        Differenz = Summe - Integer;                                                                                                             
        if((Differenz==0,11)||(Differenz==0,33)||(Differenz==0,55)||(Differenz==0,77)||(Differenz==0,99))
        {
          Moeglich[i][u]=1; 
          AnzahlMoeglich++;
        }
      }
    Moeglich[i][i] = AnzahlMoeglich;       
    }

  }
</code></pre>
<p>so mal im weiteren zusammenhang... tut mir leid, wenns irgendwas dummes ist - aber ich find einfach den fehler nicht (bin vielleicht müde ^^)</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1371932</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1371932</guid><dc:creator><![CDATA[Corin]]></dc:creator><pubDate>Mon, 24 Sep 2007 19:41:56 GMT</pubDate></item><item><title><![CDATA[Reply to dumme frage... on Mon, 24 Sep 2007 19:46:21 GMT]]></title><description><![CDATA[<p>Wie wärs mit Debuggen?<br />
Im übrigen solltest du bei Gleitkommazahlen<br />
auf den Vergleich mit == verzichten.<br />
Da 2 gleiche Werte wegen Rundungsfehler<br />
ungleich erscheinen können!</p>
<p>//EDIT:</p>
<blockquote>
<p>Differenz==0,11</p>
</blockquote>
<p>Komma?<br />
<img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f615.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--confused_face"
      title=":confused:"
      alt="😕"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/1371936</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1371936</guid><dc:creator><![CDATA[Mario Sandler]]></dc:creator><pubDate>Mon, 24 Sep 2007 19:46:21 GMT</pubDate></item><item><title><![CDATA[Reply to dumme frage... on Mon, 24 Sep 2007 19:48:45 GMT]]></title><description><![CDATA[<p>Hallo</p>
<p>Viel schlimmer ist aber das</p>
<pre><code class="language-cpp">if (Differenz==0,11)
</code></pre>
<p>immer wahr ist. Denn in C++ müßen Fließkommazahlen im Quellcode mit . angegeben werden. Der ,-Operator hingegen trennt ztwei einzelne Anweisung, so das 11 als einzelne Anweisung interpretiert wird und damit die Bedingung immer wahr ist.</p>
<p>bis bald<br />
akari</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1371942</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1371942</guid><dc:creator><![CDATA[akari]]></dc:creator><pubDate>Mon, 24 Sep 2007 19:48:45 GMT</pubDate></item><item><title><![CDATA[Reply to dumme frage... on Mon, 24 Sep 2007 20:01:44 GMT]]></title><description><![CDATA[<p>geändert (also von komma auf punkt) ist kein wert mehr richtig (obwohl die zwischenergebnisse stimmen) - heißt das, dass der rundungsfehler immer auftaucht oder ist da noch irgendwas falsch?</p>
<p>hmm... ich versteh die rechenweise des computers nicht.<br />
0.33 * 100 müsste 33 sein und das müsste doch problemlos in eine integerzahl konvertiert werden können. stattdessen zeigt er mir 32 an. bei 0.55 allerdings funktionierts.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1371949</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1371949</guid><dc:creator><![CDATA[Corin]]></dc:creator><pubDate>Mon, 24 Sep 2007 20:01:44 GMT</pubDate></item><item><title><![CDATA[Reply to dumme frage... on Mon, 24 Sep 2007 20:06:12 GMT]]></title><description><![CDATA[<p>Hallo</p>
<p>Das Problem mit dem Rundungsfehler bekommst du nur in den Griff mit Vergleichen auf einen Bereich. Anstelle von</p>
<pre><code class="language-cpp">if (Differenz == 0.11)
</code></pre>
<p>must du eben schreiben</p>
<pre><code class="language-cpp">if (Differenz &gt; 0.109 &amp;&amp; Differenz &lt; 0.111)
</code></pre>
<p>Das ganze läßt sich natürlich noch in Funktionen kapseln, bis hin zu Templates für verschiedene Genauigkeiten.</p>
<blockquote>
<p>hmm... ich versteh die rechenweise des computers nicht.<br />
0.33 * 100 müsste 33 sein und das müsste doch problemlos in eine integerzahl konvertiert werden können. stattdessen zeigt er mir 32 an. bei 0.55 allerdings funktionierts.</p>
</blockquote>
<p>Das was du da so einfach hinschreibst ist für den Computer recht schwer. Merk dir einfach : Die eingebauten Fließkommatypen float und double sind nicht exakt wie int. Das liegt auch nicht an C++ sondern der Prozessor rechnet so. Für Details siehe übliche Quellen zum Thema Fließkommazahlen.</p>
<p>bis bald<br />
akari</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1371954</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1371954</guid><dc:creator><![CDATA[akari]]></dc:creator><pubDate>Mon, 24 Sep 2007 20:06:12 GMT</pubDate></item><item><title><![CDATA[Reply to dumme frage... on Mon, 24 Sep 2007 20:07:15 GMT]]></title><description><![CDATA[<p>Corin schrieb:</p>
<blockquote>
<p>geändert (also von komma auf punkt) ist kein wert mehr richtig (obwohl die zwischenergebnisse stimmen) - heißt das, dass der rundungsfehler immer auftaucht oder ist da noch irgendwas falsch?</p>
</blockquote>
<p>Da gibt's nicht nur Rundungsfehler, sondern die meisten Zahlen lassen sich logischerweise überhaupt gar nicht darstellen. Du musst also schauen ob der Betrag der Differenz kleiner als ein bestimmtes Epsilon ist um zu sehen ob die Zahlen &quot;gleich&quot; sind.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1371956</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1371956</guid><dc:creator><![CDATA[finix]]></dc:creator><pubDate>Mon, 24 Sep 2007 20:07:15 GMT</pubDate></item><item><title><![CDATA[Reply to dumme frage... on Mon, 24 Sep 2007 20:21:34 GMT]]></title><description><![CDATA[<p>hmm...<br />
hab das mal wie folgt gemacht:</p>
<pre><code class="language-csharp">Summe = Preise[i]+Preise[u];
        Integer = Preise[i]+Preise[u];
        Differenz = (Summe - Integer)*100;  

        Integer = int(Differenz+0.5);

        if((Integer==11)||(Integer==33)||(Integer==55)||(Integer==77)||(Integer==99))
</code></pre>
<p>scheint zu funktionieren (hab noch nicht so viel zeit gehabt zu testen, aber auf anhieb mal bekommen, was erwartet) - ist das ein bekannter fehler oder kann man das vielleicht stehen lassen?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1371970</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1371970</guid><dc:creator><![CDATA[Corin]]></dc:creator><pubDate>Mon, 24 Sep 2007 20:21:34 GMT</pubDate></item><item><title><![CDATA[Reply to dumme frage... on Mon, 24 Sep 2007 20:33:17 GMT]]></title><description><![CDATA[<p>Hallo</p>
<p>Das ist die übliche Art float in int zu runden (bei dir noch eine Verschiebung der Stellen). Dann funktionieren auch die Vergleiche im Rahmen der Genauigkeit. Du must dir natürlich im Klaren sein das Multiplizieren potentiell etwas ineffizienter ist als 2 Vergleiche.</p>
<p>Und nochmal, das ist kein Fehlverhalten sondern technisch Bedingte Eigenschaften.</p>
<p>bis bald<br />
akari</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1371976</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1371976</guid><dc:creator><![CDATA[akari]]></dc:creator><pubDate>Mon, 24 Sep 2007 20:33:17 GMT</pubDate></item><item><title><![CDATA[Reply to dumme frage... on Tue, 25 Sep 2007 00:15:37 GMT]]></title><description><![CDATA[<p>Der Fehler ist der dass du Geldbeträge (Preise[]) in floats/doubles speicherst und so damit rechnest. Das ist &quot;asking for trouble&quot;.</p>
<p>Geld rechnet man in Fixkomma, BCD, char[] oder sonstwas in der Richtung, aber niemals in float/double. Und mit &quot;rechnen&quot; meine ich *alles*, also von dem Moment wo du es aus einem File/einer Datebank/... ausliest bis zu dem Moment wo du es wieder ausgibst/abspeicherst/... . float/double haben dabei *nirgends* einen Platz.</p>
<p>Warum? Ganz einfach wegen dem was du beobachtet hast. Das Konvertieren nach int funktioniert auch nicht zuverlässig, es könnte sein dass du bei einer Rechnung wo dezimal und auf Papier gerechnet 0,55 (55 als int) rauskommt du auf stattdessen 0,54 (54 als int) rausbekommst. Ganz grosses Kino. Lass das lieber.</p>
<p>EDIT: genaugenommen funktioniert das Konvertieren nach Integer sehrwohl zuverlässig, die Fehler passieren schon vorher. Ändert aber ansonsten nichts daran was ich geschrieben habe.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1372043</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1372043</guid><dc:creator><![CDATA[hustbaer]]></dc:creator><pubDate>Tue, 25 Sep 2007 00:15:37 GMT</pubDate></item></channel></rss>