<?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 nicht Genau genug!]]></title><description><![CDATA[<p>Hi!<br />
Ich bin auf der suche nach einer bibliothek, die genauer als double rechnen kann, und dazu trigonometrische funktionen, also sin, cos, asin acos usw. unterstützt.<br />
Hab nämlich folgendes Problem:<br />
Bei folgender Rechnung und angabe gleicher Winkel entsteht ein Fehler. Die Formel berechnet die Entfernung zweiter Punkte auf einer Kugeloberfläche.<br />
<a href="http://upload.wikimedia.org/math/f/0/3/f03ff2d0f9150fa8c707ebc30e37ae17.png" rel="nofollow">http://upload.wikimedia.org/math/f/0/3/f03ff2d0f9150fa8c707ebc30e37ae17.png</a><br />
Geb ich jetzt gleiche Koordinanten an, so entspricht der Fehler 2000m bezogen auf die Erdoberfläche. Viel zu viel für meine Anwendung. Was kann ich da machen?</p>
<p>gmp unterstützt meines wissens leider kein sinus, cosinus usw.</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/163505/double-nicht-genau-genug</link><generator>RSS for Node</generator><lastBuildDate>Sun, 13 Sep 2026 05:08:22 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/163505.rss" rel="self" type="application/rss+xml"/><pubDate>Mon, 30 Oct 2006 12:22:27 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Double nicht Genau genug! on Mon, 30 Oct 2006 12:22:27 GMT]]></title><description><![CDATA[<p>Hi!<br />
Ich bin auf der suche nach einer bibliothek, die genauer als double rechnen kann, und dazu trigonometrische funktionen, also sin, cos, asin acos usw. unterstützt.<br />
Hab nämlich folgendes Problem:<br />
Bei folgender Rechnung und angabe gleicher Winkel entsteht ein Fehler. Die Formel berechnet die Entfernung zweiter Punkte auf einer Kugeloberfläche.<br />
<a href="http://upload.wikimedia.org/math/f/0/3/f03ff2d0f9150fa8c707ebc30e37ae17.png" rel="nofollow">http://upload.wikimedia.org/math/f/0/3/f03ff2d0f9150fa8c707ebc30e37ae17.png</a><br />
Geb ich jetzt gleiche Koordinanten an, so entspricht der Fehler 2000m bezogen auf die Erdoberfläche. Viel zu viel für meine Anwendung. Was kann ich da machen?</p>
<p>gmp unterstützt meines wissens leider kein sinus, cosinus usw.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1164426</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1164426</guid><dc:creator><![CDATA[Maxi]]></dc:creator><pubDate>Mon, 30 Oct 2006 12:22:27 GMT</pubDate></item><item><title><![CDATA[Reply to Double nicht Genau genug! on Mon, 30 Oct 2006 12:41:50 GMT]]></title><description><![CDATA[<p>Der kleinste Wert, den man mit double darstellen kann und bei der Addition mit 1 nicht weggerundet wird, beträgt ca. 2E-16. (bei eine 8Byte double). Wenn man also den Erdumfang von ca. 40.000,00km auf 1 bezieht, so entsprächen diese 2E-16 etwa 8Pikometer also etwa im Bereich Atomarer Größenordnungen.</p>
<p>Dein Problem wirst Du also mit einem genaueren double auch nicht lösen. Was bedeuten <span class="katex"><span class="katex-mathml"><math><semantics><mrow><msub><mi>θ</mi><mi>A</mi></msub></mrow><annotation encoding="application/x-tex">\theta_A</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="strut" style="height:0.69444em;"></span><span class="strut bottom" style="height:0.84444em;vertical-align:-0.15em;"></span><span class="base textstyle uncramped"><span class="mord"><span class="mord mathit" style="margin-right:0.02778em;">θ</span><span class="vlist"><span style="top:0.15em;margin-right:0.05em;margin-left:-0.02778em;"><span class="fontsize-ensurer reset-size5 size5"><span style="font-size:0em;">​</span></span><span class="reset-textstyle scriptstyle cramped"><span class="mord mathit">A</span></span></span><span class="baseline-fix"><span class="fontsize-ensurer reset-size5 size5"><span style="font-size:0em;">​</span></span>​</span></span></span></span></span></span>, <span class="katex"><span class="katex-mathml"><math><semantics><mrow><msub><mi>θ</mi><mi>B</mi></msub></mrow><annotation encoding="application/x-tex">\theta_B</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="strut" style="height:0.69444em;"></span><span class="strut bottom" style="height:0.84444em;vertical-align:-0.15em;"></span><span class="base textstyle uncramped"><span class="mord"><span class="mord mathit" style="margin-right:0.02778em;">θ</span><span class="vlist"><span style="top:0.15em;margin-right:0.05em;margin-left:-0.02778em;"><span class="fontsize-ensurer reset-size5 size5"><span style="font-size:0em;">​</span></span><span class="reset-textstyle scriptstyle cramped"><span class="mord mathit" style="margin-right:0.05017em;">B</span></span></span><span class="baseline-fix"><span class="fontsize-ensurer reset-size5 size5"><span style="font-size:0em;">​</span></span>​</span></span></span></span></span></span>, <span class="katex"><span class="katex-mathml"><math><semantics><mrow><mi>λ</mi></mrow><annotation encoding="application/x-tex">\lambda</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="strut" style="height:0.69444em;"></span><span class="strut bottom" style="height:0.69444em;vertical-align:0em;"></span><span class="base textstyle uncramped"><span class="mord mathit">λ</span></span></span></span> und <span class="katex"><span class="katex-mathml"><math><semantics><mrow><mi>ζ</mi></mrow><annotation encoding="application/x-tex">\zeta</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="strut" style="height:0.69444em;"></span><span class="strut bottom" style="height:0.8888799999999999em;vertical-align:-0.19444em;"></span><span class="base textstyle uncramped"><span class="mord mathit" style="margin-right:0.07378em;">ζ</span></span></span></span>?</p>
<p>Gruß<br />
Werner</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1164435</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1164435</guid><dc:creator><![CDATA[Werner Salomon]]></dc:creator><pubDate>Mon, 30 Oct 2006 12:41:50 GMT</pubDate></item><item><title><![CDATA[Reply to Double nicht Genau genug! on Mon, 30 Oct 2006 13:52:49 GMT]]></title><description><![CDATA[<p>Ich denke, dass du falsch rechnest !<br />
Denk daran, dass die trigonometrischen funktionen mit dem Bogenmass arbeiten !</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1164486</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1164486</guid><dc:creator><![CDATA[megaweber]]></dc:creator><pubDate>Mon, 30 Oct 2006 13:52:49 GMT</pubDate></item><item><title><![CDATA[Reply to Double nicht Genau genug! on Mon, 30 Oct 2006 14:16:38 GMT]]></title><description><![CDATA[<p>Die Formel habe ich <a href="http://de.wikipedia.org/wiki/Orthodrome" rel="nofollow">hier</a> gefunden. Wenn man zwei gleiche Koordinaten einsetzt, berechnet sich der arccos von 1 zu den besagten 2.2E-16 - statt der korrekten 0.0. Multipliziert mit dem Erdradius von 6370km erhält man einen Wert von 0,0000014014mm.</p>
<p>Wie kommst Du da auf 2000m?</p>
<p>Gruß<br />
Werner</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1164511</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1164511</guid><dc:creator><![CDATA[Werner Salomon]]></dc:creator><pubDate>Mon, 30 Oct 2006 14:16:38 GMT</pubDate></item><item><title><![CDATA[Reply to Double nicht Genau genug! on Mon, 30 Oct 2006 16:00:02 GMT]]></title><description><![CDATA[<p>hm... komisch. hier meine rechnung:</p>
<pre><code class="language-cpp">// p1.lat, p2.lat, p1.lon, p2.lon sind floats 
// (ist aber ncih wichtig, wird ja dann eh in double umgewandelt)

double c = sin(p1.lat)*sin(p2.lat)+cos(p1.lat)*cos(p2.lat)*(cos(p1.lon-p2.lon));
return Radius*acos(c);

///
Radius = 6370000.0f; // so ähnlich, aber genauer in meinem 
// programm, hab ich grad nich zur hand
</code></pre>
<p>da kommen bei mir 2000meter raus. ja, und ich rechne im Bogenmaß.</p>
<p>float DegToRad(float d)<br />
{<br />
return d*pi/180.0f; // pi auf 15 Stellen aus dem Windows-taschenrechner<br />
}</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1164643</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1164643</guid><dc:creator><![CDATA[Maxi]]></dc:creator><pubDate>Mon, 30 Oct 2006 16:00:02 GMT</pubDate></item><item><title><![CDATA[Reply to Double nicht Genau genug! on Mon, 30 Oct 2006 20:51:21 GMT]]></title><description><![CDATA[<p>Hallo Maxi,</p>
<p>Dein Code sieht auf den ersten Blick völlig korrekt aus; ist er aber nicht. Man muss dazu wissen, dass es die trigonometrischen Funktionen sowohl für float als auch für double gibt und Du mischt beide Typen. Du berechnest den Wert für 'c' noch als float aber durch die Zuweisung nach double werden die letzen Binärstellen von 'c' nicht mit 0-en sondern mit dem Rundungsfehler von float belegt. Mit dem Ergebnis gehst Du jetzt in eine Funktion der Signatur acos( double ) hinein. die Funktion arccos hat für x=1 die Steigung unendlich. Numerisch wirkt sich also jede kleinste Änderung von x sehr stark beim Ergebnis aus.</p>
<p>Dein Code würde funktionieren, wenn man durchgängig float oder durchgängig double benutzt. Nur Mischen darst Du nicht.<br />
Also entweder</p>
<pre><code class="language-cpp">float c = ..;
</code></pre>
<p>oder</p>
<pre><code class="language-cpp">double lat, lon;
</code></pre>
<p>Gruß<br />
Werner</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1164917</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1164917</guid><dc:creator><![CDATA[Werner Salomon]]></dc:creator><pubDate>Mon, 30 Oct 2006 20:51:21 GMT</pubDate></item><item><title><![CDATA[Reply to Double nicht Genau genug! on Mon, 30 Oct 2006 21:29:38 GMT]]></title><description><![CDATA[<p>aber ich dachte sin hat das argument double und sinf das argument float. Also müssten doch die floats automatisch in doubles umgewandelt werden, oder?</p>
<p>wenn ich vor den sin, cos... aufrufen die floats in double uwandle funktionierts komischerweise...</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1164940</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1164940</guid><dc:creator><![CDATA[Maxi]]></dc:creator><pubDate>Mon, 30 Oct 2006 21:29:38 GMT</pubDate></item><item><title><![CDATA[Reply to Double nicht Genau genug! on Mon, 30 Oct 2006 23:36:20 GMT]]></title><description><![CDATA[<p>In C++ gibt es bei sin, cos, ... overloads für float und double, d.h. es gibt</p>
<pre><code class="language-cpp">float sin(float x);
// und
double sin(double x);
</code></pre>
<p>D.h. wenn du float reintust kommt auch float raus <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/1164992</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1164992</guid><dc:creator><![CDATA[hustbaer]]></dc:creator><pubDate>Mon, 30 Oct 2006 23:36:20 GMT</pubDate></item><item><title><![CDATA[Reply to Double nicht Genau genug! on Tue, 31 Oct 2006 08:52:52 GMT]]></title><description><![CDATA[<p>achso? das wusst ich gar nihc. Ich dacht eben immer cos = double, cosf = float</p>
<p>naj,a hat sich ja nun geklärt <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="🙂"
    /> Rechnung funktioniert auch sehr gut</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1165107</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1165107</guid><dc:creator><![CDATA[Maxi]]></dc:creator><pubDate>Tue, 31 Oct 2006 08:52:52 GMT</pubDate></item></channel></rss>