<?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[ceil() mit static_casts?]]></title><description><![CDATA[<p>Hallo,</p>
<p>ich möchte folgendes:</p>
<pre><code class="language-cpp">int cel;
int nmb = 20;
int nmr_all = 3;

cel = ceil(static_cast&lt; double &gt; nmb / nmr_all);
</code></pre>
<p>das liefert mir ein warning bezüglich double to int konvertierung.</p>
<p>Ich kann aber den static_cast nicht weglassen weil sonst liefert ceil nicht aufgerundet zurück falls der Bruch rational ist.</p>
<p>ich könnte noch sowas machen um das warning zu umgehen:</p>
<pre><code class="language-cpp">cel = static_cast&lt;int&gt;(ceil(static_cast&lt; double &gt; nmb / nmr_all));
</code></pre>
<p>aner das is doch umständlich...wie kann ich denn teilen ohne warning ?</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/239554/ceil-mit-static_casts</link><generator>RSS for Node</generator><lastBuildDate>Tue, 22 Sep 2026 12:20:36 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/239554.rss" rel="self" type="application/rss+xml"/><pubDate>Fri, 24 Apr 2009 18:22:34 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to ceil() mit static_casts? on Fri, 24 Apr 2009 18:22:34 GMT]]></title><description><![CDATA[<p>Hallo,</p>
<p>ich möchte folgendes:</p>
<pre><code class="language-cpp">int cel;
int nmb = 20;
int nmr_all = 3;

cel = ceil(static_cast&lt; double &gt; nmb / nmr_all);
</code></pre>
<p>das liefert mir ein warning bezüglich double to int konvertierung.</p>
<p>Ich kann aber den static_cast nicht weglassen weil sonst liefert ceil nicht aufgerundet zurück falls der Bruch rational ist.</p>
<p>ich könnte noch sowas machen um das warning zu umgehen:</p>
<pre><code class="language-cpp">cel = static_cast&lt;int&gt;(ceil(static_cast&lt; double &gt; nmb / nmr_all));
</code></pre>
<p>aner das is doch umständlich...wie kann ich denn teilen ohne warning ?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1700878</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1700878</guid><dc:creator><![CDATA[testo]]></dc:creator><pubDate>Fri, 24 Apr 2009 18:22:34 GMT</pubDate></item><item><title><![CDATA[Reply to ceil() mit static_casts? on Fri, 24 Apr 2009 18:43:28 GMT]]></title><description><![CDATA[<p>testo schrieb:</p>
<blockquote>
<pre><code class="language-cpp">cel = ceil(static_cast&lt; double &gt; nmb / nmr_all);
</code></pre>
</blockquote>
<p>Darf ich erst einmal fragen was dein Code machen soll? bzw. auf was soll sich das static_cast beziehen (&quot;static_cast&lt;<em>typ</em>&gt;(<em>argument</em>)&quot;)?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1700890</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1700890</guid><dc:creator><![CDATA[asc]]></dc:creator><pubDate>Fri, 24 Apr 2009 18:43:28 GMT</pubDate></item><item><title><![CDATA[Reply to ceil() mit static_casts? on Fri, 24 Apr 2009 18:48:38 GMT]]></title><description><![CDATA[<p>Die Warnung gibt dir der Compiler aus weil er automatisch den Typ für dich Umwandelt, er ist sich abe rnicht sicher ob du das auch so willst, deswegen meldet er sich bei dir.</p>
<p>Da du mit double in der Klammer rechnest und damit das Ergebniss ein double ist bekommst du die Funktion</p>
<pre><code class="language-cpp">double ceil(double);
</code></pre>
<p>Und mit deiner Zuweisung ergibt sich</p>
<pre><code class="language-cpp">int=double ceil(double);
</code></pre>
<p>Bei einer Umwandlung von Komamzahlen in int gehen automatisch die Nachkommastellen verloren, deswegen gehtd er Fehler auch mit dem static_cast weg weil du dem Compiler damit sagst das du die Umwandlung wünschst.</p>
<p>Nachtrag:<br />
Du solltest statt dem</p>
<pre><code class="language-cpp">cel = ceil(static_cast&lt; double &gt; nmb / nmr_all);
</code></pre>
<p>lieber das schreiben</p>
<pre><code class="language-cpp">cel = ceil(static_cast&lt; double &gt;(nmb) / nmr_all);
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1700891</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1700891</guid><dc:creator><![CDATA[Xebov]]></dc:creator><pubDate>Fri, 24 Apr 2009 18:48:38 GMT</pubDate></item><item><title><![CDATA[Reply to ceil() mit static_casts? on Fri, 24 Apr 2009 18:48:44 GMT]]></title><description><![CDATA[<p>ah sorry...<br />
habs falsch abgetippt....der cast bezieht sich auf den zähler.</p>
<pre><code class="language-cpp">int cel;
int nmb = 20;
int nmr_all = 3;

cel = ceil(static_cast&lt; double &gt; (nmb) / nmr_all);
</code></pre>
<p>ich versuche über ceil, floor und fmod operationen eine gegebene anzahl elemente auf buckets zu verteilen sozusagen. Und das möglichst maximal gleichverteilt.</p>
<p>Beispiel:<br />
nmb = 20 und nmr_all = 3 -&gt; 7,7,6<br />
nmb = 5, nmr_all = 2 -&gt; 3,2<br />
nmb = 6, nmr_all = 2 -&gt; 3,3<br />
nmb = 7, nmr_all = 5 -&gt; 2,2,1,1,1</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1700893</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1700893</guid><dc:creator><![CDATA[testo]]></dc:creator><pubDate>Fri, 24 Apr 2009 18:48:44 GMT</pubDate></item><item><title><![CDATA[Reply to ceil() mit static_casts? on Fri, 24 Apr 2009 19:31:01 GMT]]></title><description><![CDATA[<p>Wenn du es unbedingt mit doubles rechnen willst, solltest du imho tatsächlich den static_cast dazupacken, damit die Warnung verschwindet (Warnungen stehen lassen ist keine Option, irgendwann ignoriert man sie sonst, auch wichtige Warnungen).</p>
<p>Du kannst deine Verteilung aber auch mit ints alleine machen:</p>
<p>Variante A</p>
<pre><code class="language-cpp">int rest = nmb;
for(int i = nmr_all; i &gt; 0; --i)
{
  int bucketContent = nmb/i;
  int bucketIndex = nmr_all-i;
  bucket[bucketIndex] = bucketContent;
  rest -= bucketContent;
}
</code></pre>
<p>Am Anfang wird abgerundet (im Beispiel auf 6), so lange bis rest glatt zu teilen ist, dann kommt immer 7 raus.</p>
<p>Variante B</p>
<pre><code class="language-cpp">int numberOfBiggerBuckets = nmb % nmr_all;
int smallerBucketContent = nmb/nmr_all;
int biggerBucketContent =  smallerBucketContent + 1;

for (int i = 0; i &lt; numberOfBiggerBuckets; ++i)
  bucket[i] = biggerBucketContent;
for (int i = numberOfBiggerBuckets; i &lt; nmr_all; ++i)
  bucket[i] = smallerBucketContent;
</code></pre>
<p>Modulo gibt den Rest der Ganzzahldivision, und der muss auf genausoviele Buckets verteilt werden, die also jeweils einen mehr bekommen.</p>
<p>Kleine Anmerkung:</p>
<p>ich mags in meinen Codes vielleicht übertrieben haben mit den Namen, aber nmr_all und nmb sind echt mal beschissene Variablennamen <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>
]]></description><link>https://www.c-plusplus.net/forum/post/1700906</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1700906</guid><dc:creator><![CDATA[pumuckl]]></dc:creator><pubDate>Fri, 24 Apr 2009 19:31:01 GMT</pubDate></item><item><title><![CDATA[Reply to ceil() mit static_casts? on Fri, 24 Apr 2009 21:02:36 GMT]]></title><description><![CDATA[<p>testo schrieb:</p>
<blockquote>
<p>das is doch umständlich...wie kann ich denn teilen ohne warning ?</p>
</blockquote>
<p>früher haben wir das so gemacht, daß wir gegebenenfalls gecastet haben. da sah dann so aus.</p>
<pre><code class="language-cpp">cel=int(ceil(double(nmb)/double(nmr_all)));
</code></pre>
<p>aber das ist nicht modern. heute ist eher sowas üblich</p>
<pre><code class="language-cpp">cel=static_cast&lt;int&gt;(static_cast&lt;int&gt;(ceil(static_cast&lt;double&gt;(*static_cast&lt;int*&gt;(&amp;nmb))/static_cast&lt;double&gt;(*static_cast&lt;int*&gt;(&amp;nmr_all)))));
</code></pre>
<p>beide versionen machen im prinzip das gleiche.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1700942</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1700942</guid><dc:creator><![CDATA[volkard]]></dc:creator><pubDate>Fri, 24 Apr 2009 21:02:36 GMT</pubDate></item><item><title><![CDATA[Reply to ceil() mit static_casts? on Fri, 24 Apr 2009 21:11:41 GMT]]></title><description><![CDATA[<p>volkard schrieb:</p>
<blockquote>
<pre><code class="language-cpp">cel=static_cast&lt;int&gt;(static_cast&lt;int&gt;(ceil(static_cast&lt;double&gt;(*static_cast&lt;int*&gt;(&amp;nmb))/static_cast&lt;double&gt;(*static_cast&lt;int*&gt;(&amp;nmr_all)))));
</code></pre>
</blockquote>
<p>Müssen das wirklich soviele casts sein? Reicht nicht diese Fassung aus?</p>
<pre><code class="language-cpp">cel=static_cast&lt;int&gt;(ceil(static_cast&lt;double&gt;(nmb)/nmr_all));
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1700945</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1700945</guid><dc:creator><![CDATA[Xebov]]></dc:creator><pubDate>Fri, 24 Apr 2009 21:11:41 GMT</pubDate></item><item><title><![CDATA[Reply to ceil() mit static_casts? on Fri, 24 Apr 2009 21:17:28 GMT]]></title><description><![CDATA[<p>Xebov schrieb:</p>
<blockquote>
<p>volkard schrieb:</p>
<blockquote>
<pre><code class="language-cpp">cel=static_cast&lt;int&gt;(static_cast&lt;int&gt;(ceil(static_cast&lt;double&gt;(*static_cast&lt;int*&gt;(&amp;nmb))/static_cast&lt;double&gt;(*static_cast&lt;int*&gt;(&amp;nmr_all)))));
</code></pre>
</blockquote>
<p>Müssen das wirklich soviele casts sein? Reicht nicht diese Fassung aus?</p>
<pre><code class="language-cpp">cel=static_cast&lt;int&gt;(ceil(static_cast&lt;double&gt;(nmb)/nmr_all));
</code></pre>
</blockquote>
<p>stimmt.<br />
aber</p>
<pre><code class="language-cpp">cel=static_cast&lt;int&gt;(ceil(static_cast&lt;double&gt;(nmb)/static_cast&lt;double&gt;(nmr_all)));
</code></pre>
<p>muß schon sein, weil es systeme geben mag, wo der int mehr signifikante stellen hat als der long. um die warnung wegzumachen. das mit den zeigern war unnötig.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1700947</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1700947</guid><dc:creator><![CDATA[volkard]]></dc:creator><pubDate>Fri, 24 Apr 2009 21:17:28 GMT</pubDate></item></channel></rss>