<?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[Zur Laufzeit: Performant Zehnerpotenz berechnen]]></title><description><![CDATA[<p>Es ist schon spät und die Lösung ist vlt. einfacher als gedacht, aber ich habe folgendes Problem:</p>
<pre><code>int factor = 10e(val-3);
</code></pre>
<p>Ist zu berechnen. Es wird immer (auch später) nur mit ganzen Zahlen gerechnet. Was ist hier der schnellste Ansatz?</p>
<p>Habe das hier im Forum gefunden:</p>
<pre><code>int ipow(int base, int exp)
{
    int result = 1;
    for(; exp; exp &gt;&gt;= 1)
    {
        (exp &amp; 1) &amp;&amp; (result *= base);
        base *= base;
    }
    return result;
}
</code></pre>
<p>Mir ist aber nicht klar ob das schneller ist und wenn ja wie es das tut. Und ob es nicht einfacher geht <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f615.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--confused_face"
      title=":confused:"
      alt="😕"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/topic/320795/zur-laufzeit-performant-zehnerpotenz-berechnen</link><generator>RSS for Node</generator><lastBuildDate>Wed, 22 Jul 2026 14:07:03 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/320795.rss" rel="self" type="application/rss+xml"/><pubDate>Sat, 12 Oct 2013 21:32:48 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Zur Laufzeit: Performant Zehnerpotenz berechnen on Sat, 12 Oct 2013 21:32:48 GMT]]></title><description><![CDATA[<p>Es ist schon spät und die Lösung ist vlt. einfacher als gedacht, aber ich habe folgendes Problem:</p>
<pre><code>int factor = 10e(val-3);
</code></pre>
<p>Ist zu berechnen. Es wird immer (auch später) nur mit ganzen Zahlen gerechnet. Was ist hier der schnellste Ansatz?</p>
<p>Habe das hier im Forum gefunden:</p>
<pre><code>int ipow(int base, int exp)
{
    int result = 1;
    for(; exp; exp &gt;&gt;= 1)
    {
        (exp &amp; 1) &amp;&amp; (result *= base);
        base *= base;
    }
    return result;
}
</code></pre>
<p>Mir ist aber nicht klar ob das schneller ist und wenn ja wie es das tut. Und ob es nicht einfacher geht <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f615.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--confused_face"
      title=":confused:"
      alt="😕"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/2359861</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2359861</guid><dc:creator><![CDATA[Verzeihung]]></dc:creator><pubDate>Sat, 12 Oct 2013 21:32:48 GMT</pubDate></item><item><title><![CDATA[Reply to Zur Laufzeit: Performant Zehnerpotenz berechnen on Sat, 12 Oct 2013 21:45:32 GMT]]></title><description><![CDATA[<p>Verzeihung schrieb:</p>
<blockquote>
<p>Es ist schon spät und die Lösung ist vlt. einfacher als gedacht, aber ich habe folgendes Problem:</p>
<pre><code>int factor = 10e(val-3);
</code></pre>
<p>Ist zu berechnen. Es wird immer (auch später) nur mit ganzen Zahlen gerechnet. Was ist hier der schnellste Ansatz?</p>
<p>Habe das hier im Forum gefunden:</p>
<pre><code>int ipow(int base, int exp)
{
    int result = 1;
    for(; exp; exp &gt;&gt;= 1)
    {
        (exp &amp; 1) &amp;&amp; (result *= base);
        base *= base;
        exp &gt;&gt;= 1;
    }
    return result;
}
</code></pre>
<p>Mir ist aber nicht klar ob das schneller ist und wenn ja wie es das tut. Und ob es nicht einfacher geht <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f615.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--confused_face"
      title=":confused:"
      alt="😕"
    /></p>
</blockquote>
<p>Es macht fastexp.<br />
Schneller geht an sich nicht. Der Code ist anscheinend absichtlich verworren. Wirf den raus, der so schreibt.</p>
<pre><code>int ipow(int base, int exp)
{
    int result = 1;
    while(exp != 0)
    {
        if(exp &amp; 1 != 0)
                result *= base;
        base *= base;
        exp &gt;&gt;= 1;
    }
    return result;
}
</code></pre>
<p>Aber schneller kann gehen. Wenn nämlich der double groß genug ist, daß der int ohne Rundungsfehler reinpasst, und die Jungs von Intel/AMD ein paarhunderdtausend Transistoren für so Rechnungen spendiert haben.</p>
<pre><code>int ipow10(int exp)
{
    return pow(10,exp);
}
</code></pre>
<p>Musst nur noch testen, ob alle paar Werte stimmen. Falls ja, ist das vermutlich schneller.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2359862</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2359862</guid><dc:creator><![CDATA[volkard]]></dc:creator><pubDate>Sat, 12 Oct 2013 21:45:32 GMT</pubDate></item><item><title><![CDATA[Reply to Zur Laufzeit: Performant Zehnerpotenz berechnen on Sat, 12 Oct 2013 21:45:17 GMT]]></title><description><![CDATA[<p>Wie waers mit ner Lookup-Tabelle?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2359863</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2359863</guid><dc:creator><![CDATA[Kellerautomat]]></dc:creator><pubDate>Sat, 12 Oct 2013 21:45:17 GMT</pubDate></item><item><title><![CDATA[Reply to Zur Laufzeit: Performant Zehnerpotenz berechnen on Sat, 12 Oct 2013 21:50:20 GMT]]></title><description><![CDATA[<p>Kellerautomat schrieb:</p>
<blockquote>
<p>Wie waers mit ner Lookup-Tabelle?</p>
</blockquote>
<p>Nicht schlecht!</p>
<pre><code>int ipow10(int exp)
{
    static int lut[]={1,10,100,1000,10000,100000,1000000,10000000,100000000,100000000};
    //if-krempel, falls man erlauben will, daß der Benutzer zu kleine oder 
    //zu große exp reintut. 
    return lut[exp];
}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/2359864</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2359864</guid><dc:creator><![CDATA[volkard]]></dc:creator><pubDate>Sat, 12 Oct 2013 21:50:20 GMT</pubDate></item><item><title><![CDATA[Reply to Zur Laufzeit: Performant Zehnerpotenz berechnen on Sat, 12 Oct 2013 21:56:27 GMT]]></title><description><![CDATA[<p>volkard schrieb:</p>
<blockquote>
<p>Kellerautomat schrieb:</p>
<blockquote>
<p>Wie waers mit ner Lookup-Tabelle?</p>
</blockquote>
<p>Nicht schlecht!</p>
</blockquote>
<p>Ganz schlecht! Was wenn du irgendwo eine 0 zuviel hingeschrieben hast? Das geht ganz einfach mit ein paar hundert Zeilen Template-Code und sollte sogar <em>nur</em> so gemacht werden!!1!</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2359866</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2359866</guid><dc:creator><![CDATA[templatebloatbeschwörer]]></dc:creator><pubDate>Sat, 12 Oct 2013 21:56:27 GMT</pubDate></item><item><title><![CDATA[Reply to Zur Laufzeit: Performant Zehnerpotenz berechnen on Sat, 12 Oct 2013 22:05:48 GMT]]></title><description><![CDATA[<p>Dann schreibt man groessere Zahlen eben als Produkt von Zehnerpotenzen <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>
<pre><code>{1, 10, 100, 1000, 10*1000, 100*1000, 1000*1000, 10*1000*1000, 100*1000*1000, 1000*1000*1000}
</code></pre>
<p>Natuerlich koennte man das jetzt noch mit einem Template generieren und dabei INT_MAX beruecksichtigen.</p>
<p>Die Challenge ueberlass ich Hacker <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/2359868</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2359868</guid><dc:creator><![CDATA[Kellerautomat]]></dc:creator><pubDate>Sat, 12 Oct 2013 22:05:48 GMT</pubDate></item><item><title><![CDATA[Reply to Zur Laufzeit: Performant Zehnerpotenz berechnen on Sat, 12 Oct 2013 22:13:33 GMT]]></title><description><![CDATA[<p>Kellerautomat schrieb:</p>
<blockquote>
<p>Dann schreibt man groessere Zahlen eben als Produkt von Zehnerpotenzen <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>
</blockquote>
<p>Mindestens ein</p>
<pre><code class="language-cpp">constexpr int cpow(int base, int exp) { return exp==1 ? 1 : base*cpow(base, exp-1); }

{cpow(0), cpow(1), cpow(2), cpow(3), ...}
</code></pre>
<p>sollte schon drinliegen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2359869</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2359869</guid><dc:creator><![CDATA[templatebloatbeschwörer]]></dc:creator><pubDate>Sat, 12 Oct 2013 22:13:33 GMT</pubDate></item><item><title><![CDATA[Reply to Zur Laufzeit: Performant Zehnerpotenz berechnen on Sat, 12 Oct 2013 22:23:07 GMT]]></title><description><![CDATA[<p>templatebloatbeschwörer schrieb:</p>
<blockquote>
<p>Kellerautomat schrieb:</p>
<blockquote>
<p>Dann schreibt man groessere Zahlen eben als Produkt von Zehnerpotenzen <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>
</blockquote>
<p>Mindestens ein</p>
<pre><code class="language-cpp">constexpr int cpow(int base, int exp) { return exp==1 ? 1 : base*cpow(base, exp-1); }

{cpow(0), cpow(1), cpow(2), cpow(3), ...}
</code></pre>
<p>sollte schon drinliegen.</p>
</blockquote>
<p>Nö.<br />
Es ging um ipow10.<br />
Und das beschneidet man mit ipow10(int32_t) bzw ipow10(int64_t).</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2359870</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2359870</guid><dc:creator><![CDATA[volkard]]></dc:creator><pubDate>Sat, 12 Oct 2013 22:23:07 GMT</pubDate></item><item><title><![CDATA[Reply to Zur Laufzeit: Performant Zehnerpotenz berechnen on Sun, 13 Oct 2013 09:18:13 GMT]]></title><description><![CDATA[<p>Kellerautomat schrieb:</p>
<blockquote>
<p>Die Challenge ueberlass ich Hacker <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>
</blockquote>
<p>Wer ist Hacker?</p>
<p>Und eine Challenge war das nicht. Abgesehen davon, das Clang da nicht mitmacht. Gibt es schon einen Bug-Report für Compile-Time Integer-Division?</p>
<pre><code>template&lt;unsigned ... args&gt;
struct index_list
{
	using type = index_list;
};

template &lt;typename, typename&gt; struct multiply;
template &lt;unsigned... indices, unsigned... tail&gt;
struct multiply&lt;index_list&lt;indices...&gt;,
		    index_list&lt;tail...   &gt;&gt; : index_list&lt;indices..., (sizeof...(indices)+indices)...,
										     (2*sizeof...(indices)+indices)...&gt; {};
template &lt;unsigned N&gt;
struct make_index_list :
	multiply&lt; typename make_index_list&lt;N/2&gt;::type,
		    typename make_index_list&lt;N%2&gt;::type &gt; {};

template &lt;&gt; struct make_index_list&lt;1&gt; : index_list&lt;0&gt; {};
template &lt;&gt; struct make_index_list&lt;0&gt; : index_list&lt;&gt; {};

#include &lt;limits&gt;
template&lt; typename T,
          T base &gt;
static constexpr unsigned highest_exponent( unsigned counter = 0, T current = std::numeric_limits&lt;T&gt;::max() )
{
	return current ? highest_exponent&lt;T,base&gt;(counter+1, current/base) : counter ;
}

template&lt; typename T,
          T base,
          typename = typename make_index_list&lt;highest_exponent&lt;T, base&gt;()&gt;::type &gt;
struct pow_helper;

template&lt; typename T,
          T base,
          unsigned ... indices &gt;
struct pow_helper&lt;T, base, index_list&lt;indices...&gt;&gt;
{
	static_assert( base &gt; 1, &quot;Invalid base!&quot; ); // Kann man erweitern (Edit: &gt;= ist natürlich falsch!) (Edit²: &gt; 0 ist natürlich ebenfalls falsch)

	static constexpr auto number = sizeof...(indices);

	static constexpr T pow( unsigned i )
	{
		return i ? pow(i-1) * base : 1;
	}

	static constexpr T array[]{ pow(indices)... };
};

template&lt; typename T,
          T base,
          unsigned ... indices &gt;
constexpr T pow_helper&lt;T, base, index_list&lt;indices...&gt;&gt;::array[];

#include &lt;cassert&gt;
template&lt;typename T, T base&gt;
T pow( unsigned exp )
{
	using helper = pow_helper&lt;T, base&gt;;
	assert( exp &lt; helper::number );
	return helper::array[exp];
}

#include &lt;iostream&gt;
int main()
{
	std::cout &lt;&lt; pow&lt;int, 10&gt;(3);
}
</code></pre>
<p><a href="https://ideone.com/YJuefl" rel="nofollow">https://ideone.com/YJuefl</a></p>
]]></description><link>https://www.c-plusplus.net/forum/post/2359875</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2359875</guid><dc:creator><![CDATA[Columbo]]></dc:creator><pubDate>Sun, 13 Oct 2013 09:18:13 GMT</pubDate></item><item><title><![CDATA[Reply to Zur Laufzeit: Performant Zehnerpotenz berechnen on Sun, 13 Oct 2013 08:48:57 GMT]]></title><description><![CDATA[<p>Ich nehme doch die einfachere Lösung. <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/2359899</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2359899</guid><dc:creator><![CDATA[Ethon]]></dc:creator><pubDate>Sun, 13 Oct 2013 08:48:57 GMT</pubDate></item><item><title><![CDATA[Reply to Zur Laufzeit: Performant Zehnerpotenz berechnen on Sun, 13 Oct 2013 09:56:54 GMT]]></title><description><![CDATA[<p>eventuell sollte man noch mit einem macro unterscheiden, ob int 32 oder 64 bit breit ist...</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2359905</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2359905</guid><dc:creator><![CDATA[otze]]></dc:creator><pubDate>Sun, 13 Oct 2013 09:56:54 GMT</pubDate></item><item><title><![CDATA[Reply to Zur Laufzeit: Performant Zehnerpotenz berechnen on Sun, 13 Oct 2013 10:04:45 GMT]]></title><description><![CDATA[<p>otze schrieb:</p>
<blockquote>
<p>eventuell sollte man noch mit einem macro unterscheiden, ob int 32 oder 64 bit breit ist...</p>
</blockquote>
<p>Daher ist die TMP-Lösung so flexibel.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2359906</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2359906</guid><dc:creator><![CDATA[Columbo]]></dc:creator><pubDate>Sun, 13 Oct 2013 10:04:45 GMT</pubDate></item><item><title><![CDATA[Reply to Zur Laufzeit: Performant Zehnerpotenz berechnen on Sun, 13 Oct 2013 10:15:09 GMT]]></title><description><![CDATA[<p>Arcoth schrieb:</p>
<blockquote>
<p>otze schrieb:</p>
<blockquote>
<p>eventuell sollte man noch mit einem macro unterscheiden, ob int 32 oder 64 bit breit ist...</p>
</blockquote>
<p>Daher ist die TMP-Lösung so flexibel.</p>
</blockquote>
<p>aber ein macro sind 3 Zeilen die ein VC6 sogar noch versteht. Hast du eventuell nicht bemerkt, dass die Leute sich einen Scherz daraus gemacht haben, für sowas eine templatelösung zu fordern?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2359908</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2359908</guid><dc:creator><![CDATA[otze]]></dc:creator><pubDate>Sun, 13 Oct 2013 10:15:09 GMT</pubDate></item><item><title><![CDATA[Reply to Zur Laufzeit: Performant Zehnerpotenz berechnen on Sun, 13 Oct 2013 10:58:31 GMT]]></title><description><![CDATA[<p>Arcoth schrieb:</p>
<blockquote>
<p>Abgesehen davon, das Clang da nicht mitmacht. Gibt es schon einen Bug-Report für Compile-Time Integer-Division?</p>
</blockquote>
<p>Dein Code ist falsch (Zeile 11) und gcc ist nur etwas weniger streng (was ein bug bei gcc wäre, da das Programm so ill-formed ist).</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2359917</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2359917</guid><dc:creator><![CDATA[camper]]></dc:creator><pubDate>Sun, 13 Oct 2013 10:58:31 GMT</pubDate></item><item><title><![CDATA[Reply to Zur Laufzeit: Performant Zehnerpotenz berechnen on Sun, 13 Oct 2013 11:56:45 GMT]]></title><description><![CDATA[<p>otze schrieb:</p>
<blockquote>
<p>Arcoth schrieb:</p>
<blockquote>
<p>otze schrieb:</p>
<blockquote>
<p>eventuell sollte man noch mit einem macro unterscheiden, ob int 32 oder 64 bit breit ist...</p>
</blockquote>
<p>Daher ist die TMP-Lösung so flexibel.</p>
</blockquote>
<p>aber ein macro sind 3 Zeilen die ein VC6 sogar noch versteht. Hast du eventuell nicht bemerkt, dass die Leute sich einen Scherz daraus gemacht haben, für sowas eine templatelösung zu fordern?</p>
</blockquote>
<p>Nein, habe ich nicht. Zeige mal die Makro-Lösung, die dasselbe kann.<br />
Edit: Was meinst du eigentlich? Bei einer TMP-Version braucht man keine Unterscheidung von der Größe, alles geschieht automatisch.</p>
<p>camper schrieb:</p>
<blockquote>
<p>Dein Code ist falsch (Zeile 11)</p>
</blockquote>
<p>Du hast Recht. Ich habe die Variante mit Vier (die ich in der Lib stehen hatte) gekürzt, dabei ist natürlich Blödsinn herausgekommen. Ein Flüchtigkeitsfehler.<br />
Es muss</p>
<pre><code>template &lt;typename, typename&gt; struct multiply;
template &lt;unsigned... indices, unsigned... tail&gt;
struct multiply&lt;index_list&lt;indices...&gt;,
            index_list&lt;tail...   &gt;&gt; : index_list&lt;indices..., (sizeof...(indices)+indices)...&gt; {};
</code></pre>
<p>heißen, dann ist es richtig (und kompiliert natürlich auf Clang).</p>
<p>Ich habe mich gewundert, wieso die Indexliste immer länger war als sie sein sollte... ich dachte, es liegt an dem Argument an <code>make_index_list</code> und nicht an der Erzeugung selbst... ich sollte in Zukunft immer alles betrachten... <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f44d.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--thumbs_up"
      title=":+1:"
      alt="👍"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/2359922</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2359922</guid><dc:creator><![CDATA[Columbo]]></dc:creator><pubDate>Sun, 13 Oct 2013 11:56:45 GMT</pubDate></item><item><title><![CDATA[Reply to Zur Laufzeit: Performant Zehnerpotenz berechnen on Sun, 13 Oct 2013 11:59:29 GMT]]></title><description><![CDATA[<p>Bist du sicher, dass du tail vergessen darfst?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2359926</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2359926</guid><dc:creator><![CDATA[camper]]></dc:creator><pubDate>Sun, 13 Oct 2013 11:59:29 GMT</pubDate></item><item><title><![CDATA[Reply to Zur Laufzeit: Performant Zehnerpotenz berechnen on Sun, 13 Oct 2013 12:08:17 GMT]]></title><description><![CDATA[<p>camper schrieb:</p>
<blockquote>
<p>Bist du sicher, dass du tail vergessen darfst?</p>
</blockquote>
<p>Ich glaube, ich habe schlecht geschlafen.</p>
<p>Also, jetzt höchste Präzision! <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f60b.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--face_savoring_food"
      title=":yum:"
      alt="😋"
    /></p>
<pre><code>template &lt;typename, typename&gt; struct multiply;
template &lt;unsigned... indices, unsigned... tail&gt;
struct multiply&lt;index_list&lt;indices...&gt;,
                index_list&lt;tail...   &gt;&gt; :
	index_list&lt;indices..., 
	           (sizeof...(indices)+indices)...,
	           (2*sizeof...(indices) + tail)...&gt; {};

template &lt;unsigned N&gt;
struct make_index_list :
    multiply&lt; typename make_index_list&lt;N/2&gt;::type,
              typename make_index_list&lt;N%2&gt;::type &gt; {};

template &lt;&gt; struct make_index_list&lt;1&gt; : index_list&lt;0&gt; {};
template &lt;&gt; struct make_index_list&lt;0&gt; : index_list&lt;&gt; {};
</code></pre>
<p>Ungetestet, sollte aber richtig sein.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2359928</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2359928</guid><dc:creator><![CDATA[Columbo]]></dc:creator><pubDate>Sun, 13 Oct 2013 12:08:17 GMT</pubDate></item><item><title><![CDATA[Reply to Zur Laufzeit: Performant Zehnerpotenz berechnen on Mon, 14 Oct 2013 05:58:06 GMT]]></title><description><![CDATA[<p>otze schrieb:</p>
<blockquote>
<p>eventuell sollte man noch mit einem macro unterscheiden, ob int 32 oder 64 bit breit ist...</p>
</blockquote>
<p>Mit Überladung.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2360087</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2360087</guid><dc:creator><![CDATA[volkard]]></dc:creator><pubDate>Mon, 14 Oct 2013 05:58:06 GMT</pubDate></item></channel></rss>