<?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[double vergleichen: Wie lange reicht ==-operator aus?]]></title><description><![CDATA[<p>Wenn ich doubles einsetze, dann habe ich bisher gerne mit == gearbeitet da es mir nicht auf die 14 Nachkommastelle ankommt. Bspw. scheint mir sowas kein Problem zu sein:</p>
<pre><code>double x = wert;
if(x == 130.2) {

}
</code></pre>
<p>Oder sehe ich das falsch? Gefühlt scheint es kritisch zu werden, wenn man per == auf viele Nachkommastellen vergleicht <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/topic/317343/double-vergleichen-wie-lange-reicht-operator-aus</link><generator>RSS for Node</generator><lastBuildDate>Sat, 04 Apr 2026 11:58:49 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/317343.rss" rel="self" type="application/rss+xml"/><pubDate>Wed, 05 Jun 2013 12:40:06 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to double vergleichen: Wie lange reicht ==-operator aus? on Wed, 05 Jun 2013 12:40:06 GMT]]></title><description><![CDATA[<p>Wenn ich doubles einsetze, dann habe ich bisher gerne mit == gearbeitet da es mir nicht auf die 14 Nachkommastelle ankommt. Bspw. scheint mir sowas kein Problem zu sein:</p>
<pre><code>double x = wert;
if(x == 130.2) {

}
</code></pre>
<p>Oder sehe ich das falsch? Gefühlt scheint es kritisch zu werden, wenn man per == auf viele Nachkommastellen vergleicht <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/2328783</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2328783</guid><dc:creator><![CDATA[DoppelterSpass]]></dc:creator><pubDate>Wed, 05 Jun 2013 12:40:06 GMT</pubDate></item><item><title><![CDATA[Reply to double vergleichen: Wie lange reicht ==-operator aus? on Wed, 05 Jun 2013 13:04:16 GMT]]></title><description><![CDATA[<p>&quot;==&quot; vergleicht immer auf die gesamte Variablenbreite. Hinzu kommt noch, dass Fließkommazahlen teilweise je nach Architektur im Rechner mit einer höheren Genauigkeit verarbeitet werden, als die mit der sie im Speicher stehen. Das führt dann zu Phänomenen wie z.B. dass eine Variable der ich irgendwann exakt 0.3 zugewiesen habe später bei einem Vergleich mit 0.3 nicht mehr true liefert.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2328789</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2328789</guid><dc:creator><![CDATA[TNA]]></dc:creator><pubDate>Wed, 05 Jun 2013 13:04:16 GMT</pubDate></item><item><title><![CDATA[Reply to double vergleichen: Wie lange reicht ==-operator aus? on Wed, 05 Jun 2013 12:59:46 GMT]]></title><description><![CDATA[<p>Ich habe gerade realisiert das ich bisher einfach nur unglaublich viel Glück hatte, da ich in doubles nur ganze Zahlen gespeichert habe. Damit war wohl die ganze Zeit ein Vergleichen von doubles problemlos möglich.</p>
<p>Sicherheitshalber hab ich jetzt den Datentyp geändert <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f576.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--sunglasses"
      title=":sunglasses:"
      alt="🕶"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/2328790</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2328790</guid><dc:creator><![CDATA[DoppelterSpass]]></dc:creator><pubDate>Wed, 05 Jun 2013 12:59:46 GMT</pubDate></item><item><title><![CDATA[Reply to double vergleichen: Wie lange reicht ==-operator aus? on Wed, 05 Jun 2013 13:03:21 GMT]]></title><description><![CDATA[<p>Wenn man nur Ganzzahlen verwendet ist es immer eine gute Idee ganzzahlige Datentypen zu verwenden. Damit spart man sich viel Ärger und ist deutlich schneller.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2328792</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2328792</guid><dc:creator><![CDATA[TNA]]></dc:creator><pubDate>Wed, 05 Jun 2013 13:03:21 GMT</pubDate></item><item><title><![CDATA[Reply to double vergleichen: Wie lange reicht ==-operator aus? on Wed, 05 Jun 2013 13:12:08 GMT]]></title><description><![CDATA[<p>DoppelterSpass schrieb:</p>
<blockquote>
<p>Oder sehe ich das falsch?</p>
</blockquote>
<p>Ja, siehe:</p>
<pre><code>#include &lt;iostream&gt;
#include &lt;iomanip&gt;

using namespace std;

int main()
{
   double wert = 130.2;
   double andererWert = 129.2;

   for(int i = 0; i &lt; 10; ++i)
      andererWert += 0.1;

   cout &lt;&lt; &quot;wert        ======&gt; &quot; &lt;&lt; wert &lt;&lt; '\n';
   cout &lt;&lt; &quot;andererWert ======&gt; &quot; &lt;&lt; andererWert &lt;&lt; '\n';

   if(wert == andererWert)
      cout &lt;&lt; &quot;\nwert ist gleich andererWert\n&quot;;
   else
      cout &lt;&lt; &quot;\nwert ist ungleich andererWert\n&quot;;

   cout &lt;&lt; setprecision(20) &lt;&lt; &quot;\nwert        ======&gt; &quot; &lt;&lt; wert &lt;&lt; '\n';
   cout &lt;&lt; &quot;andererWert ======&gt; &quot; &lt;&lt; andererWert &lt;&lt; '\n';
}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/2328794</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2328794</guid><dc:creator><![CDATA[Belli]]></dc:creator><pubDate>Wed, 05 Jun 2013 13:12:08 GMT</pubDate></item><item><title><![CDATA[Reply to double vergleichen: Wie lange reicht ==-operator aus? on Wed, 05 Jun 2013 13:41:35 GMT]]></title><description><![CDATA[<p>TNA schrieb:</p>
<blockquote>
<p>Das führt dann zu Phänomenen wie z.B. das eine Variable der ich irgendwann exakt 0.3 zugewiesen habe später bei einem Vergleich mit 0.3 nicht mehr true liefert.</p>
</blockquote>
<p>Das ist unmöglich (wenn wir mal Nicht-Standardumgebungen ignorieren). Einfache Zuweisung verändert niemals den Wert von Zahlen. Ungenauigkeiten ergeben sich <em>genau dann</em>, wenn das exakte Ergebnis einer Operation nicht exakt im Zieltyp dargestellt werden kann, also<br />
- bei Ergebnissen von Rechenoperationen (z.B. überschüssige Stellen bei der Multiplikation, Werte von Literalen wie 0.3 u.ä.),<br />
- ein Wert eines Typs in einen eines Typs mit kleinerem Wertebereich/Genauigkeit konvertiert werden muss (double-&gt;float u.ä.)</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2328802</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2328802</guid><dc:creator><![CDATA[camper]]></dc:creator><pubDate>Wed, 05 Jun 2013 13:41:35 GMT</pubDate></item><item><title><![CDATA[Reply to double vergleichen: Wie lange reicht ==-operator aus? on Wed, 05 Jun 2013 13:48:35 GMT]]></title><description><![CDATA[<p>Das ist doch genau bei 0,3 der Fall. 0,3 ist als Fließkommazahl nie exakt 0,3 und die Anzahl der Stellen kann eben variieren. Datentypen garantieren immer nur eine Mindestgenauigkeit währen intern manchmal genauer gerechnet wird. Die Repräsentation von &quot;0,3&quot; im Hauptspeicher muss nicht gleich der Repräsentation von 0,3 in einem Register oder Direktoperand sein.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2328803</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2328803</guid><dc:creator><![CDATA[TNA]]></dc:creator><pubDate>Wed, 05 Jun 2013 13:48:35 GMT</pubDate></item><item><title><![CDATA[Reply to double vergleichen: Wie lange reicht ==-operator aus? on Wed, 05 Jun 2013 13:52:20 GMT]]></title><description><![CDATA[<p>camper schrieb:</p>
<blockquote>
<p>TNA schrieb:</p>
<blockquote>
<p>Das führt dann zu Phänomenen wie z.B. das eine Variable der ich irgendwann exakt 0.3 zugewiesen habe später bei einem Vergleich mit 0.3 nicht mehr true liefert.</p>
</blockquote>
<p>Das ist unmöglich</p>
</blockquote>
<p>Genau bei float ist es eben doch möglich (wie du selber schreibst).</p>
<pre><code class="language-cpp">float f=0.3; // int f=0.3; ist das gleiche Phänomen leichter verständlich
assert(f!=0.3);
</code></pre>
<p>Nur bei double (und vermutlich long double) ist es nicht mehr möglich, weil das Literal 0.3 immer als double dargestellt wird.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2328804</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2328804</guid><dc:creator><![CDATA[weallfloat]]></dc:creator><pubDate>Wed, 05 Jun 2013 13:52:20 GMT</pubDate></item><item><title><![CDATA[Reply to double vergleichen: Wie lange reicht ==-operator aus? on Wed, 05 Jun 2013 14:01:34 GMT]]></title><description><![CDATA[<p>Es reicht solange bis man damit auf die Nase fällt <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f603.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--grinning_face_with_big_eyes"
      title=":D"
      alt="😃"
    /></p>
<p>Beschäftige Dich mal ein bisschen damit wie Dein Rechner die Zahlen intern verarbeitet. Du wirst schnell sehen, dass es simple Zahlen gibt die überhaupt nicht exakt darstellbar sind z.B. 0.1</p>
<p>Mit dem Wissen wirst Du dann NIE wieder auf die Idee kommen Fließkommazahlen per == zu vergleichen.</p>
<p>if ( ( 0.1 + 0.1 ) == 0.2 ) wird nie wahr sein. <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f603.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--grinning_face_with_big_eyes"
      title=":D"
      alt="😃"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/2328805</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2328805</guid><dc:creator><![CDATA[MichelRT]]></dc:creator><pubDate>Wed, 05 Jun 2013 14:01:34 GMT</pubDate></item><item><title><![CDATA[Reply to double vergleichen: Wie lange reicht ==-operator aus? on Wed, 05 Jun 2013 14:05:08 GMT]]></title><description><![CDATA[<p>MichelRT schrieb:</p>
<blockquote>
<p>if (0.1+0.1==0.2) wird nie wahr sein. <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f603.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--grinning_face_with_big_eyes"
      title=":D"
      alt="😃"
    /></p>
</blockquote>
<p>Sag niemals nie.<br />
Auf meinem Rechnner ist das gerade das Gegenteil der Fall <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f603.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--grinning_face_with_big_eyes"
      title=":D"
      alt="😃"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/2328808</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2328808</guid><dc:creator><![CDATA[weallfloat]]></dc:creator><pubDate>Wed, 05 Jun 2013 14:05:08 GMT</pubDate></item><item><title><![CDATA[Reply to double vergleichen: Wie lange reicht ==-operator aus? on Wed, 05 Jun 2013 14:07:29 GMT]]></title><description><![CDATA[<p>weallfloat schrieb:</p>
<blockquote>
<p>camper schrieb:</p>
<blockquote>
<p>TNA schrieb:</p>
<blockquote>
<p>Das führt dann zu Phänomenen wie z.B. das eine Variable der ich irgendwann exakt 0.3 zugewiesen habe später bei einem Vergleich mit 0.3 nicht mehr true liefert.</p>
</blockquote>
<p>Das ist unmöglich</p>
</blockquote>
<p>Genau bei float ist es eben doch möglich (wie du selber schreibst).</p>
<pre><code class="language-cpp">float f=0.3; // int f=0.3; ist das gleiche Phänomen leichter verständlich
assert(f!=0.3);
</code></pre>
<p>Nur bei double (und vermutlich long double) ist es nicht mehr möglich, weil das Literal 0.3 immer als double dargestellt wird.</p>
</blockquote>
<p>Da musst du aber auch korrekterweise mit 0.3f vergleichen. Und das sollte dann auch erfolgreich sein.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2328810</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2328810</guid><dc:creator><![CDATA[SeppJ]]></dc:creator><pubDate>Wed, 05 Jun 2013 14:07:29 GMT</pubDate></item><item><title><![CDATA[Reply to double vergleichen: Wie lange reicht ==-operator aus? on Wed, 05 Jun 2013 14:17:44 GMT]]></title><description><![CDATA[<p>SeppJ schrieb:</p>
<blockquote>
<p>weallfloat schrieb:</p>
<blockquote>
<p>camper schrieb:</p>
<blockquote>
<p>TNA schrieb:</p>
<blockquote>
<p>Das führt dann zu Phänomenen wie z.B. das eine Variable der ich irgendwann exakt 0.3 zugewiesen habe später bei einem Vergleich mit 0.3 nicht mehr true liefert.</p>
</blockquote>
<p>Das ist unmöglich</p>
</blockquote>
<p>Genau bei float ist es eben doch möglich (wie du selber schreibst).</p>
<pre><code class="language-cpp">float f=0.3; // int f=0.3; ist das gleiche Phänomen leichter verständlich
assert(f!=0.3);
</code></pre>
<p>Nur bei double (und vermutlich long double) ist es nicht mehr möglich, weil das Literal 0.3 immer als double dargestellt wird.</p>
</blockquote>
<p>Da musst du aber auch korrekterweise mit 0.3f vergleichen. Und das sollte dann auch erfolgreich sein.</p>
</blockquote>
<p>Es ging um eine wörtliche Umsetzung des Zitats.<br />
Selbst <code>float f=0.3;assert(f==0.3f);</code> (wörtliche Umsetzung deiner Aussage) ist implementation-defined.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2328814</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2328814</guid><dc:creator><![CDATA[weallfloat]]></dc:creator><pubDate>Wed, 05 Jun 2013 14:17:44 GMT</pubDate></item><item><title><![CDATA[Reply to double vergleichen: Wie lange reicht ==-operator aus? on Wed, 05 Jun 2013 14:24:38 GMT]]></title><description><![CDATA[<p>weallfloat schrieb:</p>
<blockquote>
<p>Selbst <code>float f=0.3;assert(f==0.3f);</code> (wörtliche Umsetzung deiner Aussage) ist implementation-defined.</p>
</blockquote>
<p>Ich wette, ich kann die benutzte Implementierung erraten. Beim ersten Versuch. Auf egal welchem System.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2328817</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2328817</guid><dc:creator><![CDATA[SeppJ]]></dc:creator><pubDate>Wed, 05 Jun 2013 14:24:38 GMT</pubDate></item><item><title><![CDATA[Reply to double vergleichen: Wie lange reicht ==-operator aus? on Wed, 05 Jun 2013 14:42:54 GMT]]></title><description><![CDATA[<p>weallfloat schrieb:</p>
<blockquote>
<p>Selbst <code>float f=0.3;assert(f==0.3f);</code> (wörtliche Umsetzung deiner Aussage) ist implementation-defined.</p>
</blockquote>
<p>Wenn man annimmt, dass die Wahl in 2.14.4/2 nicht mit der in 4.8/1 übereinstimmen muss. Ansonsten eben</p>
<pre><code class="language-cpp">float f=0.3;assert(f==float(0.3));
</code></pre>
<p>Das unmmöglich bezog sich vor allem auf den Fakt, dass</p>
<blockquote>
<p>eine Variable ... exakt 0.3 zugewiesen</p>
</blockquote>
<p>unmöglich ist. Da 0.3 mit den Standardtypen nicht exakt darstellbar ist, kann es logischerweise auch nicht <em>exakt</em> der Wert sein, der in der Variablen gespeichert wird.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2328821</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2328821</guid><dc:creator><![CDATA[camper]]></dc:creator><pubDate>Wed, 05 Jun 2013 14:42:54 GMT</pubDate></item></channel></rss>