<?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[filestream float aus datei und die genauigkeit]]></title><description><![CDATA[<p>Hi ich hab hier ein kleines Problem mit meinem Program.</p>
<p>Ich öffne einen filestream und versuche eine Zahl einzulesen.</p>
<p>Es ist eine einfache Tabelle und ich brauche sie unbedingt für die weitere Verarbeitung als double. Die zahl ist im jedem Editor /more/less/cat sagt das selbe einfach</p>
<p>2452585.44260</p>
<p>Versuche ich diese jetzt mit</p>
<p>inputFile&gt;&gt;f_time;</p>
<p>einzulesen. Un gebe ich sie dannach wieder aus. Fix point so erhalte ich</p>
<p>cout&lt;&lt;f_time;</p>
<p>2452585.4426000002.</p>
<p>Diese kleine 2 am Ende macht mir im Laufe des Programs Probleme. Weshalb ist die zahlk nicht glatt? Weshalb dieser Rundungsfehler.<br />
Hoffe jemand kann mir helfen.</p>
<p>THANX Lex</p>
<p>Alexander Gahr</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/125705/filestream-float-aus-datei-und-die-genauigkeit</link><generator>RSS for Node</generator><lastBuildDate>Mon, 24 Aug 2026 10:38:41 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/125705.rss" rel="self" type="application/rss+xml"/><pubDate>Tue, 08 Nov 2005 19:49:46 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to filestream float aus datei und die genauigkeit on Tue, 08 Nov 2005 19:49:46 GMT]]></title><description><![CDATA[<p>Hi ich hab hier ein kleines Problem mit meinem Program.</p>
<p>Ich öffne einen filestream und versuche eine Zahl einzulesen.</p>
<p>Es ist eine einfache Tabelle und ich brauche sie unbedingt für die weitere Verarbeitung als double. Die zahl ist im jedem Editor /more/less/cat sagt das selbe einfach</p>
<p>2452585.44260</p>
<p>Versuche ich diese jetzt mit</p>
<p>inputFile&gt;&gt;f_time;</p>
<p>einzulesen. Un gebe ich sie dannach wieder aus. Fix point so erhalte ich</p>
<p>cout&lt;&lt;f_time;</p>
<p>2452585.4426000002.</p>
<p>Diese kleine 2 am Ende macht mir im Laufe des Programs Probleme. Weshalb ist die zahlk nicht glatt? Weshalb dieser Rundungsfehler.<br />
Hoffe jemand kann mir helfen.</p>
<p>THANX Lex</p>
<p>Alexander Gahr</p>
]]></description><link>https://www.c-plusplus.net/forum/post/912158</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/912158</guid><dc:creator><![CDATA[AlexKid]]></dc:creator><pubDate>Tue, 08 Nov 2005 19:49:46 GMT</pubDate></item><item><title><![CDATA[Reply to filestream float aus datei und die genauigkeit on Tue, 08 Nov 2005 22:07:31 GMT]]></title><description><![CDATA[<p>Hallo Lex,</p>
<p>Eine Zahl in der für uns vertrauten Dezimaldarstellung wird in Deinem PC binär - d.h. als eine Folge von Nullen und Einsen - abgelegt. Nun ist nicht jede - scheinbar einfache - Dezimalzahl glatt in eine Binärzahl umzurechnen. Zum Beispiel ist 1,2 dezimal in binär %1,00110011001100110011 ... usw. bis in alle Ewigkeit. Der Computer muss 1,2 also binär runden, um sie z.B. in eine Variable abzuspeichern. Bei der Darstellung in Dezimalform - das passiert bei 'cout &lt;&lt; variable' - kann sich nun dieser Rundungsfehler bemerkbar machen. Bei Ausgabe mit voller Genauigkeit erhält man u.U. 1,199999999999 oder 1,2000000000001.</p>
<p>Und das ist auch der Trick. Beschränke die Genauigkeit Deiner Ausgabe. Wenn f_time ein double von der Größe 8 Byte ist, so ist sowieso bei ca. 14 Dezimalstellen Schluß. Wenn Du schreibst</p>
<pre><code class="language-cpp">#include &lt;iostream&gt;
#include &lt;iomanip&gt;
    ...
    double v = 2452585.4426;
    std::cout &lt;&lt; std::setprecision(12) &lt;&lt; v &lt;&lt; std::endl;
</code></pre>
<p>.. sollte die Ausgabe wieder der Dezimaldarstellung entsprechen. Du erhälst die Anzahl der möglichen Dezimalstellen die Dein Typ darstellen kann mit</p>
<pre><code class="language-cpp">#include &lt;limits&gt;
    ...
    std::cout &lt;&lt; &quot;max. Anzahl Dezimalstellen: &quot; &lt;&lt; std::numeric_limits&lt; f_time &gt;::digits10 &lt;&lt; std::endl;
