<?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[Überlauf eines long double?]]></title><description><![CDATA[<p>Hallo!</p>
<p>Ich habe ein Problem mit einer Planetensimulation. Ich will den Flächeninhalt bestimmen, der von der verbindungslinie zwischen planet und Sonne überstrichen wird. wie man sich denken kann, kommen riesige Zahlen raus (die Erde ist 150 Mio. km von der Sonne entfernt). Ich berechne diese Fläche, indem ich sie in viele Dreiecke aufteile, die einzeln mit dieser Funktion berechnet werden:</p>
<pre><code class="language-cpp">long double Flaeche(long double xa, long double ya, long double xb, long double yb, long double xc, long double yc)
   {long double a = sqrtl(powl((xb-xc), 2.0) + powl((yb-yc), 2.0));
    long double b = sqrtl(powl((xc-xa), 2.0) + powl((yc-ya), 2.0));
    long double c = sqrtl(powl((xa-xb), 2.0) + powl((ya-yb), 2.0));
    long double s = (a+b+c)/2.0;
    long double Flaecheninhalt = (sqrtl((s*(s-a)*(s-b)*(s-c))));
    if (Flaecheninhalt&lt;0){
       Flaecheninhalt = Flaecheninhalt * (-1.0);}
    return Flaecheninhalt;
    }
</code></pre>
<p>Die Teilflächen werden dann addiert.</p>
<p>Dabei kommen aber manchmal Zahlen raus, die kleiner als 0 sind. Die if-Abfrage</p>
<pre><code class="language-cpp">if (Flaecheninhalt&lt;0){
       Flaecheninhalt = Flaecheninhalt * (-1.0);}
</code></pre>
<p>bemerkt dies aber nicht.</p>
<p>Läuft der long double über?</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/197006/überlauf-eines-long-double</link><generator>RSS for Node</generator><lastBuildDate>Thu, 01 Oct 2026 00:00:36 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/197006.rss" rel="self" type="application/rss+xml"/><pubDate>Mon, 05 Nov 2007 15:29:45 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Überlauf eines long double? on Mon, 05 Nov 2007 15:29:45 GMT]]></title><description><![CDATA[<p>Hallo!</p>
<p>Ich habe ein Problem mit einer Planetensimulation. Ich will den Flächeninhalt bestimmen, der von der verbindungslinie zwischen planet und Sonne überstrichen wird. wie man sich denken kann, kommen riesige Zahlen raus (die Erde ist 150 Mio. km von der Sonne entfernt). Ich berechne diese Fläche, indem ich sie in viele Dreiecke aufteile, die einzeln mit dieser Funktion berechnet werden:</p>
<pre><code class="language-cpp">long double Flaeche(long double xa, long double ya, long double xb, long double yb, long double xc, long double yc)
   {long double a = sqrtl(powl((xb-xc), 2.0) + powl((yb-yc), 2.0));
    long double b = sqrtl(powl((xc-xa), 2.0) + powl((yc-ya), 2.0));
    long double c = sqrtl(powl((xa-xb), 2.0) + powl((ya-yb), 2.0));
    long double s = (a+b+c)/2.0;
    long double Flaecheninhalt = (sqrtl((s*(s-a)*(s-b)*(s-c))));
    if (Flaecheninhalt&lt;0){
       Flaecheninhalt = Flaecheninhalt * (-1.0);}
    return Flaecheninhalt;
    }
</code></pre>
<p>Die Teilflächen werden dann addiert.</p>
<p>Dabei kommen aber manchmal Zahlen raus, die kleiner als 0 sind. Die if-Abfrage</p>
<pre><code class="language-cpp">if (Flaecheninhalt&lt;0){
       Flaecheninhalt = Flaecheninhalt * (-1.0);}
</code></pre>
<p>bemerkt dies aber nicht.</p>
<p>Läuft der long double über?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1398123</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1398123</guid><dc:creator><![CDATA[cbs-schüler]]></dc:creator><pubDate>Mon, 05 Nov 2007 15:29:45 GMT</pubDate></item><item><title><![CDATA[Reply to Überlauf eines long double? on Mon, 05 Nov 2007 15:43:12 GMT]]></title><description><![CDATA[<p>Also ich sehe in der Funktion nichts, was negative Werte hervorrufen könnte - evnetuell würde es helfen, wenn du die einzelnen Werte mal im Debugger betrachtest. Und wenn ein Gleitkommawert &quot;überläuft&quot;, bekommst du übrigens keine negativen Werte heraus, sondern 1.#inf (unendlich).</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1398141</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1398141</guid><dc:creator><![CDATA[CStoll]]></dc:creator><pubDate>Mon, 05 Nov 2007 15:43:12 GMT</pubDate></item><item><title><![CDATA[Reply to Überlauf eines long double? on Mon, 05 Nov 2007 16:24:26 GMT]]></title><description><![CDATA[<p>(s*(s-a)<em>(s-b)</em>(s-c)))</p>
<p>könnte dies negativ werden? <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/1398169</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1398169</guid><dc:creator><![CDATA[crashterpiece]]></dc:creator><pubDate>Mon, 05 Nov 2007 16:24:26 GMT</pubDate></item><item><title><![CDATA[Reply to Überlauf eines long double? on Mon, 05 Nov 2007 16:44:57 GMT]]></title><description><![CDATA[<p>nein.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1398180</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1398180</guid><dc:creator><![CDATA[*D*Evil]]></dc:creator><pubDate>Mon, 05 Nov 2007 16:44:57 GMT</pubDate></item><item><title><![CDATA[Reply to Überlauf eines long double? on Mon, 05 Nov 2007 16:59:14 GMT]]></title><description><![CDATA[<p>Ersetze doch mal die powl((xb-xc), 2.0) Aufrufe durch einfache Multiplikationen. Weiterhin kannst du um Überläufe zu vermeiden die Wurzel der Prudukte durch ein Produkt von Wurzeln ersetzen. Intern werden dann kleinere Werte verarbeitet. Also statt<br />
sqrtl((s*(s-a)<em>(s-b)</em>(s-c)))<br />
besser<br />
sqrtl(s)*sqrtl(s-a)*sqrtl(s-b)*sqrtl(s-c))</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1398186</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1398186</guid><dc:creator><![CDATA[Braunstein]]></dc:creator><pubDate>Mon, 05 Nov 2007 16:59:14 GMT</pubDate></item><item><title><![CDATA[Reply to Überlauf eines long double? on Tue, 06 Nov 2007 15:07:16 GMT]]></title><description><![CDATA[<p>Vielen dank für die Hilfe. Ich habe aber glaube ich das eigentliche Problem entdeckt: Ich schreibe die Ergebnisse in eine Datei. Wie kann ich C++ dazu bringen, die Zahlen ordentlich formatiert in eine Datei zu schreiben? Ich habe folgendes Experiment gemacht:</p>
<pre><code class="language-cpp">long double i = 9.21369875421325665478;
    char zwischenspeicher[1000];
    FILE *fl;
    fl = fopen(&quot;Flächeninhalte.txt&quot;, &quot;w&quot;);
    sprintf(zwischenspeicher, &quot;%g\n&quot;, i);
    fprintf(fl, zwischenspeicher);
    fclose(fl);
</code></pre>
<p>In der Datei stand jedoch -3.96111e-215 ...</p>
<p>Kann mir jemand helfen?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1398731</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1398731</guid><dc:creator><![CDATA[cbs-schüler]]></dc:creator><pubDate>Tue, 06 Nov 2007 15:07:16 GMT</pubDate></item><item><title><![CDATA[Reply to Überlauf eines long double? on Tue, 06 Nov 2007 15:26:10 GMT]]></title><description><![CDATA[<p>Wenn du schon mit C++ arbeitest, dann nimm auch C++ Methoden (ja, man könnte auch fprintf() soweit zurechtbiegen, aber wozu der aufwand?):</p>
<pre><code class="language-cpp">ofstream f1(&quot;Flächeninhalte.txt&quot;);
f1&lt;&lt;i&lt;&lt;endl;
</code></pre>
<p>(btw, du kannst die fprintf()-Ausgaben genauso formatieren wie bei sprintf() ;))</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1398751</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1398751</guid><dc:creator><![CDATA[CStoll]]></dc:creator><pubDate>Tue, 06 Nov 2007 15:26:10 GMT</pubDate></item><item><title><![CDATA[Reply to Überlauf eines long double? on Tue, 06 Nov 2007 15:32:34 GMT]]></title><description><![CDATA[<p>Ich habs ausprobiert, das Programm schreibt einen falschen Wert in die Datei. Statt 9.21369875421325665478 schreibt es -3.96111e-215.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1398755</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1398755</guid><dc:creator><![CDATA[cbs-schüler]]></dc:creator><pubDate>Tue, 06 Nov 2007 15:32:34 GMT</pubDate></item><item><title><![CDATA[Reply to Überlauf eines long double? on Tue, 06 Nov 2007 15:34:02 GMT]]></title><description><![CDATA[<p>Und was sagt dein Debugger zu dieser Variablen?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1398758</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1398758</guid><dc:creator><![CDATA[CStoll]]></dc:creator><pubDate>Tue, 06 Nov 2007 15:34:02 GMT</pubDate></item><item><title><![CDATA[Reply to Überlauf eines long double? on Tue, 06 Nov 2007 15:41:05 GMT]]></title><description><![CDATA[<p>Ich komme mit dem dev-c++ debugger nicht zurecht. wie kann ich eine Variable beobachten und das Programm Zeile für Zeile ausführen?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1398761</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1398761</guid><dc:creator><![CDATA[cbs-schüler]]></dc:creator><pubDate>Tue, 06 Nov 2007 15:41:05 GMT</pubDate></item><item><title><![CDATA[Reply to Überlauf eines long double? on Tue, 06 Nov 2007 15:42:29 GMT]]></title><description><![CDATA[<p>ich also weis ja nicht genau was bei A B C für differenzen auftreten können, aber bin der Meinung das s*(s-a)<em>(s-b)</em>(s-c) auch negativ werden kann, aufgelöst sollte das so aussehen</p>
<p>s^4 + (s^3)*a + (s^2)*b*c + s*a*b*c - (s^3)*b - (s^3)*c - (s^2)*a*b -(s^2)*a*c</p>
<p>was zeigt das bei dem Minusteil das C mit höher ptonzierten S multipliziert wird, daraus folgt ein sehr großen c bei sehr kleinem a und b wird s durch die formel s=(a+b+c)/2; kleiner c und das um einiges. Daher kommen evtl falsch eingelesene wete rein oder der gleichen, weil bei einem dreieck (a,b,c) sollte das normal nicht auftreten. jeddoch lieben wir alle das programmieren weil dinge passieren die so nicht passieren sollten oder^^? Grundprinzipiel kann die formel negative werte ausgeben, ausser ich habe falsch aufgelöst und normal sollte sie aber bei seitenlänmgen a,b,c eines dreiecks immer positiv sein.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1398763</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1398763</guid><dc:creator><![CDATA[oelsni]]></dc:creator><pubDate>Tue, 06 Nov 2007 15:42:29 GMT</pubDate></item><item><title><![CDATA[Reply to Überlauf eines long double? on Tue, 06 Nov 2007 16:11:55 GMT]]></title><description><![CDATA[<p>Dann solltest du den Wert vorher testen, bevor du die Wurzel ziehst, denn die Wurzel einer negativen Zahl ist nun mal nicht definiert und erzeugt bei Aufruf von sqrt() eine std::domain_error Ausnahme.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1398784</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1398784</guid><dc:creator><![CDATA[Th]]></dc:creator><pubDate>Tue, 06 Nov 2007 16:11:55 GMT</pubDate></item><item><title><![CDATA[Reply to Überlauf eines long double? on Tue, 06 Nov 2007 16:16:30 GMT]]></title><description><![CDATA[<p><a class="plugin-mentions-user plugin-mentions-a" href="https://www.c-plusplus.net/forum/uid/12852">@oelsni</a><br />
Nun verrat mir bitte mal wie bei einen Dreieck eine Seite sehr groß und die beiden anderen sehr klein sein sollen?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1398788</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1398788</guid><dc:creator><![CDATA[Braunstein]]></dc:creator><pubDate>Tue, 06 Nov 2007 16:16:30 GMT</pubDate></item><item><title><![CDATA[Reply to Überlauf eines long double? on Tue, 06 Nov 2007 16:21:22 GMT]]></title><description><![CDATA[<p>Ich habe das Beispielprogramm (siehe vorletzter post von mir) mit dem Debugger getestet. Der Debugger zeigt die long double Variable richtig an, sobald ich sie aber in die Datei schreibe, steht ein ganz anderer Wert in der Datei. <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f61e.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--disappointed_face"
      title=":("
      alt="😞"
    /> Weiß einer, wie ich das verhindern kann?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1398793</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1398793</guid><dc:creator><![CDATA[cbs-schüler]]></dc:creator><pubDate>Tue, 06 Nov 2007 16:21:22 GMT</pubDate></item><item><title><![CDATA[Reply to Überlauf eines long double? on Tue, 06 Nov 2007 16:35:17 GMT]]></title><description><![CDATA[<p>Wie schreibst du denn jetzt den Wert in die Datei (mittels fstream)?<br />
Evtl. mußt du noch einige Formatierungsflags (fixed oder scientific) angeben?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1398800</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1398800</guid><dc:creator><![CDATA[Th]]></dc:creator><pubDate>Tue, 06 Nov 2007 16:35:17 GMT</pubDate></item><item><title><![CDATA[Reply to Überlauf eines long double? on Tue, 06 Nov 2007 16:37:38 GMT]]></title><description><![CDATA[<p>Mein Programm sieht so aus:</p>
<pre><code class="language-cpp">long double i = 9.21369875421325665478;
ofstream f1(&quot;Flächeninhalte.txt&quot;); 
f1&lt;&lt;i&lt;&lt;endl;
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1398804</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1398804</guid><dc:creator><![CDATA[cbs-schüler]]></dc:creator><pubDate>Tue, 06 Nov 2007 16:37:38 GMT</pubDate></item><item><title><![CDATA[Reply to Überlauf eines long double? on Tue, 06 Nov 2007 16:40:42 GMT]]></title><description><![CDATA[<p>Braunstein schrieb:</p>
<blockquote>
<p><a class="plugin-mentions-user plugin-mentions-a" href="https://www.c-plusplus.net/forum/uid/12852">@oelsni</a><br />
Nun verrat mir bitte mal wie bei einen Dreieck eine Seite sehr groß und die beiden anderen sehr klein sein sollen?</p>
</blockquote>
<p>krümmung des raums aufgrund von masse-singularitäten</p>
<p>vielleicht sind die berechnungen ja allesamt richtig. nur unser verstand ist zu klein, um dies zu begreifen <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/1398807</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1398807</guid><dc:creator><![CDATA[crashterpiece]]></dc:creator><pubDate>Tue, 06 Nov 2007 16:40:42 GMT</pubDate></item><item><title><![CDATA[Reply to Überlauf eines long double? on Tue, 06 Nov 2007 17:13:21 GMT]]></title><description><![CDATA[<p>kann mir jemand erklären, wie man einen long double in einen string umwandelt? Oder gibt es einen anderen Weg, um einen double korrekt(!) in eine Datei zu schreiben? Ich komm mit meinem Programm and der Stelle echt nicht weiter.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1398816</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1398816</guid><dc:creator><![CDATA[cbs-schüler]]></dc:creator><pubDate>Tue, 06 Nov 2007 17:13:21 GMT</pubDate></item><item><title><![CDATA[Reply to Überlauf eines long double? on Tue, 06 Nov 2007 17:25:29 GMT]]></title><description><![CDATA[<p>Hast du auch in der richtigen datei nachgeschaut? Dein Code funktioniert bei mir ohne Probleme.</p>
<pre><code class="language-cpp">#include &lt;iostream&gt;
#include &lt;sstream&gt;
#include &lt;iomanip&gt;
using namespace std;

int main()
{
    long double i = 9.21369875421325665478;
    stringstream f1;
    f1 &lt;&lt; std::setprecision(15) &lt;&lt; i &lt;&lt; endl; //mehr als 15 Stellen sind auch bei long double nicht drin
    cout &lt;&lt; f1.str() &lt;&lt; endl;;
    return 0;
}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1398821</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1398821</guid><dc:creator><![CDATA[Braunstein]]></dc:creator><pubDate>Tue, 06 Nov 2007 17:25:29 GMT</pubDate></item><item><title><![CDATA[Reply to Überlauf eines long double? on Tue, 06 Nov 2007 17:42:06 GMT]]></title><description><![CDATA[<p>Ich habe den Code ausprobiert, bei mir zeigt er eine ganz falsche Zahl am Bildschirm an (dasselbe Problem, wie vorher in der Datei). Woran kann das liegen (ich nutz Dev-C++)? Muss ich vielleict die IDE wechseln? Wenn ja, welche kostenlosen IDEs würdet ihr mir empfehlen?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1398825</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1398825</guid><dc:creator><![CDATA[cbs-schüler]]></dc:creator><pubDate>Tue, 06 Nov 2007 17:42:06 GMT</pubDate></item><item><title><![CDATA[Reply to Überlauf eines long double? on Tue, 06 Nov 2007 17:52:28 GMT]]></title><description><![CDATA[<p>An der IDE kann das eigentlich nicht liegen, höchstens an der verwendeten Stream-Bibliothek.<br />
Dev-C++ ist allerdings sowieso veraltet und wird nicht mehr weiterentwickelt. Ich empfehle hier CodeBlocks (<a href="http://www.codeblocks.org" rel="nofollow">www.codeblocks.org</a>). Am besten gleich das Paket mit dem MinGW. Dann noch nach der Installation einen aktuellen NightlyBuild drauf und schon sieht es gut aus. <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f642.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--slightly_smiling_face"
      title=":)"
      alt="🙂"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/1398828</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1398828</guid><dc:creator><![CDATA[Braunstein]]></dc:creator><pubDate>Tue, 06 Nov 2007 17:52:28 GMT</pubDate></item><item><title><![CDATA[Reply to Überlauf eines long double? on Tue, 06 Nov 2007 18:22:23 GMT]]></title><description><![CDATA[<p>vielen dank, werde es mal mit CodeBlocks versuchen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1398842</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1398842</guid><dc:creator><![CDATA[cbs-schüler]]></dc:creator><pubDate>Tue, 06 Nov 2007 18:22:23 GMT</pubDate></item></channel></rss>