<?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[In welcher Reihenfolge wird v = q * p * q.conjugate(); ausgewertet?]]></title><description><![CDATA[<p>In welcher Reihenfolge wird der Ausdruck v = q * p * q.conjugate(); ausgewertet?</p>
<p>Wie ich es gerne hätte:<br />
1. q * p;<br />
2. q.conjugate()<br />
3. (q*p) * (q.conjugate())</p>
<p>Wie es anscheinend passiert:<br />
1. q.conjugate()<br />
2. ...</p>
<p>Was pasiert in welcher Reihenfolge - wird erst q * p mulipliziert - oder erst p * q.conjugate()</p>
<p>welche Varianten sind nach C++ Standard möglich</p>
<p>Das Problem ist, das q.conjugate den Wert von q ändert. Und die Berechnung so ablaufen sollte: q_orginal_wert * p * q_veränderter_wert<br />
das Problem könnte aber sein, dass: q_veränderte_wert * p * q_veränderter_wert berechnet wird - und das eventuell jeder Compiler z. B. der gcc anders wie Visual Studio macht</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/272982/in-welcher-reihenfolge-wird-v-q-p-q-conjugate-ausgewertet</link><generator>RSS for Node</generator><lastBuildDate>Fri, 28 Aug 2026 13:33:43 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/272982.rss" rel="self" type="application/rss+xml"/><pubDate>Sun, 29 Aug 2010 02:25:46 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to In welcher Reihenfolge wird v = q * p * q.conjugate(); ausgewertet? on Sun, 29 Aug 2010 02:25:46 GMT]]></title><description><![CDATA[<p>In welcher Reihenfolge wird der Ausdruck v = q * p * q.conjugate(); ausgewertet?</p>
<p>Wie ich es gerne hätte:<br />
1. q * p;<br />
2. q.conjugate()<br />
3. (q*p) * (q.conjugate())</p>
<p>Wie es anscheinend passiert:<br />
1. q.conjugate()<br />
2. ...</p>
<p>Was pasiert in welcher Reihenfolge - wird erst q * p mulipliziert - oder erst p * q.conjugate()</p>
<p>welche Varianten sind nach C++ Standard möglich</p>
<p>Das Problem ist, das q.conjugate den Wert von q ändert. Und die Berechnung so ablaufen sollte: q_orginal_wert * p * q_veränderter_wert<br />
das Problem könnte aber sein, dass: q_veränderte_wert * p * q_veränderter_wert berechnet wird - und das eventuell jeder Compiler z. B. der gcc anders wie Visual Studio macht</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1945546</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1945546</guid><dc:creator><![CDATA[DerBesucher]]></dc:creator><pubDate>Sun, 29 Aug 2010 02:25:46 GMT</pubDate></item><item><title><![CDATA[Reply to In welcher Reihenfolge wird v = q * p * q.conjugate(); ausgewertet? on Sun, 29 Aug 2010 03:14:48 GMT]]></title><description><![CDATA[<p>Imho ist keine Reihenfolge im C++-Standard vorgeschrieben.<br />
Alles, was dort geschrieben steht ist die Priorität der Operatoren.</p>
<p>Aber die Auswertungsreihenfolge ist nicht definiert.<br />
Wenn du unbedingt eine bestimmte Reihenfolge möchtest, wirst du nicht umher kommen, die Anweisung in mehrere Anweisungen aufzusplitten.</p>
<pre><code class="language-cpp">int i = 3;
int j = i+=2 + i*=5;
</code></pre>
<p>Und, welchen Wert hat j?<br />
Richtig - kann niemand sagen - es ist einfach nicht definiert...</p>
<p>bb</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1945548</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1945548</guid><dc:creator><![CDATA[unskilled]]></dc:creator><pubDate>Sun, 29 Aug 2010 03:14:48 GMT</pubDate></item><item><title><![CDATA[Reply to In welcher Reihenfolge wird v = q * p * q.conjugate(); ausgewertet? on Sun, 29 Aug 2010 05:31:45 GMT]]></title><description><![CDATA[<p>DerBesucher schrieb:</p>
<blockquote>
<p>In welcher Reihenfolge wird der Ausdruck v = q * p * q.conjugate(); ausgewertet?</p>
</blockquote>
<p>C++ schreibt keine Auswerte-Reihenfolge von Unterausdrücken vor.</p>
<p>DerBesucher schrieb:</p>
<blockquote>
<p>Wie ich es gerne hätte:<br />
1. q * p;<br />
2. q.conjugate()<br />
3. (q*p) * (q.conjugate())</p>
</blockquote>
<p>wäre möglich.</p>
<p>DerBesucher schrieb:</p>
<blockquote>
<p>Wie es anscheinend passiert:<br />
1. q.conjugate()<br />
2. ...</p>
</blockquote>
<p>ist auch legal.</p>
<p>DerBesucher schrieb:</p>
<blockquote>
<p>welche Varianten sind nach C++ Standard möglich</p>
</blockquote>
<p>beides.</p>
<p>DerBesucher schrieb:</p>
<blockquote>
<p>Das Problem ist, das q.conjugate den Wert von q ändert.</p>
</blockquote>
<p><img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f62e.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--face_with_open_mouth"
      title=":open_mouth:"
      alt="😮"
    /><br />
Dein Programm sollte nicht von der Auswertereihenfolge von Unterausdrücken abhängen. Das ist hier leider nicht gegeben.</p>
<p>DerBesucher schrieb:</p>
<blockquote>
<p>Und die Berechnung so ablaufen sollte: q_orginal_wert * p * q_veränderter_wert<br />
das Problem könnte aber sein, dass: q_veränderte_wert * p * q_veränderter_wert berechnet wird - und das eventuell jeder Compiler z. B. der gcc anders wie Visual Studio macht</p>
</blockquote>
<p>Dann musst Du das in mehrere Anweisungen zerlegen:</p>
<pre><code class="language-cpp">auto qp = q*p;
q.conjugate();
auto blah = qp*q;
</code></pre>
<p>Oder, wenn es sich um komplexe Zahlen handelt:</p>
<pre><code class="language-cpp">double squared_magnitude(mycomplex const&amp; d)
{
  double r = real(d);
  double i = imag(d);
  return r*r+i*i;
}

...

auto blah = squared_magnitude(q)*p;
q.conjugate();
</code></pre>
<p>Das sollte etwas effizienter sein.</p>
<p>Gibt es dann einen besonderen Grund, warum Du nicht std::complex verwendest? std::complex bietet auch eine norm-Funktion, die das ausrechnet, was ich &quot;squared_magnitude&quot; genannt habe.</p>
<p>kk</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1945549</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1945549</guid><dc:creator><![CDATA[krümelkacker]]></dc:creator><pubDate>Sun, 29 Aug 2010 05:31:45 GMT</pubDate></item><item><title><![CDATA[Reply to In welcher Reihenfolge wird v = q * p * q.conjugate(); ausgewertet? on Sun, 29 Aug 2010 14:48:55 GMT]]></title><description><![CDATA[<p>unskilled schrieb:</p>
<blockquote>
<p>Imho ist keine Reihenfolge im C++-Standard vorgeschrieben.<br />
Alles, was dort geschrieben steht ist die Priorität der Operatoren.</p>
</blockquote>
<p>Die Priorität und die Assoziativität. &quot;=&quot; ist Rechtsassoziativ und &quot;<em>&quot; ist Linksassoziativ. Die Priorität von &quot;.&quot; ist höher als die von &quot;</em>&quot;, als die von &quot;=&quot;. Das bedeutet</p>
<p>DerBesucher schrieb:</p>
<blockquote>
<p>v = q * p * q.conjugate(); ausgewertet?</p>
</blockquote>
<p>Dass das äquivalent zu</p>
<pre><code>v = ( (q * p) * (q.conjugate() ) )
</code></pre>
<p>ist. Das sagt natürlich noch nichts darüber aus, in welcher Reihenfolge die Funktionen aufgerufen werden. Nur, dass sie in der richtigen Reihenfolge kombiniert werden.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1945734</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1945734</guid><dc:creator><![CDATA[[[global:guest]]]]></dc:creator><pubDate>Sun, 29 Aug 2010 14:48:55 GMT</pubDate></item><item><title><![CDATA[Reply to In welcher Reihenfolge wird v = q * p * q.conjugate(); ausgewertet? on Sun, 29 Aug 2010 15:08:16 GMT]]></title><description><![CDATA[<p>Dazu muss man nur ein Ableitungsbaum aus der Grammatik erstellen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1945738</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1945738</guid><dc:creator><![CDATA[Zeus]]></dc:creator><pubDate>Sun, 29 Aug 2010 15:08:16 GMT</pubDate></item><item><title><![CDATA[Reply to In welcher Reihenfolge wird v = q * p * q.conjugate(); ausgewertet? on Sun, 29 Aug 2010 15:14:03 GMT]]></title><description><![CDATA[<p>Zeus schrieb:</p>
<blockquote>
<p>Dazu muss man nur ein Ableitungsbaum aus der Grammatik erstellen.</p>
</blockquote>
<p>Der/Ein Ableitungsbaum sagt in der Regel nichts über die Reihenfolge der Auswertung der Operatoren aus.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1945741</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1945741</guid><dc:creator><![CDATA[[[global:guest]]]]></dc:creator><pubDate>Sun, 29 Aug 2010 15:14:03 GMT</pubDate></item><item><title><![CDATA[Reply to In welcher Reihenfolge wird v = q * p * q.conjugate(); ausgewertet? on Sun, 29 Aug 2010 15:28:57 GMT]]></title><description><![CDATA[<p>-.- nvm</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1945743</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1945743</guid><dc:creator><![CDATA[Zeus]]></dc:creator><pubDate>Sun, 29 Aug 2010 15:28:57 GMT</pubDate></item><item><title><![CDATA[Reply to In welcher Reihenfolge wird v = q * p * q.conjugate(); ausgewertet? on Sun, 29 Aug 2010 15:43:20 GMT]]></title><description><![CDATA[<p>krümelkacker schrieb:</p>
<blockquote>
<p>Gibt es dann einen besonderen Grund, warum Du nicht std::complex verwendest?</p>
</blockquote>
<p>Ja - ich benötige quaternions und die gibt es nicht im Namespace std</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1945753</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1945753</guid><dc:creator><![CDATA[DerBesucher]]></dc:creator><pubDate>Sun, 29 Aug 2010 15:43:20 GMT</pubDate></item><item><title><![CDATA[Reply to In welcher Reihenfolge wird v = q * p * q.conjugate(); ausgewertet? on Sun, 29 Aug 2010 16:26:16 GMT]]></title><description><![CDATA[<p>DerBesucher schrieb:</p>
<blockquote>
<p>krümelkacker schrieb:</p>
<blockquote>
<p>Gibt es dann einen besonderen Grund, warum Du nicht std::complex verwendest?</p>
</blockquote>
<p>Ja - ich benötige quaternions und die gibt es nicht im Namespace std</p>
</blockquote>
<p>Es gibt Boost.Quaternions. Möglicherweise ist das eine Alternative.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1945780</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1945780</guid><dc:creator><![CDATA[manni66]]></dc:creator><pubDate>Sun, 29 Aug 2010 16:26:16 GMT</pubDate></item><item><title><![CDATA[Reply to In welcher Reihenfolge wird v = q * p * q.conjugate(); ausgewertet? on Sun, 29 Aug 2010 21:16:48 GMT]]></title><description><![CDATA[<p>Du solltest dich auch fragen, weshalb conjugate() Setter und Getter zugleich ist. Und vielleicht eine globale Nur-Getter-Funktion anbieten, wenn es diese nicht schon gibt.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1945884</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1945884</guid><dc:creator><![CDATA[Conjugator Alligator]]></dc:creator><pubDate>Sun, 29 Aug 2010 21:16:48 GMT</pubDate></item></channel></rss>