<?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[Die Zahl 0 erscheint negativ]]></title><description><![CDATA[<p>Hallo,</p>
<p>ich hab einen Code geschrieben, der eine Matrix A und einen Vektor b bekommt und die Gleichung A*x=b durch die Rückwärstsubstitution löst, wobei A in Dreiecksform gegeben ist (diese Angabe ist eig. für mein Problem unwichtig...)</p>
<p>Als Ergebnis wird der Vektor ausgegeben, also in der Art:</p>
<pre><code class="language-cpp">AUSGABE MATRIX A:
(1,3,4)
(0,-4,-7)
(0,0,1)

AUSGABE VON LOESUNG X:
x1: 2   x2: 5   x3: -5
</code></pre>
<p>Das ist ja alles schön und gut, allerdings, wenn z.B. einer der x-Werte 0 wird, dann erscheint es in der Konsole als -0. Kann man sowas beheben? Ok, es führt nicht zu Rechenfehlern oder so, aber es sieht bei der Ausgabe unschön aus. Ich hab gedacht, dass ich es mit if Abfange, aber vllt gibt es dafür ja C++-spezifische Konstrukte...</p>
<p>Lg, lil</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/247133/die-zahl-0-erscheint-negativ</link><generator>RSS for Node</generator><lastBuildDate>Thu, 17 Sep 2026 17:39:32 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/247133.rss" rel="self" type="application/rss+xml"/><pubDate>Thu, 06 Aug 2009 13:05:47 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Die Zahl 0 erscheint negativ on Thu, 06 Aug 2009 13:05:47 GMT]]></title><description><![CDATA[<p>Hallo,</p>
<p>ich hab einen Code geschrieben, der eine Matrix A und einen Vektor b bekommt und die Gleichung A*x=b durch die Rückwärstsubstitution löst, wobei A in Dreiecksform gegeben ist (diese Angabe ist eig. für mein Problem unwichtig...)</p>
<p>Als Ergebnis wird der Vektor ausgegeben, also in der Art:</p>
<pre><code class="language-cpp">AUSGABE MATRIX A:
(1,3,4)
(0,-4,-7)
(0,0,1)

AUSGABE VON LOESUNG X:
x1: 2   x2: 5   x3: -5
</code></pre>
<p>Das ist ja alles schön und gut, allerdings, wenn z.B. einer der x-Werte 0 wird, dann erscheint es in der Konsole als -0. Kann man sowas beheben? Ok, es führt nicht zu Rechenfehlern oder so, aber es sieht bei der Ausgabe unschön aus. Ich hab gedacht, dass ich es mit if Abfange, aber vllt gibt es dafür ja C++-spezifische Konstrukte...</p>
<p>Lg, lil</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1756334</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1756334</guid><dc:creator><![CDATA[lil_pingu]]></dc:creator><pubDate>Thu, 06 Aug 2009 13:05:47 GMT</pubDate></item><item><title><![CDATA[Reply to Die Zahl 0 erscheint negativ on Thu, 06 Aug 2009 13:15:02 GMT]]></title><description><![CDATA[<p>lil_pingu schrieb:</p>
<blockquote>
<p>Das ist ja alles schön und gut, allerdings, wenn z.B. einer der x-Werte 0 wird, dann erscheint es in der Konsole als -0.</p>
</blockquote>
<p>Würdest du bitte den Teil deines Codes zeigen, der für die Ausgabe relevant ist (inklusive Datentypen)?</p>
<pre><code class="language-cpp">std::cout &lt;&lt; 0; // Gibt zumindest hier 0 (und nicht -0) aus
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1756342</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1756342</guid><dc:creator><![CDATA[asc]]></dc:creator><pubDate>Thu, 06 Aug 2009 13:15:02 GMT</pubDate></item><item><title><![CDATA[Reply to Die Zahl 0 erscheint negativ on Thu, 06 Aug 2009 13:21:40 GMT]]></title><description><![CDATA[<p>braucht ja bloss irgendwo ein negativer faktor zu sein:<br />
cout &lt;&lt; -1.0 * 0;</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1756348</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1756348</guid><dc:creator><![CDATA[relevant_t]]></dc:creator><pubDate>Thu, 06 Aug 2009 13:21:40 GMT</pubDate></item><item><title><![CDATA[Reply to Die Zahl 0 erscheint negativ on Thu, 06 Aug 2009 13:38:02 GMT]]></title><description><![CDATA[<blockquote>
<p>cout &lt;&lt; -1.0 * 0;</p>
</blockquote>
<p>Gibt bei mir <code>0</code> ohne Minus aus.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1756364</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1756364</guid><dc:creator><![CDATA[µngbd]]></dc:creator><pubDate>Thu, 06 Aug 2009 13:38:02 GMT</pubDate></item><item><title><![CDATA[Reply to Die Zahl 0 erscheint negativ on Thu, 06 Aug 2009 13:40:50 GMT]]></title><description><![CDATA[<p>Lass mich raten: es ist ein double Wert. Dann hast du verloren. Zwar gibt der stream &quot;0&quot; aus, aber das ist nur der aufgerundete Wert von -0.000......01. Negativ ist das Ganze trotzdem(da nicht exakt 0) darum ist das Ergebnis -0.</p>
<p>Eine Lösung wäre zu schauen, ob das Ergebnis hinreichend nahe 0 ist und diesen Fall per Hand abzufangen. Sonst wüsste ich nichts.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1756368</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1756368</guid><dc:creator><![CDATA[otze]]></dc:creator><pubDate>Thu, 06 Aug 2009 13:40:50 GMT</pubDate></item><item><title><![CDATA[Reply to Die Zahl 0 erscheint negativ on Thu, 06 Aug 2009 13:52:42 GMT]]></title><description><![CDATA[<pre><code class="language-cpp">// x[n] = b[n] / a(n,n)
	int n = x.length(); //Length ermittelt Anzahl der elem in der Liste
	x[n] = b[n] / (A.get(n,n));

	// Rückwärst einsetzen
	for(int i = n - 1; i &gt;= 0; i--){
		int summe = 0;
		for(int k = i+1; k&lt;= n; k++){
			int a = A.get(i,k);
			summe = summe + (a*x[k]);
		}
		x[i] = (b[i] - summe)/(A.get(i,i));
	}

	// Ausgabe des x-Vektors
	cout &lt;&lt; &quot;\nAUSGABE VON X: &quot;;
		for(int i = 0; i &lt;= n; i++){
			cout &lt;&lt; &quot;x[&quot; &lt;&lt; i &lt;&lt; &quot;]: &quot; &lt;&lt; x[i] &lt;&lt; endl;
		}
	cout &lt;&lt; endl;
</code></pre>
<p>Ich könnte natürlich die Werte in der äußeren for-Schleife abfangen und wenn jedesmal eine 0 kommt, den Wert als positive Null reinschreiben, aber gibt es keine bessere Möglichkeit?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1756387</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1756387</guid><dc:creator><![CDATA[lil_pingu]]></dc:creator><pubDate>Thu, 06 Aug 2009 13:52:42 GMT</pubDate></item><item><title><![CDATA[Reply to Die Zahl 0 erscheint negativ on Thu, 06 Aug 2009 13:53:35 GMT]]></title><description><![CDATA[<p>otze schrieb:</p>
<blockquote>
<p>Lass mich raten: es ist ein double Wert. Dann hast du verloren. Zwar gibt der stream &quot;0&quot; aus, aber das ist nur der aufgerundete Wert von -0.000......01. Negativ ist das Ganze trotzdem(da nicht exakt 0) darum ist das Ergebnis -0.</p>
<p>Eine Lösung wäre zu schauen, ob das Ergebnis hinreichend nahe 0 ist und diesen Fall per Hand abzufangen. Sonst wüsste ich nichts.</p>
</blockquote>
<p>Ja es waren double-Werte....dann muss ich es wohl per Hand abfangen... <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="😞"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/1756388</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1756388</guid><dc:creator><![CDATA[lil_pingu]]></dc:creator><pubDate>Thu, 06 Aug 2009 13:53:35 GMT</pubDate></item><item><title><![CDATA[Reply to Die Zahl 0 erscheint negativ on Fri, 07 Aug 2009 10:22:30 GMT]]></title><description><![CDATA[<p>Nur so nebenbei: Alle Fließkommadarstellungen, die ich kenne, besitzen zwei Nullen: +0 und -0. Das liegt daran, dass sie das Vorzeichen und den Betrag separat speichern.</p>
<p>Ob bei der Ausgabe -0 oder 0 steht, interessiert mich eigentlich herzlich wenig.</p>
<p>Sonst ist es noch Sache der Implementierung von operator&lt;&lt;(ostream&amp;, double). Das folgende Programm</p>
<pre><code class="language-cpp">#include &lt;ios&gt;
#include &lt;iostream&gt;
#include &lt;iomanip&gt;
#include &lt;string&gt;
#include &lt;sstream&gt;
#include &lt;climits&gt;

std::string raw2str(unsigned char const* p, unsigned length)
{
  using std::ios;
  using std::setw;
  std::stringstream ss;
  ss.flags(ios::hex | ios::left);
  ss.fill('0');
  for (unsigned i=0; i&lt;length; ++i) {
    if (i&gt;0) ss &lt;&lt; ' ';
    ss &lt;&lt; setw((CHAR_BIT+3)/4) &lt;&lt; unsigned(p[i]);
  }
  return ss.str();
}

template&lt;typename T&gt;
inline std::string raw2str(T const&amp; x)
{
  return raw2str(reinterpret_cast&lt;unsigned char const*&gt;(&amp;x),sizeof(T));
}

double negate(double x) {
  return -x;
}

int main()
{
  double a = 0.0;
  double b = -a;
  std::cout &lt;&lt; raw2str(a) &lt;&lt; &quot;  --&gt;  &quot; &lt;&lt; a &lt;&lt; '\n';
  std::cout &lt;&lt; raw2str(b) &lt;&lt; &quot;  --&gt;  &quot; &lt;&lt; b &lt;&lt; '\n';
  std::cout &lt;&lt; std::boolalpha &lt;&lt; (a==b) &lt;&lt; '\n';
}
</code></pre>
<p>liefert bei mir die Ausgabe:</p>
<pre><code>00 00 00 00 00 00 00 [b]00[/b]  --&gt;  0
00 00 00 00 00 00 00 [b]80[/b]  --&gt;  0
true
</code></pre>
<p>Auf meinem System (double = IEEE-754 64-Bit Fließkommazahl, Little Endian Byte-Ordnung) ist das höchstwertige Bit im letzten Byte das Vorzeichen.<br />
Trotzdem sehe ich bei der Ausgabe als Zeichenkette kein Minus.</p>
<p>Gruß,<br />
SP</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1756822</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1756822</guid><dc:creator><![CDATA[Sebastian Pizer]]></dc:creator><pubDate>Fri, 07 Aug 2009 10:22:30 GMT</pubDate></item><item><title><![CDATA[Reply to Die Zahl 0 erscheint negativ on Fri, 07 Aug 2009 12:13:30 GMT]]></title><description><![CDATA[<p>Sebastian Pizer schrieb:</p>
<blockquote>
<p>Trotzdem sehe ich bei der Ausgabe als Zeichenkette kein Minus.</p>
</blockquote>
<p>Ich nehme an, er hat das -0.00000 oder -0 bei double d=-0.00000000001; cout&lt;&lt;d;</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1756901</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1756901</guid><dc:creator><![CDATA[volkard]]></dc:creator><pubDate>Fri, 07 Aug 2009 12:13:30 GMT</pubDate></item></channel></rss>