<?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[[solved] Werden Klammern berücksichtigt oder wegoptimiert?]]></title><description><![CDATA[<p>Grüsse zusammen,</p>
<p>Wahrscheinlich ist die Frage nicht so einfach zu beantworten, da es Compilerabhängig ist. Ausser es stünde etwas im Standard darüber, aber das würde mich etwas erstaunen. Die Problemstellung ist ganz einfach:</p>
<pre><code class="language-cpp">(VarA * VarB) / VarC;
</code></pre>
<p>Gibt es eine Garantie, dass hier zuerst die Multiplikation ausgeführt wird?<br />
Bzw. gilt das auch umgekehrt:</p>
<pre><code class="language-cpp">VarA * (VarB / VarC);
</code></pre>
<p>Also das hier zuerst die Division ausgeführt wird?</p>
<p>Mathematisch macht es ja keinen Unterschied. Da wir aber in der Praxis mit begrenzten Datentypen arbeiten, macht es hier leider schon etwas aus. Wie ist das geregelt und wenn es Compiler abhängig ist, weiss jemand wie es beim MSVC geregelt ist? (2005 aufwärts)</p>
<p>Grüssli</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/217421/solved-werden-klammern-berücksichtigt-oder-wegoptimiert</link><generator>RSS for Node</generator><lastBuildDate>Sat, 10 Oct 2026 15:53:23 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/217421.rss" rel="self" type="application/rss+xml"/><pubDate>Mon, 07 Jul 2008 13:31:31 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to [solved] Werden Klammern berücksichtigt oder wegoptimiert? on Tue, 08 Jul 2008 00:05:07 GMT]]></title><description><![CDATA[<p>Grüsse zusammen,</p>
<p>Wahrscheinlich ist die Frage nicht so einfach zu beantworten, da es Compilerabhängig ist. Ausser es stünde etwas im Standard darüber, aber das würde mich etwas erstaunen. Die Problemstellung ist ganz einfach:</p>
<pre><code class="language-cpp">(VarA * VarB) / VarC;
</code></pre>
<p>Gibt es eine Garantie, dass hier zuerst die Multiplikation ausgeführt wird?<br />
Bzw. gilt das auch umgekehrt:</p>
<pre><code class="language-cpp">VarA * (VarB / VarC);
</code></pre>
<p>Also das hier zuerst die Division ausgeführt wird?</p>
<p>Mathematisch macht es ja keinen Unterschied. Da wir aber in der Praxis mit begrenzten Datentypen arbeiten, macht es hier leider schon etwas aus. Wie ist das geregelt und wenn es Compiler abhängig ist, weiss jemand wie es beim MSVC geregelt ist? (2005 aufwärts)</p>
<p>Grüssli</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1542669</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1542669</guid><dc:creator><![CDATA[Dravere]]></dc:creator><pubDate>Tue, 08 Jul 2008 00:05:07 GMT</pubDate></item><item><title><![CDATA[Reply to [solved] Werden Klammern berücksichtigt oder wegoptimiert? on Mon, 07 Jul 2008 14:26:14 GMT]]></title><description><![CDATA[<p>1. Wurzel ziehen / Potenzieren<br />
2. Klammer<br />
3. Multiplizieren / Dividieren<br />
4. Addieren / Subtrahieren</p>
<p>Sollte alles gleich rangig sein bzw. ist alles aufgelöst, wird von link nach rechts gerechnet.<br />
So sollte es auch der Compiler tun.</p>
<p>Gruß Tobi.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1542756</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1542756</guid><dc:creator><![CDATA[T0bi]]></dc:creator><pubDate>Mon, 07 Jul 2008 14:26:14 GMT</pubDate></item><item><title><![CDATA[Reply to [solved] Werden Klammern berücksichtigt oder wegoptimiert? on Mon, 07 Jul 2008 14:28:46 GMT]]></title><description><![CDATA[<p>meiner meinung nach geht der compiler einfach alles von links nach rechts durch</p>
<p>mit klammern ist aber gewärleistet was zuerst berechnet wird</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1542757</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1542757</guid><dc:creator><![CDATA[Skym0sh0]]></dc:creator><pubDate>Mon, 07 Jul 2008 14:28:46 GMT</pubDate></item><item><title><![CDATA[Reply to [solved] Werden Klammern berücksichtigt oder wegoptimiert? on Mon, 07 Jul 2008 14:32:32 GMT]]></title><description><![CDATA[<p>In C++ haben alle operatoren Prioritäten, und so haben klammern einen höheren Stellenwert als * oder /, die wiederum einen höheren Stellenwert als + und - haben, und so müsste dein kompiler eigentlich auch zu erst die klammern ausrechnen, oder?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1542761</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1542761</guid><dc:creator><![CDATA[uhsuhz]]></dc:creator><pubDate>Mon, 07 Jul 2008 14:32:32 GMT</pubDate></item><item><title><![CDATA[Reply to [solved] Werden Klammern berücksichtigt oder wegoptimiert? on Mon, 07 Jul 2008 14:43:27 GMT]]></title><description><![CDATA[<p>Das hängt ganz vom Compiler und seinen operator prezedenzen ab. (zb. MSC++ vs. Open Watcom)<br />
Teilweise ist es sogar nicht mal definiert z.b. wenn zwei operator dieselbe prezedenz haben.<br />
Mehrdeutig: stupidratio = value / ++value</p>
<p>Daumen regel, vor allem für portablen Code ist: Immer Klammern verwenden.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1542787</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1542787</guid><dc:creator><![CDATA[TheBernd]]></dc:creator><pubDate>Mon, 07 Jul 2008 14:43:27 GMT</pubDate></item><item><title><![CDATA[Reply to [solved] Werden Klammern berücksichtigt oder wegoptimiert? on Mon, 07 Jul 2008 14:53:03 GMT]]></title><description><![CDATA[<p>Also mit Vermutungen kann ich nichts anfangen, trotzdem danke Skym0sh0 und uhsuhz.<br />
Ich hoffe mal T0bi weiss wovon er spricht.</p>
<p>Ich habe zudem nochmals im Buch &quot;Die C++ Programmiersprache&quot; nachgeschaut und bei der Reihenfolge der Operatoren finde ich die normalen Klammern einfach nicht. Das, was am nächsten kommen würde, ist folgendes:<br />
<code>typ (ausdruckliste)</code><br />
Aber für mich wäre da eher sowas gemeint:<br />
<code>int(6)</code></p>
<p>Und im restlichen Teil des Kapitels finde ich auch nichts explizites dazu. Daher meine Unsicherheit und auch weil es um Millionenbeträge geht und ich <strong>nicht</strong> verantwortlich sein möchte <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>
<p><a class="plugin-mentions-user plugin-mentions-a" href="https://www.c-plusplus.net/forum/uid/19801">@TheBernd</a>,<br />
Das mit dem ++value ist mir bekannt. Aber darum geht es ja nicht. Es geht darum, ob bei meinem Beispiel oben die Klammern berücksichtigt werden oder nicht.</p>
<p>Kann mich sonst noch wer absichern? <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="🙂"
    /><br />
Am besten wäre ja ein Verweis auf den Standard oder sowas. <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>
<p>Grüssli</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1542808</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1542808</guid><dc:creator><![CDATA[Dravere]]></dc:creator><pubDate>Mon, 07 Jul 2008 14:53:03 GMT</pubDate></item><item><title><![CDATA[Reply to [solved] Werden Klammern berücksichtigt oder wegoptimiert? on Mon, 07 Jul 2008 14:57:40 GMT]]></title><description><![CDATA[<p>siehe <a href="http://www.cppreference.com/operator_precedence.html" rel="nofollow">operator prcedence</a></p>
]]></description><link>https://www.c-plusplus.net/forum/post/1542817</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1542817</guid><dc:creator><![CDATA[Vartus]]></dc:creator><pubDate>Mon, 07 Jul 2008 14:57:40 GMT</pubDate></item><item><title><![CDATA[Reply to [solved] Werden Klammern berücksichtigt oder wegoptimiert? on Mon, 07 Jul 2008 15:03:02 GMT]]></title><description><![CDATA[<p>Ok, ich habe es hier gerade auch gefunden:<br />
<a href="http://www.cplusplus.com/doc/tutorial/operators.html" rel="nofollow">http://www.cplusplus.com/doc/tutorial/operators.html</a></p>
<p>Es sind zwar keine offiziellen Dokumente, aber was solls. Ich muss mich wohl darauf verlassen und werde zur Sicherheit auch noch ein paar Tests durchführen um gaaaaaaaaaannnnz sicher zu gehen <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>
<p>Ich hoffe die Compiler halten sich in dem Punkt explizit an den Standard. <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>
<p>Grüssli und Danke!</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1542821</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1542821</guid><dc:creator><![CDATA[Dravere]]></dc:creator><pubDate>Mon, 07 Jul 2008 15:03:02 GMT</pubDate></item><item><title><![CDATA[Reply to [solved] Werden Klammern berücksichtigt oder wegoptimiert? on Mon, 07 Jul 2008 15:27:57 GMT]]></title><description><![CDATA[<p>Der Standard schreibt eine Präzedenz der Operatoren nicht explizit vor, sondern sagt nur, dass diese aus der Syntax-Definition folgt. Das heißt auch ziemlich direkt, dass deine Klammerung immer berücksichtigt wird.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1542851</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1542851</guid><dc:creator><![CDATA[minhen]]></dc:creator><pubDate>Mon, 07 Jul 2008 15:27:57 GMT</pubDate></item><item><title><![CDATA[Reply to [solved] Werden Klammern berücksichtigt oder wegoptimiert? on Mon, 07 Jul 2008 17:43:23 GMT]]></title><description><![CDATA[<p>Wenn du konkret was zu dem Thema wissen willst kannst du da nachgucken: <a href="http://msdn.microsoft.com/en-us/library/aa289157(vs.71).aspx" rel="nofollow">http://msdn.microsoft.com/en-us/library/aa289157(vs.71).aspx</a></p>
<p>Kurz: MSVC macht so ziemlich was er will, solange man es ihm nicht mit entsprechenden Switches verbietet, was netterweise auch möglich ist.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1542923</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1542923</guid><dc:creator><![CDATA[hustbaer]]></dc:creator><pubDate>Mon, 07 Jul 2008 17:43:23 GMT</pubDate></item><item><title><![CDATA[Reply to [solved] Werden Klammern berücksichtigt oder wegoptimiert? on Mon, 07 Jul 2008 18:38:41 GMT]]></title><description><![CDATA[<p>Wer ja auch schlimm, wenn man sich nicht mla auf die Klammersetzung verlassen könnte.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1542955</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1542955</guid><dc:creator><![CDATA[zzzzzzzzzzza^]]></dc:creator><pubDate>Mon, 07 Jul 2008 18:38:41 GMT</pubDate></item><item><title><![CDATA[Reply to [solved] Werden Klammern berücksichtigt oder wegoptimiert? on Mon, 07 Jul 2008 19:13:08 GMT]]></title><description><![CDATA[<p>hustbaer schrieb:</p>
<blockquote>
<p>Wenn du konkret was zu dem Thema wissen willst kannst du da nachgucken: <a href="http://msdn.microsoft.com/en-us/library/aa289157(vs.71).aspx" rel="nofollow">http://msdn.microsoft.com/en-us/library/aa289157(vs.71).aspx</a></p>
<p>Kurz: MSVC macht so ziemlich was er will, solange man es ihm nicht mit entsprechenden Switches verbietet, was netterweise auch möglich ist.</p>
</blockquote>
<p>Da geht es aber um Floating-Point Optimization. Ich persönlich brauche in dem Fall allerdings integrale Typen. Gibt es dazu auch einen Artikel? <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>
<p>Aber ganz interessant und gut zu wissen, merk ich mir, wenn ich das nächste Mal mit floats und doubles arbeite. Danke!</p>
<p>Grüssli</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1542971</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1542971</guid><dc:creator><![CDATA[Dravere]]></dc:creator><pubDate>Mon, 07 Jul 2008 19:13:08 GMT</pubDate></item><item><title><![CDATA[Reply to [solved] Werden Klammern berücksichtigt oder wegoptimiert? on Mon, 07 Jul 2008 21:37:23 GMT]]></title><description><![CDATA[<p>Dravere schrieb:</p>
<blockquote>
<pre><code class="language-cpp">(VarA * VarB) / VarC;
</code></pre>
</blockquote>
<p>Der Standard schreibt hier ein ganz bestimmtes Verhalten vor, d.h. einen bestimmten Wert für den Ausdruck, für gegebene VarA,VarB,VarC sofern die besonderen Werte nicht zu undefiniertem Verhalten (wegen Überlauf oder Division durch 0) führen. Er schreibt (im Wesentlichen) nicht vor, wie eine Implementation zu diesem Wert kommen kann. Falls Var*(VarB/VarC) zum gleichen Ergebnis kommen sollte (tut es nicht), wäre es eine zulässige Transformation. Es gibt ein etwas interessanteres Beispiel direkt im Standard (1.9/15):</p>
<pre><code class="language-cpp">int a, b;
/*...*/
a = a + 32760 + b + 5;
</code></pre>
<p>Eine Implementation darf dies im Allgemeinen nicht umschreiben als</p>
<pre><code class="language-cpp">a = ((a + 32765) + b); // oder
a = (a + (b + 32765));
</code></pre>
<p>Da beide Ausdrücke für bestimmte Werte (z.B. a = –32754, b = –15 und 16-bit Integer) zu Überläufen führen würden, während der originale Ausdruck das nicht tut (für diese Werte). Etwas anderes gilt dagegen, falls diese spezielle Implementation eine ist, für die Überläufe irrelevant und reversibel sind (2er-Komplement).</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1543033</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1543033</guid><dc:creator><![CDATA[camper]]></dc:creator><pubDate>Mon, 07 Jul 2008 21:37:23 GMT</pubDate></item><item><title><![CDATA[Reply to [solved] Werden Klammern berücksichtigt oder wegoptimiert? on Mon, 07 Jul 2008 23:10:14 GMT]]></title><description><![CDATA[<p><a class="plugin-mentions-user plugin-mentions-a" href="https://www.c-plusplus.net/forum/uid/9752">@Dravere</a>: ich habe angenommen dass du von floating point Berechnungen sprichst, da die Frage bei Integer (für mich) sowas von klar ist <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>
<p>Wie camper schon schrieb kannst du dich bei Integer auf jeden Fall auf das Ergebnis verlassen, also dass es dem entspricht was der Standard vorgibt. Und der gibt vor dass Klammern bei der Auswertung von Ausdrücken berücksichtigt werden.</p>
<p>Der Compiler darf, wie camper auch schon schrieb, trotzdem ein Programm erzeugen welches anders rechnet als das was du hinschreibst, wenn garantiert ist dass das Ergebnis stimmt.</p>
<p>Der Compiler darf sogar viel viel mehr tun - wenn garantiert ist dass das &quot;beobachtbare&quot; Verhalten sich nicht ändert kann er im Prinzip tun was er will. z.B. ganze Berechnungen/Schleifen/... einfach wegoptimieren etc.</p>
<p>p.S.: was &quot;beobachtbar&quot; ist ist auch im Standard definiert <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/1543048</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1543048</guid><dc:creator><![CDATA[hustbaer]]></dc:creator><pubDate>Mon, 07 Jul 2008 23:10:14 GMT</pubDate></item><item><title><![CDATA[Reply to [solved] Werden Klammern berücksichtigt oder wegoptimiert? on Tue, 08 Jul 2008 00:04:47 GMT]]></title><description><![CDATA[<p>hustbaer schrieb:</p>
<blockquote>
<p><a class="plugin-mentions-user plugin-mentions-a" href="https://www.c-plusplus.net/forum/uid/9752">@Dravere</a>: ich habe angenommen dass du von floating point Berechnungen sprichst, da die Frage bei Integer (für mich) sowas von klar ist <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>
</blockquote>
<p>Weil es so klar ist, wird es wohl nirgends in meinen Büchern erwähnt, was mich aber genau misstrauisch gemacht hat <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="🙂"
    /><br />
Wenn ich allerdings schaue, wie oft ich nun so Standard-Spezifische Fragen stelle, glaube ich so langsam, dass sich die Anschaffung des Standards als Buch wirklich lohnen würde <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>
<p>Danke für die Hilfe!</p>
<p>Grüssli</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1543064</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1543064</guid><dc:creator><![CDATA[Dravere]]></dc:creator><pubDate>Tue, 08 Jul 2008 00:04:47 GMT</pubDate></item><item><title><![CDATA[Reply to [solved] Werden Klammern berücksichtigt oder wegoptimiert? on Tue, 08 Jul 2008 15:15:59 GMT]]></title><description><![CDATA[<p>Dravere schrieb:</p>
<blockquote>
<p>stelle, glaube ich so langsam, dass sich die Anschaffung des Standards als Buch wirklich lohnen würde <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>
</blockquote>
<p>Das glaube ich kaum. Wenn du dann deine 1000 Seiten in der Hand hälst, biste eh nur deprimiert. <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="😉"
    /> - Lad doch lieber den Draft runter. Vor allem, weil du nächstes Jahr wahrscheinlich eh den neuen holen müsstest. <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/1543558</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1543558</guid><dc:creator><![CDATA[drakon]]></dc:creator><pubDate>Tue, 08 Jul 2008 15:15:59 GMT</pubDate></item></channel></rss>