<?xml version="1.0"?>
<rss version="2.0">
	<channel>
		<title>What are the rules for deciding whether a division is integer, or float?</title>
		<link>http://www.allegro.cc/forums/view/615271</link>
		<description>Allegro.cc Forum Thread</description>
		<webMaster>matthew@allegro.cc (Matthew Leverton)</webMaster>
		<lastBuildDate>Wed, 15 Apr 2015 00:55:24 +0000</lastBuildDate>
	</channel>
	<item>
		<description><![CDATA[<div class="mockup v2"><div class="source-code snippet"><div class="inner"><pre><span class="k1">int</span> NUM_POINTS <span class="k3">=</span> <span class="n">200</span><span class="k2">;</span>
<span class="k1">int</span> c <span class="k3">=</span> <span class="n">255</span> <span class="k3">-</span> <span class="k2">(</span>i<span class="k3">/</span>NUM_POINTS<span class="k3">*</span><span class="n">255</span><span class="k2">)</span><span class="k2">;</span> <span class="c">//clearly integer</span>
<span class="k1">int</span> c <span class="k3">=</span> <span class="n">255</span> <span class="k3">-</span> <span class="k2">(</span>i<span class="k3">/</span>NUM_POINTS<span class="k3">*</span><span class="n">255</span>.<span class="n">0</span><span class="k2">)</span><span class="k2">;</span> <span class="c">// apparently NOT float</span>
<span class="k1">int</span> c <span class="k3">=</span> <span class="n">255</span> <span class="k3">-</span> <span class="k2">(</span><span class="k2">(</span><span class="k1">float</span><span class="k2">)</span>i<span class="k3">/</span>NUM_POINTS<span class="k3">*</span><span class="n">255</span>.<span class="n">0</span><span class="k2">)</span><span class="k2">;</span> <span class="c">// float</span>
<span class="k1">int</span> c <span class="k3">=</span> <span class="n">255</span> <span class="k3">-</span> <span class="k2">(</span><span class="k1">float</span><span class="k2">)</span><span class="k2">(</span>i<span class="k3">/</span>NUM_POINTS<span class="k3">*</span><span class="n">255</span>.<span class="n">0</span><span class="k2">)</span><span class="k2">;</span> <span class="c">// not float</span>
</pre></div></div><p>

The second one surprised me.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Chris Katko)</author>
		<pubDate>Thu, 09 Apr 2015 02:36:54 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>Why would it be surprising? If <span class="source-code">i</span> is an integer and <span class="source-code">NUM_POINTS</span> is an integer, then of course it will be integer division.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Erin Maus)</author>
		<pubDate>Thu, 09 Apr 2015 02:41:35 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>Automatic conversions are per operation. Since the / has precedence over *, i/NUM_POINTS*255.0 is the same as (i/NUM_POINTS)*255.0. And so the first operation is: i/NUM_POINTS, with both operands integer, so an integer division is performed.
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Elias)</author>
		<pubDate>Thu, 09 Apr 2015 02:46:44 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>Personally I do it like this, makes it easier to read and easily see whats going on.</p><p>int c = 255 - (((float)i/NUM_POINTS)*255.0);
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (duncan perham)</author>
		<pubDate>Thu, 09 Apr 2015 05:11:10 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><p>If I wanted a float in the end, I might do it like this to give the compiler no doubt about whether it&#39;s allowed to rewrite it this way for efficiency (note I&#39;m assuming NUM_POINTS is constant, given the capitals, and I would have done it as a #define to make sure):</p><p><span class="source-code"><span class="k1">float</span> c <span class="k3">=</span> <span class="n">255</span> <span class="k3">-</span> i<span class="k3">*</span><span class="k2">(</span><span class="n">255</span>.<span class="n">0f</span><span class="k3">/</span>NUM_POINTS<span class="k2">)</span><span class="k2">;</span></span></p><p>However, in this example, we clearly want an int, so it&#39;s sacrilege to venture into slower types with slightly unspecified behaviour for no reason (not to mention leaving it to an implicit cast to take care of converting back again) <img src="http://www.allegro.cc/forums/smileys/wink.gif" alt=";)" /></p><p><span class="source-code"><span class="k1">int</span> c <span class="k3">=</span> <span class="n">255</span> <span class="k3">-</span> i<span class="k3">*</span><span class="n">255</span><span class="k3">/</span>NUM_POINTS<span class="k2">;</span></span>
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Bruce Perry)</author>
		<pubDate>Tue, 14 Apr 2015 02:42:15 +0000</pubDate>
	</item>
	<item>
		<description><![CDATA[<div class="mockup v2"><div class="quote_container"><div class="title"><a href="http://www.allegro.cc/forums/thread/615271/1011957#target">Elias</a> said:</div><div class="quote"><p>Since the / has precedence over *</p></div></div><p>
They actually have equal precedence. In this case, it&#39;s evaluated left-to-right with standard math rules (PEMDAS; parenthesis, exponent, multiply and divide, addition and subtraction).
</p></div>]]>
		</description>
		<author>no-reply@allegro.cc (Kitty Cat)</author>
		<pubDate>Wed, 15 Apr 2015 00:55:24 +0000</pubDate>
	</item>
</rss>
