<?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[Fließkommaungenauigkeit?]]></title><description><![CDATA[<p>Hallo.<br />
Entschuldigt bitte diese doofe Frage, aber einige Zahlen kann der PC nicht gut darstellen? Dieses 999999999 kommt mir verdächtig vor. Ich bin grad auf Bugsuche und da habe ich nun folgende Zahlen:<br />
0.439999,0.560001<br />
Ist es möglich dass ich bei diesen Zahlen von so etwas ausgehen kann?</p>
<p>Bitte helft! <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>
]]></description><link>https://www.c-plusplus.net/forum/topic/244381/fließkommaungenauigkeit</link><generator>RSS for Node</generator><lastBuildDate>Tue, 15 Sep 2026 10:54:36 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/244381.rss" rel="self" type="application/rss+xml"/><pubDate>Mon, 29 Jun 2009 13:54:24 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Fließkommaungenauigkeit? on Mon, 29 Jun 2009 13:54:24 GMT]]></title><description><![CDATA[<p>Hallo.<br />
Entschuldigt bitte diese doofe Frage, aber einige Zahlen kann der PC nicht gut darstellen? Dieses 999999999 kommt mir verdächtig vor. Ich bin grad auf Bugsuche und da habe ich nun folgende Zahlen:<br />
0.439999,0.560001<br />
Ist es möglich dass ich bei diesen Zahlen von so etwas ausgehen kann?</p>
<p>Bitte helft! <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>
]]></description><link>https://www.c-plusplus.net/forum/post/1734567</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1734567</guid><dc:creator><![CDATA[floater]]></dc:creator><pubDate>Mon, 29 Jun 2009 13:54:24 GMT</pubDate></item><item><title><![CDATA[Reply to Fließkommaungenauigkeit? on Mon, 29 Jun 2009 14:00:06 GMT]]></title><description><![CDATA[<p>Servus,</p>
<p>so fern es sich um Fließk.-Zahlen handelt. Ja. Du kannst dir die Zahlen mittels runden zu recht legen. Es gibt eine Tabelle im Netz (wiki oder in Gems 4), in denen die Genauigkeit von float und double dargestellt wird. Ansonsten kannst du es auch selber berechnen.</p>
<p>Gruß<br />
Thomas</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1734570</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1734570</guid><dc:creator><![CDATA[Siassei]]></dc:creator><pubDate>Mon, 29 Jun 2009 14:00:06 GMT</pubDate></item><item><title><![CDATA[Reply to Fließkommaungenauigkeit? on Mon, 29 Jun 2009 14:02:28 GMT]]></title><description><![CDATA[<p>#edit: falsch verstanden</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1734571</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1734571</guid><dc:creator><![CDATA[unskilled]]></dc:creator><pubDate>Mon, 29 Jun 2009 14:02:28 GMT</pubDate></item><item><title><![CDATA[Reply to Fließkommaungenauigkeit? on Mon, 29 Jun 2009 14:04:59 GMT]]></title><description><![CDATA[<p>Deshalb solltest du auch vorsichtig sein mit Vergleichen; rechne am besten mit Toleranzwerten.</p>
<p>Falls du genaue Nicht-Ganzzahlen willst, wären vielleicht die rationalen Zahlen wie z.B. bei Boost.Rational eine Alternative.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1734572</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1734572</guid><dc:creator><![CDATA[Nexus]]></dc:creator><pubDate>Mon, 29 Jun 2009 14:04:59 GMT</pubDate></item><item><title><![CDATA[Reply to Fließkommaungenauigkeit? on Mon, 29 Jun 2009 14:05:05 GMT]]></title><description><![CDATA[<p>@Siassi<br />
Was lässt sich berechnen? Die Abweichung? Woher soll ich die wissen wenn ich die einzige Zahl die ich habe das Problem ist?! <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/1734573</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1734573</guid><dc:creator><![CDATA[floater]]></dc:creator><pubDate>Mon, 29 Jun 2009 14:05:05 GMT</pubDate></item><item><title><![CDATA[Reply to Fließkommaungenauigkeit? on Mon, 29 Jun 2009 14:06:54 GMT]]></title><description><![CDATA[<p><a class="plugin-mentions-user plugin-mentions-a" href="https://www.c-plusplus.net/forum/uid/12954">@Nexus</a>:<br />
Ja ich benutze den normalen == operator gar nicht mehr sondern eine epsilon-Funktion ... sonst würde gar nichts gehen.<br />
Wie ist den boost.rational? Ich habe eine zeitkritische Anwendung... (zumindest wird sie das <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/1734575</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1734575</guid><dc:creator><![CDATA[floater]]></dc:creator><pubDate>Mon, 29 Jun 2009 14:06:54 GMT</pubDate></item><item><title><![CDATA[Reply to Fließkommaungenauigkeit? on Mon, 29 Jun 2009 14:09:42 GMT]]></title><description><![CDATA[<p>floater schrieb:</p>
<blockquote>
<p>Was lässt sich berechnen? Die Abweichung?</p>
</blockquote>
<p>Japp - lässt sich berechnen... würd ich aber nicht versuchen, weils nich ganz einfach ist^^ und lässt sich auch nur so lange berechnen, wie du die genaue reihenfolge aller operationen kennst...</p>
<p>ansonsten kanns auch oft sein, dass du mit ganzen zahlen besser kommst, die du um x stellen verschiebst... kommt eben auf die anwendung drauf an ^^</p>
<p>bb</p>
<p>ansonsten:<br />
boost-rational wird bei den meisten operationen nat ein wenig langsamer sein - aber du gibst so wenige informationen, dass man irgendwie gar nichts weiß und auch gar nich iwie helfen kann, weil man selbst nur raten müsste <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/1734577</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1734577</guid><dc:creator><![CDATA[unskilled]]></dc:creator><pubDate>Mon, 29 Jun 2009 14:09:42 GMT</pubDate></item><item><title><![CDATA[Reply to Fließkommaungenauigkeit? on Mon, 29 Jun 2009 14:10:45 GMT]]></title><description><![CDATA[<p>Das ist eine Bruch-Klasse, die exakt rechnet. Sie ist recht effizient implementiert, aber <code>float</code> s werden wohl schon schneller sein. Kommt halt drauf an, wie wichtig dir exakte Werte im Vergleich zu Performance sind.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1734578</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1734578</guid><dc:creator><![CDATA[Nexus]]></dc:creator><pubDate>Mon, 29 Jun 2009 14:10:45 GMT</pubDate></item><item><title><![CDATA[Reply to Fließkommaungenauigkeit? on Mon, 29 Jun 2009 14:20:19 GMT]]></title><description><![CDATA[<p>Ich rechne sehr viel mit Ebenen Geraden und dergleichen im R3.<br />
Und Rundungsfehler sind schnell sichtbar.... schon seit Monaten versuche ich das zu beheben.... Das A und O ist Exaktheit!!<br />
Also rechne ich einfach mit boost::rational&lt;int&gt;?<br />
Tests laufen schon ^^</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1734580</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1734580</guid><dc:creator><![CDATA[floater]]></dc:creator><pubDate>Mon, 29 Jun 2009 14:20:19 GMT</pubDate></item><item><title><![CDATA[Reply to Fließkommaungenauigkeit? on Mon, 29 Jun 2009 14:27:21 GMT]]></title><description><![CDATA[<p>Folgendes Problem:<br />
Ich habe immer floats als Ausgangswerte (3 Vektoren)<br />
Nun kann ich die doch nicht ohne weiteres umwandeln!<br />
Wenn ich nun mit rational&lt;float&gt; rechne werden Rundungsfehler dennoch auftreten?!<br />
Das wird eine Weile dauern bis ich rational im Programm implementiert habe ... deshalb frage ich shconmal <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>
]]></description><link>https://www.c-plusplus.net/forum/post/1734581</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1734581</guid><dc:creator><![CDATA[floater]]></dc:creator><pubDate>Mon, 29 Jun 2009 14:27:21 GMT</pubDate></item><item><title><![CDATA[Reply to Fließkommaungenauigkeit? on Mon, 29 Jun 2009 14:45:32 GMT]]></title><description><![CDATA[<p>floater schrieb:</p>
<blockquote>
<p>Entschuldigt bitte diese doofe Frage, aber einige Zahlen kann der PC nicht gut darstellen?</p>
</blockquote>
<p>So'ne Fließkommazahl besteht ja meistens &quot;nur&quot; aus 32 oder 64 Bit. Reelle Zahlen gibt es aber unendlich viele. Also kannst Du gar nicht jede Zahl exakt darstelen. Da der Rechner ein (meist) ein binär-basiertes System benutzt kann so ein Zehnerbruch schonmal komisch aussehen:</p>
<pre><code>Dezimal: 0,4
Binär:   0,011001101...
</code></pre>
<p>Jedes Fließkomma-Format hat aber eine sogenannte Maschinengenauigkeit <code>epsilon</code> . Sie gibt Dir an, wie genau eine Zahl repräsentiert werden kann -- abgesehen von betragsmäßig extrem großen Zahlen (wie 10^300), oder Zahlen, die extrem nah an 0 sind (wie 10^-300). Sei <code>x</code> das exakte Ergebnis einer Rechenoperation (+,-,*,/) oder die Eingabe, sei <code>y</code> der Wert den eine Fließkommavariable nach einer Zuweisung von x hat, dann gilt: <code>|x-y| &lt;= y * epsilon</code> (Der <em>relative</em> Fehler ist durch <code>epsilon</code> beschränkt.)</p>
<p>Die Fehler pflanzen sich aber auch fort. Beispielsweise: Bei einer Addition oder Subtraktion addieren sich die <em>absoluten</em> Fehler der Operanden. Bei einer Multiplikation oder Division addieren sich die <em>relativen</em> Fehler der Operanden.</p>
<p>Wieder C++-Spezifisch: Du kannst das epsilon über std::numeric_limits&lt;T&gt;::epsilon() für jeden Fließkommatyp T erfragen. Zu finden ist dieses Klassentemplate im <code>&lt;limits&gt;</code> Header.</p>
<p>Gruß,<br />
SP</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1734584</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1734584</guid><dc:creator><![CDATA[Sebastian Pizer]]></dc:creator><pubDate>Mon, 29 Jun 2009 14:45:32 GMT</pubDate></item><item><title><![CDATA[Reply to Fließkommaungenauigkeit? on Mon, 29 Jun 2009 14:51:49 GMT]]></title><description><![CDATA[<p>floater schrieb:</p>
<blockquote>
<p>Ich rechne sehr viel mit Ebenen Geraden und dergleichen im R3.<br />
Und Rundungsfehler sind schnell sichtbar.... schon seit Monaten versuche ich das zu beheben.... Das A und O ist Exaktheit!!</p>
</blockquote>
<p>Du kannst ja mal GMP versuchen (GNU Multiple Precision library). Die haben auch nen leichtbenutzbaren C++ Header und die Klasse mpq_class (für rationale Zahlen mit beliebig großen Zähler und Nenner).</p>
<p>Mit boost::rational&lt;int&gt; kommt Du wahrscheinlich relativ schnell zu einem Überlauf. Ich würde mich auch gar nicht auf boost::rational&lt;long long&gt; verlassen. Einen float kannst Du da auch nicht benutzen.</p>
<p>Gruß,<br />
SP</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1734587</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1734587</guid><dc:creator><![CDATA[Sebastian Pizer]]></dc:creator><pubDate>Mon, 29 Jun 2009 14:51:49 GMT</pubDate></item><item><title><![CDATA[Reply to Fließkommaungenauigkeit? on Mon, 29 Jun 2009 14:57:25 GMT]]></title><description><![CDATA[<p>floater schrieb:</p>
<blockquote>
<p>Folgendes Problem:<br />
Ich habe immer floats als Ausgangswerte (3 Vektoren)<br />
Nun kann ich die doch nicht ohne weiteres umwandeln!<br />
Wenn ich nun mit rational&lt;float&gt; rechne werden Rundungsfehler dennoch auftreten?!<br />
Das wird eine Weile dauern bis ich rational im Programm implementiert habe ... deshalb frage ich shconmal <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>
</blockquote>
<p>Du bekommst viel gemeinere Probleme mit Bruchzahlen:</p>
<pre><code class="language-cpp">x=1/2;
x=x*5/6;
x=x*5/6;
x=x*5/6;
x=x*5/6;
x=x*5/6;
x=x*5/6;
x=x*5/6;
</code></pre>
<p>Die Zähler und Nenner wachsen im Verlauf der Schleifen ins Unermessliche und das Prog wird entweder (mit Riesenintegers) arschlahm oder auch ungenau.</p>
<p>Vermutlich ist es besser, Du achtest drauf, keine Fehleransammlungen zu bauen (das Standardbeispiel dazu ist, daß man nicht die Eckpunkte des Körpers pro Schleifendurchlauf winzig ändert und erlaubt, daß die Ecken verschmieren, sondern daß man nur die Position und deen Winkel des Gesamtkörpers und in jedem Schleifendurchlauf alle Ecken neuberechnet) oder daß die Fehleransammlungen nicht auffallen (wen juckt's, daß der char pro Schritt ein handbreit danebenlatscht, zwei sich in einem Punkt treffende Ebenen teilen sich den selben Punkt über Zeiger?) oder daß die Fehleransammlungen nicht explodieren können (immer wieder mal die Einheitsvektoren schrubben)...</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1734588</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1734588</guid><dc:creator><![CDATA[volkard]]></dc:creator><pubDate>Mon, 29 Jun 2009 14:57:25 GMT</pubDate></item><item><title><![CDATA[Reply to Fließkommaungenauigkeit? on Mon, 29 Jun 2009 15:24:17 GMT]]></title><description><![CDATA[<p>Das mit den Brüchen stimmt, ist hier wohl keine gute Idee. Ich hatte bisher nur Anwendungsfälle, bei denen Zähler und Nenner klein blieben.</p>
<p>floater, wieso nimmst du eigentlich <code>float</code> , wenn die Genauigkeit entscheidend ist? Mit <code>double</code> oder <code>long double</code> könnte sich bereits einiges verbessern, auch wenn das nicht der Weisheit letzter Schluss ist.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1734602</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1734602</guid><dc:creator><![CDATA[Nexus]]></dc:creator><pubDate>Mon, 29 Jun 2009 15:24:17 GMT</pubDate></item><item><title><![CDATA[Reply to Fließkommaungenauigkeit? on Mon, 29 Jun 2009 15:46:49 GMT]]></title><description><![CDATA[<p>Nexus schrieb:</p>
<blockquote>
<p>Das mit den Brüchen stimmt, ist hier wohl keine gute Idee. Ich hatte bisher nur Anwendungsfälle, bei denen Zähler und Nenner klein blieben.</p>
<p>floater, wieso nimmst du eigentlich <code>float</code> , wenn die Genauigkeit entscheidend ist? Mit <code>double</code> oder <code>long double</code> könnte sich bereits einiges verbessern, auch wenn das nicht der Weisheit letzter Schluss ist.</p>
</blockquote>
<p>Würde das das Problem nicht einfach nur verlagert werden? Rechenfehler werden dennoch auftreten die irgendwann zu einem Fehler führen. Ich dachte halt dass ein stabiler Algorithmus auch float verträgt?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1734611</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1734611</guid><dc:creator><![CDATA[floater]]></dc:creator><pubDate>Mon, 29 Jun 2009 15:46:49 GMT</pubDate></item><item><title><![CDATA[Reply to Fließkommaungenauigkeit? on Mon, 29 Jun 2009 15:57:18 GMT]]></title><description><![CDATA[<p>floater schrieb:</p>
<blockquote>
<p>Ich dachte halt dass ein stabiler Algorithmus auch float verträgt?</p>
</blockquote>
<p>Jo.</p>
<p>Fehlerverstärkende Algos lassen den Fehler meistens exponentiell wachsen, wenn der mit float nach 3 Minuten über die Maßen häßlich wird, dauert's bei double halt 6 Minuten. Das ist nicht lecker.</p>
<p>Manchmal hat man einen Algo, der Fehler nur ansammelt, aber nicht verstärkt, da würde double eine erhebliche Verbesserung bringen. Aber fraglich ist, ob dabei der Fehler bei float überhaupt schon sichtbar wäre. Und zu bedenken ist, daß eine Stunde Spielzeit verdammt viele Frames zeigt. Leider ist diese Sorte Fehler nicht vermeidbar. Aber wenn sie eh versteckt, geschrubbt und geeignet ignoriert werden, kann man ja eh von double wieder runter auf float.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1734619</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1734619</guid><dc:creator><![CDATA[volkard]]></dc:creator><pubDate>Mon, 29 Jun 2009 15:57:18 GMT</pubDate></item><item><title><![CDATA[Reply to Fließkommaungenauigkeit? on Mon, 29 Jun 2009 20:47:37 GMT]]></title><description><![CDATA[<p>Wie kann ich die Fehlergröße eingrenzen? Also gibt es eine Methode um das Epsilon zu bestimmen? Ich treffe bis jetzt mehr oder weniger blinde Vrorkehrungen!</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1734762</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1734762</guid><dc:creator><![CDATA[floater]]></dc:creator><pubDate>Mon, 29 Jun 2009 20:47:37 GMT</pubDate></item><item><title><![CDATA[Reply to Fließkommaungenauigkeit? on Mon, 29 Jun 2009 22:15:41 GMT]]></title><description><![CDATA[<p>floater schrieb:</p>
<blockquote>
<p>Wie kann ich die Fehlergröße eingrenzen? Also gibt es eine Methode um das Epsilon zu bestimmen?</p>
</blockquote>
<p>-&gt;</p>
<blockquote>
<p>Die Fehler pflanzen sich aber auch fort. Beispielsweise: Bei einer Addition oder Subtraktion addieren sich die absoluten Fehler der Operanden. Bei einer Multiplikation oder Division addieren sich die relativen Fehler der Operanden.</p>
<p>Wieder C++-Spezifisch: Du kannst das epsilon über std::numeric_limits&lt;T&gt;::epsilon() für jeden Fließkommatyp T erfragen. Zu finden ist dieses Klassentemplate im &lt;limits&gt; Header.</p>
</blockquote>
<p>Oder was meinst du mit bestimmen?</p>
<blockquote>
<p>Ich treffe bis jetzt mehr oder weniger blinde Vrorkehrungen!</p>
</blockquote>
<p>Wie das denn?</p>
<p>bb</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1734800</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1734800</guid><dc:creator><![CDATA[unskilled]]></dc:creator><pubDate>Mon, 29 Jun 2009 22:15:41 GMT</pubDate></item><item><title><![CDATA[Reply to Fließkommaungenauigkeit? on Mon, 29 Jun 2009 22:37:15 GMT]]></title><description><![CDATA[<p>Ja habe per trial&amp;error 20*std::numeric_limits&lt;float&gt;::epsilon() für mein Programm als am Besten ermittelt.<br />
Das funktioniert jedoch nicht immer und in der Regel ist der Wert auch unnötig groß.<br />
Ich frage mich daher ob man je nach Rechenoperation die Ungenauigkeit auf wenigstens die Stellenzahl begrenzen kann... <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/1734808</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1734808</guid><dc:creator><![CDATA[floater]]></dc:creator><pubDate>Mon, 29 Jun 2009 22:37:15 GMT</pubDate></item></channel></rss>