<?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[Integer performant durch 10 teilen?]]></title><description><![CDATA[<p>Hallo!</p>
<p>Ich hab da einen Interrupt auf einem Mikrocontroller, der mir Millisekunden nähert, und zwar in Sechzehntelschritten:</p>
<p>1/16=0.0625s<br />
2/16=0.125s<br />
3/16=0.1875s<br />
[...]<br />
16=1.0s</p>
<p>Der Interrupt wird 16 Mal pro Sekunde aufgerufen.</p>
<p>Jetzt wollte ich die Millisekunden möglichst performant berechnen (;) ), was momentan so aussieht:</p>
<pre><code class="language-cpp">// In der Interrupt-Routine:
static int overflows = 0;
static int val = 0;

val += 625;
gMilliSekunden = val / 10; // Globale Variable. Beispiel: 0.1875 wird zu 187 Millisekunden

    if(overflows == 16) {
        overflows = 0;
        val = 0;
    }
</code></pre>
<p>Kann man das Teilen durch 10 noch entfernen? Geht das allgemein irgendwie besser? MicroKontrollerprogrammierung ist noch recht neu für mich <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/282982/integer-performant-durch-10-teilen</link><generator>RSS for Node</generator><lastBuildDate>Sat, 22 Aug 2026 20:49:55 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/282982.rss" rel="self" type="application/rss+xml"/><pubDate>Wed, 02 Mar 2011 14:33:37 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Integer performant durch 10 teilen? on Wed, 02 Mar 2011 14:33:37 GMT]]></title><description><![CDATA[<p>Hallo!</p>
<p>Ich hab da einen Interrupt auf einem Mikrocontroller, der mir Millisekunden nähert, und zwar in Sechzehntelschritten:</p>
<p>1/16=0.0625s<br />
2/16=0.125s<br />
3/16=0.1875s<br />
[...]<br />
16=1.0s</p>
<p>Der Interrupt wird 16 Mal pro Sekunde aufgerufen.</p>
<p>Jetzt wollte ich die Millisekunden möglichst performant berechnen (;) ), was momentan so aussieht:</p>
<pre><code class="language-cpp">// In der Interrupt-Routine:
static int overflows = 0;
static int val = 0;

val += 625;
gMilliSekunden = val / 10; // Globale Variable. Beispiel: 0.1875 wird zu 187 Millisekunden

    if(overflows == 16) {
        overflows = 0;
        val = 0;
    }
</code></pre>
<p>Kann man das Teilen durch 10 noch entfernen? Geht das allgemein irgendwie besser? MicroKontrollerprogrammierung ist noch recht neu für mich <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/2028758</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2028758</guid><dc:creator><![CDATA[Meicro]]></dc:creator><pubDate>Wed, 02 Mar 2011 14:33:37 GMT</pubDate></item><item><title><![CDATA[Reply to Integer performant durch 10 teilen? on Wed, 02 Mar 2011 14:47:22 GMT]]></title><description><![CDATA[<p>/10 ist gut. Der Compiler macht daraus eine Multiplikation nebst shift.</p>
<p>Aber ich sehe gar nicht, wozu Du durch 10 teilen mußt.</p>
<pre><code class="language-cpp">static int val = 0;
static int flipflop=0;

val += 62;
val += flipflop;
flipflop^=1;

gMilliSekunden = val;
</code></pre>
<p>oder</p>
<pre><code class="language-cpp">static int val = 0;

val += 125;

gMilliSekunden = val&gt;&gt;1;
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/2028771</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2028771</guid><dc:creator><![CDATA[volkard]]></dc:creator><pubDate>Wed, 02 Mar 2011 14:47:22 GMT</pubDate></item><item><title><![CDATA[Reply to Integer performant durch 10 teilen? on Wed, 02 Mar 2011 14:57:49 GMT]]></title><description><![CDATA[<p>volkard schrieb:</p>
<blockquote>
<p>/10 ist gut. Der Compiler macht daraus eine Multiplikation nebst shift.</p>
<p>Aber ich sehe gar nicht, wozu Du durch 10 teilen mußt.</p>
<pre><code class="language-cpp">static int val = 0;
static int flipflop=0;

val += 62;
val += flipflop;
flipflop^=1;

gMilliSekunden = val;
</code></pre>
<p>oder</p>
<pre><code class="language-cpp">static int val = 0;

val += 125;

gMilliSekunden = val&gt;&gt;1;
</code></pre>
</blockquote>
<p>Hmm ich glaub ich hab ein Brett vor dem Kopf. Im letzten Beispiel teilst du doch mit &quot;&gt;&gt;1&quot; durch 2, weil du um eine Stelle nach rechts shiftest. Das liefert doch nicht das gewünschte Ergebnis?</p>
<p>Die Idee mit dem FlipFlop ist... interessant <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/2028777</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2028777</guid><dc:creator><![CDATA[meicro]]></dc:creator><pubDate>Wed, 02 Mar 2011 14:57:49 GMT</pubDate></item><item><title><![CDATA[Reply to Integer performant durch 10 teilen? on Wed, 02 Mar 2011 15:02:09 GMT]]></title><description><![CDATA[<p>meicro schrieb:</p>
<blockquote>
<p>Hmm ich glaub ich hab ein Brett vor dem Kopf. Im letzten Beispiel teilst du doch mit &quot;&gt;&gt;1&quot; durch 2, weil du um eine Stelle nach rechts shiftest. Das liefert doch nicht das gewünschte Ergebnis?</p>
</blockquote>
<p>Der Plan wäre: Während val in 125-er Schritten hoppelt, hoppelt val/2 in den gewünschten 62.5-er Schritten.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2028781</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2028781</guid><dc:creator><![CDATA[volkard]]></dc:creator><pubDate>Wed, 02 Mar 2011 15:02:09 GMT</pubDate></item><item><title><![CDATA[Reply to Integer performant durch 10 teilen? on Wed, 02 Mar 2011 15:14:59 GMT]]></title><description><![CDATA[<p>Noch ne Idee, aber dazu mußt Du die Maschine kennen:</p>
<pre><code class="language-cpp">struct MythicalTimer{
  union{
    struct{
      unsigned short highShort;
      unsigned short lowShort;
    };
    unsigned int theInt;
};

static MysticalTimer myt;
unsigned short&amp; gMilliSekunden=myr.highShort;

myt.theInt+=4096000;//62.5*65536
//gMilliSekunden = val;braucht man nicht mehr
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/2028788</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2028788</guid><dc:creator><![CDATA[volkard]]></dc:creator><pubDate>Wed, 02 Mar 2011 15:14:59 GMT</pubDate></item><item><title><![CDATA[Reply to Integer performant durch 10 teilen? on Wed, 02 Mar 2011 15:14:33 GMT]]></title><description><![CDATA[<p>Hab nochmal ein wenig überlegt: Da ich Millisekunden sowieso nicht genau bestimmen kann, ist das eigentlich total die Verschwendung sich die Mühe zu machen und auf Millisekunden zu runden. Ob nun genäherte 62 Millisekunden oder korrekt gerundet auf 63, genähert ist genähert.</p>
<p>Deswegen addier ich nur noch 62 Millisekunden und hab dann am Ende eben nicht 1s, sondern 992 Millisekunden. Die Sekunden werden eh genau (separat) gezählt.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2028790</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2028790</guid><dc:creator><![CDATA[meicro]]></dc:creator><pubDate>Wed, 02 Mar 2011 15:14:33 GMT</pubDate></item></channel></rss>