<?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[Spezieller Code oder allgemeiner Code?]]></title><description><![CDATA[<p>Nachfolgend geht es vorwiegend um hohe Laufzeiteffizienz.</p>
<p>So wie der folgende Code ist fast der ganze Algorithmus aufgebaut. Die nächsten Codesequenzen sind representativ für das, wofür fast die ganze Rechenzeit verwendet wird.</p>
<p><strong>A</strong></p>
<pre><code class="language-cpp">case PIECE_BLACK_ROOK:
      board.black_bitboard&amp;=bitboard_clear[to];
      board.black_rook_bitboard&amp;=bitboard_clear[to];
      board.black_rooks--;
      board.black_pieces--;
      board.key_pieces^=random_black_rook[to];
      board.key_material^=random_black_rook_material[board.black_rooks];
      board.moves[to]++;
      break;
</code></pre>
<p><strong>B</strong></p>
<pre><code class="language-cpp">case PIECE_BLACK_ROOK:
      board.bitboard[color]&amp;=bitboard_clear[to];
      board.rook_bitboard[color]&amp;=bitboard_clear[to];
      board.rooks[color]--;
      board.pieces[color]--;
      board.key_pieces^=random_rook[color][to];
      board.key_material^=random_rook_material[color][board.rooks[color&rsqb;&rsqb;;
      board.moves[to]++;
      break;
</code></pre>
<p><strong>A</strong> ist sehr spezieller Code und muss insgesamt zweimal implementiert werden ( <code>color</code> kann 0 oder 1 sein). Der Code in <strong>B</strong> ist algemeingültig und muss nur einmal implementiert werden.</p>
<p><strong>Meine Frage:</strong><br />
Ist der Code in <strong>B</strong> hinsichtlich der Laufzeiteffizienz schlechter (also langsamer) als der Code in <strong>A</strong>? Oder sind Arrayzugriffe (zB <code>board.rooks[color]</code> ) bei modernen Compilern genauso schnell wie eine Variable (zB <code>board.black_rooks</code> )?</p>
<p>Und ist es sinnvoller allgemeinen Code zu schreiben, der zwar ein kleines bisschen komplizierter ist, dafür aber deutlich weniger Code implementieren zu müssen?</p>
<p>Sorry, dass ich Samstagabend noch so doofe Fragen stelle <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/topic/253330/spezieller-code-oder-allgemeiner-code</link><generator>RSS for Node</generator><lastBuildDate>Sun, 13 Sep 2026 19:59:31 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/253330.rss" rel="self" type="application/rss+xml"/><pubDate>Sat, 31 Oct 2009 18:45:06 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Spezieller Code oder allgemeiner Code? on Sat, 31 Oct 2009 18:45:06 GMT]]></title><description><![CDATA[<p>Nachfolgend geht es vorwiegend um hohe Laufzeiteffizienz.</p>
<p>So wie der folgende Code ist fast der ganze Algorithmus aufgebaut. Die nächsten Codesequenzen sind representativ für das, wofür fast die ganze Rechenzeit verwendet wird.</p>
<p><strong>A</strong></p>
<pre><code class="language-cpp">case PIECE_BLACK_ROOK:
      board.black_bitboard&amp;=bitboard_clear[to];
      board.black_rook_bitboard&amp;=bitboard_clear[to];
      board.black_rooks--;
      board.black_pieces--;
      board.key_pieces^=random_black_rook[to];
      board.key_material^=random_black_rook_material[board.black_rooks];
      board.moves[to]++;
      break;
</code></pre>
<p><strong>B</strong></p>
<pre><code class="language-cpp">case PIECE_BLACK_ROOK:
      board.bitboard[color]&amp;=bitboard_clear[to];
      board.rook_bitboard[color]&amp;=bitboard_clear[to];
      board.rooks[color]--;
      board.pieces[color]--;
      board.key_pieces^=random_rook[color][to];
      board.key_material^=random_rook_material[color][board.rooks[color&rsqb;&rsqb;;
      board.moves[to]++;
      break;
</code></pre>
<p><strong>A</strong> ist sehr spezieller Code und muss insgesamt zweimal implementiert werden ( <code>color</code> kann 0 oder 1 sein). Der Code in <strong>B</strong> ist algemeingültig und muss nur einmal implementiert werden.</p>
<p><strong>Meine Frage:</strong><br />
Ist der Code in <strong>B</strong> hinsichtlich der Laufzeiteffizienz schlechter (also langsamer) als der Code in <strong>A</strong>? Oder sind Arrayzugriffe (zB <code>board.rooks[color]</code> ) bei modernen Compilern genauso schnell wie eine Variable (zB <code>board.black_rooks</code> )?</p>
<p>Und ist es sinnvoller allgemeinen Code zu schreiben, der zwar ein kleines bisschen komplizierter ist, dafür aber deutlich weniger Code implementieren zu müssen?</p>
<p>Sorry, dass ich Samstagabend noch so doofe Fragen stelle <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/1801322</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1801322</guid><dc:creator><![CDATA[Tomahawk]]></dc:creator><pubDate>Sat, 31 Oct 2009 18:45:06 GMT</pubDate></item><item><title><![CDATA[Reply to Spezieller Code oder allgemeiner Code? on Sat, 31 Oct 2009 18:48:44 GMT]]></title><description><![CDATA[<p>Tomahawk schrieb:</p>
<blockquote>
<p>Und ist es sinnvoller allgemeinen Code zu schreiben, der zwar ein kleines bisschen komplizierter ist, dafür aber deutlich weniger Code implementieren zu müssen?</p>
</blockquote>
<p>Klar. Damit Du nicht jede Änderung im Code zweimal machen mußt. Klar. Damit Du nicht jede Änderung im Code zweimal machen mußt.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1801325</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1801325</guid><dc:creator><![CDATA[volkard]]></dc:creator><pubDate>Sat, 31 Oct 2009 18:48:44 GMT</pubDate></item><item><title><![CDATA[Reply to Spezieller Code oder allgemeiner Code? on Sat, 31 Oct 2009 18:59:26 GMT]]></title><description><![CDATA[<p>volkard schrieb:</p>
<blockquote>
<p>Klar. Damit Du nicht jede Änderung im Code zweimal machen mußt. Klar. Damit Du nicht jede Änderung im Code zweimal machen mußt.</p>
</blockquote>
<p>Es wäre glaub ich lehrreicher gewesen, wenn du in deinen Satz (natürlich 2x) einen Fehler eingebaut hättest <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/1801330</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1801330</guid><dc:creator><![CDATA[demotron]]></dc:creator><pubDate>Sat, 31 Oct 2009 18:59:26 GMT</pubDate></item><item><title><![CDATA[Reply to Spezieller Code oder allgemeiner Code? on Sat, 31 Oct 2009 19:10:29 GMT]]></title><description><![CDATA[<p>demotron schrieb:</p>
<blockquote>
<p>volkard schrieb:</p>
<blockquote>
<p>Klar. Damit Du nicht jede Änderung im Code zweimal machen <strong>mußt</strong>. Klar. Damit Du nicht jede Änderung im Code zweimal machen <strong>mußt</strong>.</p>
</blockquote>
<p>Es wäre glaub ich lehrreicher gewesen, wenn du in deinen Satz (natürlich 2x) einen Fehler eingebaut hättest <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>
</blockquote>
<p>Hat er doch, es heißt musst und nicht mußt <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f921.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--clown_face"
      title=":clown:"
      alt="🤡"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/1801336</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1801336</guid><dc:creator><![CDATA[swdasdasd]]></dc:creator><pubDate>Sat, 31 Oct 2009 19:10:29 GMT</pubDate></item><item><title><![CDATA[Reply to Spezieller Code oder allgemeiner Code? on Sat, 31 Oct 2009 19:16:40 GMT]]></title><description><![CDATA[<p>Euer sarkastischer Humor zu später Stunde impliziert, dass euch nicht solch massive Grundlagenprobleme wie mir vorliegen <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="😮"
    /></p>
<p>Ist denn so ein Aufbau mit relativ vielen Zugriffen auf 2-dimensionale Arrays merklich ineffizienter (hinsichtlich der Laufzeiteffizienz), als eine <em>&quot;feste Verdrahtung&quot;</em>?</p>
<p>Oder kann ich diesen Aspekt vernachlässigen (tue ich gerne, wenn es unter 10% Speedverlust bleiben kann)?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1801342</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1801342</guid><dc:creator><![CDATA[Tomahawk]]></dc:creator><pubDate>Sat, 31 Oct 2009 19:16:40 GMT</pubDate></item><item><title><![CDATA[Reply to Spezieller Code oder allgemeiner Code? on Sat, 31 Oct 2009 19:20:09 GMT]]></title><description><![CDATA[<p>Machs allgemein und profile dein Programm am Ende. Wenn du merkst, dass es an der Stelle einen Engpass gibt, dann ändere es, ansonsten lass es.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1801347</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1801347</guid><dc:creator><![CDATA[drakon]]></dc:creator><pubDate>Sat, 31 Oct 2009 19:20:09 GMT</pubDate></item><item><title><![CDATA[Reply to Spezieller Code oder allgemeiner Code? on Sat, 31 Oct 2009 19:22:27 GMT]]></title><description><![CDATA[<p>Tomahawk schrieb:</p>
<blockquote>
<p>Ist denn so ein Aufbau mit relativ vielen Zugriffen auf 2-dimensionale Arrays merklich ineffizienter (hinsichtlich der Laufzeiteffizienz), als eine <em>&quot;feste Verdrahtung&quot;</em>?</p>
</blockquote>
<p>Ein Zugriff auf ein Array spürst du zeitlich nicht, es muss nur ein Offset errechnet werden und du bist bei deinen Daten.<br />
Aber ganz versteh ich dein Problem nicht, du hast in beiden Beispielen noch dein CASE, da ist es doch wurscht ob die Struktur ein farbenindiziertes Array hat, oder die Werte direkt mit black_rook oder sonstwas angesprochen werden.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1801348</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1801348</guid><dc:creator><![CDATA[demotron]]></dc:creator><pubDate>Sat, 31 Oct 2009 19:22:27 GMT</pubDate></item><item><title><![CDATA[Reply to Spezieller Code oder allgemeiner Code? on Sat, 31 Oct 2009 19:25:25 GMT]]></title><description><![CDATA[<p>Ich kann dem nur Zustimmen. Grundsätzlich gilt es so zu programmieren, dass man den Code einfach warten kann. Und ein Code der redundant ist, ist ein Monster!</p>
<p>Wenn dein Programm läuft, dann gibt es Möglichkeiten die Programmteile, wo wirklich Zeit verloren geht zu finden und zu verbessern.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1801349</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1801349</guid><dc:creator><![CDATA[asdasdasd]]></dc:creator><pubDate>Sat, 31 Oct 2009 19:25:25 GMT</pubDate></item><item><title><![CDATA[Reply to Spezieller Code oder allgemeiner Code? on Sat, 31 Oct 2009 19:30:03 GMT]]></title><description><![CDATA[<p>demotron schrieb:</p>
<blockquote>
<p>Tomahawk schrieb:</p>
<blockquote>
<p>Ist denn so ein Aufbau mit relativ vielen Zugriffen auf 2-dimensionale Arrays merklich ineffizienter (hinsichtlich der Laufzeiteffizienz), als eine <em>&quot;feste Verdrahtung&quot;</em>?</p>
</blockquote>
<p>Ein Zugriff auf ein Array spürst du zeitlich nicht, es muss nur ein Offset errechnet werden und du bist bei deinen Daten.<br />
Aber ganz versteh ich dein Problem nicht, du hast in beiden Beispielen noch dein CASE, da ist es doch wurscht ob die Struktur ein farbenindiziertes Array hat, oder die Werte direkt mit black_rook oder sonstwas angesprochen werden.</p>
</blockquote>
<p>Sorry, das habe ich erst nach dem Posten gemerkt. So war es gemeint:</p>
<pre><code class="language-cpp">case PIECE_ROOK:                                     // so natürlich
      board.bitboard[color]&amp;=bitboard_clear[to]; 
      board.rook_bitboard[color]&amp;=bitboard_clear[to]; 
      board.rooks[color]--; 
      board.pieces[color]--; 
      board.key_pieces^=random_rook[color][to]; 
      board.key_material^=random_rook_material[color][board.rooks[color&rsqb;&rsqb;; 
      board.moves[to]++; 
      break;
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1801354</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1801354</guid><dc:creator><![CDATA[Tomahawk]]></dc:creator><pubDate>Sat, 31 Oct 2009 19:30:03 GMT</pubDate></item><item><title><![CDATA[Reply to Spezieller Code oder allgemeiner Code? on Sat, 31 Oct 2009 19:38:14 GMT]]></title><description><![CDATA[<pre><code class="language-cpp">// für spiegelungen kommt noch etwas bitgefummel für die symetrie hinzu.

// anstatt...

if (board[square] == E1) { }

// könnte ich zwei versionen schreiben:

if (board[square^(56*color)] == E1) { }  // color=0|1

if (board[square] == (E1^(56*color))) { }  // color=0|1

macht das einen Unterschied für den Compiler hinsichtlich Effizienz?

// das waren alle probleme mit der symterie des schachbrettes
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1801357</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1801357</guid><dc:creator><![CDATA[Tomahawk]]></dc:creator><pubDate>Sat, 31 Oct 2009 19:38:14 GMT</pubDate></item><item><title><![CDATA[Reply to Spezieller Code oder allgemeiner Code? on Sat, 31 Oct 2009 19:53:46 GMT]]></title><description><![CDATA[<p>Sorry, ich bin müde und unkonzentriert, ich meinte natürlich:</p>
<pre><code class="language-cpp">// spezieller code der redundanten fassung sieht etwa so aus:

if (square == CONST_E1) { } 

// für den code allgemeinen fassung könnte ich zwei versionen schreiben: 

if ((square^(56*color)) == CONST_E1) { }  // color=0|1 

if (square == (CONST_E1^(56*color))) { }  // color=0|1 

macht das einen Unterschied für den Compiler hinsichtlich Effizienz? !
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1801361</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1801361</guid><dc:creator><![CDATA[Tomahawk]]></dc:creator><pubDate>Sat, 31 Oct 2009 19:53:46 GMT</pubDate></item><item><title><![CDATA[Reply to Spezieller Code oder allgemeiner Code? on Sat, 31 Oct 2009 19:52:41 GMT]]></title><description><![CDATA[<p>zu müde um das &quot;edit&quot;-feld zu sehen? nach 37 posts sollte man das ja doch mal mitbekommen haben?! ^^</p>
<p>was willst du denn jetzt noch hören?<br />
jeder programmierer wird dir immer sagen, dass doppelter code doof ist... wie volkard das schon vorgemacht hat...</p>
<p>bb</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1801369</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1801369</guid><dc:creator><![CDATA[unskilled]]></dc:creator><pubDate>Sat, 31 Oct 2009 19:52:41 GMT</pubDate></item><item><title><![CDATA[Reply to Spezieller Code oder allgemeiner Code? on Sat, 31 Oct 2009 21:41:43 GMT]]></title><description><![CDATA[<p>CONST_E1^(56*color)</p>
<p>Value ^ 56<br />
ist das nicht etwas hoch ???<br />
bei 2<br />
--&gt;<br />
72057594037927936</p>
<p>ich bin zu müde noch nachdenken zu wollen, was bringt das denn jetzt ?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1801414</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1801414</guid><dc:creator><![CDATA[5cript]]></dc:creator><pubDate>Sat, 31 Oct 2009 21:41:43 GMT</pubDate></item><item><title><![CDATA[Reply to Spezieller Code oder allgemeiner Code? on Sat, 31 Oct 2009 21:56:01 GMT]]></title><description><![CDATA[<blockquote>
<p>ich bin zu müde noch nachdenken zu wollen, was bringt das denn jetzt ?</p>
</blockquote>
<p>Hinweis: Dein Fehler liegt in der Interpretation des ^-Operators</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1801419</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1801419</guid><dc:creator><![CDATA[Nachdenker]]></dc:creator><pubDate>Sat, 31 Oct 2009 21:56:01 GMT</pubDate></item><item><title><![CDATA[Reply to Spezieller Code oder allgemeiner Code? on Sun, 01 Nov 2009 07:13:42 GMT]]></title><description><![CDATA[<p>Tim06TR schrieb:</p>
<blockquote>
<p>CONST_E1^(56*color)</p>
<p>Value ^ 56<br />
ist das nicht etwas hoch ???<br />
bei 2<br />
--&gt;<br />
72057594037927936</p>
<p>ich bin zu müde noch nachdenken zu wollen, was bringt das denn jetzt ?</p>
</blockquote>
<p>square^56 ist eine vertikale Spielelung eines Feldes auf dem Schachbrett (A1-&gt;A8 usw.)</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1801505</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1801505</guid><dc:creator><![CDATA[Tomahawk]]></dc:creator><pubDate>Sun, 01 Nov 2009 07:13:42 GMT</pubDate></item></channel></rss>