<div dir="ltr"><div><div><div>Why are round/floor/ceiling/truncate limited to real numbers?<br><br></div>What stops them from being extended to all numbers?<br></div><br>Mathematica defines complex floor with:<br><blockquote style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex" class="gmail_quote">
<span class=""><a href="http://reference.wolfram.com/mathematica/ref/Floor.html">Floor</a></span> applies separately to real and imaginary parts of complex numbers</blockquote><div><br></div><div>Of course, that might just be Mathematica&#39;s own idea of what a complex floor is.<br>
<br></div><div>Or am I too simply lazy to define the following?<br><br><span style="font-family:courier new,monospace">(define (complex-floor x)<br>  (make-rectangular (floor (real-part x)) (floor (imag-part x))))<br></span></div>
<br></div>Tim<br></div><div class="gmail_extra"><br><br><div class="gmail_quote">On 10 June 2013 17:18, Bradley Lucier <span dir="ltr">&lt;<a href="mailto:lucier@math.purdue.edu" target="_blank">lucier@math.purdue.edu</a>&gt;</span> wrote:<br>
<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">Re:<br>
<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
FWIW, I would have at least written:<br>
<br>
        ((qty (in-range 0 (add1 (min (floor (/ weight-left weight))<br>
                                     (floor (/ volume-left volume)))))))<br>
</blockquote>
<br>
I have now seen the<br>
<br>
(floor (/ a b))<br>
<br>
idiom a number of times, and wonder why people prefer it to<br>
<br>
(quotient a b)<br>
<br>
Normally, to calculate (/ a b) where a and b are exact integers requires one to calculate (gcd a b) to put the fraction into lowest terms p/q=(quotient a (gcd a b))/(quotient b (gcd a b)); then, to calculate (floor p/q), one must calculate (quotient p q).<br>

<br>
For large integers of size  $N$ bits, (gcd a b) takes $O(N\log^2(N))$ fixnum operations, where quotient takes $O(N\log N)$ operations.  This assumes Fourier-based methods for bignum multiplication; for more direct methods, the difference in operation count is larger.<br>

<br>
In any case, the (floor (/ ...)) idiom takes noticeably more time than (quotient ...).  If one knows that a and b are positive integers, they give the same results.<br>
<br>
This is an argument not to use (floor (/ ...)).  Are there arguments in favor of this idiom?<br>
<br>
Brad<br>
____________________<br>
 Racket Users list:<br>
 <a href="http://lists.racket-lang.org/users" target="_blank">http://lists.racket-lang.org/<u></u>users</a><br>
</blockquote></div><br><br clear="all"><br>-- <br>| Tim Brown &lt;<a href="mailto:tim.brown@timb.net" target="_blank">tim.brown@timb.net</a>&gt; | M:+44(0)7771714159 | H:+44(0)1372747875 |
</div>