<?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[0 != -0 bei atan2]]></title><description><![CDATA[<p>Hallo C++'ler</p>
<p>neulich bin ich über einen Effekt gestolpert, der mir einiges an Arbeit beschert hat. Es geht um den Wert 0.0 beim Typ double. Dieser ist anscheinend nicht zwingend identisch zu -0.0 - wie folgendes kleines Programm zeigt:</p>
<pre><code class="language-cpp">#include &lt;cmath&gt;        // atan2
#include &lt;iostream&gt;

int main()
{
    using namespace std;
    const double null = 0.0;
    const double minus_null = -null;
    if( null != minus_null )
        cout &lt;&lt; &quot;Mein PC hat in Mathe gepennt &quot; &lt;&lt; endl;
    if( atan2( null, -1.0 ) * atan2( minus_null, -1.0 ) &lt; 0.0 )
        cout &lt;&lt; &quot;Null ist doch != -Null.&quot; &lt;&lt; endl;
    return 0;
}
</code></pre>
<p>Mit VC8 (Windows, Intel) übersetzt und laufen gelassen bekomme ich als Ausgabe:</p>
<pre><code>Null ist doch != -Null.
</code></pre>
<p>Bitte an Euch (vor allen an die mit abweichender Umgebung) - lasst das Programm mal laufen und berichtet was dann herauskommt.</p>
<p>Gruß<br />
Werner</p>
<p>@Edit: -null durch minus_null ausgetauscht - ändert aber nichts</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/221355/0-0-bei-atan2</link><generator>RSS for Node</generator><lastBuildDate>Tue, 06 Oct 2026 05:54:53 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/221355.rss" rel="self" type="application/rss+xml"/><pubDate>Thu, 28 Aug 2008 08:30:48 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to 0 != -0 bei atan2 on Thu, 28 Aug 2008 08:41:20 GMT]]></title><description><![CDATA[<p>Hallo C++'ler</p>
<p>neulich bin ich über einen Effekt gestolpert, der mir einiges an Arbeit beschert hat. Es geht um den Wert 0.0 beim Typ double. Dieser ist anscheinend nicht zwingend identisch zu -0.0 - wie folgendes kleines Programm zeigt:</p>
<pre><code class="language-cpp">#include &lt;cmath&gt;        // atan2
#include &lt;iostream&gt;

int main()
{
    using namespace std;
    const double null = 0.0;
    const double minus_null = -null;
    if( null != minus_null )
        cout &lt;&lt; &quot;Mein PC hat in Mathe gepennt &quot; &lt;&lt; endl;
    if( atan2( null, -1.0 ) * atan2( minus_null, -1.0 ) &lt; 0.0 )
        cout &lt;&lt; &quot;Null ist doch != -Null.&quot; &lt;&lt; endl;
    return 0;
}
</code></pre>
<p>Mit VC8 (Windows, Intel) übersetzt und laufen gelassen bekomme ich als Ausgabe:</p>
<pre><code>Null ist doch != -Null.
</code></pre>
<p>Bitte an Euch (vor allen an die mit abweichender Umgebung) - lasst das Programm mal laufen und berichtet was dann herauskommt.</p>
<p>Gruß<br />
Werner</p>
<p>@Edit: -null durch minus_null ausgetauscht - ändert aber nichts</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1572751</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1572751</guid><dc:creator><![CDATA[Werner Salomon]]></dc:creator><pubDate>Thu, 28 Aug 2008 08:41:20 GMT</pubDate></item><item><title><![CDATA[Reply to 0 != -0 bei atan2 on Thu, 28 Aug 2008 08:37:03 GMT]]></title><description><![CDATA[<p>Habs unter Code::Blocks laufen lassen und bekam folgendes Ergebnis:</p>
<blockquote>
<p>Null ist doch != -Null.</p>
</blockquote>
]]></description><link>https://www.c-plusplus.net/forum/post/1572759</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1572759</guid><dc:creator><![CDATA[Firefighter]]></dc:creator><pubDate>Thu, 28 Aug 2008 08:37:03 GMT</pubDate></item><item><title><![CDATA[Reply to 0 != -0 bei atan2 on Thu, 28 Aug 2008 08:40:56 GMT]]></title><description><![CDATA[<p>Die 0 hat genau eine (eindeutige) Darstellung.</p>
<p>Beweis:</p>
<pre><code class="language-cpp">#include &lt;iostream&gt;

int main()
{
  double null = 0.0;
  double _null = -0.0;

  std::cout &lt;&lt; &quot;Ist null == -null? &quot; &lt;&lt; std::boolalpha &lt;&lt; ( null == _null ) &lt;&lt; std::endl;
}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1572764</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1572764</guid><dc:creator><![CDATA[Nicht IEEE konform]]></dc:creator><pubDate>Thu, 28 Aug 2008 08:40:56 GMT</pubDate></item><item><title><![CDATA[Reply to 0 != -0 bei atan2 on Thu, 28 Aug 2008 08:42:44 GMT]]></title><description><![CDATA[<p>joar - VS 2005 sagt das auch...<br />
(was daran liegt, dass <code>atan2 (...)</code> einmal pi und einmal -pi rauskommt - wieso das so ist versteh ich allerdings eher nicht ^^)</p>
<p>bb</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1572767</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1572767</guid><dc:creator><![CDATA[unskilled]]></dc:creator><pubDate>Thu, 28 Aug 2008 08:42:44 GMT</pubDate></item><item><title><![CDATA[Reply to 0 != -0 bei atan2 on Thu, 28 Aug 2008 08:45:27 GMT]]></title><description><![CDATA[<p>Interressant, also ich habe es eben mal selbst getestet und obwohl 0.0 == -0.0 true ist scheinen die beiden verschieden zu sein, denn das Ergebnis von atan2 ist auch bei mir 0 bzw. -0.<br />
Dabei habe ich immer gedacht, dass es bei IEEE Floats nur eine eindeutige Darstellung für die 0 gibt.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1572770</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1572770</guid><dc:creator><![CDATA[Tippgeber]]></dc:creator><pubDate>Thu, 28 Aug 2008 08:45:27 GMT</pubDate></item><item><title><![CDATA[Reply to 0 != -0 bei atan2 on Thu, 28 Aug 2008 09:22:32 GMT]]></title><description><![CDATA[<p>Hallo,</p>
<p>hier wird wohl beim Auswerten der <em>atan2</em>-Funktion durch den Compiler tatsächlich zwischen -0 und +0 unterschieden. Es gibt auch Varianten von <em>atan2</em>, die +0/-0 berücksichtigen:</p>
<p><a href="http://en.wikipedia.org/wiki/Atan2#Variations" rel="nofollow">http://en.wikipedia.org/wiki/Atan2#Variations</a></p>
<p>Zwar ein Spezialfall, bei dem beide Argumente Nullen sind, aber wenn es dort schon signifikant für das Ergebnis ist, dann ist es hier offensichtlich auch so.</p>
<p>Beim simplen Vergleich</p>
<pre><code class="language-cpp">if( null != minus_null )
</code></pre>
<p>meint der Compiler, dass eine Unterscheidung nicht nötig ist, obwohl ein Vorzeichenbit auch für die Null mitgeführt wird, wie hier:</p>
<p><a href="http://en.wikipedia.org/wiki/IEEE_floating-point_standard" rel="nofollow">http://en.wikipedia.org/wiki/IEEE_floating-point_standard</a></p>
<p>ersichtlich (nur, um zu zeigen, dass die negative Null im IEEE-Standard mit einbezogen ist).</p>
<p>MfG,</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1572796</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1572796</guid><dc:creator><![CDATA[Probe-Nutzer]]></dc:creator><pubDate>Thu, 28 Aug 2008 09:22:32 GMT</pubDate></item><item><title><![CDATA[Reply to 0 != -0 bei atan2 on Thu, 28 Aug 2008 09:26:54 GMT]]></title><description><![CDATA[<p>Tippgeber schrieb:</p>
<blockquote>
<p>Interressant, also ich habe es eben mal selbst getestet und obwohl 0.0 == -0.0 true ist scheinen die beiden verschieden zu sein, denn das Ergebnis von atan2 ist auch bei mir 0 bzw. -0.<br />
Dabei habe ich immer gedacht, dass es bei IEEE Floats nur eine eindeutige Darstellung für die 0 gibt.</p>
</blockquote>
<p>Ein einfacher Irrtum. Die vorzeichenbehaftete 0 ist nichts Neues, ebenso wenig wie es vorzeichenbehaftete Unendlichkeiten sind. Sie treten allerdings nur im mit transzendenten Funktionen im Zusammenhang mit Grenzwertbetrachtungen auf.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1572798</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1572798</guid><dc:creator><![CDATA[camper]]></dc:creator><pubDate>Thu, 28 Aug 2008 09:26:54 GMT</pubDate></item><item><title><![CDATA[Reply to 0 != -0 bei atan2 on Thu, 28 Aug 2008 10:19:12 GMT]]></title><description><![CDATA[<p>camper schrieb:</p>
<blockquote>
<p>Die vorzeichenbehaftete 0 ist nichts Neues, ebenso wenig wie es vorzeichenbehaftete Unendlichkeiten sind. Sie treten allerdings nur im mit transzendenten Funktionen im Zusammenhang mit Grenzwertbetrachtungen auf.</p>
</blockquote>
<p>.. und bei der Ausgabe - wie ein Hinzufügen der Zeile</p>
<pre><code class="language-cpp">cout &lt;&lt; null &lt;&lt; &quot; != &quot; &lt;&lt; minus_null &lt;&lt; endl;
</code></pre>
<p>sofort zeigt.</p>
<p>Und genau das war bei mir das Problem - erzähl mal dem DAU was von Grenzwertbetrachtung und <a href="http://en.wikipedia.org/wiki/Signed_zero" rel="nofollow">negativer Null</a> <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f644.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--face_with_rolling_eyes"
      title=":rolling_eyes:"
      alt="🙄"
    /> .</p>
<p>Also scheint es dann doch Methode zu haben und kein Bug in atan2 ... bin ja mal gespannt, ob sich noch jemand mit einem (Intel outside)MAC meldet.</p>
<p>Gruß<br />
Werner</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1572828</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1572828</guid><dc:creator><![CDATA[Werner Salomon]]></dc:creator><pubDate>Thu, 28 Aug 2008 10:19:12 GMT</pubDate></item><item><title><![CDATA[Reply to 0 != -0 bei atan2 on Thu, 28 Aug 2008 11:23:04 GMT]]></title><description><![CDATA[<p>Ich kann noch mit <code>HP-UX B.11.00 U 9000/800</code> (PA-RISC) und einem Großrechnersystem mit BS2000/OSD6 dienen. Bei ersterem ist die Ausgabe dieselbe wie bei den anderen Kommentatoren. Bei der Großmaschine erhalte ich garkeine Ausgabe.</p>
<p>Leider kann ich keine genaueren Angaben zu dem Ding machen, bis auf die Tatsache, dass führende Köpfe in unserem Haus meinen &quot;die Maschine dürfte es seit 20 Jahren nicht mehr geben&quot; <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/1572865</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1572865</guid><dc:creator><![CDATA[LordJaxom]]></dc:creator><pubDate>Thu, 28 Aug 2008 11:23:04 GMT</pubDate></item><item><title><![CDATA[Reply to 0 != -0 bei atan2 on Thu, 28 Aug 2008 12:16:46 GMT]]></title><description><![CDATA[<p>Edit: gelöscht...</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1572911</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1572911</guid><dc:creator><![CDATA[asc]]></dc:creator><pubDate>Thu, 28 Aug 2008 12:16:46 GMT</pubDate></item></channel></rss>