<?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[std::numeric_limits&amp;lt;int&amp;gt;::max() in ASCII Datei schreiben und wieder einlesen]]></title><description><![CDATA[<p>Folgendes Problem</p>
<pre><code class="language-cpp">double inf = std::numeric_limits&lt;double&gt;::max(); 
//-&gt;inf = 1.7976931348623157e+308
os&lt;&lt;setprecision(10);
ofstream os(&quot;txt&quot;);
os&lt;&lt;inf;

ifstream is(&quot;txt&quot;);
is&gt;&gt;inf; //-&gt;inf = -9.2559631349317831e+061
</code></pre>
<p>Im ASCII File steht der Wert gerundet -&gt; also grösser als std::numeric_limits&lt;double&gt;::max()<br />
Daher dachte ich, ich nehme einfach einen long double beim einlesen und setze inf auf max, wenn der wert grösser als max ist.</p>
<p>geht aber auch nicht...</p>
<p>Wie kann man hier konststent die Werte rausschreiben bzw. einlesen?</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/223505/std-numeric_limits-lt-int-gt-max-in-ascii-datei-schreiben-und-wieder-einlesen</link><generator>RSS for Node</generator><lastBuildDate>Sat, 03 Oct 2026 19:19:11 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/223505.rss" rel="self" type="application/rss+xml"/><pubDate>Fri, 26 Sep 2008 16:39:08 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to std::numeric_limits&amp;lt;int&amp;gt;::max() in ASCII Datei schreiben und wieder einlesen on Fri, 26 Sep 2008 16:54:03 GMT]]></title><description><![CDATA[<p>Folgendes Problem</p>
<pre><code class="language-cpp">double inf = std::numeric_limits&lt;double&gt;::max(); 
//-&gt;inf = 1.7976931348623157e+308
os&lt;&lt;setprecision(10);
ofstream os(&quot;txt&quot;);
os&lt;&lt;inf;

ifstream is(&quot;txt&quot;);
is&gt;&gt;inf; //-&gt;inf = -9.2559631349317831e+061
</code></pre>
<p>Im ASCII File steht der Wert gerundet -&gt; also grösser als std::numeric_limits&lt;double&gt;::max()<br />
Daher dachte ich, ich nehme einfach einen long double beim einlesen und setze inf auf max, wenn der wert grösser als max ist.</p>
<p>geht aber auch nicht...</p>
<p>Wie kann man hier konststent die Werte rausschreiben bzw. einlesen?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1588593</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1588593</guid><dc:creator><![CDATA[muffmolch]]></dc:creator><pubDate>Fri, 26 Sep 2008 16:54:03 GMT</pubDate></item><item><title><![CDATA[Reply to std::numeric_limits&amp;lt;int&amp;gt;::max() in ASCII Datei schreiben und wieder einlesen on Fri, 26 Sep 2008 17:07:42 GMT]]></title><description><![CDATA[<p><code>long double</code> ist bei manchen Compilern nichts anderes als ein <code>double</code> . Für die tatsächlich Grösse musst du im Compilerhandbuch nachlesen.</p>
<p>Zu deinem Problem, wieso nicht so?</p>
<pre><code class="language-cpp">double inf = std::numeric_limits&lt;double&gt;::max(); 

ofstream os(&quot;txt&quot;); 
os &lt;&lt; setprecision(50);  // Gib ihm einfach genügend Präzision.
os &lt;&lt; inf; 

ifstream is(&quot;txt&quot;); 
is &gt;&gt; inf;
</code></pre>
<p>Grüssli</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1588600</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1588600</guid><dc:creator><![CDATA[Dravere]]></dc:creator><pubDate>Fri, 26 Sep 2008 17:07:42 GMT</pubDate></item><item><title><![CDATA[Reply to std::numeric_limits&amp;lt;int&amp;gt;::max() in ASCII Datei schreiben und wieder einlesen on Fri, 26 Sep 2008 17:12:46 GMT]]></title><description><![CDATA[<p>spontan fällt mir ein, bei der Ausgabe die Anzahl der Stellen derart anzugeben, dass der Wert ab- statt aufgerundet wird. Also entweder setprecision(8) oder 9 oder 12 - folgendes geht:</p>
<pre><code class="language-cpp">#include &lt;fstream&gt;
#include &lt;limits&gt;
#include &lt;iomanip&gt;
#include &lt;iostream&gt;

int main()
{
    using namespace std;
    double inf = std::numeric_limits&lt;double&gt;::max();
    //-&gt;inf = 1.7976931348623157e+308
    {
        ofstream os(&quot;txt&quot;);
        os&lt;&lt;setprecision(12);
        os&lt;&lt;inf;
    }

    ifstream is(&quot;txt&quot;);
    if( is&gt;&gt;inf )
    {   // inf = 1.79769313486e+308
        cout &lt;&lt; &quot;inf = &quot; &lt;&lt; inf &lt;&lt; endl;
    }
    return 0;
}
</code></pre>
<p>das ist natürlich keine wirkliche Lösung - wozu möchtest Du 'numeric_limits&lt;double&gt;::max' überhaupt speichern?</p>
<p>Gruß<br />
Werner</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1588602</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1588602</guid><dc:creator><![CDATA[Werner Salomon]]></dc:creator><pubDate>Fri, 26 Sep 2008 17:12:46 GMT</pubDate></item><item><title><![CDATA[Reply to std::numeric_limits&amp;lt;int&amp;gt;::max() in ASCII Datei schreiben und wieder einlesen on Fri, 26 Sep 2008 17:25:05 GMT]]></title><description><![CDATA[<p>zum Serialisieren.<br />
Beim meinen Schedules (step, begin, end) ist das ende z.B. std. mäßig std::numeric_limits&lt;double&gt;::max(). Naja ud beim Einlesen soll das auch wieder drinn stehen. Binär ist das kein Thema. Aber ASCII soll es auch gehen.</p>
<p>Und mit setprecision(50), kann man es nicht mehr ansehen <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/1588608</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1588608</guid><dc:creator><![CDATA[muffmolch]]></dc:creator><pubDate>Fri, 26 Sep 2008 17:25:05 GMT</pubDate></item><item><title><![CDATA[Reply to std::numeric_limits&amp;lt;int&amp;gt;::max() in ASCII Datei schreiben und wieder einlesen on Fri, 26 Sep 2008 17:26:36 GMT]]></title><description><![CDATA[<p>Muss es von Menschen lesbar sein? Wenn nicht entweder die wahrscheinlich 8 Byte schreiben oder wenn es Editor lesbar sein soll dann die 8 Byte als 16 Hex Ziffern.</p>
<p>EDIT: Eventuell auch 16 Hex Ziffern + die Ausgabe wie sie jetzt ist und beim einlesen nur die 16 Hex Ziffern beachten.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1588609</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1588609</guid><dc:creator><![CDATA[Ben04]]></dc:creator><pubDate>Fri, 26 Sep 2008 17:26:36 GMT</pubDate></item><item><title><![CDATA[Reply to std::numeric_limits&amp;lt;int&amp;gt;::max() in ASCII Datei schreiben und wieder einlesen on Fri, 26 Sep 2008 17:29:13 GMT]]></title><description><![CDATA[<p>Ja, es soll von Menschen gelesen werden können (denn alles andere wird direkt binät geschrieben). Der Anwender soll hier ggf. die Grenzen selbst anpassen können.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1588610</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1588610</guid><dc:creator><![CDATA[muffmolch]]></dc:creator><pubDate>Fri, 26 Sep 2008 17:29:13 GMT</pubDate></item><item><title><![CDATA[Reply to std::numeric_limits&amp;lt;int&amp;gt;::max() in ASCII Datei schreiben und wieder einlesen on Fri, 26 Sep 2008 17:39:41 GMT]]></title><description><![CDATA[<p>muffmolch schrieb:</p>
<blockquote>
<p>zum Serialisieren.<br />
Beim meinen Schedules (step, begin, end) ist das ende z.B. std. mäßig std::numeric_limits&lt;double&gt;::max(). Naja ud beim Einlesen soll das auch wieder drinn stehen. Binär ist das kein Thema. Aber ASCII soll es auch gehen.</p>
<p>Und mit setprecision(50), kann man es nicht mehr ansehen <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>Dann benutze</p>
<pre><code class="language-cpp">setprecision(std::numeric_limits&lt;double&gt;::digits10+2)
</code></pre>
<p>dann funktioniert auch:</p>
<pre><code class="language-cpp">if( is&gt;&gt;inf )
    {
        cout &lt;&lt; &quot;inf = &quot; &lt;&lt; inf &lt;&lt; endl;
        assert( inf == std::numeric_limits&lt;double&gt;::max() );
    }
</code></pre>
<p>garantiert ist dieses Verhalten wahrscheinlich nicht. Ich würde ja statt dessen die Ausgabe von numeric_limits&lt;double&gt;::infinity() empfehlen, das kann aber zumindest mit VC9 dann nicht mehr gelesen werden.</p>
<p>Gruß<br />
Werner</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1588616</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1588616</guid><dc:creator><![CDATA[Werner Salomon]]></dc:creator><pubDate>Fri, 26 Sep 2008 17:39:41 GMT</pubDate></item><item><title><![CDATA[Reply to std::numeric_limits&amp;lt;int&amp;gt;::max() in ASCII Datei schreiben und wieder einlesen on Fri, 26 Sep 2008 18:16:02 GMT]]></title><description><![CDATA[<p>danke, werner. So werde ich das machen!</p>
<p>wenn ich es richtig verstehe, dann entspricht digit10 den max nachkommastellen und das +2 der ersten Zahl (&quot;1&quot;) und dem &quot;.&quot;, ja?<br />
+2 für die erste Stelle + &quot;.&quot;</p>
<p>sollte dannfuer float analog gehen</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1588629</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1588629</guid><dc:creator><![CDATA[muffmolch]]></dc:creator><pubDate>Fri, 26 Sep 2008 18:16:02 GMT</pubDate></item><item><title><![CDATA[Reply to std::numeric_limits&amp;lt;int&amp;gt;::max() in ASCII Datei schreiben und wieder einlesen on Fri, 26 Sep 2008 18:31:27 GMT]]></title><description><![CDATA[<p>muffmolch schrieb:</p>
<blockquote>
<p>wenn ich es richtig verstehe, dann entspricht digit10 den max nachkommastellen und das +2 der ersten Zahl (&quot;1&quot;) und dem &quot;.&quot;, ja?<br />
+2 für die erste Stelle + &quot;.&quot;</p>
</blockquote>
<p>Nein nicht ganz - numeric_limits::digits10 ist lt. Standard: &quot;Number of base 10 digits that can be represented without change.&quot; Also die Anzahl der Ziffern (im Dezimalsystem), die sicher dargestellt werden können. Wenn Du umgekehrt aber aus den Dezimalziffern sicher wieder binär die selbe double-Zahl haben willst, musst Du mehr Ziffern angeben.</p>
<p>Anzahl Ziffern ist die Gesamtanzahl mit Vor- und Nachkommastellen. Wo das Komma steht ist irrelevant - das kann man ja über den Exponenten steuern.</p>
<p>muffmolch schrieb:</p>
<blockquote>
<p>sollte dann fuer float analog gehen</p>
</blockquote>
<p>Im Prinzip Ja - aber probier's lieber nochmal aus.</p>
<p>Gruß<br />
Werner</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1588647</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1588647</guid><dc:creator><![CDATA[Werner Salomon]]></dc:creator><pubDate>Fri, 26 Sep 2008 18:31:27 GMT</pubDate></item></channel></rss>