<?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 aus Datei auslesen - Wert nicht ganz richtig]]></title><description><![CDATA[<p>Hallo,</p>
<p>ich habe folgendermassen versucht, aus einer Datei einen Double-Wert zu lesen:</p>
<pre><code class="language-cpp">void MapModel::loadMapFile(char* fileName)
{

  ifstream mapFile(fileName);
  if ( mapFile.is_open() != true ) {
    cerr &lt;&lt; &quot;Die Datei konnte nicht geöffnet werden.&quot; 
	 &lt;&lt; endl;
  }  
  char buffer[512];
  mapFile.getline( buffer, sizeof(buffer) );
  double mydouble = atof( buffer );
</code></pre>
<p>Nun habe ich das Problem, dass in mydouble nicht genau der Wert steht, wie er in der Datei zu finden ist:<br />
Datei: 9.78555<br />
Ausgabe von mydouble: 9.7855500000000006</p>
<p>Liegt es daran, dass atof in einen Float umwandelt und dann falsch gerundet wird? Wie kann ich diesen Fehler beheben?</p>
<p>Dankeschoen,<br />
Andy</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/220307/double-aus-datei-auslesen-wert-nicht-ganz-richtig</link><generator>RSS for Node</generator><lastBuildDate>Wed, 07 Oct 2026 11:00:49 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/220307.rss" rel="self" type="application/rss+xml"/><pubDate>Thu, 14 Aug 2008 13:14:35 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Double aus Datei auslesen - Wert nicht ganz richtig on Thu, 14 Aug 2008 13:14:35 GMT]]></title><description><![CDATA[<p>Hallo,</p>
<p>ich habe folgendermassen versucht, aus einer Datei einen Double-Wert zu lesen:</p>
<pre><code class="language-cpp">void MapModel::loadMapFile(char* fileName)
{

  ifstream mapFile(fileName);
  if ( mapFile.is_open() != true ) {
    cerr &lt;&lt; &quot;Die Datei konnte nicht geöffnet werden.&quot; 
	 &lt;&lt; endl;
  }  
  char buffer[512];
  mapFile.getline( buffer, sizeof(buffer) );
  double mydouble = atof( buffer );
</code></pre>
<p>Nun habe ich das Problem, dass in mydouble nicht genau der Wert steht, wie er in der Datei zu finden ist:<br />
Datei: 9.78555<br />
Ausgabe von mydouble: 9.7855500000000006</p>
<p>Liegt es daran, dass atof in einen Float umwandelt und dann falsch gerundet wird? Wie kann ich diesen Fehler beheben?</p>
<p>Dankeschoen,<br />
Andy</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1564739</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1564739</guid><dc:creator><![CDATA[sunnyandy]]></dc:creator><pubDate>Thu, 14 Aug 2008 13:14:35 GMT</pubDate></item><item><title><![CDATA[Reply to Double aus Datei auslesen - Wert nicht ganz richtig on Thu, 14 Aug 2008 13:17:25 GMT]]></title><description><![CDATA[<p>dass ist die normale double (bzw float) ungenauigkeit...</p>
<p>damit musst du rechnen, ist halt das doofe an computern...</p>
<p>ich hatte mal den fall dass ich eine double zahl einfach nur + 1.0 null (und das merhmals hintereinadner in ner shcleife) gerechnet hab und da hat sich am ende immer ein/zweit zahlen verändert...</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1564742</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1564742</guid><dc:creator><![CDATA[Skym0sh0]]></dc:creator><pubDate>Thu, 14 Aug 2008 13:17:25 GMT</pubDate></item><item><title><![CDATA[Reply to Double aus Datei auslesen - Wert nicht ganz richtig on Thu, 14 Aug 2008 13:24:20 GMT]]></title><description><![CDATA[<p>Deswegen sollte man es auch vermeiden Fließkommazahlen auf Gleichheit zu prüfen. Meist ist es am besten mit Toleranzen zu arbeiten.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1564750</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1564750</guid><dc:creator><![CDATA[Fellhuhn]]></dc:creator><pubDate>Thu, 14 Aug 2008 13:24:20 GMT</pubDate></item><item><title><![CDATA[Reply to Double aus Datei auslesen - Wert nicht ganz richtig on Thu, 14 Aug 2008 13:55:39 GMT]]></title><description><![CDATA[<p>sunnyandy schrieb:</p>
<blockquote>
<pre><code class="language-cpp">if ( mapFile.is_open() != true ) {
</code></pre>
</blockquote>
<p>WTF?!</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1564784</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1564784</guid><dc:creator><![CDATA[Konrad Rudolph]]></dc:creator><pubDate>Thu, 14 Aug 2008 13:55:39 GMT</pubDate></item><item><title><![CDATA[Reply to Double aus Datei auslesen - Wert nicht ganz richtig on Thu, 14 Aug 2008 14:06:03 GMT]]></title><description><![CDATA[<p>Konrad Rudolph schrieb:</p>
<blockquote>
<p>WTF?!</p>
</blockquote>
<p>Y WTF? FWIW, das ist nur nebensache.UAAFF...</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1564796</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1564796</guid><dc:creator><![CDATA[sunnyandy]]></dc:creator><pubDate>Thu, 14 Aug 2008 14:06:03 GMT</pubDate></item><item><title><![CDATA[Reply to Double aus Datei auslesen - Wert nicht ganz richtig on Thu, 14 Aug 2008 14:11:11 GMT]]></title><description><![CDATA[<p>Danke fuer eure Kommentare.<br />
Das liegt wohl an der Mantisse fuer die Gleitkommadarstellung oder?</p>
<p>Wie macht man es denn sonst, wenn man einen ziemlich genauen Wert einlesen moechte?<br />
Kann ich die Werte nicht als ganze Zahlen einlesen und dann das Komma verschieben oder bringt das keinen Effekt?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1564800</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1564800</guid><dc:creator><![CDATA[sunnyandy]]></dc:creator><pubDate>Thu, 14 Aug 2008 14:11:11 GMT</pubDate></item><item><title><![CDATA[Reply to Double aus Datei auslesen - Wert nicht ganz richtig on Thu, 14 Aug 2008 15:21:20 GMT]]></title><description><![CDATA[<p>sunnyandy schrieb:</p>
<blockquote>
<p>Danke fuer eure Kommentare.<br />
Das liegt wohl an der Mantisse fuer die Gleitkommadarstellung oder?</p>
</blockquote>
<p>nein, das liegt daran, dass die Zahl aus der Datei im Zehnersystem und im Computer im Binärsystem angegeben ist. Und man kann im allgemeinen Fall eine Dezimalzahl nicht in eine endliche binäre Form umwandeln. Da nützt auch kein long double oder super long double - selbst wenn die Mantisse so lang wäre wie der gesamte Speicher aller Rechner dieser Welt, kann damit der Wert 9,78555 nicht exakt binär abgebildet werden.</p>
<p>sunnyandy schrieb:</p>
<blockquote>
<p>Wie macht man es denn sonst, wenn man einen ziemlich genauen Wert einlesen moechte?<br />
Kann ich die Werte nicht als ganze Zahlen einlesen und dann das Komma verschieben oder bringt das keinen Effekt?</p>
</blockquote>
<p>Nein, bringt nichts wie oben beschrieben.</p>
<p>9,7855500000000006 gegenüber 9,78555 ist ziemlich genau.</p>
<p>Das Einlesen geht auch einfach mit 'mapFile &gt;&gt; mydouble' etwa so:</p>
<pre><code class="language-cpp">void MapModel::loadMapFile(char* fileName)
{

  ifstream mapFile(fileName);
  if ( mapFile.is_open() != true ) {
    cerr &lt;&lt; &quot;Die Datei konnte nicht geöffnet werden.&quot;
     &lt;&lt; endl;
  }  
  double mydouble;
  if( mapFile &gt;&gt; mydouble )
    cout &lt;&lt; &quot;Gelesen: &quot; &lt;&lt; mydouble &lt;&lt; endl;
</code></pre>
<p>Gruß<br />
Werner</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1564846</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1564846</guid><dc:creator><![CDATA[Werner Salomon]]></dc:creator><pubDate>Thu, 14 Aug 2008 15:21:20 GMT</pubDate></item></channel></rss>