</code></pre>
<p>Gruß<br />
Werner</p>
]]></description><link>https://www.c-plusplus.net/forum/post/912310</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/912310</guid><dc:creator><![CDATA[Werner Salomon]]></dc:creator><pubDate>Tue, 08 Nov 2005 22:07:31 GMT</pubDate></item><item><title><![CDATA[Reply to filestream float aus datei und die genauigkeit on Wed, 09 Nov 2005 10:59:41 GMT]]></title><description><![CDATA[<p>Danke für deine Hilfe das mit dem runden war mir schon klar.<br />
Hab nur irgendwie gedacht bei double wäre die precision 16 wegen 32 bit Maschine.</p>
<p>sizeof(double)=8</p>
<p>bei der Maschine.</p>
<p>Hm auf meiner 32 Bit Maschine sagt der nur 15 da geht bestimmt eins fürs Vorzeichen weg oder ist das ganze wegen dieser Rundung? Komischerweise habe ich das Problem bei FORTRAN90 DOUBLE PRECISION nicht. Denn kann ich mit 16 Stellen ausgeben.</p>
<p>Super dieses Befehl mit Limit zu kennen, hoffe nur das der SunWorkshop Compiler das auch kennt.</p>
<p>Überigens du meintest bestimmt</p>
<p>std::cout &lt;&lt; &quot;max. Anzahl Dezimalstellen: &quot; &lt;&lt; std::numeric_limits&lt;double&gt;::digits10 &lt;&lt; std::endl;</p>
<p>oder?</p>
<p>Danke aber vielmals.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/912601</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/912601</guid><dc:creator><![CDATA[AlexKid]]></dc:creator><pubDate>Wed, 09 Nov 2005 10:59:41 GMT</pubDate></item><item><title><![CDATA[Reply to filestream float aus datei und die genauigkeit on Wed, 09 Nov 2005 21:48:34 GMT]]></title><description><![CDATA[<p>AlexKid schrieb:</p>
<blockquote>
<p>Hab nur irgendwie gedacht bei double wäre die precision 16 wegen 32 bit Maschine.</p>
<p>sizeof(double)=8</p>
<p>bei der Maschine.</p>
</blockquote>
<p>Hallo Alex,</p>
<p>In einem double (oder float) wird eine Fließkomma-Zahl in Form einer Mantisse und eines Exponenten abgespeichert. Also dezimal z.B.:<br />
-345,78 = -3,45678 * 10^2<br />
0,00123 = 1,23 * 10^-3<br />
hier in meinem Beispiel liegt die Mantisse immer im halboffenen Intervall \[1, 10). Und für die Genauigkeit ist nur die Anzahl der Stellen der Mantisse ausschlaggebend. Neben der Mantisse muss der Rechner noch das Vorzeichen, den Exponenten und das Vorzeichen des Exponenten in den z.B.8 Bytes unterbringen.</p>
<p>AlexKid schrieb:</p>
<blockquote>
<p>Hm auf meiner 32 Bit Maschine sagt der nur 15 da geht bestimmt eins fürs Vorzeichen weg oder ist das ganze wegen dieser Rundung? Komischerweise habe ich das Problem bei FORTRAN90 DOUBLE PRECISION nicht. Denn kann ich mit 16 Stellen ausgeben.</p>
</blockquote>
<p>Ich glaube nicht, dass es da anders ist, da das verwendete Format mehr von der CPU als von der Programmiersprache abhängt. Du kannst auch in C++ mit beliebig vielen Stellen ausgeben; aber es wird deshalb nicht genauer (siehe Dein Posting oben).</p>
<p>AlexKid schrieb:</p>
<blockquote>
<p>Überigens du meintest bestimmt</p>
<p>std::cout &lt;&lt; &quot;max. Anzahl Dezimalstellen: &quot; &lt;&lt; std::numeric_limits&lt;double&gt;::digits10 &lt;&lt; std::endl;</p>
<p>oder?</p>
</blockquote>
<p>Eigentlich meinte ich std::numeric_limits&lt; Typ-von-f_time &gt;::digits10; Du hast uns den Typ von f_time ja noch nicht verraten <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>
<p>Gruß<br />
Werner</p>
]]></description><link>https://www.c-plusplus.net/forum/post/913401</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/913401</guid><dc:creator><![CDATA[Werner Salomon]]></dc:creator><pubDate>Wed, 09 Nov 2005 21:48:34 GMT</pubDate></item></channel></rss>