<?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[Schneller Index-Typ]]></title><description><![CDATA[<p>Hallo!</p>
<p>Ich brauche als Index für Arrays einen Integer mit einem Wertebereich von 0<br />
bis 3, so daß nach 3 wieder 0 kommt. Die Anforderungen sind:</p>
<p>a) Addition von 1 und 2. Das sollte komfortabel gehen, da der Typ im<br />
gesamten Programm verwendet wird, z.B. i=i+2.<br />
b) Maximale Performance wegen häufiger Verwendung in einem zeitkritischen<br />
Programmteil.</p>
<p>Die momentane Lösung verwendet einen Integer und die beiden Funktionen<br />
increaseBy1(int i) und increaseBy2(int i), die jeweils ein Array besitzen,<br />
in dem der zurückzuliefernde Wert an der Stelle i steht. Das ist schon mal<br />
spürbar schneller als Addition und Modulo-Operation. Allerdings ist das<br />
nicht sehr komfortabel. Ich nehme an, daß die Performance leidet, wenn ich<br />
das in eine Klasse packe. Andere Ideen?</p>
<p>lg</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/275518/schneller-index-typ</link><generator>RSS for Node</generator><lastBuildDate>Wed, 26 Aug 2026 22:21:57 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/275518.rss" rel="self" type="application/rss+xml"/><pubDate>Fri, 15 Oct 2010 21:53:55 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Schneller Index-Typ on Fri, 15 Oct 2010 21:53:55 GMT]]></title><description><![CDATA[<p>Hallo!</p>
<p>Ich brauche als Index für Arrays einen Integer mit einem Wertebereich von 0<br />
bis 3, so daß nach 3 wieder 0 kommt. Die Anforderungen sind:</p>
<p>a) Addition von 1 und 2. Das sollte komfortabel gehen, da der Typ im<br />
gesamten Programm verwendet wird, z.B. i=i+2.<br />
b) Maximale Performance wegen häufiger Verwendung in einem zeitkritischen<br />
Programmteil.</p>
<p>Die momentane Lösung verwendet einen Integer und die beiden Funktionen<br />
increaseBy1(int i) und increaseBy2(int i), die jeweils ein Array besitzen,<br />
in dem der zurückzuliefernde Wert an der Stelle i steht. Das ist schon mal<br />
spürbar schneller als Addition und Modulo-Operation. Allerdings ist das<br />
nicht sehr komfortabel. Ich nehme an, daß die Performance leidet, wenn ich<br />
das in eine Klasse packe. Andere Ideen?</p>
<p>lg</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1966280</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1966280</guid><dc:creator><![CDATA[cout2]]></dc:creator><pubDate>Fri, 15 Oct 2010 21:53:55 GMT</pubDate></item><item><title><![CDATA[Reply to Schneller Index-Typ on Fri, 15 Oct 2010 22:05:59 GMT]]></title><description><![CDATA[<p>Wieso sollte eine Klasse das verlangsamen? Denke aber, dass das mit den Arrays schon sehr schnell ist. Modulo brauchst du ja nicht, so etwas geht doch auch:</p>
<pre><code class="language-cpp">int inc (int i)
{
    if(i &gt; 2) return 0;
    return i+1;
}

int inc2 (int i)
{
    if(i &gt; 2) return 1;
    if(i &gt; 1) return 0;
    return i+2;

    // alternativ:
    i += 2;
    if(i &gt; 3) return i-4;
    return i;
}
</code></pre>
<p>MfG SideWinder</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1966282</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1966282</guid><dc:creator><![CDATA[SideWinder]]></dc:creator><pubDate>Fri, 15 Oct 2010 22:05:59 GMT</pubDate></item><item><title><![CDATA[Reply to Schneller Index-Typ on Fri, 15 Oct 2010 22:13:24 GMT]]></title><description><![CDATA[<blockquote>
<p>a) Addition von 1 und 2. Das sollte komfortabel gehen, da der Typ im<br />
gesamten Programm verwendet wird, z.B. i=i+2.<br />
b) Maximale Performance wegen häufiger Verwendung in einem zeitkritischen<br />
Programmteil.</p>
</blockquote>
<p>Dann nimm einfach unsigned int.<br />
Wenn +1 und +2 öfter vorkommen, nimm<br />
x+=1 bzw x+=2<br />
nebst<br />
if(x%4==y%4) bzw if(x%4==3) bzw print(x%4) und vor allem z=array[x%4]<br />
(Annhame, daß der Rechner normal ist und unsigned int bei einer Zweierpotenz sich überschlägt und bei 0 weiterzählt)</p>
<p>anderenfalls nimm<br />
x=(x+1)%4 bzw x=(x+2)%4<br />
nebst<br />
if(x==y) bzw if(x==3) bzw print(x) und z=array[x]</p>
<p>Natürlich kannst Du in C++ diese Funktionalität auch zu Null Laufzeitkosten in eine Klasse stopfigen. Ich glaube aber, das würde ich lassen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1966284</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1966284</guid><dc:creator><![CDATA[volkard]]></dc:creator><pubDate>Fri, 15 Oct 2010 22:13:24 GMT</pubDate></item><item><title><![CDATA[Reply to Schneller Index-Typ on Fri, 15 Oct 2010 23:02:00 GMT]]></title><description><![CDATA[<p>Wieso Modulo? Wieso if? Wieso nicht Bitweise Und?</p>
<pre><code class="language-cpp">i = (i + 1) &amp; 3;
</code></pre>
<p>Schneller geht's vermutlich nicht.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1966297</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1966297</guid><dc:creator><![CDATA[hustbaer]]></dc:creator><pubDate>Fri, 15 Oct 2010 23:02:00 GMT</pubDate></item><item><title><![CDATA[Reply to Schneller Index-Typ on Fri, 15 Oct 2010 23:05:39 GMT]]></title><description><![CDATA[<p>hustbaer schrieb:</p>
<blockquote>
<p>Wieso nicht Bitweise Und?</p>
</blockquote>
<p>Weil %4 und &amp;3 zum gleichen Code führen, und ich %4 hier für angemessener halte, dem Problem mehr entsprechend.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1966299</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1966299</guid><dc:creator><![CDATA[volkard]]></dc:creator><pubDate>Fri, 15 Oct 2010 23:05:39 GMT</pubDate></item><item><title><![CDATA[Reply to Schneller Index-Typ on Sat, 16 Oct 2010 02:45:23 GMT]]></title><description><![CDATA[<p>cout2 schrieb:</p>
<blockquote>
<p>Die momentane Lösung verwendet einen Integer und die beiden Funktionen<br />
increaseBy1(int i) und increaseBy2(int i), die jeweils ein Array besitzen,<br />
in dem der zurückzuliefernde Wert an der Stelle i steht. Das ist schon mal<br />
spürbar schneller als Addition und Modulo-Operation.</p>
</blockquote>
<p>Echt? Zeig mal dein Programm zum Zeitmessen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1966320</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1966320</guid><dc:creator><![CDATA[ProDrivenCoder]]></dc:creator><pubDate>Sat, 16 Oct 2010 02:45:23 GMT</pubDate></item></channel></rss>